From 0f61c634e2b19fea7bf6ea77f207d9270a25ade4 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 30 Apr 2026 03:52:26 +0300 Subject: [PATCH 01/13] Factor Projects to its own Django project --- core/admin.py | 356 +++--------------- core/api.py | 210 +---------- core/api_urls.py | 10 +- .../0010_move_project_models_to_projects.py | 159 ++++++++ core/models.py | 225 +---------- core/serializers.py | 200 +--------- newsletter_maker/settings/base.py | 5 +- projects/__init__.py | 1 + projects/admin.py | 294 +++++++++++++++ projects/api.py | 230 +++++++++++ projects/apps.py | 6 + projects/migrations/0001_initial.py | 176 +++++++++ projects/migrations/__init__.py | 1 + projects/model_support.py | 64 ++++ projects/models.py | 160 ++++++++ projects/serializers.py | 195 ++++++++++ 16 files changed, 1381 insertions(+), 911 deletions(-) create mode 100644 core/migrations/0010_move_project_models_to_projects.py create mode 100644 projects/__init__.py create mode 100644 projects/admin.py create mode 100644 projects/api.py create mode 100644 projects/apps.py create mode 100644 projects/migrations/0001_initial.py create mode 100644 projects/migrations/__init__.py create mode 100644 projects/model_support.py create mode 100644 projects/models.py create mode 100644 projects/serializers.py diff --git a/core/admin.py b/core/admin.py index e3185536..7f0b16d6 100644 --- a/core/admin.py +++ b/core/admin.py @@ -8,7 +8,6 @@ import json from urllib.parse import urlencode -from django import forms from django.contrib import admin, messages from django.db.models import Avg, Max, QuerySet from django.http import HttpRequest @@ -16,7 +15,6 @@ from django.utils import timezone from django.utils.html import format_html from django.utils.safestring import mark_safe -from import_export.admin import ExportActionMixin from unfold.admin import ModelAdmin from core.entity_extraction import ( @@ -25,7 +23,6 @@ reject_entity_candidate, ) from core.models import ( - BlueskyCredentials, Content, Entity, EntityAuthoritySnapshot, @@ -33,11 +30,8 @@ EntityCandidateStatus, EntityMention, IngestionRun, - Project, - ProjectConfig, ReviewQueue, SkillResult, - SourceConfig, TopicCentroidSnapshot, UserFeedback, ) @@ -156,177 +150,6 @@ def _build_topic_centroid_project_drilldowns(queryset, changelist_url: str): return project_drilldowns -class BlueskyCredentialsAdminForm(forms.ModelForm): - """Admin form that accepts a plaintext Bluesky app credential input.""" - - credential_input = forms.CharField( - required=False, - strip=False, - widget=forms.PasswordInput(render_value=False), - help_text="Leave blank to keep the existing stored credential.", - label="Bluesky app credential", - ) - - class Meta: - model = BlueskyCredentials - fields = ["project", "handle", "pds_url", "is_active"] - - def clean(self): - """Require a credential when creating the record for the first time.""" - - cleaned_data = super().clean() - credential_input = cleaned_data.get("credential_input", "") - if not self.instance.has_stored_credential() and not credential_input: - self.add_error("credential_input", "A Bluesky app credential is required.") - return cleaned_data - - def save(self, commit=True): - """Encrypt a new credential value before saving the model instance.""" - - instance = super().save(commit=False) - credential_input = self.cleaned_data.get("credential_input", "") - if credential_input: - instance.set_stored_credential(credential_input) - if commit: - instance.save() - return instance - - -@admin.register(Project) -class ProjectAdmin(ExportActionMixin, admin.ModelAdmin): - """Admin configuration for top-level project workspaces.""" - - list_display = ("name", "group", "content_retention_days", "created_at") - - # Better navigation - date_hierarchy = "created_at" - list_filter = ("created_at",) - - # Faster searching - search_fields = ("name", "group__name") - - # Performance for large user lists - autocomplete_fields = ("group",) - - # Quick editing - list_editable = ("content_retention_days",) - - -@admin.register(BlueskyCredentials) -class BlueskyCredentialsAdmin(ModelAdmin): - """Admin view for project-scoped Bluesky authentication settings.""" - - form = BlueskyCredentialsAdminForm - actions = ["verify_selected_credentials"] - list_display = ( - "project", - "handle", - "display_pds_host", - "has_stored_credential", - "is_active", - "last_verified_at", - ) - list_filter = ("is_active", ("project", admin.RelatedOnlyFieldListFilter)) - search_fields = ("project__name", "handle", "pds_url") - autocomplete_fields = ("project",) - readonly_fields = ( - "has_stored_credential", - "last_verified_at", - "last_error", - "created_at", - "updated_at", - ) - fieldsets = ( - ( - "Account", - {"fields": ("project", "handle", "credential_input", "is_active")}, - ), - ( - "PDS Override", - { - "fields": ("pds_url",), - "description": "Leave blank to use the default Bluesky-hosted account flow.", - }, - ), - ( - "Verification", - { - "fields": ( - "has_stored_credential", - "last_verified_at", - "last_error", - "created_at", - "updated_at", - ) - }, - ), - ) - - @admin.display(description="PDS") - def display_pds_host(self, obj): - """Show whether the credentials use the hosted default or a custom PDS.""" - - return obj.pds_url or "Bluesky hosted default" - - @admin.display(boolean=True, description="Stored Credential") - def has_stored_credential(self, obj): - """Return whether an encrypted Bluesky credential has been configured.""" - - return obj.has_stored_credential() - - @admin.action(description="Verify Selected Credentials") - def verify_selected_credentials(self, request, queryset): - """Authenticate the selected Bluesky accounts and report the outcome.""" - - from core.plugins.bluesky import BlueskySourcePlugin - - verified_credentials = [] - failed_credentials = [] - - for credentials in queryset.select_related("project"): - try: - BlueskySourcePlugin.verify_credentials(credentials) - except Exception as exc: - failed_credentials.append(f"{credentials}: {exc}") - else: - verified_credentials.append(str(credentials)) - - if verified_credentials: - self.message_user( - request, - f"Credential verification passed for {len(verified_credentials)} account(s).", - messages.SUCCESS, - ) - - if failed_credentials: - self.message_user( - request, - "Credential verification failed for: " + "; ".join(failed_credentials), - messages.ERROR, - ) - - -@admin.register(ProjectConfig) -class ProjectConfigAdmin(admin.ModelAdmin): - """Admin configuration for per-project scoring settings.""" - - list_display = ( - "project", - "upvote_authority_weight", - "downvote_authority_weight", - "authority_decay_rate", - "recompute_topic_centroid_on_feedback_save", - ) - list_filter = ("recompute_topic_centroid_on_feedback_save",) - fields = ( - "project", - "upvote_authority_weight", - "downvote_authority_weight", - "authority_decay_rate", - "recompute_topic_centroid_on_feedback_save", - ) - - @admin.register(Entity) class EntityAdmin(admin.ModelAdmin): """Admin configuration for tracked people, vendors, and organizations.""" @@ -1219,133 +1042,6 @@ def changelist_view(self, request, extra_context=None): return super().changelist_view(request, extra_context=extra_context) -@admin.register(SourceConfig) -class SourceConfigAdmin(ModelAdmin): - """Admin view for source-plugin configuration and connectivity checks.""" - - list_display = ( - "plugin_name", - "project", - "display_health", - "is_active", - "last_fetched_at", - ) - list_filter = ( - "is_active", - "plugin_name", - ("project", admin.RelatedOnlyFieldListFilter), - ) - list_editable = ("is_active",) - search_fields = ("plugin_name", "project__name") - actions = ["test_source_connection"] - readonly_fields = ("last_fetched_at", "pretty_config") - fieldsets = ( - ("Core Settings", {"fields": ("plugin_name", "project", "is_active")}), - ( - "Configuration", - { - "fields": ("pretty_config", "config"), - }, - ), - ( - "Activity", - { - "fields": ("last_fetched_at",), - }, - ), - ) - - @admin.display(description="Status") - def display_health(self, obj): - """Infer a human-friendly health state from activity timestamps.""" - - if not obj.is_active: - return format_html('{}', "gray", "● Paused") - - if obj.last_fetched_at: - hours_since = (timezone.now() - obj.last_fetched_at).total_seconds() / 3600 - if hours_since > 24: - return format_html( - '{}', "red", "● Stale" - ) - return format_html( - '{}', "green", "● Healthy" - ) - - return format_html( - '{}', "orange", "● Never Run" - ) - - @admin.display(description="Config Preview") - def pretty_config(self, obj): - """Displays the JSON config in a readable format.""" - if not obj.config: - return "Empty" - formatted_json = json.dumps(obj.config, indent=4) - return mark_safe( - f'
{formatted_json}
' - ) - - @admin.action(description="Test Source Connectivity") - def test_source_connection(self, request, queryset): - """ - Custom action to trigger a dry-run fetch for the selected sources. - """ - healthy_sources = [] - failed_sources = [] - - for source_config in queryset.select_related("project"): - try: - source_config.config = validate_plugin_config( - source_config.plugin_name, - source_config.config, - ) - plugin = get_plugin_for_source_config(source_config) - if not plugin.health_check(): - raise RuntimeError("Health check returned an unhealthy status.") - except Exception as exc: - failed_sources.append(f"{source_config}: {exc}") - else: - healthy_sources.append(str(source_config)) - - if healthy_sources: - self.message_user( - request, - f"Connectivity check passed for {len(healthy_sources)} source(s).", - messages.SUCCESS, - ) - - if failed_sources: - self.message_user( - request, - "Connectivity check failed for: " + "; ".join(failed_sources), - messages.ERROR, - ) - - def changelist_view(self, request, extra_context=None): - """Augment the changelist with source-count and diversity stats.""" - - qs = self.get_queryset(request) - extra_context = extra_context or {} - active_count = qs.filter(is_active=True).count() - total_count = qs.count() or 1 - - extra_context["dashboard_stats"] = [ - { - "title": "Active Sources", - "value": f"{active_count} / {total_count}", - "icon": "settings_input_component", - "color": "success" if active_count == total_count else "warning", - }, - { - "title": "Plugin Variety", - "value": qs.values("plugin_name").distinct().count(), - "icon": "extension", - }, - ] - return super().changelist_view(request, extra_context=extra_context) - - @admin.register(ReviewQueue) class ReviewQueueAdmin(ModelAdmin): """Admin view for items waiting on editorial judgment.""" @@ -1417,3 +1113,55 @@ def changelist_view(self, request, extra_context=None): }, ] return super().changelist_view(request, extra_context=extra_context) + + +from projects.admin import ( # noqa: E402 + BlueskyCredentialsAdmin as ProjectsBlueskyCredentialsAdmin, + BlueskyCredentialsAdminForm as ProjectsBlueskyCredentialsAdminForm, + ProjectAdmin as ProjectsProjectAdmin, + ProjectConfigAdmin as ProjectsProjectConfigAdmin, + SourceConfigAdmin as ProjectsSourceConfigAdmin, +) + +BlueskyCredentialsAdminForm = ProjectsBlueskyCredentialsAdminForm +ProjectAdmin = ProjectsProjectAdmin +BlueskyCredentialsAdmin = ProjectsBlueskyCredentialsAdmin +ProjectConfigAdmin = ProjectsProjectConfigAdmin + + +class SourceConfigAdmin(ProjectsSourceConfigAdmin): + """Compatibility wrapper for the moved source-config admin class.""" + + def test_source_connection(self, request, queryset): + """Trigger a dry-run connectivity check for the selected sources.""" + + healthy_sources = [] + failed_sources = [] + + for source_config in queryset.select_related("project"): + try: + source_config.config = validate_plugin_config( + source_config.plugin_name, + source_config.config, + ) + plugin = get_plugin_for_source_config(source_config) + if not plugin.health_check(): + raise RuntimeError("Health check returned an unhealthy status.") + except Exception as exc: + failed_sources.append(f"{source_config}: {exc}") + else: + healthy_sources.append(str(source_config)) + + if healthy_sources: + self.message_user( + request, + f"Connectivity check passed for {len(healthy_sources)} source(s).", + messages.SUCCESS, + ) + + if failed_sources: + self.message_user( + request, + "Connectivity check failed for: " + "; ".join(failed_sources), + messages.ERROR, + ) diff --git a/core/api.py b/core/api.py index 52ee8b73..f00d43dd 100644 --- a/core/api.py +++ b/core/api.py @@ -29,7 +29,6 @@ reject_entity_candidate, ) from core.models import ( - BlueskyCredentials, Content, Entity, EntityCandidate, @@ -38,16 +37,12 @@ IntakeAllowlist, NewsletterIntake, Project, - ProjectConfig, ReviewQueue, SkillResult, - SourceConfig, TopicCentroidSnapshot, UserFeedback, - generate_project_intake_token, ) from core.serializers import ( - BlueskyCredentialsSerializer, ContentSerializer, EntityAuthoritySnapshotSerializer, EntityCandidateMergeSerializer, @@ -57,11 +52,8 @@ IngestionRunSerializer, IntakeAllowlistSerializer, NewsletterIntakeSerializer, - ProjectConfigSerializer, - ProjectSerializer, ReviewQueueSerializer, SkillResultSerializer, - SourceConfigSerializer, TopicCentroidObservabilitySummarySerializer, TopicCentroidSnapshotSerializer, UserFeedbackSerializer, @@ -606,147 +598,6 @@ def perform_create(self, serializer): serializer.save(project=self.get_project()) -@document_group_access_viewset( - resource_plural="projects", - resource_singular="project", - create_description="Create a new project for one of the authenticated user's groups.", - tag="Project Management", - action_overrides=build_crud_action_overrides( - ProjectSerializer, - resource_plural="projects available to the authenticated user", - resource_singular="project", - create_examples=[PROJECT_CREATE_REQUEST_EXAMPLE, PROJECT_RESPONSE_EXAMPLE], - create_response_examples=[PROJECT_RESPONSE_EXAMPLE], - retrieve_examples=[PROJECT_RESPONSE_EXAMPLE], - ), -) -class ProjectViewSet(viewsets.ModelViewSet): - """Manage projects accessible through the current user's group memberships.""" - - serializer_class = ProjectSerializer - queryset = Project.objects.select_related("group", "bluesky_credentials") - lookup_url_kwarg = "id" - - def get_queryset(self): - """Limit projects to those visible through the authenticated user.""" - - return self.queryset.filter(group__user=self.request.user).distinct() - - @extend_schema( - summary="Rotate newsletter intake token", - description=( - "Generate a fresh project-specific newsletter intake token and return the " - "updated project payload." - ), - tags=["Project Management"], - request=None, - responses={200: ProjectSerializer, 403: AUTHENTICATION_REQUIRED_RESPONSE}, - ) - @action(detail=True, methods=["post"], url_path="rotate-intake-token") - def rotate_intake_token(self, request, *args, **kwargs): - """Generate a fresh intake token for the selected project.""" - - project = self.get_object() - project.intake_token = generate_project_intake_token() - project.save(update_fields=["intake_token"]) - serializer = self.get_serializer(project) - return Response(serializer.data) - - @extend_schema( - summary="Verify Bluesky credentials", - description=( - "Verify the selected project's stored Bluesky credentials by authenticating " - "the account and checking the current session." - ), - tags=["Ingestion"], - request=None, - responses={ - 200: build_success_response( - BLUESKY_CREDENTIALS_VERIFY_RESPONSE, - "The project's Bluesky credentials were verified successfully.", - ), - 400: OpenApiResponse( - response=inline_serializer( - name="BlueskyCredentialsVerifyErrorResponse", - fields={ - "type": serializers.CharField(), - "errors": inline_serializer( - name="BlueskyCredentialsVerifyError", - fields={ - "code": serializers.CharField(), - "detail": serializers.CharField(), - "attr": serializers.CharField(allow_null=True), - }, - many=True, - ), - }, - ), - description="The project is missing Bluesky credentials or verification failed.", - ), - 403: AUTHENTICATION_REQUIRED_RESPONSE, - }, - ) - @action(detail=True, methods=["post"], url_path="verify-bluesky-credentials") - def verify_bluesky_credentials(self, request, *args, **kwargs): - """Verify the Bluesky credentials stored for the selected project.""" - - from core.plugins.bluesky import BlueskySourcePlugin - - project = self.get_object() - try: - credentials = project.bluesky_credentials - except BlueskyCredentials.DoesNotExist as exc: - raise serializers.ValidationError( - { - "bluesky_credentials": "No Bluesky credentials are configured for this project." - } - ) from exc - - try: - BlueskySourcePlugin.verify_credentials(credentials) - except Exception as exc: - logger.exception( - "Bluesky credential verification failed for project id=%s", - project.id, - ) - raise serializers.ValidationError( - { - "bluesky_credentials": ( - "Credential verification failed. Please re-check the credentials " - "and try again." - ) - } - ) from exc - - credentials.refresh_from_db() - return Response( - { - "status": "verified", - "handle": credentials.handle, - "last_verified_at": credentials.last_verified_at, - "last_error": "", - } - ) - - -@document_project_owned_viewset( - resource_plural="project configurations", - resource_singular="project configuration", - create_description="Create a new project configuration record for the selected project, including authority weighting and decay settings.", - tag="Project Management", - action_overrides=build_crud_action_overrides( - ProjectConfigSerializer, - resource_plural="project configurations for the selected project", - resource_singular="project configuration", - ), -) -class ProjectConfigViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): - """Manage per-project scoring and authority configuration.""" - - serializer_class = ProjectConfigSerializer - queryset = ProjectConfig.objects.select_related("project") - - @document_project_owned_viewset( resource_plural="entities", resource_singular="entity", @@ -1063,33 +914,6 @@ class IngestionRunViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): queryset = IngestionRun.objects.select_related("project") -@document_project_owned_viewset( - resource_plural="Bluesky credentials", - resource_singular="Bluesky credentials", - create_description=( - "Create Bluesky credentials for the selected project. The app password is " - "accepted write-only and is never returned in API responses." - ), - tag="Ingestion", - action_overrides=build_crud_action_overrides( - BlueskyCredentialsSerializer, - resource_plural="Bluesky credentials for the selected project", - resource_singular="Bluesky credentials", - retrieve_examples=[BLUESKY_CREDENTIALS_RESPONSE_EXAMPLE], - ), -) -class BlueskyCredentialsViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): - """Manage project-scoped Bluesky credentials.""" - - serializer_class = BlueskyCredentialsSerializer - queryset = BlueskyCredentials.objects.select_related("project") - - def get_queryset(self): - """Restrict credentials to the selected project and current user.""" - - return super().get_queryset().order_by("-updated_at") - - @document_project_owned_viewset( resource_plural="intake allowlist entries", resource_singular="intake allowlist entry", @@ -1132,32 +956,6 @@ class NewsletterIntakeViewSet(ProjectOwnedQuerysetMixin, viewsets.ReadOnlyModelV queryset = NewsletterIntake.objects.select_related("project") -@document_project_owned_viewset( - resource_plural="source configurations", - resource_singular="source configuration", - create_description="Create a new source configuration for the selected project. Plugin-specific configuration is validated before the record is saved.", - tag="Ingestion", - action_overrides=build_crud_action_overrides( - SourceConfigSerializer, - resource_plural="source configurations for the selected project", - resource_singular="source configuration", - create_examples=[ - SOURCE_CONFIG_CREATE_REQUEST_EXAMPLE, - SOURCE_CONFIG_REDDIT_REQUEST_EXAMPLE, - SOURCE_CONFIG_BLUESKY_REQUEST_EXAMPLE, - SOURCE_CONFIG_RESPONSE_EXAMPLE, - ], - create_response_examples=[SOURCE_CONFIG_RESPONSE_EXAMPLE], - retrieve_examples=[SOURCE_CONFIG_RESPONSE_EXAMPLE], - ), -) -class SourceConfigViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): - """Manage source-plugin configuration for a project.""" - - serializer_class = SourceConfigSerializer - queryset = SourceConfig.objects.select_related("project") - - @document_project_owned_viewset( resource_plural="topic centroid snapshots", resource_singular="topic centroid snapshot", @@ -1231,3 +1029,11 @@ class ReviewQueueViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = ReviewQueueSerializer queryset = ReviewQueue.objects.select_related("content", "project") + + +from projects.api import ( # noqa: E402 + BlueskyCredentialsViewSet, + ProjectConfigViewSet, + ProjectViewSet, + SourceConfigViewSet, +) diff --git a/core/api_urls.py b/core/api_urls.py index e1c70538..b4b88e0a 100644 --- a/core/api_urls.py +++ b/core/api_urls.py @@ -2,21 +2,23 @@ from rest_framework_nested.routers import NestedSimpleRouter from core.api import ( - BlueskyCredentialsViewSet, ContentViewSet, EntityCandidateViewSet, EntityViewSet, IngestionRunViewSet, IntakeAllowlistViewSet, NewsletterIntakeViewSet, - ProjectConfigViewSet, - ProjectViewSet, ReviewQueueViewSet, SkillResultViewSet, - SourceConfigViewSet, TopicCentroidSnapshotViewSet, UserFeedbackViewSet, ) +from projects.api import ( + BlueskyCredentialsViewSet, + ProjectConfigViewSet, + ProjectViewSet, + SourceConfigViewSet, +) app_name = "api" diff --git a/core/migrations/0010_move_project_models_to_projects.py b/core/migrations/0010_move_project_models_to_projects.py new file mode 100644 index 00000000..d5a246eb --- /dev/null +++ b/core/migrations/0010_move_project_models_to_projects.py @@ -0,0 +1,159 @@ +import django.db.models.deletion +from django.db import migrations, models + + +PROJECT_MODEL_NAMES = [ + "project", + "projectconfig", + "sourceconfig", + "blueskycredentials", +] + + +def rename_project_content_types(apps, schema_editor): + """Retarget existing content types to the new projects app label.""" + + ContentType = apps.get_model("contenttypes", "ContentType") + ContentType.objects.using(schema_editor.connection.alias).filter( + app_label="core", model__in=PROJECT_MODEL_NAMES + ).update(app_label="projects") + + +def rename_project_content_types_reverse(apps, schema_editor): + """Restore the historical core app label on rollback.""" + + ContentType = apps.get_model("contenttypes", "ContentType") + ContentType.objects.using(schema_editor.connection.alias).filter( + app_label="projects", model__in=PROJECT_MODEL_NAMES + ).update(app_label="core") + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0009_topiccentroidsnapshot"), + ("projects", "0001_initial"), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=[ + migrations.AlterField( + model_name="entity", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="entities", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="entityauthoritysnapshot", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="entity_authority_snapshots", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="topiccentroidsnapshot", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="topic_centroid_snapshots", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="content", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="contents", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="entitymention", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="entity_mentions", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="entitycandidate", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="entity_candidates", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="intakeallowlist", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="intake_allowlist", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="newsletterintake", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="newsletter_intakes", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="skillresult", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="skill_results", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="userfeedback", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="feedback", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="ingestionrun", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="ingestion_runs", + to="projects.project", + ), + ), + migrations.AlterField( + model_name="reviewqueue", + name="project", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="review_queue_items", + to="projects.project", + ), + ), + migrations.DeleteModel(name="BlueskyCredentials"), + migrations.DeleteModel(name="ProjectConfig"), + migrations.DeleteModel(name="Project"), + migrations.DeleteModel(name="SourceConfig"), + ], + database_operations=[], + ), + migrations.RunPython( + rename_project_content_types, + rename_project_content_types_reverse, + ), + ] \ No newline at end of file diff --git a/core/models.py b/core/models.py index cff292d8..20621d00 100644 --- a/core/models.py +++ b/core/models.py @@ -1,20 +1,18 @@ -"""Core domain models for projects, ingestion, and editorial review. +"""Core domain models for ingestion, editorial review, and shared enums. The admin, API, Celery tasks, and AI pipeline all revolve around the models in this module. Adding model-level docstrings here gives Django admindocs a useful summary of the core entities new contributors interact with first. """ -import base64 -import hashlib import secrets -from urllib.parse import urlsplit, urlunsplit -from cryptography.fernet import Fernet from django.conf import settings -from django.contrib.auth.models import Group from django.db import models +from projects.model_support import SourcePluginName +from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig + def generate_project_intake_token() -> str: """Generate the stable token used in project-specific intake email aliases. @@ -24,7 +22,9 @@ def generate_project_intake_token() -> str: ``intake+@...`` to route inbound newsletters to a project. """ - return secrets.token_hex(16) + from projects.model_support import generate_project_intake_token as _generate_token + + return _generate_token() def generate_confirmation_token() -> str: @@ -41,41 +41,25 @@ def generate_confirmation_token() -> str: def normalize_bluesky_handle(handle: str) -> str: """Normalize Bluesky handles so stored account references stay consistent.""" - return handle.strip().removeprefix("@").lower() + from projects.model_support import normalize_bluesky_handle as _normalize_handle + + return _normalize_handle(handle) def normalize_bluesky_pds_url(pds_url: str) -> str: """Normalize a user-provided PDS URL to its base host form.""" - stripped_url = pds_url.strip().rstrip("/") - if not stripped_url: - return "" - parsed_url = urlsplit(stripped_url) - path = parsed_url.path.rstrip("/") - if path.endswith("/xrpc"): - path = path[: -len("/xrpc")] - return urlunsplit( - ( - parsed_url.scheme, - parsed_url.netloc, - path, - parsed_url.query, - parsed_url.fragment, - ) - ).rstrip("/") - - -def _bluesky_credentials_fernet() -> Fernet: + from projects.model_support import normalize_bluesky_pds_url as _normalize_pds_url + + return _normalize_pds_url(pds_url) + + +def _bluesky_credentials_fernet(): """Build the symmetric cipher used for Bluesky app-password storage.""" - key_material = ( - getattr(settings, "BLUESKY_CREDENTIALS_ENCRYPTION_KEY", "") - or settings.SECRET_KEY - ) - derived_key = base64.urlsafe_b64encode( - hashlib.sha256(key_material.encode("utf-8")).digest() - ) - return Fernet(derived_key) + from projects.model_support import bluesky_credentials_fernet + + return bluesky_credentials_fernet() class EntityType(models.TextChoices): @@ -128,14 +112,6 @@ class FeedbackType(models.TextChoices): DOWNVOTE = "downvote", "Downvote" -class SourcePluginName(models.TextChoices): - """Built-in ingestion plugins that can populate project content.""" - - RSS = "rss", "RSS" - REDDIT = "reddit", "Reddit" - BLUESKY = "bluesky", "Bluesky" - - class NewsletterIntakeStatus(models.TextChoices): """Lifecycle states for a raw inbound newsletter email.""" @@ -170,144 +146,6 @@ class ReviewResolution(models.TextChoices): HUMAN_REJECTED = "human_rejected", "Human Rejected" -class Project(models.Model): - """Represents a newsletter workspace owned by a Django auth group. - - A project defines the editorial topic, retention policy, and email-intake - identity used by all downstream ingestion, relevance scoring, and review flows. - Most other core models are scoped to a single project. - """ - - name = models.CharField(max_length=255) - group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name="projects") - topic_description = models.TextField() - content_retention_days = models.PositiveIntegerField(default=365) - intake_token = models.CharField( - max_length=64, - unique=True, - default=generate_project_intake_token, - editable=False, - ) - intake_enabled = models.BooleanField(default=False) - created_at = models.DateTimeField(auto_now_add=True) - - class Meta: - ordering = ["name"] - - def __str__(self) -> str: - return self.name - - -class BlueskyCredentials(models.Model): - """Stores the authenticated Bluesky account used by one project. - - The plugin can read public content through AppView without credentials, but a - stored account enables authenticated reads and self-hosted PDS support. - """ - - project = models.OneToOneField( - Project, on_delete=models.CASCADE, related_name="bluesky_credentials" - ) - handle = models.CharField(max_length=255) - app_password_encrypted = models.TextField(blank=True) - pds_url = models.URLField(blank=True) - is_active = models.BooleanField(default=True) - last_verified_at = models.DateTimeField(null=True, blank=True) - last_error = models.TextField(blank=True) - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) - - class Meta: - ordering = ["project__name"] - verbose_name_plural = "Bluesky credentials" - - def __str__(self) -> str: - return f"Bluesky credentials for {self.project.name}" - - @property - def client_base_url(self) -> str: - """Return the effective base URL used by the ATProto client.""" - - if not self.pds_url: - return "https://bsky.social/xrpc" - return f"{self.pds_url.rstrip('/')}/xrpc" - - def has_app_password(self) -> bool: - """Return whether an encrypted app password has been stored.""" - - return bool(self.app_password_encrypted) - - def has_stored_credential(self) -> bool: - """Return whether an encrypted Bluesky credential has been stored.""" - - return self.has_app_password() - - def set_app_password(self, app_password: str) -> None: - """Encrypt and store the given Bluesky app password.""" - - if not app_password: - self.app_password_encrypted = "" - return - self.app_password_encrypted = ( - _bluesky_credentials_fernet() - .encrypt(app_password.encode("utf-8")) - .decode("utf-8") - ) - - def set_stored_credential(self, credential_value: str) -> None: - """Encrypt and store the given Bluesky credential value.""" - - self.set_app_password(credential_value) - - def get_app_password(self) -> str: - """Decrypt and return the stored Bluesky app password.""" - - if not self.app_password_encrypted: - return "" - return ( - _bluesky_credentials_fernet() - .decrypt(self.app_password_encrypted.encode("utf-8")) - .decode("utf-8") - ) - - def get_stored_credential(self) -> str: - """Decrypt and return the stored Bluesky credential value.""" - - return self.get_app_password() - - def save(self, *args, **kwargs): - """Normalize stored account fields before persisting the credentials.""" - - self.handle = normalize_bluesky_handle(self.handle) - self.pds_url = normalize_bluesky_pds_url(self.pds_url) - super().save(*args, **kwargs) - - -class ProjectConfig(models.Model): - """Stores tunable scoring parameters for a single project. - - These values let the application adjust how strongly upvotes, downvotes, and - score decay influence entity authority over time without changing code. - They also control whether feedback saves should immediately refresh the - project's topic centroid. - """ - - project = models.OneToOneField( - Project, on_delete=models.CASCADE, related_name="config" - ) - upvote_authority_weight = models.FloatField(default=0.1) - downvote_authority_weight = models.FloatField(default=-0.05) - authority_decay_rate = models.FloatField(default=0.95) - recompute_topic_centroid_on_feedback_save = models.BooleanField(default=True) - - class Meta: - verbose_name = "Project config" - verbose_name_plural = "Project configs" - - def __str__(self) -> str: - return f"Config for {self.project.name}" - - class Entity(models.Model): """Represents a person, vendor, or organization tracked inside a project. @@ -694,31 +532,6 @@ def __str__(self) -> str: return f"{self.feedback_type} by {self.user}" -class SourceConfig(models.Model): - """Configures one ingestion source for a project. - - Each source config selects a plugin, stores its provider-specific settings, - and records the last successful fetch time used for incremental ingestion. - """ - - project = models.ForeignKey( - Project, on_delete=models.CASCADE, related_name="source_configs" - ) - plugin_name = models.CharField(max_length=64, choices=SourcePluginName.choices) - config = models.JSONField(default=dict) - is_active = models.BooleanField(default=True) - last_fetched_at = models.DateTimeField(null=True, blank=True) - - class Meta: - ordering = ["plugin_name", "id"] - indexes = [ - models.Index(fields=["project", "plugin_name", "is_active"]), - ] - - def __str__(self) -> str: - return f"{self.plugin_name} source for {self.project.name}" - - class IngestionRun(models.Model): """Captures the outcome of one source-ingestion execution. diff --git a/core/serializers.py b/core/serializers.py index 059cd3a4..0282f6c7 100644 --- a/core/serializers.py +++ b/core/serializers.py @@ -9,7 +9,6 @@ from rest_framework import serializers from core.models import ( - BlueskyCredentials, Content, Entity, EntityAuthoritySnapshot, @@ -19,14 +18,11 @@ IntakeAllowlist, NewsletterIntake, Project, - ProjectConfig, ReviewQueue, SkillResult, - SourceConfig, TopicCentroidSnapshot, UserFeedback, ) -from core.plugins import validate_plugin_config class ProjectScopedSerializerMixin: @@ -81,164 +77,6 @@ def __init__(self, *args, **kwargs): self._filter_related_queryset(request) -class ProjectSerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): - """Serialize top-level project records.""" - - has_bluesky_credentials = serializers.SerializerMethodField() - bluesky_handle = serializers.SerializerMethodField() - bluesky_is_active = serializers.SerializerMethodField() - bluesky_last_verified_at = serializers.SerializerMethodField() - bluesky_last_error = serializers.SerializerMethodField() - - class Meta: - model = Project - fields = [ - "id", - "name", - "group", - "topic_description", - "content_retention_days", - "intake_token", - "intake_enabled", - "has_bluesky_credentials", - "bluesky_handle", - "bluesky_is_active", - "bluesky_last_verified_at", - "bluesky_last_error", - "created_at", - ] - read_only_fields = ["id", "created_at"] - - def _get_bluesky_credentials(self, obj: Project): - """Return the project's stored Bluesky credentials, if configured.""" - - try: - return obj.bluesky_credentials - except Project.bluesky_credentials.RelatedObjectDoesNotExist: - return None - - def get_has_bluesky_credentials(self, obj: Project) -> bool: - """Return whether the project has stored Bluesky credentials.""" - - return self._get_bluesky_credentials(obj) is not None - - def get_bluesky_handle(self, obj: Project) -> str: - """Return the stored Bluesky handle, or an empty string.""" - - credentials = self._get_bluesky_credentials(obj) - return credentials.handle if credentials else "" - - def get_bluesky_is_active(self, obj: Project) -> bool: - """Return whether the stored Bluesky credentials are currently active.""" - - credentials = self._get_bluesky_credentials(obj) - return credentials.is_active if credentials else False - - def get_bluesky_last_verified_at(self, obj: Project): - """Return the last successful verification timestamp, if available.""" - - credentials = self._get_bluesky_credentials(obj) - return credentials.last_verified_at if credentials else None - - def get_bluesky_last_error(self, obj: Project) -> str: - """Return the latest Bluesky verification error, or an empty string.""" - - credentials = self._get_bluesky_credentials(obj) - return credentials.last_error if credentials else "" - - -class ProjectConfigSerializer( - ProjectScopedSerializerMixin, serializers.ModelSerializer -): - """Serialize per-project authority and scoring settings.""" - - class Meta: - model = ProjectConfig - fields = [ - "id", - "project", - "upvote_authority_weight", - "downvote_authority_weight", - "authority_decay_rate", - ] - read_only_fields = ["id", "project"] - - -class BlueskyCredentialsSerializer( - ProjectScopedSerializerMixin, serializers.ModelSerializer -): - """Serialize project-scoped Bluesky credentials without exposing secrets.""" - - app_password = serializers.CharField( - write_only=True, - required=False, - allow_blank=True, - trim_whitespace=False, - ) - has_stored_credential = serializers.SerializerMethodField() - - class Meta: - model = BlueskyCredentials - fields = [ - "id", - "project", - "handle", - "pds_url", - "is_active", - "has_stored_credential", - "app_password", - "last_verified_at", - "last_error", - "created_at", - "updated_at", - ] - read_only_fields = [ - "id", - "project", - "has_stored_credential", - "last_verified_at", - "last_error", - "created_at", - "updated_at", - ] - - def get_has_stored_credential(self, obj: BlueskyCredentials) -> bool: - """Return whether the project has an encrypted Bluesky credential stored.""" - - return obj.has_stored_credential() - - def validate(self, attrs): - """Require an app password when creating a credential record.""" - - attrs = super().validate(attrs) - app_password = attrs.get("app_password", "") - if self.instance is None and not app_password: - raise serializers.ValidationError( - {"app_password": "A Bluesky app credential is required."} - ) - return attrs - - def create(self, validated_data): - """Encrypt the submitted Bluesky app password before saving the record.""" - - app_password = validated_data.pop("app_password", "") - instance = super().create(validated_data) - if app_password: - instance.set_app_password(app_password) - instance.save(update_fields=["app_password_encrypted", "updated_at"]) - return instance - - def update(self, instance, validated_data): - """Keep the stored credential unless a replacement app password is submitted.""" - - app_password = validated_data.pop("app_password", "") - instance = super().update(instance, validated_data) - if app_password: - instance.set_app_password(app_password) - instance.save(update_fields=["app_password_encrypted", "updated_at"]) - return instance - - class EntitySerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): """Serialize tracked entities for a project.""" @@ -518,36 +356,6 @@ class Meta: read_only_fields = ["id", "project", "started_at"] -class SourceConfigSerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): - """Serialize source-plugin configuration and normalize provider settings.""" - - class Meta: - model = SourceConfig - fields = [ - "id", - "project", - "plugin_name", - "config", - "is_active", - "last_fetched_at", - ] - read_only_fields = ["id", "project", "last_fetched_at"] - - def validate(self, attrs): - """Validate plugin-specific configuration with the plugin registry.""" - - plugin_name = attrs.get("plugin_name") or getattr( - self.instance, "plugin_name", None - ) - config = attrs.get("config") or getattr(self.instance, "config", {}) - if plugin_name: - try: - attrs["config"] = validate_plugin_config(plugin_name, config) - except ValueError as exc: - raise serializers.ValidationError({"config": str(exc)}) from exc - return attrs - - class ReviewQueueSerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): """Serialize manual-review queue items for project content.""" @@ -630,3 +438,11 @@ class Meta: "extraction_result", "error_message", ] + + +from projects.serializers import ( # noqa: E402 + BlueskyCredentialsSerializer, + ProjectConfigSerializer, + ProjectSerializer, + SourceConfigSerializer, +) diff --git a/newsletter_maker/settings/base.py b/newsletter_maker/settings/base.py index f5b6554b..9c2513e4 100644 --- a/newsletter_maker/settings/base.py +++ b/newsletter_maker/settings/base.py @@ -42,9 +42,7 @@ def env_list(name: str, default: str = "") -> list[str]: DATABASE_URL = os.getenv("DATABASE_URL", f"sqlite:///{BASE_DIR / 'db.sqlite3'}") SITE_ID = int(os.getenv("SITE_ID", "1")) NEWSLETTER_API_BASE_URL = os.getenv("NEWSLETTER_API_BASE_URL", "http://127.0.0.1:8080") -BLUESKY_CREDENTIALS_ENCRYPTION_KEY = os.getenv( - "BLUESKY_CREDENTIALS_ENCRYPTION_KEY", "" -) +BLUESKY_CREDENTIALS_ENCRYPTION_KEY = os.getenv("BLUESKY_CREDENTIALS_ENCRYPTION_KEY", "") REDDIT_CLIENT_ID = os.getenv("REDDIT_CLIENT_ID", "") REDDIT_CLIENT_SECRET = os.getenv("REDDIT_CLIENT_SECRET", "") @@ -97,6 +95,7 @@ def env_list(name: str, default: str = "") -> list[str]: "drf_spectacular", "drf_standardized_errors", # 6. Project Apps + "projects", "core", ] diff --git a/projects/__init__.py b/projects/__init__.py new file mode 100644 index 00000000..0f753711 --- /dev/null +++ b/projects/__init__.py @@ -0,0 +1 @@ +"""Projects app package.""" \ No newline at end of file diff --git a/projects/admin.py b/projects/admin.py new file mode 100644 index 00000000..e53981b2 --- /dev/null +++ b/projects/admin.py @@ -0,0 +1,294 @@ +"""Admin configuration for project-owned models.""" + +import json + +from django import forms +from django.contrib import admin, messages +from django.utils import timezone +from django.utils.html import format_html +from django.utils.safestring import mark_safe +from import_export.admin import ExportActionMixin +from unfold.admin import ModelAdmin + +from core.plugins import get_plugin_for_source_config, validate_plugin_config +from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig + + +class BlueskyCredentialsAdminForm(forms.ModelForm): + """Admin form that accepts a plaintext Bluesky app credential input.""" + + credential_input = forms.CharField( + required=False, + strip=False, + widget=forms.PasswordInput(render_value=False), + help_text="Leave blank to keep the existing stored credential.", + label="Bluesky app credential", + ) + + class Meta: + model = BlueskyCredentials + fields = ["project", "handle", "pds_url", "is_active"] + + def clean(self): + """Require a credential when creating the record for the first time.""" + + cleaned_data = super().clean() + credential_input = cleaned_data.get("credential_input", "") + if not self.instance.has_stored_credential() and not credential_input: + self.add_error("credential_input", "A Bluesky app credential is required.") + return cleaned_data + + def save(self, commit=True): + """Encrypt a new credential value before saving the model instance.""" + + instance = super().save(commit=False) + credential_input = self.cleaned_data.get("credential_input", "") + if credential_input: + instance.set_stored_credential(credential_input) + if commit: + instance.save() + return instance + + +@admin.register(Project) +class ProjectAdmin(ExportActionMixin, admin.ModelAdmin): + """Admin configuration for top-level project workspaces.""" + + list_display = ("name", "group", "content_retention_days", "created_at") + date_hierarchy = "created_at" + list_filter = ("created_at",) + search_fields = ("name", "group__name") + autocomplete_fields = ("group",) + list_editable = ("content_retention_days",) + + +@admin.register(BlueskyCredentials) +class BlueskyCredentialsAdmin(ModelAdmin): + """Admin view for project-scoped Bluesky authentication settings.""" + + form = BlueskyCredentialsAdminForm + actions = ["verify_selected_credentials"] + list_display = ( + "project", + "handle", + "display_pds_host", + "has_stored_credential", + "is_active", + "last_verified_at", + ) + list_filter = ("is_active", ("project", admin.RelatedOnlyFieldListFilter)) + search_fields = ("project__name", "handle", "pds_url") + autocomplete_fields = ("project",) + readonly_fields = ( + "has_stored_credential", + "last_verified_at", + "last_error", + "created_at", + "updated_at", + ) + fieldsets = ( + ( + "Account", + {"fields": ("project", "handle", "credential_input", "is_active")}, + ), + ( + "PDS Override", + { + "fields": ("pds_url",), + "description": "Leave blank to use the default Bluesky-hosted account flow.", + }, + ), + ( + "Verification", + { + "fields": ( + "has_stored_credential", + "last_verified_at", + "last_error", + "created_at", + "updated_at", + ) + }, + ), + ) + + @admin.display(description="PDS") + def display_pds_host(self, obj): + """Show whether the credentials use the hosted default or a custom PDS.""" + + return obj.pds_url or "Bluesky hosted default" + + @admin.display(boolean=True, description="Stored Credential") + def has_stored_credential(self, obj): + """Return whether an encrypted Bluesky credential has been configured.""" + + return obj.has_stored_credential() + + @admin.action(description="Verify Selected Credentials") + def verify_selected_credentials(self, request, queryset): + """Authenticate the selected Bluesky accounts and report the outcome.""" + + from core.plugins.bluesky import BlueskySourcePlugin + + verified_credentials = [] + failed_credentials = [] + + for credentials in queryset.select_related("project"): + try: + BlueskySourcePlugin.verify_credentials(credentials) + except Exception as exc: + failed_credentials.append(f"{credentials}: {exc}") + else: + verified_credentials.append(str(credentials)) + + if verified_credentials: + self.message_user( + request, + f"Credential verification passed for {len(verified_credentials)} account(s).", + messages.SUCCESS, + ) + + if failed_credentials: + self.message_user( + request, + "Credential verification failed for: " + "; ".join(failed_credentials), + messages.ERROR, + ) + + +@admin.register(ProjectConfig) +class ProjectConfigAdmin(admin.ModelAdmin): + """Admin configuration for per-project scoring settings.""" + + list_display = ( + "project", + "upvote_authority_weight", + "downvote_authority_weight", + "authority_decay_rate", + "recompute_topic_centroid_on_feedback_save", + ) + list_filter = ("recompute_topic_centroid_on_feedback_save",) + fields = ( + "project", + "upvote_authority_weight", + "downvote_authority_weight", + "authority_decay_rate", + "recompute_topic_centroid_on_feedback_save", + ) + + +@admin.register(SourceConfig) +class SourceConfigAdmin(ModelAdmin): + """Admin view for source-plugin configuration and connectivity checks.""" + + list_display = ( + "plugin_name", + "project", + "display_health", + "is_active", + "last_fetched_at", + ) + list_filter = ( + "is_active", + "plugin_name", + ("project", admin.RelatedOnlyFieldListFilter), + ) + list_editable = ("is_active",) + search_fields = ("plugin_name", "project__name") + actions = ["test_source_connection"] + readonly_fields = ("last_fetched_at", "pretty_config") + fieldsets = ( + ("Core Settings", {"fields": ("plugin_name", "project", "is_active")}), + ("Configuration", {"fields": ("pretty_config", "config")}), + ("Activity", {"fields": ("last_fetched_at",)}), + ) + + @admin.display(description="Status") + def display_health(self, obj): + """Infer a human-friendly health state from activity timestamps.""" + + if not obj.is_active: + return format_html('{}', "gray", "● Paused") + + if obj.last_fetched_at: + hours_since = (timezone.now() - obj.last_fetched_at).total_seconds() / 3600 + if hours_since > 24: + return format_html( + '{}', "red", "● Stale" + ) + return format_html( + '{}', "green", "● Healthy" + ) + + return format_html( + '{}', "orange", "● Never Run" + ) + + @admin.display(description="Config Preview") + def pretty_config(self, obj): + """Display the JSON config in a readable format.""" + + if not obj.config: + return "Empty" + formatted_json = json.dumps(obj.config, indent=4) + return mark_safe( + f'
{formatted_json}
' + ) + + @admin.action(description="Test Source Connectivity") + def test_source_connection(self, request, queryset): + """Trigger a dry-run connectivity check for the selected sources.""" + + healthy_sources = [] + failed_sources = [] + + for source_config in queryset.select_related("project"): + try: + source_config.config = validate_plugin_config( + source_config.plugin_name, + source_config.config, + ) + plugin = get_plugin_for_source_config(source_config) + if not plugin.health_check(): + raise RuntimeError("Health check returned an unhealthy status.") + except Exception as exc: + failed_sources.append(f"{source_config}: {exc}") + else: + healthy_sources.append(str(source_config)) + + if healthy_sources: + self.message_user( + request, + f"Connectivity check passed for {len(healthy_sources)} source(s).", + messages.SUCCESS, + ) + + if failed_sources: + self.message_user( + request, + "Connectivity check failed for: " + "; ".join(failed_sources), + messages.ERROR, + ) + + def changelist_view(self, request, extra_context=None): + """Augment the changelist with source-count and diversity stats.""" + + qs = self.get_queryset(request) + extra_context = extra_context or {} + active_count = qs.filter(is_active=True).count() + total_count = qs.count() or 1 + + extra_context["dashboard_stats"] = [ + { + "title": "Active Sources", + "value": f"{active_count} / {total_count}", + "icon": "settings_input_component", + "color": "success" if active_count == total_count else "warning", + }, + { + "title": "Plugin Variety", + "value": qs.values("plugin_name").distinct().count(), + "icon": "extension", + }, + ] + return super().changelist_view(request, extra_context=extra_context) diff --git a/projects/api.py b/projects/api.py new file mode 100644 index 00000000..586dbc04 --- /dev/null +++ b/projects/api.py @@ -0,0 +1,230 @@ +"""REST API viewsets for project-owned models.""" + +from drf_spectacular.utils import OpenApiResponse, extend_schema, inline_serializer +from rest_framework import serializers, viewsets +from rest_framework.decorators import action +from rest_framework.response import Response + +from core.api import ( + AUTHENTICATION_REQUIRED_RESPONSE, + BLUESKY_CREDENTIALS_RESPONSE_EXAMPLE, + BLUESKY_CREDENTIALS_VERIFY_RESPONSE, + PROJECT_CREATE_REQUEST_EXAMPLE, + PROJECT_RESPONSE_EXAMPLE, + ProjectOwnedQuerysetMixin, + SOURCE_CONFIG_BLUESKY_REQUEST_EXAMPLE, + SOURCE_CONFIG_CREATE_REQUEST_EXAMPLE, + SOURCE_CONFIG_REDDIT_REQUEST_EXAMPLE, + SOURCE_CONFIG_RESPONSE_EXAMPLE, + build_crud_action_overrides, + build_success_response, + document_group_access_viewset, + document_project_owned_viewset, + logger, +) +from core.plugins.bluesky import BlueskySourcePlugin +from projects.models import ( + BlueskyCredentials, + Project, + ProjectConfig, + SourceConfig, + generate_project_intake_token, +) +from projects.serializers import ( + BlueskyCredentialsSerializer, + ProjectConfigSerializer, + ProjectSerializer, + SourceConfigSerializer, +) + + +@document_group_access_viewset( + resource_plural="projects", + resource_singular="project", + create_description="Create a new project for one of the authenticated user's groups.", + tag="Project Management", + action_overrides=build_crud_action_overrides( + ProjectSerializer, + resource_plural="projects available to the authenticated user", + resource_singular="project", + create_examples=[PROJECT_CREATE_REQUEST_EXAMPLE, PROJECT_RESPONSE_EXAMPLE], + create_response_examples=[PROJECT_RESPONSE_EXAMPLE], + retrieve_examples=[PROJECT_RESPONSE_EXAMPLE], + ), +) +class ProjectViewSet(viewsets.ModelViewSet): + """Manage projects accessible through the current user's group memberships.""" + + serializer_class = ProjectSerializer + queryset = Project.objects.select_related("group", "bluesky_credentials") + lookup_url_kwarg = "id" + + def get_queryset(self): + """Limit projects to those visible through the authenticated user.""" + + return self.queryset.filter(group__user=self.request.user).distinct() + + @extend_schema( + summary="Rotate newsletter intake token", + description=( + "Generate a fresh project-specific newsletter intake token and return the " + "updated project payload." + ), + tags=["Project Management"], + request=None, + responses={200: ProjectSerializer, 403: AUTHENTICATION_REQUIRED_RESPONSE}, + ) + @action(detail=True, methods=["post"], url_path="rotate-intake-token") + def rotate_intake_token(self, request, *args, **kwargs): + """Generate a fresh intake token for the selected project.""" + + project = self.get_object() + project.intake_token = generate_project_intake_token() + project.save(update_fields=["intake_token"]) + serializer = self.get_serializer(project) + return Response(serializer.data) + + @extend_schema( + summary="Verify Bluesky credentials", + description=( + "Verify the selected project's stored Bluesky credentials by authenticating " + "the account and checking the current session." + ), + tags=["Ingestion"], + request=None, + responses={ + 200: build_success_response( + BLUESKY_CREDENTIALS_VERIFY_RESPONSE, + "The project's Bluesky credentials were verified successfully.", + ), + 400: OpenApiResponse( + response=inline_serializer( + name="BlueskyCredentialsVerifyErrorResponse", + fields={ + "type": serializers.CharField(), + "errors": inline_serializer( + name="BlueskyCredentialsVerifyError", + fields={ + "code": serializers.CharField(), + "detail": serializers.CharField(), + "attr": serializers.CharField(allow_null=True), + }, + many=True, + ), + }, + ), + description="The project is missing Bluesky credentials or verification failed.", + ), + 403: AUTHENTICATION_REQUIRED_RESPONSE, + }, + ) + @action(detail=True, methods=["post"], url_path="verify-bluesky-credentials") + def verify_bluesky_credentials(self, request, *args, **kwargs): + """Verify the Bluesky credentials stored for the selected project.""" + + project = self.get_object() + try: + credentials = project.bluesky_credentials + except BlueskyCredentials.DoesNotExist as exc: + raise serializers.ValidationError( + { + "bluesky_credentials": "No Bluesky credentials are configured for this project." + } + ) from exc + + try: + BlueskySourcePlugin.verify_credentials(credentials) + except Exception as exc: + logger.exception( + "Bluesky credential verification failed for project id=%s", + project.id, + ) + raise serializers.ValidationError( + { + "bluesky_credentials": ( + "Credential verification failed. Please re-check the credentials " + "and try again." + ) + } + ) from exc + + credentials.refresh_from_db() + return Response( + { + "status": "verified", + "handle": credentials.handle, + "last_verified_at": credentials.last_verified_at, + "last_error": "", + } + ) + + +@document_project_owned_viewset( + resource_plural="project configurations", + resource_singular="project configuration", + create_description="Create a new project configuration record for the selected project, including authority weighting and decay settings.", + tag="Project Management", + action_overrides=build_crud_action_overrides( + ProjectConfigSerializer, + resource_plural="project configurations for the selected project", + resource_singular="project configuration", + ), +) +class ProjectConfigViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): + """Manage per-project scoring and authority configuration.""" + + serializer_class = ProjectConfigSerializer + queryset = ProjectConfig.objects.select_related("project") + + +@document_project_owned_viewset( + resource_plural="Bluesky credentials", + resource_singular="Bluesky credentials", + create_description=( + "Create Bluesky credentials for the selected project. The app password is " + "accepted write-only and is never returned in API responses." + ), + tag="Ingestion", + action_overrides=build_crud_action_overrides( + BlueskyCredentialsSerializer, + resource_plural="Bluesky credentials for the selected project", + resource_singular="Bluesky credentials", + retrieve_examples=[BLUESKY_CREDENTIALS_RESPONSE_EXAMPLE], + ), +) +class BlueskyCredentialsViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): + """Manage project-scoped Bluesky credentials.""" + + serializer_class = BlueskyCredentialsSerializer + queryset = BlueskyCredentials.objects.select_related("project") + + def get_queryset(self): + """Restrict credentials to the selected project and current user.""" + + return super().get_queryset().order_by("-updated_at") + + +@document_project_owned_viewset( + resource_plural="source configurations", + resource_singular="source configuration", + create_description="Create a new source configuration for the selected project. Plugin-specific configuration is validated before the record is saved.", + tag="Ingestion", + action_overrides=build_crud_action_overrides( + SourceConfigSerializer, + resource_plural="source configurations for the selected project", + resource_singular="source configuration", + create_examples=[ + SOURCE_CONFIG_CREATE_REQUEST_EXAMPLE, + SOURCE_CONFIG_REDDIT_REQUEST_EXAMPLE, + SOURCE_CONFIG_BLUESKY_REQUEST_EXAMPLE, + SOURCE_CONFIG_RESPONSE_EXAMPLE, + ], + create_response_examples=[SOURCE_CONFIG_RESPONSE_EXAMPLE], + retrieve_examples=[SOURCE_CONFIG_RESPONSE_EXAMPLE], + ), +) +class SourceConfigViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): + """Manage source-plugin configuration for a project.""" + + serializer_class = SourceConfigSerializer + queryset = SourceConfig.objects.select_related("project") diff --git a/projects/apps.py b/projects/apps.py new file mode 100644 index 00000000..c992f4a7 --- /dev/null +++ b/projects/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ProjectsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "projects" diff --git a/projects/migrations/0001_initial.py b/projects/migrations/0001_initial.py new file mode 100644 index 00000000..e4f0101f --- /dev/null +++ b/projects/migrations/0001_initial.py @@ -0,0 +1,176 @@ +import django.db.models.deletion +from django.db import migrations, models + +import projects.model_support + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ("auth", "0012_alter_user_first_name_max_length"), + ("core", "0009_topiccentroidsnapshot"), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=[ + migrations.CreateModel( + name="Project", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255)), + ("topic_description", models.TextField()), + ("content_retention_days", models.PositiveIntegerField(default=365)), + ( + "intake_token", + models.CharField( + default=projects.model_support.generate_project_intake_token, + editable=False, + max_length=64, + unique=True, + ), + ), + ("intake_enabled", models.BooleanField(default=False)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ( + "group", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="projects", + to="auth.group", + ), + ), + ], + options={ + "ordering": ["name"], + "db_table": "core_project", + }, + ), + migrations.CreateModel( + name="BlueskyCredentials", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("handle", models.CharField(max_length=255)), + ("app_password_encrypted", models.TextField(blank=True)), + ("pds_url", models.URLField(blank=True)), + ("is_active", models.BooleanField(default=True)), + ("last_verified_at", models.DateTimeField(blank=True, null=True)), + ("last_error", models.TextField(blank=True)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "project", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="bluesky_credentials", + to="projects.project", + ), + ), + ], + options={ + "ordering": ["project__name"], + "verbose_name_plural": "Bluesky credentials", + "db_table": "core_blueskycredentials", + }, + ), + migrations.CreateModel( + name="ProjectConfig", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("upvote_authority_weight", models.FloatField(default=0.1)), + ("downvote_authority_weight", models.FloatField(default=-0.05)), + ("authority_decay_rate", models.FloatField(default=0.95)), + ( + "recompute_topic_centroid_on_feedback_save", + models.BooleanField(default=True), + ), + ( + "project", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="config", + to="projects.project", + ), + ), + ], + options={ + "verbose_name": "Project config", + "verbose_name_plural": "Project configs", + "db_table": "core_projectconfig", + }, + ), + migrations.CreateModel( + name="SourceConfig", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "plugin_name", + models.CharField( + choices=[ + ("rss", "RSS"), + ("reddit", "Reddit"), + ("bluesky", "Bluesky"), + ], + max_length=64, + ), + ), + ("config", models.JSONField(default=dict)), + ("is_active", models.BooleanField(default=True)), + ("last_fetched_at", models.DateTimeField(blank=True, null=True)), + ( + "project", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="source_configs", + to="projects.project", + ), + ), + ], + options={ + "ordering": ["plugin_name", "id"], + "db_table": "core_sourceconfig", + "indexes": [ + models.Index( + fields=["project", "plugin_name", "is_active"], + name="core_source_project_f1abc6_idx", + ) + ], + }, + ), + ], + database_operations=[], + ) + ] diff --git a/projects/migrations/__init__.py b/projects/migrations/__init__.py new file mode 100644 index 00000000..1a75066b --- /dev/null +++ b/projects/migrations/__init__.py @@ -0,0 +1 @@ +"""Projects app migrations package.""" \ No newline at end of file diff --git a/projects/model_support.py b/projects/model_support.py new file mode 100644 index 00000000..cb420a6d --- /dev/null +++ b/projects/model_support.py @@ -0,0 +1,64 @@ +"""Support types and helpers for project-owned models.""" + +import base64 +import hashlib +import secrets +from urllib.parse import urlsplit, urlunsplit + +from cryptography.fernet import Fernet +from django.conf import settings +from django.db import models + + +def generate_project_intake_token() -> str: + """Generate the stable token used in project-specific intake email aliases.""" + + return secrets.token_hex(16) + + +def normalize_bluesky_handle(handle: str) -> str: + """Normalize Bluesky handles so stored account references stay consistent.""" + + return handle.strip().removeprefix("@").lower() + + +def normalize_bluesky_pds_url(pds_url: str) -> str: + """Normalize a user-provided PDS URL to its base host form.""" + + stripped_url = pds_url.strip().rstrip("/") + if not stripped_url: + return "" + parsed_url = urlsplit(stripped_url) + path = parsed_url.path.rstrip("/") + if path.endswith("/xrpc"): + path = path[: -len("/xrpc")] + return urlunsplit( + ( + parsed_url.scheme, + parsed_url.netloc, + path, + parsed_url.query, + parsed_url.fragment, + ) + ).rstrip("/") + + +def bluesky_credentials_fernet() -> Fernet: + """Build the symmetric cipher used for Bluesky app-password storage.""" + + key_material = ( + getattr(settings, "BLUESKY_CREDENTIALS_ENCRYPTION_KEY", "") + or settings.SECRET_KEY + ) + derived_key = base64.urlsafe_b64encode( + hashlib.sha256(key_material.encode("utf-8")).digest() + ) + return Fernet(derived_key) + + +class SourcePluginName(models.TextChoices): + """Built-in ingestion plugins that can populate project content.""" + + RSS = "rss", "RSS" + REDDIT = "reddit", "Reddit" + BLUESKY = "bluesky", "Bluesky" diff --git a/projects/models.py b/projects/models.py new file mode 100644 index 00000000..8b8ede58 --- /dev/null +++ b/projects/models.py @@ -0,0 +1,160 @@ +"""Project-owned models split out from the historical core app.""" + +from django.contrib.auth.models import Group +from django.db import models + +from projects.model_support import ( + SourcePluginName, + bluesky_credentials_fernet, + generate_project_intake_token, + normalize_bluesky_handle, + normalize_bluesky_pds_url, +) + + +class Project(models.Model): + """Represents a newsletter workspace owned by a Django auth group.""" + + name = models.CharField(max_length=255) + group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name="projects") + topic_description = models.TextField() + content_retention_days = models.PositiveIntegerField(default=365) + intake_token = models.CharField( + max_length=64, + unique=True, + default=generate_project_intake_token, + editable=False, + ) + intake_enabled = models.BooleanField(default=False) + created_at = models.DateTimeField(auto_now_add=True) + + class Meta: + ordering = ["name"] + db_table = "core_project" + + def __str__(self) -> str: + return self.name + + +class BlueskyCredentials(models.Model): + """Stores the authenticated Bluesky account used by one project.""" + + project = models.OneToOneField( + Project, on_delete=models.CASCADE, related_name="bluesky_credentials" + ) + handle = models.CharField(max_length=255) + app_password_encrypted = models.TextField(blank=True) + pds_url = models.URLField(blank=True) + is_active = models.BooleanField(default=True) + last_verified_at = models.DateTimeField(null=True, blank=True) + last_error = models.TextField(blank=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ["project__name"] + verbose_name_plural = "Bluesky credentials" + db_table = "core_blueskycredentials" + + def __str__(self) -> str: + return f"Bluesky credentials for {self.project.name}" + + @property + def client_base_url(self) -> str: + """Return the effective base URL used by the ATProto client.""" + + if not self.pds_url: + return "https://bsky.social/xrpc" + return f"{self.pds_url.rstrip('/')}/xrpc" + + def has_app_password(self) -> bool: + """Return whether an encrypted app password has been stored.""" + + return bool(self.app_password_encrypted) + + def has_stored_credential(self) -> bool: + """Return whether an encrypted Bluesky credential has been stored.""" + + return self.has_app_password() + + def set_app_password(self, app_password: str) -> None: + """Encrypt and store the given Bluesky app password.""" + + if not app_password: + self.app_password_encrypted = "" + return + self.app_password_encrypted = ( + bluesky_credentials_fernet() + .encrypt(app_password.encode("utf-8")) + .decode("utf-8") + ) + + def set_stored_credential(self, credential_value: str) -> None: + """Encrypt and store the given Bluesky credential value.""" + + self.set_app_password(credential_value) + + def get_app_password(self) -> str: + """Decrypt and return the stored Bluesky app password.""" + + if not self.app_password_encrypted: + return "" + return ( + bluesky_credentials_fernet() + .decrypt(self.app_password_encrypted.encode("utf-8")) + .decode("utf-8") + ) + + def get_stored_credential(self) -> str: + """Decrypt and return the stored Bluesky credential value.""" + + return self.get_app_password() + + def save(self, *args, **kwargs): + """Normalize stored account fields before persisting the credentials.""" + + self.handle = normalize_bluesky_handle(self.handle) + self.pds_url = normalize_bluesky_pds_url(self.pds_url) + super().save(*args, **kwargs) + + +class ProjectConfig(models.Model): + """Stores tunable scoring parameters for a single project.""" + + project = models.OneToOneField( + Project, on_delete=models.CASCADE, related_name="config" + ) + upvote_authority_weight = models.FloatField(default=0.1) + downvote_authority_weight = models.FloatField(default=-0.05) + authority_decay_rate = models.FloatField(default=0.95) + recompute_topic_centroid_on_feedback_save = models.BooleanField(default=True) + + class Meta: + verbose_name = "Project config" + verbose_name_plural = "Project configs" + db_table = "core_projectconfig" + + def __str__(self) -> str: + return f"Config for {self.project.name}" + + +class SourceConfig(models.Model): + """Configures one ingestion source for a project.""" + + project = models.ForeignKey( + Project, on_delete=models.CASCADE, related_name="source_configs" + ) + plugin_name = models.CharField(max_length=64, choices=SourcePluginName.choices) + config = models.JSONField(default=dict) + is_active = models.BooleanField(default=True) + last_fetched_at = models.DateTimeField(null=True, blank=True) + + class Meta: + ordering = ["plugin_name", "id"] + indexes = [ + models.Index(fields=["project", "plugin_name", "is_active"]), + ] + db_table = "core_sourceconfig" + + def __str__(self) -> str: + return f"{self.plugin_name} source for {self.project.name}" diff --git a/projects/serializers.py b/projects/serializers.py new file mode 100644 index 00000000..f4a220b6 --- /dev/null +++ b/projects/serializers.py @@ -0,0 +1,195 @@ +"""DRF serializers for project-owned models.""" + +from rest_framework import serializers + +from core.plugins import validate_plugin_config +from core.serializers import ProjectScopedSerializerMixin +from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig + + +class ProjectSerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): + """Serialize top-level project records.""" + + has_bluesky_credentials = serializers.SerializerMethodField() + bluesky_handle = serializers.SerializerMethodField() + bluesky_is_active = serializers.SerializerMethodField() + bluesky_last_verified_at = serializers.SerializerMethodField() + bluesky_last_error = serializers.SerializerMethodField() + + class Meta: + model = Project + fields = [ + "id", + "name", + "group", + "topic_description", + "content_retention_days", + "intake_token", + "intake_enabled", + "has_bluesky_credentials", + "bluesky_handle", + "bluesky_is_active", + "bluesky_last_verified_at", + "bluesky_last_error", + "created_at", + ] + read_only_fields = ["id", "created_at"] + + def _get_bluesky_credentials(self, obj: Project): + """Return the project's stored Bluesky credentials, if configured.""" + + try: + return obj.bluesky_credentials + except Project.bluesky_credentials.RelatedObjectDoesNotExist: + return None + + def get_has_bluesky_credentials(self, obj: Project) -> bool: + """Return whether the project has stored Bluesky credentials.""" + + return self._get_bluesky_credentials(obj) is not None + + def get_bluesky_handle(self, obj: Project) -> str: + """Return the stored Bluesky handle, or an empty string.""" + + credentials = self._get_bluesky_credentials(obj) + return credentials.handle if credentials else "" + + def get_bluesky_is_active(self, obj: Project) -> bool: + """Return whether the stored Bluesky credentials are currently active.""" + + credentials = self._get_bluesky_credentials(obj) + return credentials.is_active if credentials else False + + def get_bluesky_last_verified_at(self, obj: Project): + """Return the last successful verification timestamp, if available.""" + + credentials = self._get_bluesky_credentials(obj) + return credentials.last_verified_at if credentials else None + + def get_bluesky_last_error(self, obj: Project) -> str: + """Return the latest Bluesky verification error, or an empty string.""" + + credentials = self._get_bluesky_credentials(obj) + return credentials.last_error if credentials else "" + + +class ProjectConfigSerializer( + ProjectScopedSerializerMixin, serializers.ModelSerializer +): + """Serialize per-project authority and scoring settings.""" + + class Meta: + model = ProjectConfig + fields = [ + "id", + "project", + "upvote_authority_weight", + "downvote_authority_weight", + "authority_decay_rate", + ] + read_only_fields = ["id", "project"] + + +class BlueskyCredentialsSerializer( + ProjectScopedSerializerMixin, serializers.ModelSerializer +): + """Serialize project-scoped Bluesky credentials without exposing secrets.""" + + app_password = serializers.CharField( + write_only=True, + required=False, + allow_blank=True, + trim_whitespace=False, + ) + has_stored_credential = serializers.SerializerMethodField() + + class Meta: + model = BlueskyCredentials + fields = [ + "id", + "project", + "handle", + "pds_url", + "is_active", + "has_stored_credential", + "app_password", + "last_verified_at", + "last_error", + "created_at", + "updated_at", + ] + read_only_fields = [ + "id", + "project", + "has_stored_credential", + "last_verified_at", + "last_error", + "created_at", + "updated_at", + ] + + def get_has_stored_credential(self, obj: BlueskyCredentials) -> bool: + """Return whether the project has an encrypted Bluesky credential stored.""" + + return obj.has_stored_credential() + + def validate(self, attrs): + """Require an app password when creating a credential record.""" + + attrs = super().validate(attrs) + app_password = attrs.get("app_password", "") + if self.instance is None and not app_password: + raise serializers.ValidationError( + {"app_password": "A Bluesky app credential is required."} + ) + return attrs + + def create(self, validated_data): + """Encrypt the submitted Bluesky app password before saving the record.""" + + app_password = validated_data.pop("app_password", "") + instance = super().create(validated_data) + if app_password: + instance.set_app_password(app_password) + instance.save(update_fields=["app_password_encrypted", "updated_at"]) + return instance + + def update(self, instance, validated_data): + """Keep the stored credential unless a replacement app password is submitted.""" + + app_password = validated_data.pop("app_password", "") + instance = super().update(instance, validated_data) + if app_password: + instance.set_app_password(app_password) + instance.save(update_fields=["app_password_encrypted", "updated_at"]) + return instance + + +class SourceConfigSerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): + """Serialize source-plugin configuration and normalize provider settings.""" + + class Meta: + model = SourceConfig + fields = [ + "id", + "project", + "plugin_name", + "config", + "is_active", + "last_fetched_at", + ] + read_only_fields = ["id", "project", "last_fetched_at"] + + def validate(self, attrs): + """Validate plugin-specific configuration with the plugin registry.""" + + plugin_name = attrs.get("plugin_name") or getattr( + self.instance, "plugin_name", None + ) + config = attrs.get("config") or getattr(self.instance, "config", {}) + if plugin_name: + try: + attrs["config"] = validate_plugin_config(plugin_name, config) + except ValueError as exc: + raise serializers.ValidationError({"config": str(exc)}) from exc + return attrs From 6103a8007fc2c2eaf919c73a958def481681b6e3 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 30 Apr 2026 04:15:29 +0300 Subject: [PATCH 02/13] Move tests and remove import shims for Projects --- core/admin.py | 70 +++---------------- core/api.py | 10 +-- core/management/commands/seed_demo.py | 6 +- .../0010_move_project_models_to_projects.py | 2 +- core/models.py | 3 +- core/newsletters.py | 3 +- core/plugins/bluesky.py | 23 +++--- core/plugins/reddit.py | 2 +- core/plugins/registry.py | 2 +- core/plugins/rss.py | 2 +- core/serializers.py | 10 +-- core/signals.py | 3 +- core/tasks.py | 4 +- core/tests/test_admin.py | 23 +++--- core/tests/test_api.py | 7 +- core/tests/test_bluesky.py | 30 ++++---- core/tests/test_embeddings.py | 5 +- core/tests/test_reddit.py | 3 +- core/tests/test_rss.py | 3 +- core/tests/test_serializers.py | 12 ++-- core/tests/test_tasks.py | 6 +- core/tests/test_utils.py | 2 +- core/utils.py | 2 +- projects/__init__.py | 2 +- projects/migrations/__init__.py | 2 +- 25 files changed, 88 insertions(+), 149 deletions(-) diff --git a/core/admin.py b/core/admin.py index 7f0b16d6..d55b0f71 100644 --- a/core/admin.py +++ b/core/admin.py @@ -35,7 +35,6 @@ TopicCentroidSnapshot, UserFeedback, ) -from core.plugins import get_plugin_for_source_config, validate_plugin_config def _score_to_percent(value): @@ -864,21 +863,24 @@ def changelist_view(self, request, extra_context=None): qs = self.get_queryset(request) extra_context = extra_context or {} - metrics = qs.aggregate(avg_lat=Avg("latency_ms")) - avg_latency = metrics["avg_lat"] or 0 - failure_count = qs.filter(status="failed").count() - total_count = qs.count() or 1 + avg_latency = qs.aggregate(avg_latency=Avg("latency_ms"))["avg_latency"] + total_count = qs.count() + failure_count = qs.filter(status__iexact="failed").count() extra_context["dashboard_stats"] = [ { "title": "Avg Latency", - "value": f"{avg_latency:.0f}ms", + "value": f"{avg_latency:.0f}ms" if avg_latency is not None else "-", "icon": "timer", - "color": "warning" if avg_latency > 2000 else "success", + "color": "warning" if avg_latency and avg_latency > 3000 else "success", }, { "title": "Failure Rate", - "value": f"{(failure_count / total_count) * 100:.1f}%", + "value": ( + f"{(failure_count / total_count) * 100:.1f}%" + if total_count + else "0.0%" + ), "icon": "error", "color": "danger" if failure_count > 0 else "success", }, @@ -1113,55 +1115,3 @@ def changelist_view(self, request, extra_context=None): }, ] return super().changelist_view(request, extra_context=extra_context) - - -from projects.admin import ( # noqa: E402 - BlueskyCredentialsAdmin as ProjectsBlueskyCredentialsAdmin, - BlueskyCredentialsAdminForm as ProjectsBlueskyCredentialsAdminForm, - ProjectAdmin as ProjectsProjectAdmin, - ProjectConfigAdmin as ProjectsProjectConfigAdmin, - SourceConfigAdmin as ProjectsSourceConfigAdmin, -) - -BlueskyCredentialsAdminForm = ProjectsBlueskyCredentialsAdminForm -ProjectAdmin = ProjectsProjectAdmin -BlueskyCredentialsAdmin = ProjectsBlueskyCredentialsAdmin -ProjectConfigAdmin = ProjectsProjectConfigAdmin - - -class SourceConfigAdmin(ProjectsSourceConfigAdmin): - """Compatibility wrapper for the moved source-config admin class.""" - - def test_source_connection(self, request, queryset): - """Trigger a dry-run connectivity check for the selected sources.""" - - healthy_sources = [] - failed_sources = [] - - for source_config in queryset.select_related("project"): - try: - source_config.config = validate_plugin_config( - source_config.plugin_name, - source_config.config, - ) - plugin = get_plugin_for_source_config(source_config) - if not plugin.health_check(): - raise RuntimeError("Health check returned an unhealthy status.") - except Exception as exc: - failed_sources.append(f"{source_config}: {exc}") - else: - healthy_sources.append(str(source_config)) - - if healthy_sources: - self.message_user( - request, - f"Connectivity check passed for {len(healthy_sources)} source(s).", - messages.SUCCESS, - ) - - if failed_sources: - self.message_user( - request, - "Connectivity check failed for: " + "; ".join(failed_sources), - messages.ERROR, - ) diff --git a/core/api.py b/core/api.py index f00d43dd..00c1ae59 100644 --- a/core/api.py +++ b/core/api.py @@ -36,7 +36,6 @@ IngestionRun, IntakeAllowlist, NewsletterIntake, - Project, ReviewQueue, SkillResult, TopicCentroidSnapshot, @@ -58,6 +57,7 @@ TopicCentroidSnapshotSerializer, UserFeedbackSerializer, ) +from projects.models import Project CLASSIFICATION_SKILL_NAME = "content_classification" RELEVANCE_SKILL_NAME = "relevance_scoring" @@ -1029,11 +1029,3 @@ class ReviewQueueViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = ReviewQueueSerializer queryset = ReviewQueue.objects.select_related("content", "project") - - -from projects.api import ( # noqa: E402 - BlueskyCredentialsViewSet, - ProjectConfigViewSet, - ProjectViewSet, - SourceConfigViewSet, -) diff --git a/core/management/commands/seed_demo.py b/core/management/commands/seed_demo.py index 14247100..dad62d25 100644 --- a/core/management/commands/seed_demo.py +++ b/core/management/commands/seed_demo.py @@ -20,16 +20,12 @@ EntityType, FeedbackType, IngestionRun, - Project, - ProjectConfig, ReviewQueue, ReviewReason, ReviewResolution, RunStatus, SkillResult, SkillStatus, - SourceConfig, - SourcePluginName, UserFeedback, ) from core.pipeline import ( @@ -37,6 +33,8 @@ RELEVANCE_SKILL_NAME, SUMMARIZATION_SKILL_NAME, ) +from projects.model_support import SourcePluginName +from projects.models import Project, ProjectConfig, SourceConfig DEMO_PROJECT_NAME = "Platform Engineering Weekly" DEMO_GROUP_NAME = "platform-engineering-editors" diff --git a/core/migrations/0010_move_project_models_to_projects.py b/core/migrations/0010_move_project_models_to_projects.py index d5a246eb..dee95e58 100644 --- a/core/migrations/0010_move_project_models_to_projects.py +++ b/core/migrations/0010_move_project_models_to_projects.py @@ -156,4 +156,4 @@ class Migration(migrations.Migration): rename_project_content_types, rename_project_content_types_reverse, ), - ] \ No newline at end of file + ] diff --git a/core/models.py b/core/models.py index 20621d00..fc472412 100644 --- a/core/models.py +++ b/core/models.py @@ -10,8 +10,7 @@ from django.conf import settings from django.db import models -from projects.model_support import SourcePluginName -from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig +from projects.models import Project def generate_project_intake_token() -> str: diff --git a/core/newsletters.py b/core/newsletters.py index c7fb4665..73f6f31d 100644 --- a/core/newsletters.py +++ b/core/newsletters.py @@ -17,9 +17,10 @@ from django.core.mail import EmailMultiAlternatives from django.urls import reverse -from core.models import IntakeAllowlist, NewsletterIntake, Project +from core.models import IntakeAllowlist, NewsletterIntake from core.newsletter_extraction import extract_newsletter_items from core.settings_types import CoreSettings +from projects.models import Project settings = cast(CoreSettings, django_settings) diff --git a/core/plugins/bluesky.py b/core/plugins/bluesky.py index 0f19c760..204e1425 100644 --- a/core/plugins/bluesky.py +++ b/core/plugins/bluesky.py @@ -8,8 +8,9 @@ from django.utils import timezone from django.utils.dateparse import parse_datetime -from core.models import BlueskyCredentials, SourcePluginName from core.plugins.base import ContentItem, SourcePlugin +from projects.model_support import SourcePluginName +from projects.models import BlueskyCredentials PUBLIC_APPVIEW_BASE_URL = "https://public.api.bsky.app" @@ -43,9 +44,7 @@ def validate_config(cls, config: object) -> dict: or not feed_uri.startswith("at://") or "/app.bsky.feed.generator/" not in feed_uri ): - raise ValueError( - "feed_uri must be a Bluesky feed generator at:// URI" - ) + raise ValueError("feed_uri must be a Bluesky feed generator at:// URI") if author_handle: normalized_handle = cls._normalize_handle(author_handle) if not normalized_handle: @@ -112,7 +111,9 @@ def match_entity_for_item(self, item: ContentItem): def _get_feed_response(self, limit: int | None = None): """Query the configured public feed endpoint.""" - request_limit = limit or self.source_config.config.get("max_posts_per_fetch", 100) + request_limit = limit or self.source_config.config.get( + "max_posts_per_fetch", 100 + ) client = self._client() feed_uri = self.source_config.config.get("feed_uri") if feed_uri: @@ -130,7 +131,9 @@ def _get_feed_response(self, limit: int | None = None): def _build_content_item(self, post, published_date: datetime) -> ContentItem: """Convert one AppView post into the shared plugin payload.""" - author_handle = self._normalize_handle(self._nested_value(post, "author", "handle")) + author_handle = self._normalize_handle( + self._nested_value(post, "author", "handle") + ) external_url = self._nested_value(post, "embed", "external", "uri") external_title = ( self._nested_value(post, "embed", "external", "title") or "" @@ -219,10 +222,14 @@ def _client(self) -> Client: def _credentials(self) -> BlueskyCredentials | None: """Return the active project-scoped Bluesky credentials, if configured.""" - return BlueskyCredentials.objects.filter(project=self.project, is_active=True).first() + return BlueskyCredentials.objects.filter( + project=self.project, is_active=True + ).first() @staticmethod - def _authenticated_client_for_credentials(credentials: BlueskyCredentials) -> Client: + def _authenticated_client_for_credentials( + credentials: BlueskyCredentials, + ) -> Client: """Build an authenticated client from a stored credential record.""" if not credentials.has_app_password(): diff --git a/core/plugins/reddit.py b/core/plugins/reddit.py index c91f5168..083d4991 100644 --- a/core/plugins/reddit.py +++ b/core/plugins/reddit.py @@ -7,8 +7,8 @@ import praw from django.conf import settings -from core.models import SourcePluginName from core.plugins.base import ContentItem, SourcePlugin +from projects.model_support import SourcePluginName class RedditSourcePlugin(SourcePlugin): diff --git a/core/plugins/registry.py b/core/plugins/registry.py index 7bd8ccc4..54c17434 100644 --- a/core/plugins/registry.py +++ b/core/plugins/registry.py @@ -2,10 +2,10 @@ from typing import Any -from core.models import SourcePluginName from core.plugins.bluesky import BlueskySourcePlugin from core.plugins.reddit import RedditSourcePlugin from core.plugins.rss import RSSSourcePlugin +from projects.model_support import SourcePluginName PLUGIN_REGISTRY = { SourcePluginName.RSS: RSSSourcePlugin, diff --git a/core/plugins/rss.py b/core/plugins/rss.py index 75bd906b..f70c404b 100644 --- a/core/plugins/rss.py +++ b/core/plugins/rss.py @@ -8,8 +8,8 @@ import feedparser from django.utils import timezone -from core.models import SourcePluginName from core.plugins.base import ContentItem, SourcePlugin +from projects.model_support import SourcePluginName class RSSSourcePlugin(SourcePlugin): diff --git a/core/serializers.py b/core/serializers.py index 0282f6c7..52793f3b 100644 --- a/core/serializers.py +++ b/core/serializers.py @@ -17,12 +17,12 @@ IngestionRun, IntakeAllowlist, NewsletterIntake, - Project, ReviewQueue, SkillResult, TopicCentroidSnapshot, UserFeedback, ) +from projects.models import Project class ProjectScopedSerializerMixin: @@ -438,11 +438,3 @@ class Meta: "extraction_result", "error_message", ] - - -from projects.serializers import ( # noqa: E402 - BlueskyCredentialsSerializer, - ProjectConfigSerializer, - ProjectSerializer, - SourceConfigSerializer, -) diff --git a/core/signals.py b/core/signals.py index 4cb25fa0..b8d922f5 100644 --- a/core/signals.py +++ b/core/signals.py @@ -8,9 +8,10 @@ from django.db.models.signals import post_save from django.dispatch import receiver -from core.models import ProjectConfig, UserFeedback +from core.models import UserFeedback from core.newsletters import process_inbound_newsletter from core.tasks import queue_topic_centroid_recompute +from projects.models import ProjectConfig def _address_to_string(address) -> str: diff --git a/core/tasks.py b/core/tasks.py index 4805580d..85794ef6 100644 --- a/core/tasks.py +++ b/core/tasks.py @@ -31,10 +31,7 @@ IntakeAllowlist, NewsletterIntake, NewsletterIntakeStatus, - Project, - ProjectConfig, RunStatus, - SourceConfig, TopicCentroidSnapshot, UserFeedback, ) @@ -47,6 +44,7 @@ process_content_pipeline, ) from core.plugins import get_plugin_for_source_config +from projects.models import Project, ProjectConfig, SourceConfig logger = logging.getLogger(__name__) diff --git a/core/tests/test_admin.py b/core/tests/test_admin.py index e7717181..4110b746 100644 --- a/core/tests/test_admin.py +++ b/core/tests/test_admin.py @@ -9,8 +9,6 @@ from django.utils import timezone from core.admin import ( - BlueskyCredentialsAdmin, - BlueskyCredentialsAdminForm, ContentAdmin, DuplicateStateFilter, EntityAdmin, @@ -18,15 +16,12 @@ EntityCandidateAdmin, HighValueFilter, IngestionRunAdmin, - ProjectConfigAdmin, ReviewQueueAdmin, SkillResultAdmin, - SourceConfigAdmin, TopicCentroidSnapshotAdmin, UserFeedbackAdmin, ) from core.models import ( - BlueskyCredentials, Content, Entity, EntityAuthoritySnapshot, @@ -34,17 +29,21 @@ EntityCandidateStatus, EntityMention, IngestionRun, - Project, - ProjectConfig, ReviewQueue, ReviewReason, RunStatus, SkillResult, - SourceConfig, - SourcePluginName, TopicCentroidSnapshot, UserFeedback, ) +from projects.admin import ( + BlueskyCredentialsAdmin, + BlueskyCredentialsAdminForm, + ProjectConfigAdmin, + SourceConfigAdmin, +) +from projects.model_support import SourcePluginName +from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig pytestmark = pytest.mark.django_db @@ -71,11 +70,11 @@ def test_test_source_connection_reports_success(source_admin_context, mocker): plugin = mocker.Mock() plugin.health_check.return_value = True validate_mock = mocker.patch( - "core.admin.validate_plugin_config", + "projects.admin.validate_plugin_config", return_value={"feed_url": "https://example.com/feed.xml"}, ) get_plugin_mock = mocker.patch( - "core.admin.get_plugin_for_source_config", return_value=plugin + "projects.admin.get_plugin_for_source_config", return_value=plugin ) admin_instance = SourceConfigAdmin(SourceConfig, AdminSite()) admin_instance.message_user = mocker.Mock() @@ -201,7 +200,7 @@ def test_test_source_connection_reports_failures(source_admin_context, mocker): config={"feed_url": "https://example.com/feed.xml"}, ) mocker.patch( - "core.admin.validate_plugin_config", + "projects.admin.validate_plugin_config", side_effect=ValueError("Missing required config field: feed_url"), ) admin_instance = SourceConfigAdmin(SourceConfig, AdminSite()) diff --git a/core/tests/test_api.py b/core/tests/test_api.py index 65fca82f..b0547b7e 100644 --- a/core/tests/test_api.py +++ b/core/tests/test_api.py @@ -8,7 +8,6 @@ from rest_framework.test import APITestCase from core.models import ( - BlueskyCredentials, Content, Entity, EntityAuthoritySnapshot, @@ -20,18 +19,16 @@ IntakeAllowlist, NewsletterIntake, NewsletterIntakeStatus, - Project, - ProjectConfig, ReviewQueue, ReviewReason, RunStatus, SkillResult, SkillStatus, - SourceConfig, - SourcePluginName, TopicCentroidSnapshot, UserFeedback, ) +from projects.model_support import SourcePluginName +from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig class ProjectScopedApiTests(APITestCase): diff --git a/core/tests/test_bluesky.py b/core/tests/test_bluesky.py index 45910176..6be575eb 100644 --- a/core/tests/test_bluesky.py +++ b/core/tests/test_bluesky.py @@ -5,13 +5,11 @@ from django.contrib.auth.models import Group from core.models import ( - BlueskyCredentials, Entity, - Project, - SourceConfig, - SourcePluginName, ) from core.plugins.bluesky import BlueskySourcePlugin +from projects.model_support import SourcePluginName +from projects.models import BlueskyCredentials, Project, SourceConfig pytestmark = pytest.mark.django_db @@ -42,7 +40,9 @@ def bluesky_context(django_user_model): def test_bluesky_validate_config_normalizes_defaults_and_rejects_invalid_values(): - assert BlueskySourcePlugin.validate_config({"author_handle": "@Alice.BSKY.social"}) == { + assert BlueskySourcePlugin.validate_config( + {"author_handle": "@Alice.BSKY.social"} + ) == { "author_handle": "alice.bsky.social", "include_replies": False, "max_posts_per_fetch": 100, @@ -74,7 +74,9 @@ def test_bluesky_validate_config_normalizes_defaults_and_rejects_invalid_values( with pytest.raises(ValueError, match="feed_uri must be a Bluesky feed generator"): BlueskySourcePlugin.validate_config({"feed_uri": "https://example.com/feed"}) - with pytest.raises(ValueError, match="max_posts_per_fetch must be a positive integer"): + with pytest.raises( + ValueError, match="max_posts_per_fetch must be a positive integer" + ): BlueskySourcePlugin.validate_config( {"author_handle": "alice.bsky.social", "max_posts_per_fetch": 0} ) @@ -214,10 +216,10 @@ def test_bluesky_credentials_encrypt_password_and_normalize_pds_url(bluesky_cont assert credentials.get_app_password() == "app-password" -def test_bluesky_client_uses_authenticated_project_credentials( - bluesky_context, mocker -): - credentials = BlueskyCredentials(project=bluesky_context.project, handle="alice.bsky.social") +def test_bluesky_client_uses_authenticated_project_credentials(bluesky_context, mocker): + credentials = BlueskyCredentials( + project=bluesky_context.project, handle="alice.bsky.social" + ) credentials.set_app_password("app-password") credentials.save() client = mocker.Mock() @@ -233,7 +235,9 @@ def test_bluesky_client_uses_authenticated_project_credentials( def test_bluesky_health_check_records_credential_errors(bluesky_context, mocker): - credentials = BlueskyCredentials(project=bluesky_context.project, handle="alice.bsky.social") + credentials = BlueskyCredentials( + project=bluesky_context.project, handle="alice.bsky.social" + ) credentials.set_app_password("app-password") credentials.save() plugin = BlueskySourcePlugin(bluesky_context.source_config) @@ -252,7 +256,9 @@ def test_bluesky_health_check_records_credential_errors(bluesky_context, mocker) def test_bluesky_verify_credentials_uses_authenticated_session_check( bluesky_context, mocker ): - credentials = BlueskyCredentials(project=bluesky_context.project, handle="alice.bsky.social") + credentials = BlueskyCredentials( + project=bluesky_context.project, handle="alice.bsky.social" + ) credentials.set_app_password("app-password") credentials.save() client = mocker.Mock() diff --git a/core/tests/test_embeddings.py b/core/tests/test_embeddings.py index 9b07e0be..5dd0cab9 100644 --- a/core/tests/test_embeddings.py +++ b/core/tests/test_embeddings.py @@ -27,11 +27,8 @@ Content, Entity, IngestionRun, - Project, ReviewQueue, SkillResult, - SourceConfig, - SourcePluginName, UserFeedback, ) from core.pipeline import ( @@ -39,6 +36,8 @@ RELEVANCE_SKILL_NAME, SUMMARIZATION_SKILL_NAME, ) +from projects.model_support import SourcePluginName +from projects.models import Project, SourceConfig pytestmark = pytest.mark.django_db diff --git a/core/tests/test_reddit.py b/core/tests/test_reddit.py index c6243629..36006f2a 100644 --- a/core/tests/test_reddit.py +++ b/core/tests/test_reddit.py @@ -4,9 +4,10 @@ import pytest from django.contrib.auth.models import Group -from core.models import Project, SourceConfig, SourcePluginName from core.plugins.reddit import RedditSourcePlugin from core.plugins.registry import validate_plugin_config +from projects.model_support import SourcePluginName +from projects.models import Project, SourceConfig pytestmark = pytest.mark.django_db diff --git a/core/tests/test_rss.py b/core/tests/test_rss.py index 6a291977..bd3e0662 100644 --- a/core/tests/test_rss.py +++ b/core/tests/test_rss.py @@ -5,8 +5,9 @@ import pytest from django.contrib.auth.models import Group -from core.models import Project, SourceConfig, SourcePluginName from core.plugins.rss import RSSSourcePlugin +from projects.model_support import SourcePluginName +from projects.models import Project, SourceConfig pytestmark = pytest.mark.django_db diff --git a/core/tests/test_serializers.py b/core/tests/test_serializers.py index d896c3c5..3b479236 100644 --- a/core/tests/test_serializers.py +++ b/core/tests/test_serializers.py @@ -6,22 +6,20 @@ from core.models import ( Content, Entity, - Project, ReviewReason, SkillResult, - SourceConfig, - SourcePluginName, ) from core.serializers import ( ContentSerializer, EntitySerializer, IngestionRunSerializer, - ProjectSerializer, ReviewQueueSerializer, SkillResultSerializer, - SourceConfigSerializer, UserFeedbackSerializer, ) +from projects.model_support import SourcePluginName +from projects.models import Project, SourceConfig +from projects.serializers import ProjectSerializer, SourceConfigSerializer pytestmark = pytest.mark.django_db @@ -167,7 +165,9 @@ def test_content_serializer_exposes_duplicate_state_as_read_only_fields( ) serializer_context.content.duplicate_signal_count = 1 serializer_context.content.canonical_url = "https://example.com/serializer-content" - serializer_context.content.save(update_fields=["duplicate_signal_count", "canonical_url"]) + serializer_context.content.save( + update_fields=["duplicate_signal_count", "canonical_url"] + ) serializer = ContentSerializer(instance=duplicate) diff --git a/core/tests/test_tasks.py b/core/tests/test_tasks.py index dced3e38..59a59d54 100644 --- a/core/tests/test_tasks.py +++ b/core/tests/test_tasks.py @@ -12,12 +12,8 @@ EntityMentionRole, FeedbackType, IngestionRun, - Project, - ProjectConfig, RunStatus, SkillStatus, - SourceConfig, - SourcePluginName, TopicCentroidSnapshot, UserFeedback, ) @@ -36,6 +32,8 @@ run_relevance_scoring_skill, run_summarization_skill, ) +from projects.model_support import SourcePluginName +from projects.models import Project, ProjectConfig, SourceConfig pytestmark = pytest.mark.django_db diff --git a/core/tests/test_utils.py b/core/tests/test_utils.py index bbc12168..3f25619d 100644 --- a/core/tests/test_utils.py +++ b/core/tests/test_utils.py @@ -1,8 +1,8 @@ import pytest from django.contrib.auth.models import Group -from core.models import Project, ProjectConfig from core.utils import dashboard_callback +from projects.models import Project, ProjectConfig pytestmark = pytest.mark.django_db diff --git a/core/utils.py b/core/utils.py index 0a15ff70..9abbadb2 100644 --- a/core/utils.py +++ b/core/utils.py @@ -1,6 +1,6 @@ from django.db.models import Avg -from .models import ProjectConfig +from projects.models import ProjectConfig def dashboard_callback(request, context): diff --git a/projects/__init__.py b/projects/__init__.py index 0f753711..0c9b9aad 100644 --- a/projects/__init__.py +++ b/projects/__init__.py @@ -1 +1 @@ -"""Projects app package.""" \ No newline at end of file +"""Projects app package.""" diff --git a/projects/migrations/__init__.py b/projects/migrations/__init__.py index 1a75066b..e6ea5e35 100644 --- a/projects/migrations/__init__.py +++ b/projects/migrations/__init__.py @@ -1 +1 @@ -"""Projects app migrations package.""" \ No newline at end of file +"""Projects app migrations package.""" From 834634419d71aaeb69466d2fd70d97da0adecf32 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 30 Apr 2026 05:01:36 +0300 Subject: [PATCH 03/13] ProjectMembership and Role Replaces Project.group --- core/api.py | 3 +- core/permissions.py | 25 +++ core/serializers.py | 16 +- core/tests/test_api.py | 21 ++- core/tests/test_membership.py | 126 +++++++++++++++ core/tests/test_serializers.py | 8 +- memories/repo/model-typing.md | 3 + newsletter_maker/settings/__init__.py | 2 + newsletter_maker/settings/base.py | 4 + projects/admin.py | 17 +- projects/api.py | 7 +- ...roject_group_projectmembership_and_more.py | 135 ++++++++++++++++ projects/models.py | 84 +++++++++- users/__init__.py | 1 + users/admin.py | 47 ++++++ users/apps.py | 10 ++ users/forms.py | 21 +++ users/managers.py | 7 + users/migrations/0001_initial.py | 147 ++++++++++++++++++ users/migrations/__init__.py | 1 + users/models.py | 62 ++++++++ users/serializers.py | 28 ++++ users/tests/__init__.py | 1 + users/tests/test_models.py | 41 +++++ 24 files changed, 800 insertions(+), 17 deletions(-) create mode 100644 core/permissions.py create mode 100644 core/tests/test_membership.py create mode 100644 memories/repo/model-typing.md create mode 100644 projects/migrations/0002_alter_project_group_projectmembership_and_more.py create mode 100644 users/__init__.py create mode 100644 users/admin.py create mode 100644 users/apps.py create mode 100644 users/forms.py create mode 100644 users/managers.py create mode 100644 users/migrations/0001_initial.py create mode 100644 users/migrations/__init__.py create mode 100644 users/models.py create mode 100644 users/serializers.py create mode 100644 users/tests/__init__.py create mode 100644 users/tests/test_models.py diff --git a/core/api.py b/core/api.py index 00c1ae59..c384154e 100644 --- a/core/api.py +++ b/core/api.py @@ -41,6 +41,7 @@ TopicCentroidSnapshot, UserFeedback, ) +from core.permissions import get_visible_projects_queryset from core.serializers import ( ContentSerializer, EntityAuthoritySnapshotSerializer, @@ -573,7 +574,7 @@ def get_project(self): "project_id must be present in nested project-scoped routes" ) try: - return Project.objects.get(pk=project_id, group__user=self.request.user) + return get_visible_projects_queryset(self.request.user).get(pk=project_id) except Project.DoesNotExist as exc: raise NotFound("Project not found.") from exc diff --git a/core/permissions.py b/core/permissions.py new file mode 100644 index 00000000..b88052cb --- /dev/null +++ b/core/permissions.py @@ -0,0 +1,25 @@ +"""Cross-cutting helpers for project membership visibility and roles.""" + +from __future__ import annotations + +from projects.models import Project, ProjectMembership + + +def get_visible_projects_queryset(user): + """Return the projects visible to the given authenticated user.""" + + if not getattr(user, "is_authenticated", False): + return Project.objects.none() + return Project.objects.filter(memberships__user=user).distinct() + + +def get_user_role(user, project: Project) -> str | None: + """Return the user's membership role for the given project, if any.""" + + if not getattr(user, "is_authenticated", False): + return None + return ( + ProjectMembership.objects.filter(user=user, project=project) + .values_list("role", flat=True) + .first() + ) \ No newline at end of file diff --git a/core/serializers.py b/core/serializers.py index 52793f3b..8054544a 100644 --- a/core/serializers.py +++ b/core/serializers.py @@ -22,7 +22,7 @@ TopicCentroidSnapshot, UserFeedback, ) -from projects.models import Project +from core.permissions import get_visible_projects_queryset class ProjectScopedSerializerMixin: @@ -36,35 +36,35 @@ def _filter_related_queryset(self, request): if "group" in self.fields: self.fields["group"].queryset = Group.objects.filter(user=user) if "project" in self.fields: - self.fields["project"].queryset = Project.objects.filter( - group__user=user - ).distinct() + self.fields["project"].queryset = get_visible_projects_queryset(user) if "entity" in self.fields: entity_queryset = ( Entity.objects.filter(project=project) if project - else Entity.objects.filter(project__group__user=user) + else Entity.objects.filter(project__memberships__user=user).distinct() ) self.fields["entity"].queryset = entity_queryset if "merged_into" in self.fields: merged_into_queryset = ( Entity.objects.filter(project=project) if project - else Entity.objects.filter(project__group__user=user) + else Entity.objects.filter(project__memberships__user=user).distinct() ) self.fields["merged_into"].queryset = merged_into_queryset if "content" in self.fields: content_queryset = ( Content.objects.filter(project=project) if project - else Content.objects.filter(project__group__user=user) + else Content.objects.filter(project__memberships__user=user).distinct() ) self.fields["content"].queryset = content_queryset if "superseded_by" in self.fields: skill_result_queryset = ( SkillResult.objects.filter(project=project) if project - else SkillResult.objects.filter(project__group__user=user) + else SkillResult.objects.filter( + project__memberships__user=user + ).distinct() ) self.fields["superseded_by"].queryset = skill_result_queryset diff --git a/core/tests/test_api.py b/core/tests/test_api.py index b0547b7e..47652ef1 100644 --- a/core/tests/test_api.py +++ b/core/tests/test_api.py @@ -28,7 +28,14 @@ UserFeedback, ) from projects.model_support import SourcePluginName -from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig +from projects.models import ( + BlueskyCredentials, + Project, + ProjectConfig, + ProjectMembership, + ProjectRole, + SourceConfig, +) class ProjectScopedApiTests(APITestCase): @@ -54,6 +61,16 @@ def setUp(self): group=self.other_group, topic_description="Frontend", ) + ProjectMembership.objects.create( + user=self.owner, + project=self.owner_project, + role=ProjectRole.ADMIN, + ) + ProjectMembership.objects.create( + user=self.other_user, + project=self.other_project, + role=ProjectRole.ADMIN, + ) self.owner_entity = Entity.objects.create( project=self.owner_project, name="Owner Entity", @@ -169,7 +186,7 @@ def test_project_list_requires_authentication(self): }, ) - def test_project_list_is_scoped_to_request_user_groups(self): + def test_project_list_is_scoped_to_request_user_memberships(self): BlueskyCredentials.objects.create( project=self.owner_project, handle="owner-project.bsky.social", diff --git a/core/tests/test_membership.py b/core/tests/test_membership.py new file mode 100644 index 00000000..e2eb2f73 --- /dev/null +++ b/core/tests/test_membership.py @@ -0,0 +1,126 @@ +from importlib import import_module + +import pytest +from django.apps import apps as django_apps +from django.contrib.auth.models import Group + +from core.permissions import get_user_role, get_visible_projects_queryset +from projects.models import Project, ProjectMembership, ProjectRole + +pytestmark = pytest.mark.django_db + + +backfill_project_memberships = import_module( + "projects.migrations.0002_alter_project_group_projectmembership_and_more" +).backfill_project_memberships + + +def test_backfill_project_memberships_creates_admin_and_member_roles( + django_user_model, +): + first_user = django_user_model.objects.create_user( + username="first-user", + password="testpass123", + ) + second_user = django_user_model.objects.create_user( + username="second-user", + password="testpass123", + ) + group = Group.objects.create(name="backfill-team") + first_user.groups.add(group) + second_user.groups.add(group) + project = Project.objects.create( + name="Backfill Project", + group=group, + topic_description="Platform engineering", + ) + + backfill_project_memberships(django_apps, None) + + memberships = list(project.memberships.order_by("user_id")) + assert [membership.user_id for membership in memberships] == [ + first_user.id, + second_user.id, + ] + assert [membership.role for membership in memberships] == [ + ProjectRole.ADMIN, + ProjectRole.MEMBER, + ] + + +def test_visible_projects_queryset_uses_memberships(django_user_model): + user = django_user_model.objects.create_user( + username="member-user", + password="testpass123", + ) + outsider = django_user_model.objects.create_user( + username="outsider-user", + password="testpass123", + ) + group = Group.objects.create(name="membership-team") + project = Project.objects.create( + name="Membership Project", + group=group, + topic_description="Platform engineering", + ) + other_project = Project.objects.create( + name="Outsider Project", + group=group, + topic_description="Frontend", + ) + ProjectMembership.objects.create( + user=user, + project=project, + role=ProjectRole.ADMIN, + ) + ProjectMembership.objects.create( + user=outsider, + project=other_project, + role=ProjectRole.ADMIN, + ) + + assert list(get_visible_projects_queryset(user)) == [project] + + +def test_get_user_role_returns_membership_role(django_user_model): + user = django_user_model.objects.create_user( + username="role-user", + password="testpass123", + ) + group = Group.objects.create(name="role-team") + project = Project.objects.create( + name="Role Project", + group=group, + topic_description="Platform engineering", + ) + ProjectMembership.objects.create( + user=user, + project=project, + role=ProjectRole.READER, + ) + + assert get_user_role(user, project) == ProjectRole.READER + + +def test_removing_membership_removes_project_visibility(django_user_model): + user = django_user_model.objects.create_user( + username="remove-user", + password="testpass123", + ) + group = Group.objects.create(name="remove-team") + project = Project.objects.create( + name="Removal Project", + group=group, + topic_description="Platform engineering", + ) + membership = ProjectMembership.objects.create( + user=user, + project=project, + role=ProjectRole.MEMBER, + ) + + assert list(get_visible_projects_queryset(user)) == [project] + + membership.delete() + + assert list(get_visible_projects_queryset(user)) == [] diff --git a/core/tests/test_serializers.py b/core/tests/test_serializers.py index 3b479236..a7c78dee 100644 --- a/core/tests/test_serializers.py +++ b/core/tests/test_serializers.py @@ -18,7 +18,7 @@ UserFeedbackSerializer, ) from projects.model_support import SourcePluginName -from projects.models import Project, SourceConfig +from projects.models import Project, ProjectMembership, ProjectRole, SourceConfig from projects.serializers import ProjectSerializer, SourceConfigSerializer pytestmark = pytest.mark.django_db @@ -42,6 +42,12 @@ def serializer_context(django_user_model): other_project = Project.objects.create( name="Other Serializer Project", group=other_group, topic_description="Data" ) + ProjectMembership.objects.create(user=user, project=project, role=ProjectRole.ADMIN) + ProjectMembership.objects.create( + user=other_user, + project=other_project, + role=ProjectRole.ADMIN, + ) entity = Entity.objects.create( project=project, name="Serializer Entity", type="vendor" ) diff --git a/memories/repo/model-typing.md b/memories/repo/model-typing.md new file mode 100644 index 00000000..a8206ed9 --- /dev/null +++ b/memories/repo/model-typing.md @@ -0,0 +1,3 @@ +- `users.AppUser` overrides `groups` and `user_permissions` to reuse legacy auth tables; mypy needs `# type: ignore[assignment]` on those field overrides and `objects: ClassVar[AppUserManager]`. +- `projects.Project.members` needs an explicit `ManyToManyField[...]` annotation for mypy under the Django plugin. +- Focused validation that covered the R1/WP2 auth boundary: `pytest core/tests/test_membership.py core/tests/test_api.py core/tests/test_serializers.py users/tests/test_models.py -q`, `python manage.py check`, `just backend-lint`. diff --git a/newsletter_maker/settings/__init__.py b/newsletter_maker/settings/__init__.py index 73efc4f0..675348a2 100644 --- a/newsletter_maker/settings/__init__.py +++ b/newsletter_maker/settings/__init__.py @@ -28,6 +28,7 @@ ANYMAIL, ANYMAIL_WEBHOOK_SECRET, AUTH_PASSWORD_VALIDATORS, + AUTH_USER_MODEL, AUTHENTICATION_BACKENDS, BASE_DIR, BLUESKY_CREDENTIALS_ENCRYPTION_KEY, @@ -92,6 +93,7 @@ "AI_SUMMARIZATION_MODEL", "ALLOWED_HOSTS", "AUTHENTICATION_BACKENDS", + "AUTH_USER_MODEL", "AUTH_PASSWORD_VALIDATORS", "BASE_DIR", "BLUESKY_CREDENTIALS_ENCRYPTION_KEY", diff --git a/newsletter_maker/settings/base.py b/newsletter_maker/settings/base.py index 9c2513e4..93fd9c58 100644 --- a/newsletter_maker/settings/base.py +++ b/newsletter_maker/settings/base.py @@ -95,6 +95,7 @@ def env_list(name: str, default: str = "") -> list[str]: "drf_spectacular", "drf_standardized_errors", # 6. Project Apps + "users", "projects", "core", ] @@ -151,6 +152,8 @@ def env_list(name: str, default: str = "") -> list[str]: "allauth.account.auth_backends.AuthenticationBackend", ] +AUTH_USER_MODEL = "users.AppUser" + ACCOUNT_EMAIL_VERIFICATION = "none" ACCOUNT_LOGIN_METHODS = {"username", "email"} ACCOUNT_SIGNUP_FIELDS = ["email*", "username*", "password1*", "password2*"] @@ -215,6 +218,7 @@ def env_list(name: str, default: str = "") -> list[str]: "WSGI_APPLICATION", "DATABASES", "AUTH_PASSWORD_VALIDATORS", + "AUTH_USER_MODEL", "AUTHENTICATION_BACKENDS", "ACCOUNT_EMAIL_VERIFICATION", "ACCOUNT_LOGIN_METHODS", diff --git a/projects/admin.py b/projects/admin.py index e53981b2..3797a5f1 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -11,7 +11,21 @@ from unfold.admin import ModelAdmin from core.plugins import get_plugin_for_source_config, validate_plugin_config -from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig +from projects.models import ( + BlueskyCredentials, + Project, + ProjectConfig, + ProjectMembership, + SourceConfig, +) + + +class ProjectMembershipInline(admin.TabularInline): + """Edit project memberships inline from the project admin.""" + + model = ProjectMembership + extra = 0 + autocomplete_fields = ("user", "invited_by") class BlueskyCredentialsAdminForm(forms.ModelForm): @@ -60,6 +74,7 @@ class ProjectAdmin(ExportActionMixin, admin.ModelAdmin): search_fields = ("name", "group__name") autocomplete_fields = ("group",) list_editable = ("content_retention_days",) + inlines = (ProjectMembershipInline,) @admin.register(BlueskyCredentials) diff --git a/projects/api.py b/projects/api.py index 586dbc04..b170dc0d 100644 --- a/projects/api.py +++ b/projects/api.py @@ -22,6 +22,7 @@ document_project_owned_viewset, logger, ) +from core.permissions import get_visible_projects_queryset from core.plugins.bluesky import BlueskySourcePlugin from projects.models import ( BlueskyCredentials, @@ -53,7 +54,7 @@ ), ) class ProjectViewSet(viewsets.ModelViewSet): - """Manage projects accessible through the current user's group memberships.""" + """Manage projects accessible through the current user's project memberships.""" serializer_class = ProjectSerializer queryset = Project.objects.select_related("group", "bluesky_credentials") @@ -62,7 +63,9 @@ class ProjectViewSet(viewsets.ModelViewSet): def get_queryset(self): """Limit projects to those visible through the authenticated user.""" - return self.queryset.filter(group__user=self.request.user).distinct() + return get_visible_projects_queryset(self.request.user).select_related( + "group", "bluesky_credentials" + ) @extend_schema( summary="Rotate newsletter intake token", diff --git a/projects/migrations/0002_alter_project_group_projectmembership_and_more.py b/projects/migrations/0002_alter_project_group_projectmembership_and_more.py new file mode 100644 index 00000000..3b4c387d --- /dev/null +++ b/projects/migrations/0002_alter_project_group_projectmembership_and_more.py @@ -0,0 +1,135 @@ +# Generated by Django 6.0.4 on 2026-04-30 01:46 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +def backfill_project_memberships(apps, schema_editor): + """Create project memberships from legacy project group users.""" + + Project = apps.get_model("projects", "Project") + ProjectMembership = apps.get_model("projects", "ProjectMembership") + + for project in Project.objects.select_related("group").all(): + if project.group_id is None: + continue + + users = list(project.group.user_set.order_by("id")) + for index, user in enumerate(users): + role = "admin" if index == 0 else "member" + ProjectMembership.objects.get_or_create( + user=user, + project=project, + defaults={"role": role}, + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("auth", "0012_alter_user_first_name_max_length"), + ("projects", "0001_initial"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name="project", + name="group", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="projects", + to="auth.group", + ), + ), + migrations.CreateModel( + name="ProjectMembership", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "role", + models.CharField( + choices=[ + ("admin", "Project Admin"), + ("member", "Project Member"), + ("reader", "Project Reader"), + ], + default="member", + max_length=16, + ), + ), + ("joined_at", models.DateTimeField(auto_now_add=True)), + ( + "invited_by", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="memberships_invited", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "project", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="memberships", + to="projects.project", + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="project_memberships", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "ordering": ["project__name", "user__username"], + }, + ), + migrations.AddField( + model_name="project", + name="members", + field=models.ManyToManyField( + blank=True, + related_name="projects", + through="projects.ProjectMembership", + through_fields=("project", "user"), + to=settings.AUTH_USER_MODEL, + ), + ), + migrations.AddIndex( + model_name="projectmembership", + index=models.Index( + fields=["project", "role"], name="projects_pr_project_33946c_idx" + ), + ), + migrations.AddIndex( + model_name="projectmembership", + index=models.Index( + fields=["user", "project"], name="projects_pr_user_id_116009_idx" + ), + ), + migrations.AddConstraint( + model_name="projectmembership", + constraint=models.UniqueConstraint( + fields=("user", "project"), + name="projects_membership_unique_user_project", + ), + ), + migrations.RunPython(backfill_project_memberships, migrations.RunPython.noop), + ] diff --git a/projects/models.py b/projects/models.py index 8b8ede58..fc2e147f 100644 --- a/projects/models.py +++ b/projects/models.py @@ -1,5 +1,10 @@ """Project-owned models split out from the historical core app.""" +from __future__ import annotations + +from typing import TYPE_CHECKING + +from django.conf import settings from django.contrib.auth.models import Group from django.db import models @@ -11,12 +16,43 @@ normalize_bluesky_pds_url, ) +if TYPE_CHECKING: + from users.models import AppUser + + +class ProjectRole(models.TextChoices): + """Role assigned to a user's membership within one project.""" + + ADMIN = "admin", "Project Admin" + MEMBER = "member", "Project Member" + READER = "reader", "Project Reader" + class Project(models.Model): - """Represents a newsletter workspace owned by a Django auth group.""" + """Represents a newsletter workspace owned by a Django auth group. + + Project memberships are the primary authorization surface. The historical + group foreign key remains as a temporary compatibility shim while the codebase + migrates off group-based project access. + """ name = models.CharField(max_length=255) - group = models.ForeignKey(Group, on_delete=models.CASCADE, related_name="projects") + group = models.ForeignKey( + Group, + on_delete=models.SET_NULL, + related_name="projects", + null=True, + blank=True, + ) + members: models.ManyToManyField[AppUser, ProjectMembership] = ( + models.ManyToManyField( + settings.AUTH_USER_MODEL, + through="ProjectMembership", + through_fields=("project", "user"), + related_name="projects", + blank=True, + ) + ) topic_description = models.TextField() content_retention_days = models.PositiveIntegerField(default=365) intake_token = models.CharField( @@ -36,6 +72,50 @@ def __str__(self) -> str: return self.name +class ProjectMembership(models.Model): + """Associate one user with one project and an authorization role.""" + + user = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + related_name="project_memberships", + ) + project = models.ForeignKey( + Project, + on_delete=models.CASCADE, + related_name="memberships", + ) + role = models.CharField( + max_length=16, + choices=ProjectRole.choices, + default=ProjectRole.MEMBER, + ) + invited_by = models.ForeignKey( + settings.AUTH_USER_MODEL, + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name="memberships_invited", + ) + joined_at = models.DateTimeField(auto_now_add=True) + + class Meta: + ordering = ["project__name", "user__username"] + constraints = [ + models.UniqueConstraint( + fields=["user", "project"], + name="projects_membership_unique_user_project", + ) + ] + indexes = [ + models.Index(fields=["project", "role"]), + models.Index(fields=["user", "project"]), + ] + + def __str__(self) -> str: + return f"{self.user} in {self.project} ({self.role})" + + class BlueskyCredentials(models.Model): """Stores the authenticated Bluesky account used by one project.""" diff --git a/users/__init__.py b/users/__init__.py new file mode 100644 index 00000000..bf0ee3af --- /dev/null +++ b/users/__init__.py @@ -0,0 +1 @@ +"""Users app package.""" \ No newline at end of file diff --git a/users/admin.py b/users/admin.py new file mode 100644 index 00000000..cb349749 --- /dev/null +++ b/users/admin.py @@ -0,0 +1,47 @@ +"""Django admin registration for the custom application user model.""" + +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin + +from users.forms import AppUserChangeForm, AppUserCreationForm +from users.models import AppUser + + +@admin.register(AppUser) +class AppUserAdmin(UserAdmin): + """Admin configuration for the custom application user model.""" + + add_form = AppUserCreationForm + form = AppUserChangeForm + model = AppUser + list_display = ( + "username", + "email", + "display_name", + "is_staff", + "is_active", + ) + fieldsets = UserAdmin.fieldsets + ( + ( + "Profile", + { + "fields": ( + "display_name", + "avatar", + "bio", + "timezone", + ) + }, + ), + ) + add_fieldsets = UserAdmin.add_fieldsets + ( + ( + "Profile", + { + "fields": ( + "display_name", + "email", + ) + }, + ), + ) diff --git a/users/apps.py b/users/apps.py new file mode 100644 index 00000000..cef17b2f --- /dev/null +++ b/users/apps.py @@ -0,0 +1,10 @@ +"""Application configuration for the users app.""" + +from django.apps import AppConfig + + +class UsersConfig(AppConfig): + """App config for the custom user and profile foundation.""" + + default_auto_field = "django.db.models.BigAutoField" + name = "users" \ No newline at end of file diff --git a/users/forms.py b/users/forms.py new file mode 100644 index 00000000..90a7c1d6 --- /dev/null +++ b/users/forms.py @@ -0,0 +1,21 @@ +"""Admin forms for the custom AppUser model.""" + +from django.contrib.auth.forms import UserChangeForm, UserCreationForm + +from users.models import AppUser + + +class AppUserCreationForm(UserCreationForm): + """Create-form for the custom application user model.""" + + class Meta(UserCreationForm.Meta): + model = AppUser + fields = ("username", "email", "display_name") + + +class AppUserChangeForm(UserChangeForm): + """Change-form for the custom application user model.""" + + class Meta(UserChangeForm.Meta): + model = AppUser + fields = "__all__" diff --git a/users/managers.py b/users/managers.py new file mode 100644 index 00000000..3a4a624d --- /dev/null +++ b/users/managers.py @@ -0,0 +1,7 @@ +"""Managers for the custom application user model.""" + +from django.contrib.auth.models import UserManager + + +class AppUserManager(UserManager): + """Future home for custom user creation behavior.""" diff --git a/users/migrations/0001_initial.py b/users/migrations/0001_initial.py new file mode 100644 index 00000000..73b62824 --- /dev/null +++ b/users/migrations/0001_initial.py @@ -0,0 +1,147 @@ +# Generated by Django 6.0.4 on 2026-04-30 01:25 + +import django.contrib.auth.validators +import django.utils.timezone +import users.managers +import users.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("auth", "0012_alter_user_first_name_max_length"), + ] + + operations = [ + migrations.CreateModel( + name="AppUser", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("password", models.CharField(max_length=128, verbose_name="password")), + ( + "last_login", + models.DateTimeField( + blank=True, null=True, verbose_name="last login" + ), + ), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text="Designates that this user has all permissions without explicitly assigning them.", + verbose_name="superuser status", + ), + ), + ( + "username", + models.CharField( + error_messages={ + "unique": "A user with that username already exists." + }, + help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", + max_length=150, + unique=True, + validators=[ + django.contrib.auth.validators.UnicodeUsernameValidator() + ], + verbose_name="username", + ), + ), + ( + "first_name", + models.CharField( + blank=True, max_length=150, verbose_name="first name" + ), + ), + ( + "last_name", + models.CharField( + blank=True, max_length=150, verbose_name="last name" + ), + ), + ( + "email", + models.EmailField( + blank=True, max_length=254, verbose_name="email address" + ), + ), + ( + "is_staff", + models.BooleanField( + default=False, + help_text="Designates whether the user can log into this admin site.", + verbose_name="staff status", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", + verbose_name="active", + ), + ), + ( + "date_joined", + models.DateTimeField( + default=django.utils.timezone.now, verbose_name="date joined" + ), + ), + ("display_name", models.CharField(blank=True, max_length=120)), + ( + "avatar", + models.ImageField( + blank=True, null=True, upload_to=users.models.avatar_upload_path + ), + ), + ("bio", models.TextField(blank=True)), + ( + "timezone", + models.CharField(blank=True, default="UTC", max_length=64), + ), + ( + "groups", + models.ManyToManyField( + blank=True, + db_table="auth_user_groups", + help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", + related_name="user_set", + related_query_name="user", + to="auth.group", + verbose_name="groups", + ), + ), + ( + "user_permissions", + models.ManyToManyField( + blank=True, + db_table="auth_user_user_permissions", + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + to="auth.permission", + verbose_name="user permissions", + ), + ), + ], + options={ + "verbose_name": "User", + "verbose_name_plural": "Users", + "db_table": "auth_user", + }, + managers=[ + ("objects", users.managers.AppUserManager()), + ], + ), + ] diff --git a/users/migrations/__init__.py b/users/migrations/__init__.py new file mode 100644 index 00000000..cb16008d --- /dev/null +++ b/users/migrations/__init__.py @@ -0,0 +1 @@ +"""Users app migrations package.""" diff --git a/users/models.py b/users/models.py new file mode 100644 index 00000000..a48e7daa --- /dev/null +++ b/users/models.py @@ -0,0 +1,62 @@ +"""Custom user model and profile fields for the users app.""" + +from __future__ import annotations + +from typing import ClassVar + +from django.contrib.auth.models import AbstractUser, Group, Permission +from django.db import models + +from users.managers import AppUserManager + + +def avatar_upload_path(instance: "AppUser", filename: str) -> str: + """Return the storage path used for uploaded profile avatars.""" + + user_id = instance.pk or "pending" + return f"avatars/{user_id}/{filename}" + + +class AppUser(AbstractUser): + """Project-aware application user with profile fields. + + The model deliberately reuses Django's historical auth tables so the current + Group-based project scoping and third-party auth integrations remain valid + while the package refactor introduces the dedicated users app. + """ + + display_name = models.CharField(max_length=120, blank=True) + avatar = models.ImageField(upload_to=avatar_upload_path, blank=True, null=True) + bio = models.TextField(blank=True) + timezone = models.CharField(max_length=64, blank=True, default="UTC") + groups = models.ManyToManyField( # type: ignore[assignment] + Group, + verbose_name="groups", + blank=True, + related_name="user_set", + related_query_name="user", + help_text=( + "The groups this user belongs to. A user will get all permissions " + "granted to each of their groups." + ), + db_table="auth_user_groups", + ) + user_permissions = models.ManyToManyField( # type: ignore[assignment] + Permission, + verbose_name="user permissions", + blank=True, + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + db_table="auth_user_user_permissions", + ) + + objects: ClassVar[AppUserManager] = AppUserManager() + + class Meta: + db_table = "auth_user" + verbose_name = "User" + verbose_name_plural = "Users" + + def __str__(self) -> str: + return self.display_name or self.get_username() diff --git a/users/serializers.py b/users/serializers.py new file mode 100644 index 00000000..c0063345 --- /dev/null +++ b/users/serializers.py @@ -0,0 +1,28 @@ +"""Serializers for the custom user profile surface.""" + +from rest_framework import serializers + +from users.models import AppUser + + +class AppUserSerializer(serializers.ModelSerializer): + """Serialize the core user identity fields used by backend callers.""" + + class Meta: + model = AppUser + fields = [ + "id", + "username", + "email", + "display_name", + "avatar", + "bio", + "timezone", + "first_name", + "last_name", + ] + read_only_fields = ["id"] + + +class ProfileSerializer(AppUserSerializer): + """Alias serializer used for profile-focused endpoints.""" diff --git a/users/tests/__init__.py b/users/tests/__init__.py new file mode 100644 index 00000000..fb8c308f --- /dev/null +++ b/users/tests/__init__.py @@ -0,0 +1 @@ +"""Users app tests package.""" diff --git a/users/tests/test_models.py b/users/tests/test_models.py new file mode 100644 index 00000000..128aab99 --- /dev/null +++ b/users/tests/test_models.py @@ -0,0 +1,41 @@ +"""Tests for the custom AppUser foundation.""" + +import pytest +from django.contrib.auth.models import Group + +from projects.models import Project, ProjectMembership, ProjectRole +from users.models import AppUser, avatar_upload_path + +pytestmark = pytest.mark.django_db + + +def test_app_user_uses_display_name_in_string_representation(): + user = AppUser(username="reader", display_name="Platform Reader") + + assert str(user) == "Platform Reader" + + +def test_avatar_upload_path_uses_user_prefix(): + user = AppUser(pk=42, username="reader") + + assert avatar_upload_path(user, "avatar.png") == "avatars/42/avatar.png" + + +def test_app_user_project_membership_drives_project_visibility(): + group = Group.objects.create(name="platform-team") + user = AppUser.objects.create_user(username="reader", password="testpass123") + user.groups.add(group) + project = Project.objects.create( + name="Platform Weekly", + group=group, + topic_description="Platform engineering", + ) + ProjectMembership.objects.create( + user=user, + project=project, + role=ProjectRole.ADMIN, + ) + + visible_projects = Project.objects.filter(memberships__user=user).distinct() + + assert list(visible_projects) == [project] From 55f6ec94a6c093c672eb7c00d69051dc13f0f287 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 30 Apr 2026 05:18:58 +0300 Subject: [PATCH 04/13] DRF Permission Classes and user_role in Serializers --- core/api.py | 84 +++- core/permissions.py | 139 ++++++- core/tests/test_api.py | 1 + core/tests/test_permissions.py | 358 ++++++++++++++++++ frontend/src/app/__tests__/page.test.tsx | 1 + .../app/admin/health/__tests__/page.test.tsx | 1 + .../app/admin/sources/__tests__/page.test.tsx | 1 + .../__tests__/route.test.ts | 1 + .../app/content/[id]/__tests__/page.test.tsx | 1 + .../app/entities/[id]/__tests__/page.test.tsx | 1 + .../src/app/entities/__tests__/page.test.tsx | 1 + .../components/__tests__/app-shell.test.tsx | 2 + frontend/src/lib/__tests__/useRole.test.tsx | 69 ++++ .../src/lib/__tests__/view-helpers.test.ts | 2 + frontend/src/lib/types.ts | 5 +- frontend/src/lib/useRole.ts | 28 ++ frontend/tsconfig.tsbuildinfo | 2 +- projects/api.py | 49 ++- projects/serializers.py | 11 + users/__init__.py | 2 +- users/apps.py | 2 +- 21 files changed, 752 insertions(+), 9 deletions(-) create mode 100644 core/tests/test_permissions.py create mode 100644 frontend/src/lib/__tests__/useRole.test.tsx create mode 100644 frontend/src/lib/useRole.ts diff --git a/core/api.py b/core/api.py index c384154e..3515b075 100644 --- a/core/api.py +++ b/core/api.py @@ -41,7 +41,14 @@ TopicCentroidSnapshot, UserFeedback, ) -from core.permissions import get_visible_projects_queryset +from core.permissions import ( + IsProjectAdmin, + IsProjectContributor, + IsProjectFeedbackEditor, + IsProjectMember, + IsProjectMemberWritable, + get_visible_projects_queryset, +) from core.serializers import ( ContentSerializer, EntityAuthoritySnapshotSerializer, @@ -105,6 +112,7 @@ "content_retention_days": 180, "intake_token": "project-token-123", "intake_enabled": True, + "user_role": "admin", "has_bluesky_credentials": True, "bluesky_handle": "aiweekly.bsky.social", "bluesky_is_active": True, @@ -631,6 +639,17 @@ class EntityViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): ) ) + def get_permissions(self): + """Apply read, contributor-write, and admin-delete permissions for entities.""" + + if self.action == "destroy": + permission_classes = [IsProjectAdmin] + elif self.action in {"create", "update", "partial_update"}: + permission_classes = [IsProjectMemberWritable] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] + @extend_schema( summary="List entity mentions", description="Return the extracted mention history for one tracked entity inside the selected project.", @@ -710,6 +729,15 @@ class EntityCandidateViewSet(ProjectOwnedQuerysetMixin, viewsets.ReadOnlyModelVi "project", "first_seen_in", "merged_into" ) + def get_permissions(self): + """Allow all members to read candidates and contributors to resolve them.""" + + if self.action in {"accept", "reject", "merge"}: + permission_classes = [IsProjectContributor] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] + @extend_schema( summary="Accept entity candidate", description="Promote a pending entity candidate into a tracked entity and backfill recent mentions.", @@ -797,6 +825,17 @@ class ContentViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = ContentSerializer queryset = Content.objects.select_related("project", "entity") + def get_permissions(self): + """Allow all members to read content, contributors to edit, and admins to delete.""" + + if self.action == "destroy": + permission_classes = [IsProjectAdmin] + elif self.action in {"create", "update", "partial_update", "run_skill"}: + permission_classes = [IsProjectMemberWritable] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] + @extend_schema( summary="Run content skill", description=( @@ -873,6 +912,15 @@ class SkillResultViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = SkillResultSerializer queryset = SkillResult.objects.select_related("content", "project", "superseded_by") + def get_permissions(self): + """Allow all members to read skill results and contributors to modify them.""" + + if self.action in {"create", "update", "partial_update", "destroy"}: + permission_classes = [IsProjectMemberWritable] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] + @document_project_owned_viewset( resource_plural="user feedback entries", @@ -891,6 +939,11 @@ class UserFeedbackViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = UserFeedbackSerializer queryset = UserFeedback.objects.select_related("content", "project", "user") + def get_permissions(self): + """Allow all members to read feedback and owners or admins to modify it.""" + + return [IsProjectFeedbackEditor()] + def perform_create(self, serializer): """Attach the authenticated user automatically to new feedback rows.""" @@ -914,6 +967,15 @@ class IngestionRunViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = IngestionRunSerializer queryset = IngestionRun.objects.select_related("project") + def get_permissions(self): + """Allow all members to read ingestion runs and contributors to manage them.""" + + if self.action in {"create", "update", "partial_update", "destroy"}: + permission_classes = [IsProjectMemberWritable] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] + @document_project_owned_viewset( resource_plural="intake allowlist entries", @@ -935,6 +997,11 @@ class IntakeAllowlistViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = IntakeAllowlistSerializer queryset = IntakeAllowlist.objects.select_related("project") + def get_permissions(self): + """Restrict intake allowlist access to project contributors.""" + + return [IsProjectContributor()] + @document_project_owned_viewset( resource_plural="newsletter intake entries", @@ -956,6 +1023,11 @@ class NewsletterIntakeViewSet(ProjectOwnedQuerysetMixin, viewsets.ReadOnlyModelV serializer_class = NewsletterIntakeSerializer queryset = NewsletterIntake.objects.select_related("project") + def get_permissions(self): + """Allow any project member to inspect newsletter intake history.""" + + return [IsProjectMember()] + @document_project_owned_viewset( resource_plural="topic centroid snapshots", @@ -976,6 +1048,11 @@ class TopicCentroidSnapshotViewSet( serializer_class = TopicCentroidSnapshotSerializer queryset = TopicCentroidSnapshot.objects.select_related("project") + def get_permissions(self): + """Restrict centroid observability to project contributors.""" + + return [IsProjectContributor()] + @extend_schema( summary="Get topic centroid summary", description=( @@ -1030,3 +1107,8 @@ class ReviewQueueViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = ReviewQueueSerializer queryset = ReviewQueue.objects.select_related("content", "project") + + def get_permissions(self): + """Restrict review-queue access to project contributors.""" + + return [IsProjectContributor()] diff --git a/core/permissions.py b/core/permissions.py index b88052cb..77757f13 100644 --- a/core/permissions.py +++ b/core/permissions.py @@ -1,8 +1,10 @@ -"""Cross-cutting helpers for project membership visibility and roles.""" +"""Cross-cutting helpers and DRF permission classes for project roles.""" from __future__ import annotations -from projects.models import Project, ProjectMembership +from rest_framework import permissions + +from projects.models import Project, ProjectMembership, ProjectRole def get_visible_projects_queryset(user): @@ -18,8 +20,139 @@ def get_user_role(user, project: Project) -> str | None: if not getattr(user, "is_authenticated", False): return None + if getattr(user, "is_superuser", False): + return ProjectRole.ADMIN return ( ProjectMembership.objects.filter(user=user, project=project) .values_list("role", flat=True) .first() - ) \ No newline at end of file + ) + + +def _get_project_from_view(view) -> Project | None: + """Resolve the current nested project from a project-scoped view when present.""" + + get_project = getattr(view, "get_project", None) + if callable(get_project): + return get_project() + return None + + +def _resolve_project(obj) -> Project: + """Resolve the owning project for a project-scoped model instance.""" + + if isinstance(obj, Project): + return obj + return obj.project + + +class IsProjectMember(permissions.BasePermission): + """Allow authenticated project members to read project-scoped resources.""" + + def has_permission(self, request, view) -> bool: + user = request.user + if not user or not user.is_authenticated: + return False + + project = _get_project_from_view(view) + if project is None: + return True + + return get_user_role(user, project) is not None + + def has_object_permission(self, request, view, obj) -> bool: + return get_user_role(request.user, _resolve_project(obj)) is not None + + +class IsProjectContributor(permissions.BasePermission): + """Allow only admins and members to access contributor-only resources.""" + + allowed_roles = {ProjectRole.ADMIN, ProjectRole.MEMBER} + + def has_permission(self, request, view) -> bool: + user = request.user + if not user or not user.is_authenticated: + return False + + project = _get_project_from_view(view) + if project is None: + return True + + return get_user_role(user, project) in self.allowed_roles + + def has_object_permission(self, request, view, obj) -> bool: + return get_user_role(request.user, _resolve_project(obj)) in self.allowed_roles + + +class IsProjectMemberWritable(permissions.BasePermission): + """Allow all members to read, but reserve writes for admins and members.""" + + writable_roles = {ProjectRole.ADMIN, ProjectRole.MEMBER} + + def has_permission(self, request, view) -> bool: + user = request.user + if not user or not user.is_authenticated: + return False + + project = _get_project_from_view(view) + if project is None: + return True + + role = get_user_role(user, project) + if request.method in permissions.SAFE_METHODS: + return role is not None + return role in self.writable_roles + + def has_object_permission(self, request, view, obj) -> bool: + role = get_user_role(request.user, _resolve_project(obj)) + if request.method in permissions.SAFE_METHODS: + return role is not None + return role in self.writable_roles + + +class IsProjectAdmin(permissions.BasePermission): + """Restrict access to project admins.""" + + def has_permission(self, request, view) -> bool: + user = request.user + if not user or not user.is_authenticated: + return False + + project = _get_project_from_view(view) + if project is None: + return True + + return get_user_role(user, project) == ProjectRole.ADMIN + + def has_object_permission(self, request, view, obj) -> bool: + return get_user_role(request.user, _resolve_project(obj)) == ProjectRole.ADMIN + + +class IsProjectFeedbackEditor(permissions.BasePermission): + """Allow feedback reads to any member and writes by owners or project admins.""" + + contributor_roles = {ProjectRole.ADMIN, ProjectRole.MEMBER} + + def has_permission(self, request, view) -> bool: + user = request.user + if not user or not user.is_authenticated: + return False + + project = _get_project_from_view(view) + if project is None: + return True + + role = get_user_role(user, project) + if request.method in permissions.SAFE_METHODS: + return role is not None + return role in self.contributor_roles + + def has_object_permission(self, request, view, obj) -> bool: + role = get_user_role(request.user, _resolve_project(obj)) + if request.method in permissions.SAFE_METHODS: + return role is not None + if role == ProjectRole.ADMIN: + return True + if role != ProjectRole.MEMBER: + return False + return obj.user_id == request.user.id diff --git a/core/tests/test_api.py b/core/tests/test_api.py index 47652ef1..c73be7b9 100644 --- a/core/tests/test_api.py +++ b/core/tests/test_api.py @@ -199,6 +199,7 @@ def test_project_list_is_scoped_to_request_user_memberships(self): self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.json()), 1) self.assertEqual(response.json()[0]["id"], self.owner_project.id) + self.assertEqual(response.json()[0]["user_role"], ProjectRole.ADMIN) self.assertEqual( response.json()[0]["intake_token"], self.owner_project.intake_token ) diff --git a/core/tests/test_permissions.py b/core/tests/test_permissions.py new file mode 100644 index 00000000..e9e04d73 --- /dev/null +++ b/core/tests/test_permissions.py @@ -0,0 +1,358 @@ +from unittest.mock import patch + +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase + +from core.models import ( + Content, + Entity, + EntityCandidate, + FeedbackType, + ReviewQueue, + ReviewReason, + TopicCentroidSnapshot, + UserFeedback, +) +from projects.model_support import SourcePluginName +from projects.models import BlueskyCredentials, Project, ProjectMembership, ProjectRole + + +class ProjectRolePermissionTests(APITestCase): + def setUp(self): + queue_centroid_patcher = patch("core.signals.queue_topic_centroid_recompute") + queue_centroid_patcher.start() + self.addCleanup(queue_centroid_patcher.stop) + + user_model = get_user_model() + self.admin_user = user_model.objects.create_user( + username="project-admin", + password="testpass123", + ) + self.member_user = user_model.objects.create_user( + username="project-member", + password="testpass123", + ) + self.reader_user = user_model.objects.create_user( + username="project-reader", + password="testpass123", + ) + self.outsider_user = user_model.objects.create_user( + username="outsider", + password="testpass123", + ) + + self.group = Group.objects.create(name="permissions-team") + self.project = Project.objects.create( + name="Permissions Project", + group=self.group, + topic_description="Platform engineering", + ) + + ProjectMembership.objects.bulk_create( + [ + ProjectMembership( + user=self.admin_user, + project=self.project, + role=ProjectRole.ADMIN, + ), + ProjectMembership( + user=self.member_user, + project=self.project, + role=ProjectRole.MEMBER, + ), + ProjectMembership( + user=self.reader_user, + project=self.project, + role=ProjectRole.READER, + ), + ] + ) + + self.entity = Entity.objects.create( + project=self.project, + name="Permissions Entity", + type="vendor", + ) + self.content = Content.objects.create( + project=self.project, + url="https://example.com/permissions-content", + title="Permissions Content", + author="Author", + entity=self.entity, + source_plugin=SourcePluginName.RSS, + published_date="2026-04-29T00:00:00Z", + content_text="Permissions content body.", + ) + self.entity_candidate = EntityCandidate.objects.create( + project=self.project, + name="Candidate Vendor", + suggested_type="vendor", + first_seen_in=self.content, + ) + self.review_queue_item = ReviewQueue.objects.create( + project=self.project, + content=self.content, + reason=ReviewReason.BORDERLINE_RELEVANCE, + confidence=0.55, + ) + self.topic_centroid_snapshot = TopicCentroidSnapshot.objects.create( + project=self.project, + centroid_active=True, + centroid_vector=[1.0, 0.0], + feedback_count=3, + upvote_count=2, + downvote_count=1, + drift_from_previous=0.1, + drift_from_week_ago=0.2, + ) + self.member_feedback = UserFeedback.objects.create( + project=self.project, + content=self.content, + user=self.member_user, + feedback_type=FeedbackType.UPVOTE, + ) + self.admin_feedback = UserFeedback.objects.create( + project=self.project, + content=self.content, + user=self.admin_user, + feedback_type=FeedbackType.DOWNVOTE, + ) + self.bluesky_credentials = BlueskyCredentials.objects.create( + project=self.project, + handle="permissions-project.bsky.social", + ) + + def test_project_list_includes_resolved_reader_role(self): + self.client.force_authenticate(self.reader_user) + + response = self.client.get(reverse("v1:project-list")) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()[0]["user_role"], ProjectRole.READER) + + def test_reader_is_denied_contributor_and_admin_endpoints(self): + self.client.force_authenticate(self.reader_user) + + cases = [ + ( + "patch", + reverse("v1:project-detail", kwargs={"id": self.project.id}), + {"name": "Reader Update"}, + ), + ( + "post", + reverse( + "v1:project-rotate-intake-token", + kwargs={"id": self.project.id}, + ), + None, + ), + ( + "get", + reverse( + "v1:project-review-queue-list", + kwargs={"project_id": self.project.id}, + ), + None, + ), + ( + "post", + reverse( + "v1:project-source-config-list", + kwargs={"project_id": self.project.id}, + ), + { + "plugin_name": SourcePluginName.RSS, + "config": {"feed_url": "https://example.com/feed.xml"}, + "is_active": True, + }, + ), + ( + "get", + reverse( + "v1:project-bluesky-credentials-list", + kwargs={"project_id": self.project.id}, + ), + None, + ), + ( + "post", + reverse( + "v1:project-feedback-list", + kwargs={"project_id": self.project.id}, + ), + { + "content": self.content.id, + "feedback_type": FeedbackType.UPVOTE, + }, + ), + ( + "post", + reverse( + "v1:project-entity-candidate-accept", + kwargs={ + "project_id": self.project.id, + "pk": self.entity_candidate.id, + }, + ), + None, + ), + ( + "get", + reverse( + "v1:project-topic-centroid-snapshot-summary", + kwargs={"project_id": self.project.id}, + ), + None, + ), + ] + + for method, url, payload in cases: + with self.subTest(method=method, url=url): + response = getattr(self.client, method)(url, payload, format="json") + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_member_can_use_contributor_endpoints_but_not_admin_only_ones(self): + self.client.force_authenticate(self.member_user) + + review_queue_response = self.client.get( + reverse( + "v1:project-review-queue-list", + kwargs={"project_id": self.project.id}, + ) + ) + self.assertEqual(review_queue_response.status_code, status.HTTP_200_OK) + + source_config_response = self.client.post( + reverse( + "v1:project-source-config-list", + kwargs={"project_id": self.project.id}, + ), + { + "plugin_name": SourcePluginName.RSS, + "config": {"feed_url": "https://example.com/feed.xml"}, + "is_active": True, + }, + format="json", + ) + self.assertEqual(source_config_response.status_code, status.HTTP_201_CREATED) + + topic_summary_response = self.client.get( + reverse( + "v1:project-topic-centroid-snapshot-summary", + kwargs={"project_id": self.project.id}, + ) + ) + self.assertEqual(topic_summary_response.status_code, status.HTTP_200_OK) + + accept_candidate_response = self.client.post( + reverse( + "v1:project-entity-candidate-accept", + kwargs={ + "project_id": self.project.id, + "pk": self.entity_candidate.id, + }, + ), + format="json", + ) + self.assertEqual(accept_candidate_response.status_code, status.HTTP_200_OK) + + delete_own_feedback_response = self.client.delete( + reverse( + "v1:project-feedback-detail", + kwargs={ + "project_id": self.project.id, + "pk": self.member_feedback.id, + }, + ) + ) + self.assertEqual( + delete_own_feedback_response.status_code, status.HTTP_204_NO_CONTENT + ) + + update_project_response = self.client.patch( + reverse("v1:project-detail", kwargs={"id": self.project.id}), + {"name": "Member Update"}, + format="json", + ) + self.assertEqual(update_project_response.status_code, status.HTTP_403_FORBIDDEN) + + list_credentials_response = self.client.get( + reverse( + "v1:project-bluesky-credentials-list", + kwargs={"project_id": self.project.id}, + ) + ) + self.assertEqual( + list_credentials_response.status_code, status.HTTP_403_FORBIDDEN + ) + + rotate_token_response = self.client.post( + reverse("v1:project-rotate-intake-token", kwargs={"id": self.project.id}), + format="json", + ) + self.assertEqual(rotate_token_response.status_code, status.HTTP_403_FORBIDDEN) + + def test_member_cannot_delete_other_users_feedback(self): + self.client.force_authenticate(self.member_user) + + response = self.client.delete( + reverse( + "v1:project-feedback-detail", + kwargs={ + "project_id": self.project.id, + "pk": self.admin_feedback.id, + }, + ) + ) + + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_admin_can_access_admin_endpoints_and_delete_other_feedback(self): + self.client.force_authenticate(self.admin_user) + + update_project_response = self.client.patch( + reverse("v1:project-detail", kwargs={"id": self.project.id}), + {"name": "Admin Updated Project"}, + format="json", + ) + self.assertEqual(update_project_response.status_code, status.HTTP_200_OK) + + list_credentials_response = self.client.get( + reverse( + "v1:project-bluesky-credentials-list", + kwargs={"project_id": self.project.id}, + ) + ) + self.assertEqual(list_credentials_response.status_code, status.HTTP_200_OK) + + rotate_token_response = self.client.post( + reverse("v1:project-rotate-intake-token", kwargs={"id": self.project.id}), + format="json", + ) + self.assertEqual(rotate_token_response.status_code, status.HTTP_200_OK) + + delete_feedback_response = self.client.delete( + reverse( + "v1:project-feedback-detail", + kwargs={ + "project_id": self.project.id, + "pk": self.member_feedback.id, + }, + ) + ) + self.assertEqual( + delete_feedback_response.status_code, status.HTTP_204_NO_CONTENT + ) + + def test_outsider_cannot_access_project_resources(self): + self.client.force_authenticate(self.outsider_user) + + response = self.client.get( + reverse("v1:project-detail", kwargs={"id": self.project.id}) + ) + + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) diff --git a/frontend/src/app/__tests__/page.test.tsx b/frontend/src/app/__tests__/page.test.tsx index 08e1fe6e..8e5e6cb3 100644 --- a/frontend/src/app/__tests__/page.test.tsx +++ b/frontend/src/app/__tests__/page.test.tsx @@ -94,6 +94,7 @@ function createProject(overrides: Partial = {}): Project { group: 10, topic_description: "AI news", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-01T00:00:00Z", ...overrides, } diff --git a/frontend/src/app/admin/health/__tests__/page.test.tsx b/frontend/src/app/admin/health/__tests__/page.test.tsx index 7c030e23..aba38cf6 100644 --- a/frontend/src/app/admin/health/__tests__/page.test.tsx +++ b/frontend/src/app/admin/health/__tests__/page.test.tsx @@ -84,6 +84,7 @@ function createProject(overrides: Partial = {}): Project { group: 10, topic_description: "AI news", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-01T00:00:00Z", ...overrides, } diff --git a/frontend/src/app/admin/sources/__tests__/page.test.tsx b/frontend/src/app/admin/sources/__tests__/page.test.tsx index a18e518d..a4033b0d 100644 --- a/frontend/src/app/admin/sources/__tests__/page.test.tsx +++ b/frontend/src/app/admin/sources/__tests__/page.test.tsx @@ -90,6 +90,7 @@ function createProject(overrides: Partial = {}): Project { content_retention_days: 30, intake_token: "intake-token-123", intake_enabled: false, + user_role: "admin", has_bluesky_credentials: false, bluesky_handle: "", bluesky_is_active: false, diff --git a/frontend/src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts b/frontend/src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts index dc377113..d8dcb429 100644 --- a/frontend/src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts +++ b/frontend/src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts @@ -33,6 +33,7 @@ describe("POST /api/projects/[id]/rotate-intake-token", () => { content_retention_days: 30, intake_token: "rotated-token", intake_enabled: true, + user_role: "admin", created_at: "2026-04-30T00:00:00Z", }) diff --git a/frontend/src/app/content/[id]/__tests__/page.test.tsx b/frontend/src/app/content/[id]/__tests__/page.test.tsx index 12a23bb6..d3d7813d 100644 --- a/frontend/src/app/content/[id]/__tests__/page.test.tsx +++ b/frontend/src/app/content/[id]/__tests__/page.test.tsx @@ -106,6 +106,7 @@ function createProject(overrides: Partial = {}): Project { group: 10, topic_description: "AI news", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-01T00:00:00Z", ...overrides, } diff --git a/frontend/src/app/entities/[id]/__tests__/page.test.tsx b/frontend/src/app/entities/[id]/__tests__/page.test.tsx index c2b3dfda..e80f9f39 100644 --- a/frontend/src/app/entities/[id]/__tests__/page.test.tsx +++ b/frontend/src/app/entities/[id]/__tests__/page.test.tsx @@ -78,6 +78,7 @@ function createProject(overrides: Partial = {}): Project { group: 10, topic_description: "AI news", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-01T00:00:00Z", ...overrides, } diff --git a/frontend/src/app/entities/__tests__/page.test.tsx b/frontend/src/app/entities/__tests__/page.test.tsx index bc325b7c..c6c0c8b1 100644 --- a/frontend/src/app/entities/__tests__/page.test.tsx +++ b/frontend/src/app/entities/__tests__/page.test.tsx @@ -72,6 +72,7 @@ function createProject(overrides: Partial = {}): Project { group: 10, topic_description: "AI news", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-01T00:00:00Z", ...overrides, } diff --git a/frontend/src/components/__tests__/app-shell.test.tsx b/frontend/src/components/__tests__/app-shell.test.tsx index 9fc990a4..f8aa908b 100644 --- a/frontend/src/components/__tests__/app-shell.test.tsx +++ b/frontend/src/components/__tests__/app-shell.test.tsx @@ -15,6 +15,7 @@ const projects: Project[] = [ group: 3, topic_description: "Applied AI", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-27T00:00:00Z", }, { @@ -23,6 +24,7 @@ const projects: Project[] = [ group: 3, topic_description: "Platform engineering", content_retention_days: 30, + user_role: "member", created_at: "2026-04-27T00:00:00Z", }, ] diff --git a/frontend/src/lib/__tests__/useRole.test.tsx b/frontend/src/lib/__tests__/useRole.test.tsx new file mode 100644 index 00000000..189282f0 --- /dev/null +++ b/frontend/src/lib/__tests__/useRole.test.tsx @@ -0,0 +1,69 @@ +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import { render, screen } from "@testing-library/react" +import { describe, expect, it } from "vitest" + +import type { Project, ProjectRole } from "@/lib/types" +import { PROJECTS_QUERY_KEY, useRole } from "@/lib/useRole" + +function createProject(overrides: Partial = {}): Project { + return { + id: 1, + name: "AI Weekly", + group: 10, + topic_description: "AI news", + content_retention_days: 30, + intake_enabled: false, + user_role: null, + created_at: "2026-04-01T00:00:00Z", + ...overrides, + } +} + +function RoleInspector({ projectId }: { projectId: number | null }) { + const role = useRole(projectId) + + return {role ?? "null"} +} + +function renderWithProjects( + projects: Project[], + projectId: number | null, +) { + const queryClient = new QueryClient() + queryClient.setQueryData(PROJECTS_QUERY_KEY, projects) + + render( + + + , + ) +} + +describe("useRole", () => { + it("returns null when the projects query is not cached", () => { + const queryClient = new QueryClient() + + render( + + + , + ) + + expect(screen.getByTestId("role")).toHaveTextContent("null") + }) + + it.each<[ProjectRole]>([["admin"], ["member"], ["reader"]])( + "returns the cached %s role for the selected project", + (role) => { + renderWithProjects([createProject({ id: 4, user_role: role })], 4) + + expect(screen.getByTestId("role")).toHaveTextContent(role) + }, + ) + + it("returns null when the selected project is missing from the cache", () => { + renderWithProjects([createProject({ id: 4, user_role: "admin" })], 99) + + expect(screen.getByTestId("role")).toHaveTextContent("null") + }) +}) \ No newline at end of file diff --git a/frontend/src/lib/__tests__/view-helpers.test.ts b/frontend/src/lib/__tests__/view-helpers.test.ts index 020f451f..b6e4ca5f 100644 --- a/frontend/src/lib/__tests__/view-helpers.test.ts +++ b/frontend/src/lib/__tests__/view-helpers.test.ts @@ -20,6 +20,7 @@ const projects: Project[] = [ group: 3, topic_description: "Applied AI", content_retention_days: 30, + user_role: "admin", created_at: "2026-04-27T00:00:00Z", }, { @@ -28,6 +29,7 @@ const projects: Project[] = [ group: 3, topic_description: "Platform engineering", content_retention_days: 30, + user_role: "member", created_at: "2026-04-27T00:00:00Z", }, ] diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index a68f8caf..b60de44e 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -1,11 +1,14 @@ +export type ProjectRole = "admin" | "member" | "reader" + export type Project = { id: number name: string - group: number + group: number | null topic_description: string content_retention_days: number intake_token?: string intake_enabled?: boolean + user_role: ProjectRole | null has_bluesky_credentials?: boolean bluesky_handle?: string bluesky_is_active?: boolean diff --git a/frontend/src/lib/useRole.ts b/frontend/src/lib/useRole.ts new file mode 100644 index 00000000..d4d32225 --- /dev/null +++ b/frontend/src/lib/useRole.ts @@ -0,0 +1,28 @@ +"use client" + +import { useQueryClient } from "@tanstack/react-query" + +import type { Project, ProjectRole } from "@/lib/types" + +export const PROJECTS_QUERY_KEY = ["projects"] as const + +/** + * Read the cached role for one project from the shared projects query. + * + * The helper does not trigger its own fetch. It only inspects the existing + * React Query cache so client components can gate UI without duplicating the + * project request. + * + * @param projectId - Project identifier to look up in the cached project list. + * @returns The cached role for the project, or `null` when unavailable. + */ +export function useRole(projectId: number | null): ProjectRole | null { + const queryClient = useQueryClient() + const projects = queryClient.getQueryData(PROJECTS_QUERY_KEY) + + if (!projectId || !projects) { + return null + } + + return projects.find((project) => project.id === projectId)?.user_role ?? null +} \ No newline at end of file diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo index 9efa9f2a..8cce6a7a 100644 --- a/frontend/tsconfig.tsbuildinfo +++ b/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.es2025.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.es2025.collection.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.es2025.intl.d.ts","./node_modules/typescript/lib/lib.es2025.iterator.d.ts","./node_modules/typescript/lib/lib.es2025.promise.d.ts","./node_modules/typescript/lib/lib.es2025.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.date.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.esnext.temporal.d.ts","./node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/dev/types/routes.d.ts","./next-env.d.ts","./next.config.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/index.d.ts","./node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionalTypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-Bh0IjN67.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.CEnv6XRv.d.ts","./node_modules/vitest/dist/chunks/plugin.d.BM2TCi12.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/jest-dom/types/matchers.d.ts","./node_modules/@testing-library/jest-dom/types/jest.d.ts","./node_modules/@testing-library/jest-dom/types/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./vitest.setup.ts","./node_modules/next-auth/adapters.d.ts","./node_modules/jose/dist/types/types.d.ts","./node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/verify.d.ts","./node_modules/jose/dist/types/jws/flattened/verify.d.ts","./node_modules/jose/dist/types/jws/general/verify.d.ts","./node_modules/jose/dist/types/jwt/verify.d.ts","./node_modules/jose/dist/types/jwt/decrypt.d.ts","./node_modules/jose/dist/types/jwt/produce.d.ts","./node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/sign.d.ts","./node_modules/jose/dist/types/jws/flattened/sign.d.ts","./node_modules/jose/dist/types/jws/general/sign.d.ts","./node_modules/jose/dist/types/jwt/sign.d.ts","./node_modules/jose/dist/types/jwt/encrypt.d.ts","./node_modules/jose/dist/types/jwk/thumbprint.d.ts","./node_modules/jose/dist/types/jwk/embedded.d.ts","./node_modules/jose/dist/types/jwks/local.d.ts","./node_modules/jose/dist/types/jwks/remote.d.ts","./node_modules/jose/dist/types/jwt/unsecured.d.ts","./node_modules/jose/dist/types/key/export.d.ts","./node_modules/jose/dist/types/key/import.d.ts","./node_modules/jose/dist/types/util/decode_protected_header.d.ts","./node_modules/jose/dist/types/util/decode_jwt.d.ts","./node_modules/jose/dist/types/util/errors.d.ts","./node_modules/jose/dist/types/key/generate_key_pair.d.ts","./node_modules/jose/dist/types/key/generate_secret.d.ts","./node_modules/jose/dist/types/util/base64url.d.ts","./node_modules/jose/dist/types/util/runtime.d.ts","./node_modules/jose/dist/types/index.d.ts","./node_modules/openid-client/types/index.d.ts","./node_modules/next-auth/providers/oauth-types.d.ts","./node_modules/next-auth/providers/oauth.d.ts","./node_modules/next-auth/providers/email.d.ts","./node_modules/next-auth/core/lib/cookie.d.ts","./node_modules/next-auth/core/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/next-auth/providers/index.d.ts","./node_modules/next-auth/jwt/types.d.ts","./node_modules/next-auth/jwt/index.d.ts","./node_modules/next-auth/utils/logger.d.ts","./node_modules/next-auth/core/types.d.ts","./node_modules/next-auth/next/index.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/github.d.ts","./node_modules/next-auth/providers/google.d.ts","./src/lib/auth.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/lib/types.ts","./src/lib/api.ts","./src/app/api/content-skills/route.ts","./src/app/api/content-skills/__tests__/route.test.ts","./src/app/api/entities/route.ts","./src/app/api/entities/[id]/route.ts","./src/app/api/entities/[id]/__tests__/route.test.ts","./src/app/api/entities/__tests__/route.test.ts","./src/app/api/entity-candidates/[id]/route.ts","./src/app/api/entity-candidates/[id]/__tests__/route.test.ts","./src/app/api/feedback/route.ts","./src/app/api/feedback/__tests__/route.test.ts","./src/app/api/projects/[id]/bluesky-credentials/route.ts","./src/app/api/projects/[id]/bluesky-credentials/__tests__/route.test.ts","./src/app/api/projects/[id]/intake/route.ts","./src/app/api/projects/[id]/intake/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/__tests__/route.test.ts","./src/app/api/projects/[id]/rotate-intake-token/route.ts","./src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/__tests__/route.test.ts","./src/app/api/review/[id]/route.ts","./src/app/api/review/[id]/__tests__/route.test.ts","./src/app/api/skills/[skillName]/route.ts","./src/app/api/skills/[skillName]/__tests__/route.test.ts","./src/app/api/source-configs/route.ts","./src/app/api/source-configs/[id]/route.ts","./src/app/api/source-configs/[id]/__tests__/route.test.ts","./src/app/api/source-configs/__tests__/route.test.ts","./src/lib/view-helpers.ts","./src/lib/dashboard-view.ts","./src/lib/__tests__/api.test.ts","./src/lib/__tests__/auth.test.ts","./src/lib/__tests__/dashboard-view.test.ts","./src/lib/__tests__/view-helpers.test.ts","./test-support/server-only.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/components/query-provider.tsx","./src/app/layout.tsx","./node_modules/next-auth/client/_utils.d.ts","./node_modules/next-auth/react/types.d.ts","./node_modules/next-auth/react/index.d.ts","./src/components/user-menu.tsx","./src/components/app-shell.tsx","./src/components/status-badge.tsx","./src/app/page.tsx","./src/app/__tests__/page.test.tsx","./src/app/admin/health/page.tsx","./src/app/admin/health/__tests__/page.test.tsx","./src/components/copy-button.tsx","./src/app/admin/sources/page.tsx","./src/app/admin/sources/__tests__/page.test.tsx","./src/components/skill-action-bar.tsx","./src/app/content/[id]/page.tsx","./src/app/content/[id]/__tests__/page.test.tsx","./src/app/entities/page.tsx","./src/app/entities/[id]/page.tsx","./src/app/entities/[id]/__tests__/page.test.tsx","./src/app/entities/__tests__/page.test.tsx","./src/components/auth/social-auth-buttons.tsx","./src/components/auth/login-form.tsx","./src/app/login/page.tsx","./src/app/login/__tests__/page.test.tsx","./src/components/__tests__/app-shell.test.tsx","./src/components/__tests__/query-provider.test.tsx","./src/components/__tests__/skill-action-bar.test.tsx","./src/components/__tests__/status-badge.test.tsx","./src/components/__tests__/user-menu.test.tsx","./src/components/auth/__tests__/login-form.test.tsx","./src/components/auth/__tests__/social-auth-buttons.test.tsx","./.next/types/cache-life.d.ts","./.next/types/routes.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/validator.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[101,164,172,176,179,181,182,183,195,512,513,514,515,827],[101,164,172,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,255,553,556,559,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,795,802,804,807,810,812,813,818,827,830],[101,164,172,176,179,181,182,183,195,512,513,514,515,830],[101,164,172,176,179,181,182,183,195,255,553,556,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,795,802,804,807,810,812,813,818,827,828,830],[101,164,172,176,179,181,182,183,195,557,558,559,827,830],[101,164,172,176,179,181,182,183,195,255,557,827,830],[101,164,172,176,179,181,182,183,195,790,827,830],[92,101,164,172,176,179,181,182,183,195,255,791,827,830],[101,164,172,176,179,181,182,183,195,792,827,830],[101,164,172,176,179,181,182,183,195,669,827,830],[101,164,172,176,179,181,182,183,195,666,667,668,669,670,673,674,675,676,677,678,679,680,827,830],[101,164,172,176,179,181,182,183,195,662,827,830],[101,164,172,176,179,181,182,183,195,672,827,830],[101,164,172,176,179,181,182,183,195,666,667,668,827,830],[101,164,172,176,179,181,182,183,195,666,667,827,830],[101,164,172,176,179,181,182,183,195,669,670,672,827,830],[101,164,172,176,179,181,182,183,195,667,827,830],[101,164,172,176,179,181,182,183,195,664,827,830],[101,164,172,176,179,181,182,183,195,663,827,830],[92,101,164,172,176,179,181,182,183,195,225,488,681,682,827,830],[101,164,172,176,179,181,182,183,195,624,625,827,830],[101,161,162,164,172,176,179,181,182,183,195,827,830],[101,163,164,172,176,179,181,182,183,195,827,830],[164,172,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,203,827,830],[101,164,165,170,172,175,176,179,181,182,183,185,195,200,212,827,830],[101,164,165,166,172,175,176,179,181,182,183,195,827,830],[101,164,167,172,176,179,181,182,183,195,213,827,830],[101,164,168,169,172,176,179,181,182,183,186,195,827,830],[101,164,169,172,176,179,181,182,183,195,200,209,827,830],[101,164,170,172,175,176,179,181,182,183,185,195,827,830],[101,163,164,171,172,176,179,181,182,183,195,827,830],[101,164,172,173,176,179,181,182,183,195,827,830],[101,164,172,174,175,176,179,181,182,183,195,827,830],[101,163,164,172,175,176,179,181,182,183,195,827,830],[101,164,172,175,176,177,179,181,182,183,195,200,212,827,830],[101,164,172,175,176,177,179,181,182,183,195,200,203,827,830],[101,151,164,172,175,176,178,179,181,182,183,185,195,200,212,827,830],[101,164,172,175,176,178,179,181,182,183,185,195,200,209,212,827,830],[101,164,172,176,178,179,180,181,182,183,195,200,209,212,827,830],[99,100,101,102,103,104,105,106,107,108,109,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,827,830],[101,164,172,175,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,183,195,827,830],[101,164,172,176,179,181,182,183,184,195,212,827,830],[101,164,172,175,176,179,181,182,183,185,195,200,827,830],[101,164,172,176,179,181,182,183,186,195,827,830],[101,164,172,176,179,181,182,183,187,195,827,830],[101,164,172,175,176,179,181,182,183,190,195,827,830],[101,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,827,830],[101,164,172,176,179,181,182,183,192,195,827,830],[101,164,172,176,179,181,182,183,193,195,827,830],[101,164,169,172,176,179,181,182,183,185,195,203,827,830],[101,164,172,175,176,179,181,182,183,195,196,827,830],[101,164,172,176,179,181,182,183,195,197,213,216,827,830],[101,164,172,175,176,179,181,182,183,195,200,202,203,827,830],[101,164,172,176,179,181,182,183,195,201,203,827,830],[101,164,172,176,179,181,182,183,195,203,213,827,830],[101,164,172,176,179,181,182,183,195,204,827,830],[101,161,164,172,176,179,181,182,183,195,200,206,212,827,830],[101,164,172,176,179,181,182,183,195,200,205,827,830],[101,164,172,175,176,179,181,182,183,195,207,208,827,830],[101,164,172,176,179,181,182,183,195,207,208,827,830],[101,164,169,172,176,179,181,182,183,185,195,200,209,827,830],[101,164,172,176,179,181,182,183,195,210,827,830],[101,164,172,176,179,181,182,183,185,195,211,827,830],[101,164,172,176,178,179,181,182,183,193,195,212,827,830],[101,164,172,176,179,181,182,183,195,213,214,827,830],[101,164,169,172,176,179,181,182,183,195,214,827,830],[101,164,172,176,179,181,182,183,195,200,215,827,830],[101,164,172,176,179,181,182,183,184,195,216,827,830],[101,164,172,176,179,181,182,183,195,217,827,830],[101,164,167,172,176,179,181,182,183,195,827,830],[101,164,169,172,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,213,827,830],[101,151,164,172,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,212,827,830],[101,164,172,176,179,181,182,183,195,218,827,830],[101,164,172,176,179,181,182,183,190,195,827,830],[101,164,172,176,179,181,182,183,195,208,827,830],[101,151,164,172,175,176,177,179,181,182,183,190,195,200,203,212,215,216,218,827,830],[101,164,172,176,179,181,182,183,195,200,219,827,830],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,225,507,552,827,830],[92,101,164,172,176,179,181,182,183,195,827,830],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,224,488,507,552,827,830],[92,96,101,164,172,176,179,181,182,183,195,221,222,224,225,507,552,827,830],[92,101,164,172,176,179,181,182,183,195,225,488,489,827,830],[92,101,164,172,176,179,181,182,183,195,225,488,827,830],[92,96,101,164,172,176,179,181,182,183,195,222,223,224,225,507,552,827,830],[92,96,101,164,172,176,179,181,182,183,195,221,223,224,225,507,552,827,830],[90,91,101,164,172,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,613,614,659,827,830],[101,164,172,176,179,181,182,183,195,617,618,619,622,623,626,827,830],[101,164,172,176,179,181,182,183,195,647,827,830],[101,164,172,176,179,181,182,183,195,647,648,827,830],[101,164,172,176,179,181,182,183,195,622,631,632,827,830],[101,164,172,176,179,181,182,183,195,622,631,827,830],[101,164,172,176,179,181,182,183,195,631,827,830],[101,164,172,176,179,181,182,183,195,620,631,635,636,827,830],[101,164,172,176,179,181,182,183,195,620,631,635,827,830],[101,164,172,176,179,181,182,183,195,616,827,830],[101,164,172,176,179,181,182,183,195,620,621,827,830],[101,164,172,176,179,181,182,183,195,620,827,830],[101,164,172,176,179,181,182,183,195,620,621,628,652,827,830],[101,164,172,176,179,181,182,183,195,628,827,830],[101,164,172,176,179,181,182,183,195,620,623,628,629,630,827,830],[101,164,172,176,179,181,182,183,195,689,690,827,830],[101,164,172,176,179,181,182,183,195,689,690,691,692,827,830],[101,164,172,176,179,181,182,183,195,689,691,827,830],[101,164,172,176,179,181,182,183,195,689,827,830],[101,164,172,176,179,181,182,183,195,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,827,830],[101,164,172,176,179,181,182,183,195,697,827,830],[101,164,172,176,179,181,182,183,195,697,707,827,830],[101,164,172,176,179,181,182,183,195,606,607,827,830],[101,164,172,176,179,181,182,183,195,743,827,830],[101,164,172,176,178,179,181,182,183,195,220,743,827,830],[101,164,172,176,179,181,182,183,195,734,741,827,830],[101,164,172,176,179,181,182,183,195,553,557,741,743,827,830],[101,164,172,176,179,181,182,183,195,696,730,737,739,740,827,830],[101,164,172,176,179,181,182,183,195,735,741,742,827,830],[101,164,172,176,179,181,182,183,195,553,557,738,743,827,830],[101,164,172,176,179,181,182,183,195,220,743,827,830],[101,164,172,176,179,181,182,183,195,735,737,743,827,830],[101,164,172,176,179,181,182,183,195,737,741,743,827,830],[101,164,172,176,179,181,182,183,195,737,827,830],[101,164,172,176,179,181,182,183,195,732,733,736,827,830],[101,164,172,176,179,181,182,183,195,729,730,731,737,743,827,830],[92,101,164,172,176,179,181,182,183,195,737,743,796,797,827,830],[92,101,164,172,176,179,181,182,183,195,737,743,827,830],[101,164,172,176,179,181,182,183,195,510,827,830],[101,164,172,176,179,181,182,183,195,512,513,514,515,827,830],[101,164,172,176,179,181,182,183,195,458,521,522,827,830],[101,164,172,176,179,181,182,183,195,230,231,233,245,269,384,395,503,827,830],[101,164,172,176,179,181,182,183,195,233,264,265,266,268,503,827,830],[101,164,172,176,179,181,182,183,195,233,401,403,405,406,408,503,505,827,830],[101,164,172,176,179,181,182,183,195,233,267,304,503,827,830],[101,164,172,176,179,181,182,183,195,231,233,244,245,251,257,262,383,384,385,394,503,505,827,830],[101,164,172,176,179,181,182,183,195,503,827,830],[101,164,172,176,179,181,182,183,195,240,246,265,285,380,827,830],[101,164,172,176,179,181,182,183,195,233,827,830],[101,164,172,176,179,181,182,183,195,226,240,246,827,830],[101,164,172,176,179,181,182,183,195,412,827,830],[101,164,172,176,179,181,182,183,195,409,410,412,827,830],[101,164,172,176,179,181,182,183,195,409,411,503,827,830],[101,164,172,176,178,179,181,182,183,195,285,482,500,827,830],[101,164,172,176,178,179,181,182,183,195,356,359,375,380,500,827,830],[101,164,172,176,178,179,181,182,183,195,328,500,827,830],[101,164,172,176,179,181,182,183,195,388,827,830],[101,164,172,176,179,181,182,183,195,387,388,389,827,830],[101,164,172,176,179,181,182,183,195,387,827,830],[98,101,164,172,176,178,179,181,182,183,195,226,233,245,251,257,263,265,269,270,283,284,351,381,382,395,503,507,827,830],[101,164,172,176,179,181,182,183,195,230,233,267,304,401,402,407,503,555,827,830],[101,164,172,176,179,181,182,183,195,267,555,827,830],[101,164,172,176,179,181,182,183,195,230,284,453,503,555,827,830],[101,164,172,176,179,181,182,183,195,555,827,830],[101,164,172,176,179,181,182,183,195,233,267,268,555,827,830],[101,164,172,176,179,181,182,183,195,404,555,827,830],[101,164,172,176,179,181,182,183,195,270,383,386,393,827,830],[92,101,164,172,176,179,181,182,183,195,458,827,830],[101,164,172,176,179,181,182,183,193,195,240,255,827,830],[101,164,172,176,179,181,182,183,195,240,255,827,830],[92,101,164,172,176,179,181,182,183,195,325,827,830],[92,101,164,172,176,179,181,182,183,195,255,827,830],[92,101,164,172,176,179,181,182,183,195,246,255,458,827,830],[101,164,172,176,179,181,182,183,195,240,311,325,326,537,544,827,830],[101,164,172,176,179,181,182,183,195,310,538,539,540,541,543,827,830],[101,164,172,176,179,181,182,183,195,361,827,830],[101,164,172,176,179,181,182,183,195,361,362,827,830],[101,164,172,176,179,181,182,183,195,244,246,313,314,827,830],[101,164,172,176,179,181,182,183,195,246,320,321,827,830],[101,164,172,176,179,181,182,183,195,246,315,323,827,830],[101,164,172,176,179,181,182,183,195,320,827,830],[101,164,172,176,179,181,182,183,195,238,246,313,314,315,316,317,318,319,320,323,827,830],[101,164,172,176,179,181,182,183,195,246,313,320,321,322,324,827,830],[101,164,172,176,179,181,182,183,195,246,314,316,317,827,830],[101,164,172,176,179,181,182,183,195,314,316,319,321,827,830],[101,164,172,176,179,181,182,183,195,542,827,830],[101,164,172,176,179,181,182,183,195,246,827,830],[92,101,164,172,176,179,181,182,183,195,234,531,827,830],[92,101,164,172,176,179,181,182,183,195,212,827,830],[92,101,164,172,176,179,181,182,183,195,267,302,827,830],[92,101,164,172,176,179,181,182,183,195,267,395,827,830],[101,164,172,176,179,181,182,183,195,300,305,827,830],[92,101,164,172,176,179,181,182,183,195,301,509,827,830],[101,164,172,176,179,181,182,183,195,787,827,830],[92,96,101,164,172,176,178,179,181,182,183,195,221,222,223,224,225,507,551,827,830],[101,164,172,176,178,179,181,182,183,195,246,827,830],[101,164,172,176,178,179,181,182,183,195,245,250,331,348,390,391,395,450,452,503,504,827,830],[101,164,172,176,179,181,182,183,195,283,392,827,830],[101,164,172,176,179,181,182,183,195,507,827,830],[101,164,172,176,179,181,182,183,195,232,827,830],[92,101,164,172,176,179,181,182,183,195,237,240,455,471,473,827,830],[101,164,172,176,179,181,182,183,193,195,240,455,470,471,472,554,827,830],[101,164,172,176,179,181,182,183,195,464,465,466,467,468,469,827,830],[101,164,172,176,179,181,182,183,195,466,827,830],[101,164,172,176,179,181,182,183,195,470,827,830],[101,164,172,176,179,181,182,183,195,255,419,420,422,827,830],[92,101,164,172,176,179,181,182,183,195,246,413,414,415,416,421,827,830],[101,164,172,176,179,181,182,183,195,419,421,827,830],[101,164,172,176,179,181,182,183,195,417,827,830],[101,164,172,176,179,181,182,183,195,418,827,830],[92,101,164,172,176,179,181,182,183,195,255,301,509,827,830],[92,101,164,172,176,179,181,182,183,195,255,508,509,827,830],[92,101,164,172,176,179,181,182,183,195,255,509,827,830],[101,164,172,176,179,181,182,183,195,348,349,827,830],[101,164,172,176,179,181,182,183,195,349,827,830],[101,164,172,176,178,179,181,182,183,195,504,509,827,830],[101,164,172,176,179,181,182,183,195,378,827,830],[101,163,164,172,176,179,181,182,183,195,377,827,830],[101,164,172,176,179,181,182,183,195,240,246,252,254,356,369,373,375,452,455,492,493,500,504,827,830],[101,164,172,176,179,181,182,183,195,246,295,317,827,830],[101,164,172,176,179,181,182,183,195,356,367,370,375,827,830],[92,101,164,172,176,179,181,182,183,195,237,240,356,359,375,378,412,459,460,461,462,463,474,475,476,477,478,479,480,481,555,827,830],[101,164,172,176,179,181,182,183,195,237,240,265,356,363,364,365,368,369,827,830],[101,164,172,176,179,181,182,183,195,200,246,265,367,374,455,456,500,827,830],[101,164,172,176,179,181,182,183,195,371,827,830],[101,164,172,176,178,179,181,182,183,193,195,234,246,250,260,292,293,296,348,351,416,450,451,492,503,504,505,507,555,827,830],[101,164,172,176,179,181,182,183,195,237,238,240,827,830],[101,164,172,176,179,181,182,183,195,356,827,830],[101,163,164,172,176,179,181,182,183,195,265,292,293,350,351,352,353,354,355,504,827,830],[101,164,172,176,179,181,182,183,195,375,827,830],[101,163,164,172,176,179,181,182,183,195,239,240,250,254,290,356,363,364,365,366,367,370,371,372,373,374,493,827,830],[101,164,172,176,178,179,181,182,183,195,290,291,363,504,505,827,830],[101,164,172,176,179,181,182,183,195,265,293,348,351,356,452,504,827,830],[101,164,172,176,178,179,181,182,183,195,503,505,827,830],[101,164,172,176,178,179,181,182,183,195,200,500,504,505,827,830],[101,164,172,176,178,179,181,182,183,193,195,226,240,245,252,254,257,260,267,287,292,293,294,295,296,331,332,334,337,339,342,343,344,345,347,395,450,452,500,503,504,505,827,830],[101,164,172,176,178,179,181,182,183,195,200,827,830],[101,164,172,176,179,181,182,183,195,233,234,235,263,500,501,502,507,509,555,827,830],[101,164,172,176,179,181,182,183,195,230,231,503,827,830],[101,164,172,176,179,181,182,183,195,424,827,830],[101,164,172,176,178,179,181,182,183,195,200,212,242,408,412,413,414,415,416,422,423,555,827,830],[101,164,172,176,179,181,182,183,193,195,212,226,240,242,254,257,293,332,337,347,348,401,428,429,430,436,439,440,450,452,500,503,827,830],[101,164,172,176,179,181,182,183,195,257,263,270,283,293,351,503,827,830],[101,164,172,176,178,179,181,182,183,195,212,234,245,254,293,434,500,503,827,830],[101,164,172,176,179,181,182,183,195,454,827,830],[101,164,172,176,178,179,181,182,183,195,424,437,438,447,827,830],[101,164,172,176,179,181,182,183,195,500,503,827,830],[101,164,172,176,179,181,182,183,195,353,493,827,830],[101,164,172,176,179,181,182,183,195,254,292,395,509,827,830],[101,164,172,176,178,179,181,182,183,193,195,232,337,397,401,430,436,439,442,500,827,830],[101,164,172,176,178,179,181,182,183,195,270,283,401,443,827,830],[101,164,172,176,179,181,182,183,195,233,294,395,445,503,505,827,830],[101,164,172,176,178,179,181,182,183,195,212,416,503,827,830],[101,164,172,176,178,179,181,182,183,195,267,294,395,396,397,406,424,444,446,503,827,830],[98,101,164,172,176,178,179,181,182,183,195,292,449,507,509,827,830],[101,164,172,176,179,181,182,183,195,346,450,827,830],[101,164,172,176,178,179,181,182,183,193,195,240,243,245,246,252,254,260,269,270,283,293,296,332,334,344,347,348,395,428,429,430,431,433,435,450,452,500,509,827,830],[101,164,172,176,178,179,181,182,183,195,200,270,436,441,447,500,827,830],[101,164,172,176,179,181,182,183,195,273,274,275,276,277,278,279,280,281,282,827,830],[101,164,172,176,179,181,182,183,195,287,338,827,830],[101,164,172,176,179,181,182,183,195,340,827,830],[101,164,172,176,179,181,182,183,195,338,827,830],[101,164,172,176,179,181,182,183,195,340,341,827,830],[101,164,172,176,178,179,181,182,183,195,244,245,246,250,251,504,827,830],[101,164,172,176,178,179,181,182,183,193,195,232,234,252,256,292,295,296,330,450,500,505,507,509,827,830],[101,164,172,176,178,179,181,182,183,193,195,212,236,243,244,254,256,293,448,493,499,504,827,830],[101,164,172,176,179,181,182,183,195,363,827,830],[101,164,172,176,179,181,182,183,195,364,827,830],[101,164,172,176,179,181,182,183,195,246,257,492,827,830],[101,164,172,176,179,181,182,183,195,365,827,830],[101,164,172,176,179,181,182,183,195,239,827,830],[101,164,172,176,179,181,182,183,195,241,253,827,830],[101,164,172,176,178,179,181,182,183,195,241,245,252,827,830],[101,164,172,176,179,181,182,183,195,248,253,827,830],[101,164,172,176,179,181,182,183,195,249,827,830],[101,164,172,176,179,181,182,183,195,241,242,827,830],[101,164,172,176,179,181,182,183,195,241,297,827,830],[101,164,172,176,179,181,182,183,195,241,827,830],[101,164,172,176,179,181,182,183,195,243,287,336,827,830],[101,164,172,176,179,181,182,183,195,335,827,830],[101,164,172,176,179,181,182,183,195,240,242,243,827,830],[101,164,172,176,179,181,182,183,195,243,333,827,830],[101,164,172,176,179,181,182,183,195,240,242,827,830],[101,164,172,176,179,181,182,183,195,292,395,827,830],[101,164,172,176,179,181,182,183,195,492,827,830],[101,164,172,176,178,179,181,182,183,195,212,252,254,258,292,395,449,452,455,456,457,483,484,487,491,493,500,504,827,830],[101,164,172,176,179,181,182,183,195,306,309,311,312,325,326,827,830],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,827,830],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,490,827,830],[101,164,172,176,179,181,182,183,195,379,827,830],[101,164,172,176,179,181,182,183,195,265,286,291,292,356,357,358,359,360,362,375,376,378,381,449,452,503,505,827,830],[101,164,172,176,179,181,182,183,195,325,827,830],[101,164,172,176,178,179,181,182,183,195,330,500,827,830],[101,164,172,176,179,181,182,183,195,330,827,830],[101,164,172,176,178,179,181,182,183,195,252,298,327,329,331,449,500,507,509,827,830],[101,164,172,176,179,181,182,183,195,306,307,308,309,311,312,325,326,508,827,830],[98,101,164,172,176,178,179,181,182,183,193,195,212,241,242,254,260,292,293,296,395,447,448,450,500,503,504,507,827,830],[101,164,172,176,179,181,182,183,195,237,240,247,827,830],[101,164,172,176,179,181,182,183,195,291,293,425,428,827,830],[101,164,172,176,179,181,182,183,195,291,426,494,495,496,497,498,827,830],[101,164,172,176,178,179,181,182,183,195,287,503,827,830],[101,164,172,176,178,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,290,375,827,830],[101,164,172,176,179,181,182,183,195,289,827,830],[101,164,172,176,179,181,182,183,195,291,344,827,830],[101,164,172,176,179,181,182,183,195,288,290,503,827,830],[101,164,172,176,178,179,181,182,183,195,236,291,425,426,427,500,503,504,827,830],[92,101,164,172,176,179,181,182,183,195,240,246,324,827,830],[92,101,164,172,176,179,181,182,183,195,238,827,830],[101,164,172,176,179,181,182,183,195,228,229,827,830],[92,101,164,172,176,179,181,182,183,195,234,827,830],[92,101,164,172,176,179,181,182,183,195,240,310,827,830],[92,98,101,164,172,176,179,181,182,183,195,292,296,507,509,827,830],[101,164,172,176,179,181,182,183,195,234,531,532,827,830],[92,101,164,172,176,179,181,182,183,195,305,827,830],[92,101,164,172,176,179,181,182,183,193,195,212,232,299,301,303,304,509,827,830],[101,164,172,176,179,181,182,183,195,240,267,504,827,830],[101,164,172,176,179,181,182,183,195,240,432,827,830],[92,101,164,172,176,178,179,181,182,183,193,195,230,232,305,403,507,508,827,830],[92,101,164,172,176,179,181,182,183,195,221,222,223,224,225,507,552,827,830],[92,93,94,95,96,101,164,172,176,179,181,182,183,195,827,830],[101,164,172,176,179,181,182,183,195,398,399,400,827,830],[101,164,172,176,179,181,182,183,195,398,827,830],[92,96,101,164,172,176,178,179,180,181,182,183,193,195,220,221,222,223,224,225,226,232,260,265,442,470,505,506,509,552,827,830],[101,164,172,176,179,181,182,183,195,517,827,830],[101,164,172,176,179,181,182,183,195,519,827,830],[101,164,172,176,179,181,182,183,195,523,827,830],[101,164,172,176,179,181,182,183,195,788,827,830],[101,164,172,176,179,181,182,183,195,525,827,830],[101,164,172,176,179,181,182,183,195,527,528,529,827,830],[101,164,172,176,179,181,182,183,195,533,827,830],[97,101,164,172,176,179,181,182,183,195,511,516,518,520,524,526,530,534,536,546,547,549,553,554,555,556,827,830],[101,164,172,176,179,181,182,183,195,535,827,830],[101,164,172,176,179,181,182,183,195,545,827,830],[101,164,172,176,179,181,182,183,195,301,827,830],[101,164,172,176,179,181,182,183,195,548,827,830],[101,163,164,172,176,179,181,182,183,195,291,425,426,428,494,495,497,498,550,552,827,830],[101,164,172,176,179,181,182,183,195,220,827,830],[101,164,169,172,176,178,179,180,181,182,183,195,212,213,220,729,827,830],[101,164,172,176,179,181,182,183,195,601,827,830],[101,164,172,176,179,181,182,183,195,599,601,827,830],[101,164,172,176,179,181,182,183,195,590,598,599,600,602,604,827,830],[101,164,172,176,179,181,182,183,195,588,827,830],[101,164,172,176,179,181,182,183,195,591,596,601,604,827,830],[101,164,172,176,179,181,182,183,195,587,604,827,830],[101,164,172,176,179,181,182,183,195,591,592,595,596,597,604,827,830],[101,164,172,176,179,181,182,183,195,591,592,593,595,596,604,827,830],[101,164,172,176,179,181,182,183,195,588,589,590,591,592,596,597,598,600,601,602,604,827,830],[101,164,172,176,179,181,182,183,195,604,827,830],[101,164,172,176,179,181,182,183,195,586,588,589,590,591,592,593,595,596,597,598,599,600,601,602,603,827,830],[101,164,172,176,179,181,182,183,195,586,604,827,830],[101,164,172,176,179,181,182,183,195,591,593,594,596,597,604,827,830],[101,164,172,176,179,181,182,183,195,595,604,827,830],[101,164,172,176,179,181,182,183,195,596,597,601,604,827,830],[101,164,172,176,179,181,182,183,195,589,599,827,830],[101,164,172,176,179,181,182,183,195,671,827,830],[101,164,172,176,179,181,182,183,195,573,827,830],[101,164,172,176,179,181,182,183,195,565,567,573,827,830],[101,164,172,176,179,181,182,183,195,566,567,827,830],[101,164,172,176,179,181,182,183,195,567,573,577,827,830],[101,164,172,176,179,181,182,183,195,566,827,830],[101,164,172,176,179,181,182,183,195,567,573,827,830],[101,164,172,176,179,181,182,183,195,565,566,567,572,827,830],[101,164,172,176,179,181,182,183,195,565,567,827,830],[101,164,172,176,179,181,182,183,195,566,567,579,827,830],[101,164,172,176,179,181,182,183,195,568,569,570,827,830],[101,164,172,176,179,181,182,183,195,571,827,830],[101,164,172,176,179,181,182,183,195,200,220,827,830],[101,116,119,122,123,164,172,176,179,181,182,183,195,212,827,830],[101,119,164,172,176,179,181,182,183,195,200,212,827,830],[101,119,123,164,172,176,179,181,182,183,195,212,827,830],[101,164,172,176,179,181,182,183,195,200,827,830],[101,113,164,172,176,179,181,182,183,195,827,830],[101,117,164,172,176,179,181,182,183,195,827,830],[101,115,116,119,164,172,176,179,181,182,183,195,212,827,830],[101,164,172,176,179,181,182,183,185,195,209,827,830],[101,113,164,172,176,179,181,182,183,195,220,827,830],[101,115,119,164,172,176,179,181,182,183,185,195,212,827,830],[101,110,111,112,114,118,164,172,175,176,179,181,182,183,195,200,212,827,830],[101,119,128,136,164,172,176,179,181,182,183,195,827,830],[101,111,117,164,172,176,179,181,182,183,195,827,830],[101,119,145,146,164,172,176,179,181,182,183,195,827,830],[101,111,114,119,164,172,176,179,181,182,183,195,203,212,220,827,830],[101,119,164,172,176,179,181,182,183,195,827,830],[101,115,119,164,172,176,179,181,182,183,195,212,827,830],[101,110,164,172,176,179,181,182,183,195,827,830],[101,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,195,827,830],[101,119,138,141,164,172,176,179,181,182,183,195,827,830],[101,119,128,129,130,164,172,176,179,181,182,183,195,827,830],[101,117,119,129,131,164,172,176,179,181,182,183,195,827,830],[101,118,164,172,176,179,181,182,183,195,827,830],[101,111,113,119,164,172,176,179,181,182,183,195,827,830],[101,119,123,129,131,164,172,176,179,181,182,183,195,827,830],[101,123,164,172,176,179,181,182,183,195,827,830],[101,117,119,122,164,172,176,179,181,182,183,195,212,827,830],[101,111,115,119,128,164,172,176,179,181,182,183,195,827,830],[101,119,138,164,172,176,179,181,182,183,195,827,830],[101,131,164,172,176,179,181,182,183,195,827,830],[101,113,119,145,164,172,176,179,181,182,183,195,203,218,220,827,830],[101,164,172,176,179,181,182,183,195,562,827,830],[101,164,172,175,176,178,179,180,181,182,183,185,195,200,209,212,219,220,562,563,564,574,575,576,578,580,582,583,584,585,605,609,610,611,612,613,827,830],[101,164,172,176,179,181,182,183,195,562,563,564,581,827,830],[101,164,172,176,179,181,182,183,195,564,827,830],[101,164,172,176,179,181,182,183,195,608,827,830],[101,164,172,176,179,181,182,183,195,574,584,613,827,830],[101,164,172,176,179,181,182,183,195,574,613,827,830],[101,164,172,176,179,181,182,183,195,654,827,830],[101,164,172,176,179,181,182,183,195,627,659,684,827,830],[101,164,172,176,179,181,182,183,195,617,620,622,623,629,630,631,633,634,637,638,650,651,653,684,827,830],[101,164,172,176,179,181,182,183,195,633,644,645,684,827,830],[101,164,172,176,179,181,182,183,195,633,634,641,684,827,830],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,684,827,830],[101,164,172,176,179,181,182,183,195,582,827,830],[101,164,172,176,179,181,182,183,195,620,627,633,634,637,646,684,827,830],[101,164,172,176,179,181,182,183,195,613,657,659,827,830],[101,164,167,172,176,179,181,182,183,195,200,613,620,622,627,631,633,634,637,638,641,642,643,646,649,650,651,655,656,659,684,827,830],[101,164,172,176,179,181,182,183,195,582,633,634,637,684,827,830],[101,164,172,176,179,181,182,183,195,633,644,645,646,684,827,830],[101,164,172,176,179,181,182,183,195,582,633,638,639,640,684,827,830],[101,164,167,172,176,179,181,182,183,195,200,582,613,620,622,627,631,633,634,637,638,639,640,641,642,643,644,645,646,649,650,651,655,656,657,658,659,684,827,830],[101,164,172,176,179,181,182,183,195,582,617,620,622,627,631,633,634,637,638,639,640,641,642,644,645,646,649,684,685,686,687,688,693,827,830],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,638,644,645,646,684,686,827,830],[101,164,172,176,179,181,182,183,195,694,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,802,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,804,827,830],[101,164,172,176,179,181,182,183,195,255,536,748,749,780,800,801,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,807,827,830],[101,164,172,176,179,181,182,183,195,255,748,749,780,800,801,806,827,830],[101,164,172,176,179,181,182,183,195,255,746,827,830],[101,164,172,176,179,181,182,183,195,255,694,748,749,750,827,830],[101,164,172,176,179,181,182,183,195,255,553,749,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,753,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,752,827,830],[101,164,172,176,179,181,182,183,195,255,694,748,749,756,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,758,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,760,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,765,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,764,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,762,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,768,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,770,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,772,827,830],[101,164,172,176,179,181,182,183,195,255,694,748,749,774,827,830],[101,164,172,176,179,181,182,183,195,255,553,748,749,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,777,827,830],[101,164,172,176,179,181,182,183,195,255,694,749,776,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,810,827,830],[101,164,172,176,179,181,182,183,195,255,536,749,780,800,801,809,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,813,827,830],[101,164,172,176,179,181,182,183,195,255,536,749,780,800,801,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,812,827,830],[92,101,164,172,176,179,181,182,183,195,255,554,557,789,794,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,818,827,830],[101,164,172,176,179,181,182,183,195,255,817,827,830],[101,164,172,176,179,181,182,183,195,255,536,749,780,781,800,801,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,748,800,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,793,794,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,794,809,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,801,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,799,827,830],[92,101,164,172,176,179,181,182,183,195,255,536,748,799,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,817,827,830],[101,164,172,176,179,181,182,183,195,255,683,694,816,827,830],[92,101,164,172,176,179,181,182,183,195,255,536,546,798,816,827,830],[101,164,172,176,179,181,182,183,195,255,798,827,830],[92,101,164,172,176,179,181,182,183,195,255,793,827,830],[92,101,164,172,176,179,181,182,183,195,255,546,748,793,827,830],[92,101,164,172,176,179,181,182,183,195,255,743,798,827,830],[92,101,164,172,176,179,181,182,183,195,255,694,749,827,830],[101,164,172,176,179,181,182,183,195,255,694,746,827,830],[101,164,172,176,179,181,182,183,195,255,694,748,781,827,830],[101,164,172,176,179,181,182,183,195,255,694,748,780,827,830],[92,101,164,172,176,179,181,182,183,195,255,554,743,746,748,827,830],[101,164,172,176,179,181,182,183,195,255,554,736,743,744,745,827,830],[101,164,172,176,179,181,182,183,195,255,748,780,827,830],[101,164,172,176,179,181,182,183,195,255,827,830],[101,164,172,176,179,181,182,183,195,255,748,827,830],[101,164,172,176,179,181,182,183,195,212,255,615,660,827,830],[92,101,164,172,176,179,181,182,183,195,255,683,694,827,830]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc",{"version":"168aa44771e55cda628eeb5fbb6f626f6f263d827967b119e8c06abd7f1362ec","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","impliedFormat":99},{"version":"51d2ffea2d1ee4a81c775938588c1e16620281adb60cbc26579a2fc6baa10bd2","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"a413e4b0b99280e1e58f5fe7b2b585e8a9be4996df8c58585399c9e2ca8a683e","impliedFormat":99},{"version":"609ab2c225766bc0851251c1db0fd5492673e190074045d21dc5dc7c3c46d785","impliedFormat":99},{"version":"c074e054c9db79055d37d7d70131e9a3234b8186773b3edb617c13f80bcf8774","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"7f3857dc5cfe1e5e977edb14e931d9939a952e8e41997263a927f8f0299ea652","impliedFormat":99},{"version":"3559624d0102d10d7765c292c60ccbc229541534db32061e06df88bfe1064636","impliedFormat":99},{"version":"5a9834c603c65aee5cba0c1d6b3c7aee85cdc7862832a23165c6aa4139c165f2","impliedFormat":99},{"version":"a7d7b5fa83cd7b3b4c2aa73bc29e7cbd53d5690b74f6fb39a5558af0a94967ba","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"f093d4bd6a9267be5f8ecbfbca19f4f3359b3839883206150c5d833606569e84","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"4a13397dffad4475c45c70fde584c925fe8c9218b3c7ab94397b68fc434f63b6","impliedFormat":99},{"version":"2faebfa830ae4cfbfb58e48b0ec20a2a63882d776f0ca36ec7155d45cf1b7f2d","impliedFormat":99},{"version":"b478fad6cb2c66bfbfc027983240b416a7733013f878056ba92cf809020018a0","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","impliedFormat":99},{"version":"2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","impliedFormat":99},{"version":"860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","impliedFormat":99},{"version":"7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","impliedFormat":99},{"version":"07ad8a597ac75084e3dd9f9fadf5e8d7ccdcfe2f0c94ea0cf1cd8aa027a6c46e","impliedFormat":99},{"version":"94ddb4a2bb0c69e8efea22c58c2b6f84017eba469a4e433f5396ea8619d051cb","impliedFormat":99},{"version":"064499a671b662b25675beccdd04fb0bdebb6bd49bdb90d448e4b1ce3db20526","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"ae7d986f19db00cd62ce8573307f910ec2103d7fc30df09cedeec3cabec13082","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"ad763fa0c24ede2b818eb6598c12dd581451f94688fb9ed963beba20d513a7ec","signature":"90ec9100c29e008c3d9194acd818e2cfa6dc6e177154bc8e10c5959aa35619ed"},{"version":"b7ca2f47522d4ea41e65ff92c4c6dd9c4c8260da7c456a7631a9c88dc056b4d0","impliedFormat":1},{"version":"4f01e4d0959f9125b89e5737eb1ca2bfa69fd6b7d6126eba22feb8b505b00cde","impliedFormat":1},{"version":"4363a1adb9c77f2ed1ca383a41fbab1afadd35d485c018b2f84e834edde6a2c7","impliedFormat":1},{"version":"1d6458533adb99938d041a93e73c51d6c00e65f84724e9585e3cc8940b25523f","impliedFormat":1},{"version":"b0878fbd194bdc4d49fc9c42bfeeb25650842fe1412c88e283dc80854b019768","impliedFormat":1},{"version":"a892ea0b88d9d19281e99d61baba3155200acced679b8af290f86f695b589b16","impliedFormat":1},{"version":"03b42e83b3bcdf5973d28641d72b81979e3ce200318e4b46feb8347a1828cd5d","impliedFormat":1},{"version":"8a3d57426cd8fb0d59f6ca86f62e05dde8bfd769de3ba45a1a4b2265d84bac5a","impliedFormat":1},{"version":"afc6e1f323b476fdf274e61dab70f26550a1be2353e061ab34e6eed180d349b6","impliedFormat":1},{"version":"7c14483430d839976481fe42e26207f5092f797e1a4190823086f02cd09c113c","impliedFormat":1},{"version":"828a3bea78921789cbd015e968b5b09b671f19b1c14c4bbf3490b58fbf7d6841","impliedFormat":1},{"version":"69759c42e48938a714ee2f002fe5679a7ab56f0b5f29d571e4c31a5398d038fe","impliedFormat":1},{"version":"6e5e666fa6adeb60774b576084eeff65181a40443166f0a46ae9ba0829300fcb","impliedFormat":1},{"version":"1a4d43bdc0f2e240395fd204e597349411c1141dd08f5114c37d6268c3c9d577","impliedFormat":1},{"version":"874e58f8d945c7ac25599128a40ec9615aa67546e91ca12cbf12f97f6baf54ff","impliedFormat":1},{"version":"da2627da8d01662eb137ccd84af7ffa8c94cf2b2547d4970f17802324e54defc","impliedFormat":1},{"version":"07af06b740c01ed0473ebdd3f2911c8e4f5ebf4094291d31db7c1ab24ff559aa","impliedFormat":1},{"version":"ba1450574b1962fcf595fc53362b4d684c76603da5f45b44bc4c7eeed5de045b","impliedFormat":1},{"version":"b7903668ee9558d758c64c15d66a89ed328fee5ac629b2077415f0b6ca2f41bc","impliedFormat":1},{"version":"c7628425ee3076c4530b4074f7d48f012577a59f5ddade39cea236d6405c36ba","impliedFormat":1},{"version":"28c8aff998cc623ab0864a26e2eb1a31da8eb04e59f31fa80f02ec78eb225bcd","impliedFormat":1},{"version":"78d542989bdf7b6ba5410d5a884c0ab5ec54aa9ce46916d34267f885fcf65270","impliedFormat":1},{"version":"4d95060af2775a3a86db5ab47ca7a0ed146d1f6f13e71d96f7ac3b321718a832","impliedFormat":1},{"version":"6708cd298541a89c2abf66cceffc6c661f8ee31c013f98ddb58d2ec4407d0876","impliedFormat":1},{"version":"2e90928c29c445563409d89a834662c2ba6a660204fb3d4dc181914e77f8e29d","impliedFormat":1},{"version":"84be1b8b8011c2aab613901b83309d017d57f6e1c2450dfda11f7b107953286a","impliedFormat":1},{"version":"d7af890ef486b4734d206a66b215ebc09f6743b7fb2f3c79f2fb8716d1912d27","impliedFormat":1},{"version":"7e82c1d070c866eaf448ac7f820403d4e1b86112de582901178906317efc35ad","impliedFormat":1},{"version":"c5c4f547338457f4e8e2bec09f661af14ee6e157c7dc711ccca321ab476dbc6d","impliedFormat":1},{"version":"223e233cb645b44fa058320425293e68c5c00744920fc31f55f7df37b32f11ad","impliedFormat":1},{"version":"1394fe4da1ab8ab3ea2f2b0fcbfd7ccbb8f65f5581f98d10b037c91194141b03","impliedFormat":1},{"version":"086d9e59a579981bdf4f3bfa6e8e893570e5005f7219292bf7d90c153066cdfc","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"cd66a32437a555f7eb63490509a038d1122467f77fe7a114986186d156363215","impliedFormat":1},{"version":"f53d243499acfacc46e882bbf0bf1ae93ecea350e6c22066a062520b94055e47","impliedFormat":1},{"version":"65522e30a02d2720811b11b658c976bff99b553436d99bafd80944acba5b33b4","impliedFormat":1},{"version":"76b3244ec0b2f5b09b4ebf0c7419260813820f128d2b592b07ea59622038e45c","impliedFormat":1},{"version":"66eb7e876b49beff61e33f746f87b6e586382b49f3de21d54d41313aadb27ee6","impliedFormat":1},{"version":"69e8dc4b276b4d431f5517cd6507f209669691c9fb2f97933e7dbd5619fd07b7","impliedFormat":1},{"version":"361a647c06cec2e7437fa5d7cdf07a0dcce3247d93fbf3b6de1dc75139ff5700","impliedFormat":1},{"version":"fe5726291be816d0c89213057cd0c411bb9e39e315ed7e1987adc873f0e26856","impliedFormat":1},{"version":"1b76990de23762eb038e8d80b3f9c810974a7ed2335caa97262c5b752760f11a","impliedFormat":1},{"version":"5e050e05fe99cd06f2d4ad70e73aa4a72961d0df99525e9cad4a78fa588f387b","impliedFormat":1},{"version":"4ff327e8b16da9d54347b548f85675e35a1dc1076f2c22b2858e276771010dd2","impliedFormat":1},{"version":"f767787945b5c51c0c488f50b3b3aeb2804dfd2ddafcb61125d8d8857c339f5a","impliedFormat":1},{"version":"14ab21a9aeff5710d1d1262459a6d49fb42bed835aa0f4cfc36b75aa36faddcd","impliedFormat":1},{"version":"ba3c4682491b477c63716864a035b2cfdd727e64ec3a61f2ca0c9af3c0116cfd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b222d32836d745e1e021bb10f6a0f4a562dd42206203060a8539a6b9f16523f0","impliedFormat":1},{"version":"a3f6d8995864820a0207b7ef4ce1ed6a8dd2fccc7e70d015da15034807c38e1c","impliedFormat":1},{"version":"651df11341eff0b769fb83af75b1872e6cedf406674c5eaa2650551aceb5a816","impliedFormat":1},{"version":"774a466295d26eddab911b9f567040364e7b7d0eb8003ad3bfc92b97eeecf066","signature":"f15b4a91c10bf30ff3708a5e3968c0a52ca4e86a4b9a5b1c4fc8e9b5f1292f21"},"1e9d4c3b066e0228765cef074a9bf49d0b8d3af461c97f2c511e8f7110b56235",{"version":"5a5902f2c8241dd0edc0402eddbe2474bcf2b590fb49de7c76c24779d185a6df","signature":"76d3d5646e901192e1c4d571396ac792f1edfdfa1a6785cf3ea5ade412da19ad"},{"version":"3e983a4e5756fa941c8f4877eb8310b0cb3d6dcd55c481fd252420860050d81c","signature":"3f310b0b316b3e2291fc6e077a76e1506f6697fc2c722fc25225d3ce9cc34e36"},"9dfe98d745dfc706198852e032c3c936092a4484951872c0d18639cf2ab698cf","9f01d110e167ddcfaa01b236040a12699b6ed7a2070d7c362f4403f092fed008","030523c514236148e0f25975ef74b2490c391cb9596cd668728f7db5b0702e08","ca52a606c31ddaae5f7c4055fccb3563cf7e85601c96dbf28b7d0795d2d21af0","41d8a2df75ff7b6ee4c82ef8ce52032aa272358a5f9187a6b5986849200ed411","f25d11b3d781ff8db8614eeee12b43f81ad05389fb25acf10b8c3473b0e2a1d0","78b3214dba4e86c41e4cdf5de5dcc853806ff74fad5df3dc1087cdbe19ad00e0","9980dd11b1e848c16ad84eae18f4e7bfa3331f81c2617533b0e3bba61cb9ab3f","45b82fd88270dd3d0aff39220b341eca789f77c82813dc6695b2058479d8dc28","915d1bc5f4c3b9cc8e25964dcd29b3c00ffb36ab2c8b12b2472533b3113485a9","fcc8fb0967eda9256921f3cfc521d49f3d473232d4c754c09de1d50faa996e35","463efb47c0879fb7e518ca8d209ffc49e2d682d0c47eaf30d074a1032290ac50","a794572bfb0885ec1de20b701e498a415c0480e4fb6c20dbaa125b374ae691cb","dd26e8bac53b883eef657e5c7961170c27944f68825e82a43625c5ccc51c2937","016e4353e0414c98c2ed2eb75df1509a38b457ddf000e9ff98125f82ea42c335","3ef6579bdd5883302539b5370c5670331f3584dff9e2ef14bab39991f00a29cb","e34737b913a2f8775f45e495e660016e0ab0fda68c579f2024d1b596dde2d81c","6677681f753ead74430e87a3398cc92c183570992c77804fc4215178ffc86116","f5a22523635ca6f47c20b386b010ca1258aa19af5f4299f8752809c599315bcf","45f30b5bcbdc28289476e0d66139a564588a9e7a71a62c5af4c425aa4db0b723","4f69209ce0e934946c859c4cc6248ef4a2dc528f5baf9b4fcdea5cf3e08d9d38","041b81f9c2cc3f95588f5ef2da13fce1d895ddd5160979c84c01aaa8873145b4","fb5ce2f104fde415289b4febf27da970e40afefe42b87b15db28818ca9f94132","6e568ff38a9d7070783b26b39b93df658c7466032f4ffa22431dfe2808b7a8bd","3613723853e81414c2e1220e3e0a696a997cc49e4390060b6ac7fd91aec150e4","e4bba7f9edd598a76e24e59f3d47d09cb0295d6c52c8a89e8fa04dc6e6428b16","082900437524e8bc6903f0d26479f590af1814cc5080fc502e07d38c951500be","34eb44fd7813a487540b6afa04da3175388b1841aa3612569e8aa07652363b69","a76367ab8ebbbfb0db994a3d394b71b72c3b72fb69542222ace317e4b61f74ca","cbeab042293806df5cb4e45ba714036477971cb40a2539b20c331a632c1a2c46",{"version":"0f55b5907842f16784dca83f2c82ac05e1e8740f2ec866c95289e05061384e4b","signature":"ad1fb17e5d9b9e839b321a97d6dac9191b671d7a33a24aa44a3b90e5688d1666"},{"version":"7c8545a7c4ec6978ebb4af07475d76007eb084c4f7f45aeba7ee817eeb4316e1","signature":"37eeb4730a8634d70c51bd1933939e66cba31f30600246487f3568cee7742b9c"},"cf081b846c5f25474cebc31a61dac186ac3a71e94668f424b2476eac5b624aea",{"version":"968043e1fd7bb3c6b1c22d3341ede621d16a628b2bc4c35d1e43f0064ff7c1a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6d261c7be483027c9d281ba71314350ad8ce66efabf46f7b6099f39fe3b8d218","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"77637d5324d999a98893db70a77e9df4c58e5d34e9391045b66e8b2b8de19df1","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7992a39d6cde5e050eb78461a8bf9ad986175a94826e835c110b3967290bd249","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"5a2cdf6adeec348bbc876221be4367e8adff0bb78a5680ebd7d71e5c3bad6cc0","impliedFormat":99},{"version":"e004826eac62081f867c66dabd92d3ef7d126d93a70430a2c88429228c3ecc50","impliedFormat":99},{"version":"38d6857b58d2ac42442e396311c542062d4f0dad40f2adb496dd5fd0756ee400","impliedFormat":99},{"version":"34b7d1e2d15845cf08bcf5e3c01adbb92cea1ec27564ee249ba486cdfb28526c","impliedFormat":99},{"version":"cc0e0705b17f5987925bf05b5a7da622a76ad691274a428cf18fb28b33a7a1cf","signature":"01e6799210215286acf67be8c15da37b72af300e0f7f32c7f11535415e25ee88"},{"version":"ab640e52df6129fa178d5c0f2860542954ea38af4b0801a92c3ac09f6a9eec7c","signature":"91212f9905f489a1993df856acac1939544f6166e4cafff1c4f0949e37a8a11d"},{"version":"c3d577953f04c0188d8b9c63b2748b814efda6440336fa49557f0079f5cf748a","impliedFormat":1},{"version":"787fe950e18951b7970ec98cb05b3d0b11fcdfeb2091a7ea481ac9e52bf6c086","impliedFormat":1},{"version":"13ceda04874f09091da1994ba5f58bf1e9439af93336616257691863560b3f13","impliedFormat":1},{"version":"9f51e1b45772c037ff9f4b4e7d1074192f7c5307e51f026c556af64081acd3a9","signature":"fb69d502157f1cf71cb8c737f6909c2e82f2a53b8157f840411444435f5da3d1"},{"version":"1aea4ec138a31bf0914fe68fe2b3e7bcd6de65dce1b693da7abe16e4b50a15ef","signature":"c2f4c6ab17d07762713d80c4c29cba3cfffd690fe6c569a17c0be5d0d3e810f5"},{"version":"a941595362ff7e12adee1605aea8495d9bc96cd833d95c87f83cad2b5838165a","signature":"b67fa3b5b051ead6f5048d73c953d289234953f832922ffc4dfe293d5c6bfc98"},"c98b1727a4c0ccfbd4df609bad278f1af184a069d232f978a327d53110677480","fe6c8ac352967dee9fa65a4d4bb09cc1d6b084845aa7726e47aabbb4a0005724",{"version":"76cc225f61f545122672c27ff69aa27d1e7578d653c5fe942ebe88601cea0b02","signature":"87d223b2d0fc4ffc6f3bd5bbf3d4e036171c472cffb6a792c31427b714f4f442"},{"version":"869aca3c1e828d4fccdc6e1c2ce03b6e6557fa5d88e96200aaac2371a0e18a60","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f3415880499901a01feef00e1b3042f670dabad8b5a131c22994f5f951dbdf2f","signature":"28007b7d2b577a868c587c22500f2ab77490b6390909ffbdd3b04dac98e69a18"},"789957c66d154bfb21cd2700f89938a754f100f30e4b4829fb5e376ed9898f90","c47f84f214f858a8ee98326d180b0710696a89e90bac7b127fe5a802f02f7660",{"version":"fc51205c27f22f7194f3c026cdf19c5b27f19190a97955b9ffce0db45858e42f","signature":"ba90586e9f08bbe0d660358dcee98b83dadce2bfa013ca3e8d93f8d7924a9c66"},"54c008f175512ea8e8854d138dcf76b2af5e59e6816e82e87a360d76f3c7f820","1437cb46ce6685e09f99064175b8fa5c416e9e9f919f4a1590651aaa16845a85","8bc24afa3c5fb73fd0dc89f091d2cb65b9d54f7a90b37302e9bd679ba504b0e3","51610870e75caaf1ff890f1fb949366cd7d843b4aa2e734c166bb307a78f33ea","9f939bb8371353fb9134b7509b49d7257eeb9b8a9e23d02bf455e65f31ae42ea","1ec02d49cdfc0a9e92509e3e4f0a03b39f9cad158a33287f5c2f84bc144609ac",{"version":"f20b8d5c86e426ce2d1505f4a3114e66411272aa8394e0ad323c0c3b1d1fadff","signature":"b41f35e5ae414583d72cc2aa3a17cc23d40f4b9e221f92acd74ed09bb3daaa63"},{"version":"74b006e51c1fe0198db4fd239bdfb2063fb3b0139bbb3dbaab79f323f42ba6bf","signature":"83057fe16cf05e5bf626fd4e46379506199130438abbd2ae42de6234bb202181"},{"version":"c247b5bb6d297cb7c9607645b1486b2f7b3ee0c05fac97d18e6daf4e3b25ebeb","signature":"5a224c6b95c526ad3f70b7b5894a2fe9b50cb5a9eed53b87806cf1045f8d7bab"},{"version":"dd7a9804bfd52806479d69214126956478367bb3a2c333b589ddcc253aae03d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"efe8be357f750be0d3023e78f165b0c730dd81704c95b46857084507d687e737","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"20375a205b37d0f527f1f3fb6cc5d6c2076c1b57f74b9024f8153e0f3f0289a9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3557b3416d97219e58a39fecce338b086bd42db6ce7ef701e8265783fbd20c6f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"83f21e09f1a6d980cc7cf83252deccd5d997e67266ae8bd450ef8899fcab1884","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6e70039e5a6af8ab06917dc2dd007fa8caabea0a2533303bca6be8510ae2cfd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f4722121739886d9694fe6d74b91f654b2b26459edd6e275fb5ff1a509bbc262","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c46f9542d2d4a44df84e20e37348c86abfb57804268f5236874fa8a8b7639f5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},{"version":"4332f611f915908b335662f95ac6047288d3bc0b939e06d59e369b96a28eaa70","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","1bbd475eaf5bfb166aaee62b5c40d5a2ef4a87787d0e08a6cbfcf71426aa205f",{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[559,561],661,695,[746,786],794,795,[799,831]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[830,1],[559,2],[831,3],[827,4],[828,2],[829,5],[560,6],[561,7],[403,2],[566,2],[619,2],[790,2],[791,8],[792,9],[793,10],[679,2],[676,2],[675,2],[670,11],[681,12],[666,13],[677,14],[669,15],[668,16],[678,2],[673,17],[680,2],[674,18],[667,2],[665,19],[664,20],[663,13],[683,21],[662,2],[626,22],[624,2],[161,23],[162,23],[163,24],[101,25],[164,26],[165,27],[166,28],[99,2],[167,29],[168,30],[169,31],[170,32],[171,33],[172,34],[173,34],[174,35],[175,36],[176,37],[177,38],[102,2],[100,2],[178,39],[179,40],[180,41],[220,42],[181,43],[182,44],[183,43],[184,45],[185,46],[186,47],[187,48],[188,48],[189,48],[190,49],[191,50],[192,51],[193,52],[194,53],[195,54],[196,54],[197,55],[198,2],[199,2],[200,56],[201,57],[202,56],[203,58],[204,59],[205,60],[206,61],[207,62],[208,63],[209,64],[210,65],[211,66],[212,67],[213,68],[214,69],[215,70],[216,71],[217,72],[103,43],[104,2],[105,73],[106,74],[107,2],[108,75],[109,2],[152,76],[153,77],[154,78],[155,78],[156,79],[157,2],[158,26],[159,80],[160,77],[218,81],[219,82],[224,83],[488,84],[225,85],[223,86],[490,87],[489,88],[682,84],[221,89],[486,2],[222,90],[90,2],[92,91],[485,84],[255,84],[615,92],[614,2],[627,93],[648,94],[649,95],[647,2],[620,2],[633,96],[632,97],[644,96],[635,98],[637,99],[656,99],[636,100],[617,101],[616,2],[622,102],[623,103],[653,104],[629,105],[631,106],[652,2],[650,105],[630,2],[621,103],[628,2],[625,2],[91,2],[691,107],[693,108],[692,109],[690,110],[689,2],[729,111],[698,112],[708,112],[699,112],[709,112],[700,112],[701,112],[716,112],[715,112],[717,112],[718,112],[710,112],[702,112],[711,112],[703,112],[712,112],[704,112],[706,112],[714,113],[707,112],[713,113],[719,113],[705,112],[720,112],[725,112],[726,112],[721,112],[697,2],[727,2],[723,112],[722,112],[724,112],[728,112],[606,2],[608,114],[607,2],[696,115],[796,116],[735,117],[734,118],[741,119],[743,120],[739,121],[738,122],[742,118],[736,123],[733,124],[744,125],[745,125],[737,126],[731,2],[732,127],[798,128],[797,129],[740,2],[511,130],[516,131],[523,132],[506,133],[259,2],[267,134],[407,135],[410,136],[382,2],[395,137],[402,138],[284,2],[384,2],[265,2],[381,139],[427,140],[266,2],[257,141],[409,142],[411,143],[412,144],[483,145],[376,146],[329,147],[389,148],[390,149],[388,150],[387,2],[383,151],[408,152],[268,153],[453,2],[454,154],[295,155],[269,156],[296,155],[332,155],[235,155],[405,157],[404,2],[394,158],[501,2],[244,2],[522,159],[461,160],[462,161],[458,162],[540,2],[359,2],[463,163],[459,164],[545,165],[544,166],[539,2],[310,2],[362,167],[361,2],[538,168],[460,84],[315,169],[322,170],[324,171],[314,2],[319,172],[321,173],[323,174],[318,175],[316,2],[320,176],[541,2],[537,2],[543,177],[542,2],[313,178],[532,179],[535,180],[303,181],[302,182],[301,183],[548,84],[300,184],[289,2],[550,2],[788,185],[787,2],[551,84],[552,186],[227,2],[391,187],[392,188],[393,189],[231,2],[396,2],[251,190],[226,2],[475,84],[233,191],[474,192],[473,193],[464,2],[465,2],[472,2],[467,2],[470,194],[466,2],[468,195],[471,196],[469,195],[264,2],[261,2],[262,155],[416,2],[421,197],[422,198],[420,199],[418,200],[419,201],[414,2],[481,163],[256,163],[510,202],[517,203],[521,204],[350,205],[349,2],[344,2],[497,206],[505,207],[377,208],[378,209],[456,210],[366,2],[479,211],[354,84],[371,212],[482,213],[367,2],[370,214],[368,2],[480,215],[477,216],[476,2],[478,2],[374,2],[452,217],[239,218],[352,219],[356,220],[372,221],[375,222],[364,223],[357,224],[504,225],[430,226],[348,227],[236,228],[503,229],[232,230],[423,231],[415,2],[424,232],[441,233],[413,2],[440,234],[98,2],[435,235],[260,2],[455,236],[431,2],[245,2],[247,2],[386,2],[439,237],[263,2],[287,238],[373,239],[293,240],[353,2],[438,2],[417,2],[443,241],[444,242],[385,2],[446,243],[448,244],[447,245],[397,2],[437,228],[450,246],[347,247],[436,248],[442,249],[272,2],[276,2],[275,2],[274,2],[279,2],[273,2],[282,2],[281,2],[278,2],[277,2],[280,2],[283,250],[271,2],[339,251],[338,2],[343,252],[340,253],[342,254],[345,252],[341,253],[252,255],[331,256],[500,257],[498,2],[527,258],[529,259],[493,260],[528,261],[240,262],[237,262],[270,2],[254,263],[253,264],[249,265],[250,266],[258,267],[286,267],[297,267],[333,268],[298,268],[242,269],[241,2],[337,270],[336,271],[335,272],[334,273],[243,274],[484,275],[285,276],[492,277],[457,278],[487,279],[491,280],[380,281],[379,282],[360,283],[346,284],[328,285],[330,286],[327,287],[449,288],[351,2],[515,2],[248,289],[451,290],[499,291],[358,2],[288,292],[365,293],[363,294],[290,295],[425,296],[494,2],[291,297],[426,297],[513,2],[512,2],[514,2],[496,2],[495,2],[428,298],[355,2],[325,299],[246,300],[304,2],[230,301],[292,2],[519,84],[229,2],[531,302],[312,84],[525,163],[311,303],[508,304],[309,302],[234,2],[533,305],[307,84],[308,84],[299,2],[228,2],[306,306],[305,307],[294,308],[369,52],[429,52],[445,2],[433,309],[432,2],[317,178],[238,2],[326,84],[502,190],[509,310],[93,84],[96,311],[97,312],[94,84],[95,2],[406,74],[401,313],[400,2],[399,314],[398,2],[507,315],[518,316],[520,317],[524,318],[789,319],[526,320],[530,321],[558,322],[534,322],[557,323],[536,324],[546,325],[547,326],[549,327],[553,328],[556,190],[555,2],[554,329],[730,330],[602,331],[600,332],[601,333],[589,334],[590,332],[597,335],[588,336],[593,337],[603,2],[594,338],[599,339],[605,340],[604,341],[587,342],[595,343],[596,344],[591,345],[598,331],[592,346],[672,347],[671,2],[611,348],[574,349],[575,350],[578,351],[567,352],[577,353],[573,354],[565,2],[579,355],[580,356],[568,2],[569,2],[571,357],[570,2],[572,358],[434,359],[586,2],[645,2],[618,2],[88,2],[89,2],[14,2],[15,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[64,2],[65,2],[66,2],[11,2],[67,2],[68,2],[69,2],[70,2],[71,2],[72,2],[12,2],[73,2],[74,2],[75,2],[76,2],[77,2],[1,2],[78,2],[79,2],[13,2],[80,2],[81,2],[82,2],[83,2],[84,2],[85,2],[86,2],[87,2],[128,360],[140,361],[125,362],[141,363],[150,364],[116,365],[117,366],[115,367],[149,329],[144,368],[148,369],[119,370],[137,371],[118,372],[147,373],[113,374],[114,368],[120,375],[121,2],[127,376],[124,375],[111,377],[151,378],[142,379],[131,380],[130,375],[132,381],[135,382],[129,383],[133,384],[145,329],[122,385],[123,386],[136,387],[112,363],[139,388],[138,375],[126,386],[134,389],[143,2],[110,2],[146,390],[563,391],[613,392],[582,393],[564,391],[562,2],[581,394],[612,2],[610,2],[583,2],[609,395],[576,396],[585,2],[584,397],[655,398],[660,399],[654,400],[646,401],[642,402],[638,403],[651,2],[639,98],[687,404],[684,405],[658,406],[657,407],[640,408],[686,409],[634,2],[641,410],[659,411],[694,412],[688,413],[832,414],[685,2],[643,2],[803,415],[805,416],[804,417],[808,418],[807,419],[747,420],[751,421],[750,422],[754,423],[753,422],[755,424],[752,422],[757,425],[756,422],[759,426],[758,422],[761,427],[760,422],[766,428],[765,422],[767,429],[764,422],[763,430],[762,422],[769,431],[768,422],[771,432],[770,422],[773,433],[772,422],[775,434],[774,435],[778,436],[777,422],[779,437],[776,422],[811,438],[810,439],[814,440],[813,441],[815,442],[812,441],[795,443],[819,444],[818,445],[802,446],[820,447],[821,448],[822,449],[823,450],[824,451],[800,452],[825,453],[826,454],[817,455],[816,456],[806,163],[794,457],[809,458],[801,163],[799,459],[782,460],[783,461],[784,462],[785,463],[749,464],[746,465],[781,466],[748,467],[780,468],[786,467],[661,469],[695,470]],"affectedFilesPendingEmit":[831,829,561,803,805,804,808,807,747,751,750,754,753,755,752,757,756,759,758,761,760,766,765,767,764,763,762,769,768,771,770,773,772,775,774,778,777,779,776,811,810,814,813,815,812,795,819,818,802,820,821,822,823,824,800,825,826,817,816,806,794,809,801,799,782,783,784,785,749,746,781,748,780,786,661,695],"version":"6.0.3"} +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.es2025.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.es2025.collection.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.es2025.intl.d.ts","./node_modules/typescript/lib/lib.es2025.iterator.d.ts","./node_modules/typescript/lib/lib.es2025.promise.d.ts","./node_modules/typescript/lib/lib.es2025.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.date.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.esnext.temporal.d.ts","./node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/dev/types/routes.d.ts","./next-env.d.ts","./next.config.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/index.d.ts","./node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionalTypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-Bh0IjN67.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.CEnv6XRv.d.ts","./node_modules/vitest/dist/chunks/plugin.d.BM2TCi12.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/jest-dom/types/matchers.d.ts","./node_modules/@testing-library/jest-dom/types/jest.d.ts","./node_modules/@testing-library/jest-dom/types/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./vitest.setup.ts","./node_modules/next-auth/adapters.d.ts","./node_modules/jose/dist/types/types.d.ts","./node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/verify.d.ts","./node_modules/jose/dist/types/jws/flattened/verify.d.ts","./node_modules/jose/dist/types/jws/general/verify.d.ts","./node_modules/jose/dist/types/jwt/verify.d.ts","./node_modules/jose/dist/types/jwt/decrypt.d.ts","./node_modules/jose/dist/types/jwt/produce.d.ts","./node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/sign.d.ts","./node_modules/jose/dist/types/jws/flattened/sign.d.ts","./node_modules/jose/dist/types/jws/general/sign.d.ts","./node_modules/jose/dist/types/jwt/sign.d.ts","./node_modules/jose/dist/types/jwt/encrypt.d.ts","./node_modules/jose/dist/types/jwk/thumbprint.d.ts","./node_modules/jose/dist/types/jwk/embedded.d.ts","./node_modules/jose/dist/types/jwks/local.d.ts","./node_modules/jose/dist/types/jwks/remote.d.ts","./node_modules/jose/dist/types/jwt/unsecured.d.ts","./node_modules/jose/dist/types/key/export.d.ts","./node_modules/jose/dist/types/key/import.d.ts","./node_modules/jose/dist/types/util/decode_protected_header.d.ts","./node_modules/jose/dist/types/util/decode_jwt.d.ts","./node_modules/jose/dist/types/util/errors.d.ts","./node_modules/jose/dist/types/key/generate_key_pair.d.ts","./node_modules/jose/dist/types/key/generate_secret.d.ts","./node_modules/jose/dist/types/util/base64url.d.ts","./node_modules/jose/dist/types/util/runtime.d.ts","./node_modules/jose/dist/types/index.d.ts","./node_modules/openid-client/types/index.d.ts","./node_modules/next-auth/providers/oauth-types.d.ts","./node_modules/next-auth/providers/oauth.d.ts","./node_modules/next-auth/providers/email.d.ts","./node_modules/next-auth/core/lib/cookie.d.ts","./node_modules/next-auth/core/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/next-auth/providers/index.d.ts","./node_modules/next-auth/jwt/types.d.ts","./node_modules/next-auth/jwt/index.d.ts","./node_modules/next-auth/utils/logger.d.ts","./node_modules/next-auth/core/types.d.ts","./node_modules/next-auth/next/index.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/github.d.ts","./node_modules/next-auth/providers/google.d.ts","./src/lib/auth.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/lib/types.ts","./src/lib/api.ts","./src/app/api/content-skills/route.ts","./src/app/api/content-skills/__tests__/route.test.ts","./src/app/api/entities/route.ts","./src/app/api/entities/[id]/route.ts","./src/app/api/entities/[id]/__tests__/route.test.ts","./src/app/api/entities/__tests__/route.test.ts","./src/app/api/entity-candidates/[id]/route.ts","./src/app/api/entity-candidates/[id]/__tests__/route.test.ts","./src/app/api/feedback/route.ts","./src/app/api/feedback/__tests__/route.test.ts","./src/app/api/projects/[id]/bluesky-credentials/route.ts","./src/app/api/projects/[id]/bluesky-credentials/__tests__/route.test.ts","./src/app/api/projects/[id]/intake/route.ts","./src/app/api/projects/[id]/intake/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/__tests__/route.test.ts","./src/app/api/projects/[id]/rotate-intake-token/route.ts","./src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/__tests__/route.test.ts","./src/app/api/review/[id]/route.ts","./src/app/api/review/[id]/__tests__/route.test.ts","./src/app/api/skills/[skillName]/route.ts","./src/app/api/skills/[skillName]/__tests__/route.test.ts","./src/app/api/source-configs/route.ts","./src/app/api/source-configs/[id]/route.ts","./src/app/api/source-configs/[id]/__tests__/route.test.ts","./src/app/api/source-configs/__tests__/route.test.ts","./src/lib/view-helpers.ts","./src/lib/dashboard-view.ts","./node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/lib/useRole.ts","./src/lib/__tests__/api.test.ts","./src/lib/__tests__/auth.test.ts","./src/lib/__tests__/dashboard-view.test.ts","./src/lib/__tests__/view-helpers.test.ts","./test-support/server-only.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/components/query-provider.tsx","./src/app/layout.tsx","./node_modules/next-auth/client/_utils.d.ts","./node_modules/next-auth/react/types.d.ts","./node_modules/next-auth/react/index.d.ts","./src/components/user-menu.tsx","./src/components/app-shell.tsx","./src/components/status-badge.tsx","./src/app/page.tsx","./src/app/__tests__/page.test.tsx","./src/app/admin/health/page.tsx","./src/app/admin/health/__tests__/page.test.tsx","./src/components/copy-button.tsx","./src/app/admin/sources/page.tsx","./src/app/admin/sources/__tests__/page.test.tsx","./src/components/skill-action-bar.tsx","./src/app/content/[id]/page.tsx","./src/app/content/[id]/__tests__/page.test.tsx","./src/app/entities/page.tsx","./src/app/entities/[id]/page.tsx","./src/app/entities/[id]/__tests__/page.test.tsx","./src/app/entities/__tests__/page.test.tsx","./src/components/auth/social-auth-buttons.tsx","./src/components/auth/login-form.tsx","./src/app/login/page.tsx","./src/app/login/__tests__/page.test.tsx","./src/components/__tests__/app-shell.test.tsx","./src/components/__tests__/query-provider.test.tsx","./src/components/__tests__/skill-action-bar.test.tsx","./src/components/__tests__/status-badge.test.tsx","./src/components/__tests__/user-menu.test.tsx","./src/components/auth/__tests__/login-form.test.tsx","./src/components/auth/__tests__/social-auth-buttons.test.tsx","./src/lib/__tests__/useRole.test.tsx","./.next/types/cache-life.d.ts","./.next/types/routes.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/validator.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[101,164,172,176,179,181,182,183,195,512,513,514,515,829],[101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,255,553,556,559,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,796,803,805,808,811,813,814,819,829,832],[101,164,172,176,179,181,182,183,195,512,513,514,515,832],[101,164,172,176,179,181,182,183,195,255,553,556,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,796,803,805,808,811,813,814,819,829,830,832],[101,164,172,176,179,181,182,183,195,557,558,559,829,832],[101,164,172,176,179,181,182,183,195,255,557,829,832],[101,164,172,176,179,181,182,183,195,782,829,832],[92,101,164,172,176,179,181,182,183,195,255,783,829,832],[101,164,172,176,179,181,182,183,195,784,829,832],[101,164,172,176,179,181,182,183,195,669,829,832],[101,164,172,176,179,181,182,183,195,666,667,668,669,670,673,674,675,676,677,678,679,680,829,832],[101,164,172,176,179,181,182,183,195,662,829,832],[101,164,172,176,179,181,182,183,195,672,829,832],[101,164,172,176,179,181,182,183,195,666,667,668,829,832],[101,164,172,176,179,181,182,183,195,666,667,829,832],[101,164,172,176,179,181,182,183,195,669,670,672,829,832],[101,164,172,176,179,181,182,183,195,667,829,832],[101,164,172,176,179,181,182,183,195,664,829,832],[101,164,172,176,179,181,182,183,195,663,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,681,682,829,832],[101,164,172,176,179,181,182,183,195,624,625,829,832],[101,161,162,164,172,176,179,181,182,183,195,829,832],[101,163,164,172,176,179,181,182,183,195,829,832],[164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,203,829,832],[101,164,165,170,172,175,176,179,181,182,183,185,195,200,212,829,832],[101,164,165,166,172,175,176,179,181,182,183,195,829,832],[101,164,167,172,176,179,181,182,183,195,213,829,832],[101,164,168,169,172,176,179,181,182,183,186,195,829,832],[101,164,169,172,176,179,181,182,183,195,200,209,829,832],[101,164,170,172,175,176,179,181,182,183,185,195,829,832],[101,163,164,171,172,176,179,181,182,183,195,829,832],[101,164,172,173,176,179,181,182,183,195,829,832],[101,164,172,174,175,176,179,181,182,183,195,829,832],[101,163,164,172,175,176,179,181,182,183,195,829,832],[101,164,172,175,176,177,179,181,182,183,195,200,212,829,832],[101,164,172,175,176,177,179,181,182,183,195,200,203,829,832],[101,151,164,172,175,176,178,179,181,182,183,185,195,200,212,829,832],[101,164,172,175,176,178,179,181,182,183,185,195,200,209,212,829,832],[101,164,172,176,178,179,180,181,182,183,195,200,209,212,829,832],[99,100,101,102,103,104,105,106,107,108,109,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,829,832],[101,164,172,175,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,183,195,829,832],[101,164,172,176,179,181,182,183,184,195,212,829,832],[101,164,172,175,176,179,181,182,183,185,195,200,829,832],[101,164,172,176,179,181,182,183,186,195,829,832],[101,164,172,176,179,181,182,183,187,195,829,832],[101,164,172,175,176,179,181,182,183,190,195,829,832],[101,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,829,832],[101,164,172,176,179,181,182,183,192,195,829,832],[101,164,172,176,179,181,182,183,193,195,829,832],[101,164,169,172,176,179,181,182,183,185,195,203,829,832],[101,164,172,175,176,179,181,182,183,195,196,829,832],[101,164,172,176,179,181,182,183,195,197,213,216,829,832],[101,164,172,175,176,179,181,182,183,195,200,202,203,829,832],[101,164,172,176,179,181,182,183,195,201,203,829,832],[101,164,172,176,179,181,182,183,195,203,213,829,832],[101,164,172,176,179,181,182,183,195,204,829,832],[101,161,164,172,176,179,181,182,183,195,200,206,212,829,832],[101,164,172,176,179,181,182,183,195,200,205,829,832],[101,164,172,175,176,179,181,182,183,195,207,208,829,832],[101,164,172,176,179,181,182,183,195,207,208,829,832],[101,164,169,172,176,179,181,182,183,185,195,200,209,829,832],[101,164,172,176,179,181,182,183,195,210,829,832],[101,164,172,176,179,181,182,183,185,195,211,829,832],[101,164,172,176,178,179,181,182,183,193,195,212,829,832],[101,164,172,176,179,181,182,183,195,213,214,829,832],[101,164,169,172,176,179,181,182,183,195,214,829,832],[101,164,172,176,179,181,182,183,195,200,215,829,832],[101,164,172,176,179,181,182,183,184,195,216,829,832],[101,164,172,176,179,181,182,183,195,217,829,832],[101,164,167,172,176,179,181,182,183,195,829,832],[101,164,169,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,213,829,832],[101,151,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,195,218,829,832],[101,164,172,176,179,181,182,183,190,195,829,832],[101,164,172,176,179,181,182,183,195,208,829,832],[101,151,164,172,175,176,177,179,181,182,183,190,195,200,203,212,215,216,218,829,832],[101,164,172,176,179,181,182,183,195,200,219,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,225,507,552,829,832],[92,101,164,172,176,179,181,182,183,195,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,224,488,507,552,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,224,225,507,552,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,489,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,829,832],[92,96,101,164,172,176,179,181,182,183,195,222,223,224,225,507,552,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,223,224,225,507,552,829,832],[90,91,101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,613,614,659,829,832],[101,164,172,176,179,181,182,183,195,617,618,619,622,623,626,829,832],[101,164,172,176,179,181,182,183,195,647,829,832],[101,164,172,176,179,181,182,183,195,647,648,829,832],[101,164,172,176,179,181,182,183,195,622,631,632,829,832],[101,164,172,176,179,181,182,183,195,622,631,829,832],[101,164,172,176,179,181,182,183,195,631,829,832],[101,164,172,176,179,181,182,183,195,620,631,635,636,829,832],[101,164,172,176,179,181,182,183,195,620,631,635,829,832],[101,164,172,176,179,181,182,183,195,616,829,832],[101,164,172,176,179,181,182,183,195,620,621,829,832],[101,164,172,176,179,181,182,183,195,620,829,832],[101,164,172,176,179,181,182,183,195,620,621,628,652,829,832],[101,164,172,176,179,181,182,183,195,628,829,832],[101,164,172,176,179,181,182,183,195,620,623,628,629,630,829,832],[101,164,172,176,179,181,182,183,195,689,690,829,832],[101,164,172,176,179,181,182,183,195,689,690,691,692,829,832],[101,164,172,176,179,181,182,183,195,689,691,829,832],[101,164,172,176,179,181,182,183,195,689,829,832],[101,164,172,176,179,181,182,183,195,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,829,832],[101,164,172,176,179,181,182,183,195,697,829,832],[101,164,172,176,179,181,182,183,195,697,707,829,832],[101,164,172,176,179,181,182,183,195,606,607,829,832],[101,164,172,176,179,181,182,183,195,743,829,832],[101,164,172,176,178,179,181,182,183,195,220,743,829,832],[101,164,172,176,179,181,182,183,195,734,741,829,832],[101,164,172,176,179,181,182,183,195,553,557,741,743,829,832],[101,164,172,176,179,181,182,183,195,696,730,737,739,740,829,832],[101,164,172,176,179,181,182,183,195,735,741,742,829,832],[101,164,172,176,179,181,182,183,195,553,557,738,743,829,832],[101,164,172,176,179,181,182,183,195,220,743,829,832],[101,164,172,176,179,181,182,183,195,735,737,743,829,832],[101,164,172,176,179,181,182,183,195,737,741,743,829,832],[101,164,172,176,179,181,182,183,195,737,829,832],[101,164,172,176,179,181,182,183,195,732,733,736,829,832],[101,164,172,176,179,181,182,183,195,729,730,731,737,743,829,832],[92,101,164,172,176,179,181,182,183,195,737,743,797,798,829,832],[92,101,164,172,176,179,181,182,183,195,737,743,829,832],[101,164,172,176,179,181,182,183,195,510,829,832],[101,164,172,176,179,181,182,183,195,512,513,514,515,829,832],[101,164,172,176,179,181,182,183,195,458,521,522,829,832],[101,164,172,176,179,181,182,183,195,230,231,233,245,269,384,395,503,829,832],[101,164,172,176,179,181,182,183,195,233,264,265,266,268,503,829,832],[101,164,172,176,179,181,182,183,195,233,401,403,405,406,408,503,505,829,832],[101,164,172,176,179,181,182,183,195,233,267,304,503,829,832],[101,164,172,176,179,181,182,183,195,231,233,244,245,251,257,262,383,384,385,394,503,505,829,832],[101,164,172,176,179,181,182,183,195,503,829,832],[101,164,172,176,179,181,182,183,195,240,246,265,285,380,829,832],[101,164,172,176,179,181,182,183,195,233,829,832],[101,164,172,176,179,181,182,183,195,226,240,246,829,832],[101,164,172,176,179,181,182,183,195,412,829,832],[101,164,172,176,179,181,182,183,195,409,410,412,829,832],[101,164,172,176,179,181,182,183,195,409,411,503,829,832],[101,164,172,176,178,179,181,182,183,195,285,482,500,829,832],[101,164,172,176,178,179,181,182,183,195,356,359,375,380,500,829,832],[101,164,172,176,178,179,181,182,183,195,328,500,829,832],[101,164,172,176,179,181,182,183,195,388,829,832],[101,164,172,176,179,181,182,183,195,387,388,389,829,832],[101,164,172,176,179,181,182,183,195,387,829,832],[98,101,164,172,176,178,179,181,182,183,195,226,233,245,251,257,263,265,269,270,283,284,351,381,382,395,503,507,829,832],[101,164,172,176,179,181,182,183,195,230,233,267,304,401,402,407,503,555,829,832],[101,164,172,176,179,181,182,183,195,267,555,829,832],[101,164,172,176,179,181,182,183,195,230,284,453,503,555,829,832],[101,164,172,176,179,181,182,183,195,555,829,832],[101,164,172,176,179,181,182,183,195,233,267,268,555,829,832],[101,164,172,176,179,181,182,183,195,404,555,829,832],[101,164,172,176,179,181,182,183,195,270,383,386,393,829,832],[92,101,164,172,176,179,181,182,183,195,458,829,832],[101,164,172,176,179,181,182,183,193,195,240,255,829,832],[101,164,172,176,179,181,182,183,195,240,255,829,832],[92,101,164,172,176,179,181,182,183,195,325,829,832],[92,101,164,172,176,179,181,182,183,195,255,829,832],[92,101,164,172,176,179,181,182,183,195,246,255,458,829,832],[101,164,172,176,179,181,182,183,195,240,311,325,326,537,544,829,832],[101,164,172,176,179,181,182,183,195,310,538,539,540,541,543,829,832],[101,164,172,176,179,181,182,183,195,361,829,832],[101,164,172,176,179,181,182,183,195,361,362,829,832],[101,164,172,176,179,181,182,183,195,244,246,313,314,829,832],[101,164,172,176,179,181,182,183,195,246,320,321,829,832],[101,164,172,176,179,181,182,183,195,246,315,323,829,832],[101,164,172,176,179,181,182,183,195,320,829,832],[101,164,172,176,179,181,182,183,195,238,246,313,314,315,316,317,318,319,320,323,829,832],[101,164,172,176,179,181,182,183,195,246,313,320,321,322,324,829,832],[101,164,172,176,179,181,182,183,195,246,314,316,317,829,832],[101,164,172,176,179,181,182,183,195,314,316,319,321,829,832],[101,164,172,176,179,181,182,183,195,542,829,832],[101,164,172,176,179,181,182,183,195,246,829,832],[92,101,164,172,176,179,181,182,183,195,234,531,829,832],[92,101,164,172,176,179,181,182,183,195,212,829,832],[92,101,164,172,176,179,181,182,183,195,267,302,829,832],[92,101,164,172,176,179,181,182,183,195,267,395,829,832],[101,164,172,176,179,181,182,183,195,300,305,829,832],[92,101,164,172,176,179,181,182,183,195,301,509,829,832],[101,164,172,176,179,181,182,183,195,792,829,832],[92,96,101,164,172,176,178,179,181,182,183,195,221,222,223,224,225,507,551,829,832],[101,164,172,176,178,179,181,182,183,195,246,829,832],[101,164,172,176,178,179,181,182,183,195,245,250,331,348,390,391,395,450,452,503,504,829,832],[101,164,172,176,179,181,182,183,195,283,392,829,832],[101,164,172,176,179,181,182,183,195,507,829,832],[101,164,172,176,179,181,182,183,195,232,829,832],[92,101,164,172,176,179,181,182,183,195,237,240,455,471,473,829,832],[101,164,172,176,179,181,182,183,193,195,240,455,470,471,472,554,829,832],[101,164,172,176,179,181,182,183,195,464,465,466,467,468,469,829,832],[101,164,172,176,179,181,182,183,195,466,829,832],[101,164,172,176,179,181,182,183,195,470,829,832],[101,164,172,176,179,181,182,183,195,255,419,420,422,829,832],[92,101,164,172,176,179,181,182,183,195,246,413,414,415,416,421,829,832],[101,164,172,176,179,181,182,183,195,419,421,829,832],[101,164,172,176,179,181,182,183,195,417,829,832],[101,164,172,176,179,181,182,183,195,418,829,832],[92,101,164,172,176,179,181,182,183,195,255,301,509,829,832],[92,101,164,172,176,179,181,182,183,195,255,508,509,829,832],[92,101,164,172,176,179,181,182,183,195,255,509,829,832],[101,164,172,176,179,181,182,183,195,348,349,829,832],[101,164,172,176,179,181,182,183,195,349,829,832],[101,164,172,176,178,179,181,182,183,195,504,509,829,832],[101,164,172,176,179,181,182,183,195,378,829,832],[101,163,164,172,176,179,181,182,183,195,377,829,832],[101,164,172,176,179,181,182,183,195,240,246,252,254,356,369,373,375,452,455,492,493,500,504,829,832],[101,164,172,176,179,181,182,183,195,246,295,317,829,832],[101,164,172,176,179,181,182,183,195,356,367,370,375,829,832],[92,101,164,172,176,179,181,182,183,195,237,240,356,359,375,378,412,459,460,461,462,463,474,475,476,477,478,479,480,481,555,829,832],[101,164,172,176,179,181,182,183,195,237,240,265,356,363,364,365,368,369,829,832],[101,164,172,176,179,181,182,183,195,200,246,265,367,374,455,456,500,829,832],[101,164,172,176,179,181,182,183,195,371,829,832],[101,164,172,176,178,179,181,182,183,193,195,234,246,250,260,292,293,296,348,351,416,450,451,492,503,504,505,507,555,829,832],[101,164,172,176,179,181,182,183,195,237,238,240,829,832],[101,164,172,176,179,181,182,183,195,356,829,832],[101,163,164,172,176,179,181,182,183,195,265,292,293,350,351,352,353,354,355,504,829,832],[101,164,172,176,179,181,182,183,195,375,829,832],[101,163,164,172,176,179,181,182,183,195,239,240,250,254,290,356,363,364,365,366,367,370,371,372,373,374,493,829,832],[101,164,172,176,178,179,181,182,183,195,290,291,363,504,505,829,832],[101,164,172,176,179,181,182,183,195,265,293,348,351,356,452,504,829,832],[101,164,172,176,178,179,181,182,183,195,503,505,829,832],[101,164,172,176,178,179,181,182,183,195,200,500,504,505,829,832],[101,164,172,176,178,179,181,182,183,193,195,226,240,245,252,254,257,260,267,287,292,293,294,295,296,331,332,334,337,339,342,343,344,345,347,395,450,452,500,503,504,505,829,832],[101,164,172,176,178,179,181,182,183,195,200,829,832],[101,164,172,176,179,181,182,183,195,233,234,235,263,500,501,502,507,509,555,829,832],[101,164,172,176,179,181,182,183,195,230,231,503,829,832],[101,164,172,176,179,181,182,183,195,424,829,832],[101,164,172,176,178,179,181,182,183,195,200,212,242,408,412,413,414,415,416,422,423,555,829,832],[101,164,172,176,179,181,182,183,193,195,212,226,240,242,254,257,293,332,337,347,348,401,428,429,430,436,439,440,450,452,500,503,829,832],[101,164,172,176,179,181,182,183,195,257,263,270,283,293,351,503,829,832],[101,164,172,176,178,179,181,182,183,195,212,234,245,254,293,434,500,503,829,832],[101,164,172,176,179,181,182,183,195,454,829,832],[101,164,172,176,178,179,181,182,183,195,424,437,438,447,829,832],[101,164,172,176,179,181,182,183,195,500,503,829,832],[101,164,172,176,179,181,182,183,195,353,493,829,832],[101,164,172,176,179,181,182,183,195,254,292,395,509,829,832],[101,164,172,176,178,179,181,182,183,193,195,232,337,397,401,430,436,439,442,500,829,832],[101,164,172,176,178,179,181,182,183,195,270,283,401,443,829,832],[101,164,172,176,179,181,182,183,195,233,294,395,445,503,505,829,832],[101,164,172,176,178,179,181,182,183,195,212,416,503,829,832],[101,164,172,176,178,179,181,182,183,195,267,294,395,396,397,406,424,444,446,503,829,832],[98,101,164,172,176,178,179,181,182,183,195,292,449,507,509,829,832],[101,164,172,176,179,181,182,183,195,346,450,829,832],[101,164,172,176,178,179,181,182,183,193,195,240,243,245,246,252,254,260,269,270,283,293,296,332,334,344,347,348,395,428,429,430,431,433,435,450,452,500,509,829,832],[101,164,172,176,178,179,181,182,183,195,200,270,436,441,447,500,829,832],[101,164,172,176,179,181,182,183,195,273,274,275,276,277,278,279,280,281,282,829,832],[101,164,172,176,179,181,182,183,195,287,338,829,832],[101,164,172,176,179,181,182,183,195,340,829,832],[101,164,172,176,179,181,182,183,195,338,829,832],[101,164,172,176,179,181,182,183,195,340,341,829,832],[101,164,172,176,178,179,181,182,183,195,244,245,246,250,251,504,829,832],[101,164,172,176,178,179,181,182,183,193,195,232,234,252,256,292,295,296,330,450,500,505,507,509,829,832],[101,164,172,176,178,179,181,182,183,193,195,212,236,243,244,254,256,293,448,493,499,504,829,832],[101,164,172,176,179,181,182,183,195,363,829,832],[101,164,172,176,179,181,182,183,195,364,829,832],[101,164,172,176,179,181,182,183,195,246,257,492,829,832],[101,164,172,176,179,181,182,183,195,365,829,832],[101,164,172,176,179,181,182,183,195,239,829,832],[101,164,172,176,179,181,182,183,195,241,253,829,832],[101,164,172,176,178,179,181,182,183,195,241,245,252,829,832],[101,164,172,176,179,181,182,183,195,248,253,829,832],[101,164,172,176,179,181,182,183,195,249,829,832],[101,164,172,176,179,181,182,183,195,241,242,829,832],[101,164,172,176,179,181,182,183,195,241,297,829,832],[101,164,172,176,179,181,182,183,195,241,829,832],[101,164,172,176,179,181,182,183,195,243,287,336,829,832],[101,164,172,176,179,181,182,183,195,335,829,832],[101,164,172,176,179,181,182,183,195,240,242,243,829,832],[101,164,172,176,179,181,182,183,195,243,333,829,832],[101,164,172,176,179,181,182,183,195,240,242,829,832],[101,164,172,176,179,181,182,183,195,292,395,829,832],[101,164,172,176,179,181,182,183,195,492,829,832],[101,164,172,176,178,179,181,182,183,195,212,252,254,258,292,395,449,452,455,456,457,483,484,487,491,493,500,504,829,832],[101,164,172,176,179,181,182,183,195,306,309,311,312,325,326,829,832],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,829,832],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,490,829,832],[101,164,172,176,179,181,182,183,195,379,829,832],[101,164,172,176,179,181,182,183,195,265,286,291,292,356,357,358,359,360,362,375,376,378,381,449,452,503,505,829,832],[101,164,172,176,179,181,182,183,195,325,829,832],[101,164,172,176,178,179,181,182,183,195,330,500,829,832],[101,164,172,176,179,181,182,183,195,330,829,832],[101,164,172,176,178,179,181,182,183,195,252,298,327,329,331,449,500,507,509,829,832],[101,164,172,176,179,181,182,183,195,306,307,308,309,311,312,325,326,508,829,832],[98,101,164,172,176,178,179,181,182,183,193,195,212,241,242,254,260,292,293,296,395,447,448,450,500,503,504,507,829,832],[101,164,172,176,179,181,182,183,195,237,240,247,829,832],[101,164,172,176,179,181,182,183,195,291,293,425,428,829,832],[101,164,172,176,179,181,182,183,195,291,426,494,495,496,497,498,829,832],[101,164,172,176,178,179,181,182,183,195,287,503,829,832],[101,164,172,176,178,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,290,375,829,832],[101,164,172,176,179,181,182,183,195,289,829,832],[101,164,172,176,179,181,182,183,195,291,344,829,832],[101,164,172,176,179,181,182,183,195,288,290,503,829,832],[101,164,172,176,178,179,181,182,183,195,236,291,425,426,427,500,503,504,829,832],[92,101,164,172,176,179,181,182,183,195,240,246,324,829,832],[92,101,164,172,176,179,181,182,183,195,238,829,832],[101,164,172,176,179,181,182,183,195,228,229,829,832],[92,101,164,172,176,179,181,182,183,195,234,829,832],[92,101,164,172,176,179,181,182,183,195,240,310,829,832],[92,98,101,164,172,176,179,181,182,183,195,292,296,507,509,829,832],[101,164,172,176,179,181,182,183,195,234,531,532,829,832],[92,101,164,172,176,179,181,182,183,195,305,829,832],[92,101,164,172,176,179,181,182,183,193,195,212,232,299,301,303,304,509,829,832],[101,164,172,176,179,181,182,183,195,240,267,504,829,832],[101,164,172,176,179,181,182,183,195,240,432,829,832],[92,101,164,172,176,178,179,181,182,183,193,195,230,232,305,403,507,508,829,832],[92,101,164,172,176,179,181,182,183,195,221,222,223,224,225,507,552,829,832],[92,93,94,95,96,101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,398,399,400,829,832],[101,164,172,176,179,181,182,183,195,398,829,832],[92,96,101,164,172,176,178,179,180,181,182,183,193,195,220,221,222,223,224,225,226,232,260,265,442,470,505,506,509,552,829,832],[101,164,172,176,179,181,182,183,195,517,829,832],[101,164,172,176,179,181,182,183,195,519,829,832],[101,164,172,176,179,181,182,183,195,523,829,832],[101,164,172,176,179,181,182,183,195,793,829,832],[101,164,172,176,179,181,182,183,195,525,829,832],[101,164,172,176,179,181,182,183,195,527,528,529,829,832],[101,164,172,176,179,181,182,183,195,533,829,832],[97,101,164,172,176,179,181,182,183,195,511,516,518,520,524,526,530,534,536,546,547,549,553,554,555,556,829,832],[101,164,172,176,179,181,182,183,195,535,829,832],[101,164,172,176,179,181,182,183,195,545,829,832],[101,164,172,176,179,181,182,183,195,301,829,832],[101,164,172,176,179,181,182,183,195,548,829,832],[101,163,164,172,176,179,181,182,183,195,291,425,426,428,494,495,497,498,550,552,829,832],[101,164,172,176,179,181,182,183,195,220,829,832],[101,164,169,172,176,178,179,180,181,182,183,195,212,213,220,729,829,832],[101,164,172,176,179,181,182,183,195,601,829,832],[101,164,172,176,179,181,182,183,195,599,601,829,832],[101,164,172,176,179,181,182,183,195,590,598,599,600,602,604,829,832],[101,164,172,176,179,181,182,183,195,588,829,832],[101,164,172,176,179,181,182,183,195,591,596,601,604,829,832],[101,164,172,176,179,181,182,183,195,587,604,829,832],[101,164,172,176,179,181,182,183,195,591,592,595,596,597,604,829,832],[101,164,172,176,179,181,182,183,195,591,592,593,595,596,604,829,832],[101,164,172,176,179,181,182,183,195,588,589,590,591,592,596,597,598,600,601,602,604,829,832],[101,164,172,176,179,181,182,183,195,604,829,832],[101,164,172,176,179,181,182,183,195,586,588,589,590,591,592,593,595,596,597,598,599,600,601,602,603,829,832],[101,164,172,176,179,181,182,183,195,586,604,829,832],[101,164,172,176,179,181,182,183,195,591,593,594,596,597,604,829,832],[101,164,172,176,179,181,182,183,195,595,604,829,832],[101,164,172,176,179,181,182,183,195,596,597,601,604,829,832],[101,164,172,176,179,181,182,183,195,589,599,829,832],[101,164,172,176,179,181,182,183,195,671,829,832],[101,164,172,176,179,181,182,183,195,573,829,832],[101,164,172,176,179,181,182,183,195,565,567,573,829,832],[101,164,172,176,179,181,182,183,195,566,567,829,832],[101,164,172,176,179,181,182,183,195,567,573,577,829,832],[101,164,172,176,179,181,182,183,195,566,829,832],[101,164,172,176,179,181,182,183,195,567,573,829,832],[101,164,172,176,179,181,182,183,195,565,566,567,572,829,832],[101,164,172,176,179,181,182,183,195,565,567,829,832],[101,164,172,176,179,181,182,183,195,566,567,579,829,832],[101,164,172,176,179,181,182,183,195,568,569,570,829,832],[101,164,172,176,179,181,182,183,195,571,829,832],[101,164,172,176,179,181,182,183,195,200,220,829,832],[101,116,119,122,123,164,172,176,179,181,182,183,195,212,829,832],[101,119,164,172,176,179,181,182,183,195,200,212,829,832],[101,119,123,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,195,200,829,832],[101,113,164,172,176,179,181,182,183,195,829,832],[101,117,164,172,176,179,181,182,183,195,829,832],[101,115,116,119,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,185,195,209,829,832],[101,113,164,172,176,179,181,182,183,195,220,829,832],[101,115,119,164,172,176,179,181,182,183,185,195,212,829,832],[101,110,111,112,114,118,164,172,175,176,179,181,182,183,195,200,212,829,832],[101,119,128,136,164,172,176,179,181,182,183,195,829,832],[101,111,117,164,172,176,179,181,182,183,195,829,832],[101,119,145,146,164,172,176,179,181,182,183,195,829,832],[101,111,114,119,164,172,176,179,181,182,183,195,203,212,220,829,832],[101,119,164,172,176,179,181,182,183,195,829,832],[101,115,119,164,172,176,179,181,182,183,195,212,829,832],[101,110,164,172,176,179,181,182,183,195,829,832],[101,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,195,829,832],[101,119,138,141,164,172,176,179,181,182,183,195,829,832],[101,119,128,129,130,164,172,176,179,181,182,183,195,829,832],[101,117,119,129,131,164,172,176,179,181,182,183,195,829,832],[101,118,164,172,176,179,181,182,183,195,829,832],[101,111,113,119,164,172,176,179,181,182,183,195,829,832],[101,119,123,129,131,164,172,176,179,181,182,183,195,829,832],[101,123,164,172,176,179,181,182,183,195,829,832],[101,117,119,122,164,172,176,179,181,182,183,195,212,829,832],[101,111,115,119,128,164,172,176,179,181,182,183,195,829,832],[101,119,138,164,172,176,179,181,182,183,195,829,832],[101,131,164,172,176,179,181,182,183,195,829,832],[101,113,119,145,164,172,176,179,181,182,183,195,203,218,220,829,832],[101,164,172,176,179,181,182,183,195,562,829,832],[101,164,172,175,176,178,179,180,181,182,183,185,195,200,209,212,219,220,562,563,564,574,575,576,578,580,582,583,584,585,605,609,610,611,612,613,829,832],[101,164,172,176,179,181,182,183,195,562,563,564,581,829,832],[101,164,172,176,179,181,182,183,195,564,829,832],[101,164,172,176,179,181,182,183,195,608,829,832],[101,164,172,176,179,181,182,183,195,574,584,613,829,832],[101,164,172,176,179,181,182,183,195,574,613,829,832],[101,164,172,176,179,181,182,183,195,654,829,832],[101,164,172,176,179,181,182,183,195,627,659,684,829,832],[101,164,172,176,179,181,182,183,195,617,620,622,623,629,630,631,633,634,637,638,650,651,653,684,829,832],[101,164,172,176,179,181,182,183,195,633,644,645,684,829,832],[101,164,172,176,179,181,182,183,195,633,634,641,684,829,832],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,684,829,832],[101,164,172,176,179,181,182,183,195,582,829,832],[101,164,172,176,179,181,182,183,195,620,627,633,634,637,646,684,829,832],[101,164,172,176,179,181,182,183,195,613,657,659,829,832],[101,164,167,172,176,179,181,182,183,195,200,613,620,622,627,631,633,634,637,638,641,642,643,646,649,650,651,655,656,659,684,829,832],[101,164,172,176,179,181,182,183,195,582,633,634,637,684,829,832],[101,164,172,176,179,181,182,183,195,633,644,645,646,684,829,832],[101,164,172,176,179,181,182,183,195,582,633,638,639,640,684,829,832],[101,164,167,172,176,179,181,182,183,195,200,582,613,620,622,627,631,633,634,637,638,639,640,641,642,643,644,645,646,649,650,651,655,656,657,658,659,684,829,832],[101,164,172,176,179,181,182,183,195,582,617,620,622,627,631,633,634,637,638,639,640,641,642,644,645,646,649,684,685,686,687,688,693,829,832],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,638,644,645,646,684,686,829,832],[101,164,172,176,179,181,182,183,195,694,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,803,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,805,829,832],[101,164,172,176,179,181,182,183,195,255,536,748,749,780,801,802,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,808,829,832],[101,164,172,176,179,181,182,183,195,255,748,749,780,801,802,807,829,832],[101,164,172,176,179,181,182,183,195,255,746,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,750,829,832],[101,164,172,176,179,181,182,183,195,255,553,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,753,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,752,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,756,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,758,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,760,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,765,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,764,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,762,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,768,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,770,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,772,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,774,829,832],[101,164,172,176,179,181,182,183,195,255,553,748,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,777,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,776,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,811,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,801,802,810,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,814,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,801,802,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,813,829,832],[92,101,164,172,176,179,181,182,183,195,255,554,557,794,795,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,819,829,832],[101,164,172,176,179,181,182,183,195,255,818,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,781,801,802,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,748,801,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,785,795,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,795,810,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,802,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,800,829,832],[92,101,164,172,176,179,181,182,183,195,255,536,748,800,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,818,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,817,829,832],[92,101,164,172,176,179,181,182,183,195,255,536,546,799,817,829,832],[101,164,172,176,179,181,182,183,195,255,799,829,832],[92,101,164,172,176,179,181,182,183,195,255,785,829,832],[92,101,164,172,176,179,181,182,183,195,255,546,748,785,829,832],[92,101,164,172,176,179,181,182,183,195,255,743,799,829,832],[92,101,164,172,176,179,181,182,183,195,255,694,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,746,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,781,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,748,785,786,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,780,829,832],[92,101,164,172,176,179,181,182,183,195,255,554,743,746,748,829,832],[101,164,172,176,179,181,182,183,195,255,554,736,743,744,745,829,832],[101,164,172,176,179,181,182,183,195,255,748,780,829,832],[101,164,172,176,179,181,182,183,195,255,829,832],[101,164,172,176,179,181,182,183,195,255,748,785,829,832],[101,164,172,176,179,181,182,183,195,255,748,829,832],[101,164,172,176,179,181,182,183,195,212,255,615,660,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,829,832]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc",{"version":"168aa44771e55cda628eeb5fbb6f626f6f263d827967b119e8c06abd7f1362ec","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","impliedFormat":99},{"version":"51d2ffea2d1ee4a81c775938588c1e16620281adb60cbc26579a2fc6baa10bd2","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"a413e4b0b99280e1e58f5fe7b2b585e8a9be4996df8c58585399c9e2ca8a683e","impliedFormat":99},{"version":"609ab2c225766bc0851251c1db0fd5492673e190074045d21dc5dc7c3c46d785","impliedFormat":99},{"version":"c074e054c9db79055d37d7d70131e9a3234b8186773b3edb617c13f80bcf8774","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"7f3857dc5cfe1e5e977edb14e931d9939a952e8e41997263a927f8f0299ea652","impliedFormat":99},{"version":"3559624d0102d10d7765c292c60ccbc229541534db32061e06df88bfe1064636","impliedFormat":99},{"version":"5a9834c603c65aee5cba0c1d6b3c7aee85cdc7862832a23165c6aa4139c165f2","impliedFormat":99},{"version":"a7d7b5fa83cd7b3b4c2aa73bc29e7cbd53d5690b74f6fb39a5558af0a94967ba","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"f093d4bd6a9267be5f8ecbfbca19f4f3359b3839883206150c5d833606569e84","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"4a13397dffad4475c45c70fde584c925fe8c9218b3c7ab94397b68fc434f63b6","impliedFormat":99},{"version":"2faebfa830ae4cfbfb58e48b0ec20a2a63882d776f0ca36ec7155d45cf1b7f2d","impliedFormat":99},{"version":"b478fad6cb2c66bfbfc027983240b416a7733013f878056ba92cf809020018a0","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","impliedFormat":99},{"version":"2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","impliedFormat":99},{"version":"860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","impliedFormat":99},{"version":"7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","impliedFormat":99},{"version":"07ad8a597ac75084e3dd9f9fadf5e8d7ccdcfe2f0c94ea0cf1cd8aa027a6c46e","impliedFormat":99},{"version":"94ddb4a2bb0c69e8efea22c58c2b6f84017eba469a4e433f5396ea8619d051cb","impliedFormat":99},{"version":"064499a671b662b25675beccdd04fb0bdebb6bd49bdb90d448e4b1ce3db20526","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"ae7d986f19db00cd62ce8573307f910ec2103d7fc30df09cedeec3cabec13082","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"ad763fa0c24ede2b818eb6598c12dd581451f94688fb9ed963beba20d513a7ec","signature":"90ec9100c29e008c3d9194acd818e2cfa6dc6e177154bc8e10c5959aa35619ed"},{"version":"b7ca2f47522d4ea41e65ff92c4c6dd9c4c8260da7c456a7631a9c88dc056b4d0","impliedFormat":1},{"version":"4f01e4d0959f9125b89e5737eb1ca2bfa69fd6b7d6126eba22feb8b505b00cde","impliedFormat":1},{"version":"4363a1adb9c77f2ed1ca383a41fbab1afadd35d485c018b2f84e834edde6a2c7","impliedFormat":1},{"version":"1d6458533adb99938d041a93e73c51d6c00e65f84724e9585e3cc8940b25523f","impliedFormat":1},{"version":"b0878fbd194bdc4d49fc9c42bfeeb25650842fe1412c88e283dc80854b019768","impliedFormat":1},{"version":"a892ea0b88d9d19281e99d61baba3155200acced679b8af290f86f695b589b16","impliedFormat":1},{"version":"03b42e83b3bcdf5973d28641d72b81979e3ce200318e4b46feb8347a1828cd5d","impliedFormat":1},{"version":"8a3d57426cd8fb0d59f6ca86f62e05dde8bfd769de3ba45a1a4b2265d84bac5a","impliedFormat":1},{"version":"afc6e1f323b476fdf274e61dab70f26550a1be2353e061ab34e6eed180d349b6","impliedFormat":1},{"version":"7c14483430d839976481fe42e26207f5092f797e1a4190823086f02cd09c113c","impliedFormat":1},{"version":"828a3bea78921789cbd015e968b5b09b671f19b1c14c4bbf3490b58fbf7d6841","impliedFormat":1},{"version":"69759c42e48938a714ee2f002fe5679a7ab56f0b5f29d571e4c31a5398d038fe","impliedFormat":1},{"version":"6e5e666fa6adeb60774b576084eeff65181a40443166f0a46ae9ba0829300fcb","impliedFormat":1},{"version":"1a4d43bdc0f2e240395fd204e597349411c1141dd08f5114c37d6268c3c9d577","impliedFormat":1},{"version":"874e58f8d945c7ac25599128a40ec9615aa67546e91ca12cbf12f97f6baf54ff","impliedFormat":1},{"version":"da2627da8d01662eb137ccd84af7ffa8c94cf2b2547d4970f17802324e54defc","impliedFormat":1},{"version":"07af06b740c01ed0473ebdd3f2911c8e4f5ebf4094291d31db7c1ab24ff559aa","impliedFormat":1},{"version":"ba1450574b1962fcf595fc53362b4d684c76603da5f45b44bc4c7eeed5de045b","impliedFormat":1},{"version":"b7903668ee9558d758c64c15d66a89ed328fee5ac629b2077415f0b6ca2f41bc","impliedFormat":1},{"version":"c7628425ee3076c4530b4074f7d48f012577a59f5ddade39cea236d6405c36ba","impliedFormat":1},{"version":"28c8aff998cc623ab0864a26e2eb1a31da8eb04e59f31fa80f02ec78eb225bcd","impliedFormat":1},{"version":"78d542989bdf7b6ba5410d5a884c0ab5ec54aa9ce46916d34267f885fcf65270","impliedFormat":1},{"version":"4d95060af2775a3a86db5ab47ca7a0ed146d1f6f13e71d96f7ac3b321718a832","impliedFormat":1},{"version":"6708cd298541a89c2abf66cceffc6c661f8ee31c013f98ddb58d2ec4407d0876","impliedFormat":1},{"version":"2e90928c29c445563409d89a834662c2ba6a660204fb3d4dc181914e77f8e29d","impliedFormat":1},{"version":"84be1b8b8011c2aab613901b83309d017d57f6e1c2450dfda11f7b107953286a","impliedFormat":1},{"version":"d7af890ef486b4734d206a66b215ebc09f6743b7fb2f3c79f2fb8716d1912d27","impliedFormat":1},{"version":"7e82c1d070c866eaf448ac7f820403d4e1b86112de582901178906317efc35ad","impliedFormat":1},{"version":"c5c4f547338457f4e8e2bec09f661af14ee6e157c7dc711ccca321ab476dbc6d","impliedFormat":1},{"version":"223e233cb645b44fa058320425293e68c5c00744920fc31f55f7df37b32f11ad","impliedFormat":1},{"version":"1394fe4da1ab8ab3ea2f2b0fcbfd7ccbb8f65f5581f98d10b037c91194141b03","impliedFormat":1},{"version":"086d9e59a579981bdf4f3bfa6e8e893570e5005f7219292bf7d90c153066cdfc","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"cd66a32437a555f7eb63490509a038d1122467f77fe7a114986186d156363215","impliedFormat":1},{"version":"f53d243499acfacc46e882bbf0bf1ae93ecea350e6c22066a062520b94055e47","impliedFormat":1},{"version":"65522e30a02d2720811b11b658c976bff99b553436d99bafd80944acba5b33b4","impliedFormat":1},{"version":"76b3244ec0b2f5b09b4ebf0c7419260813820f128d2b592b07ea59622038e45c","impliedFormat":1},{"version":"66eb7e876b49beff61e33f746f87b6e586382b49f3de21d54d41313aadb27ee6","impliedFormat":1},{"version":"69e8dc4b276b4d431f5517cd6507f209669691c9fb2f97933e7dbd5619fd07b7","impliedFormat":1},{"version":"361a647c06cec2e7437fa5d7cdf07a0dcce3247d93fbf3b6de1dc75139ff5700","impliedFormat":1},{"version":"fe5726291be816d0c89213057cd0c411bb9e39e315ed7e1987adc873f0e26856","impliedFormat":1},{"version":"1b76990de23762eb038e8d80b3f9c810974a7ed2335caa97262c5b752760f11a","impliedFormat":1},{"version":"5e050e05fe99cd06f2d4ad70e73aa4a72961d0df99525e9cad4a78fa588f387b","impliedFormat":1},{"version":"4ff327e8b16da9d54347b548f85675e35a1dc1076f2c22b2858e276771010dd2","impliedFormat":1},{"version":"f767787945b5c51c0c488f50b3b3aeb2804dfd2ddafcb61125d8d8857c339f5a","impliedFormat":1},{"version":"14ab21a9aeff5710d1d1262459a6d49fb42bed835aa0f4cfc36b75aa36faddcd","impliedFormat":1},{"version":"ba3c4682491b477c63716864a035b2cfdd727e64ec3a61f2ca0c9af3c0116cfd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b222d32836d745e1e021bb10f6a0f4a562dd42206203060a8539a6b9f16523f0","impliedFormat":1},{"version":"a3f6d8995864820a0207b7ef4ce1ed6a8dd2fccc7e70d015da15034807c38e1c","impliedFormat":1},{"version":"651df11341eff0b769fb83af75b1872e6cedf406674c5eaa2650551aceb5a816","impliedFormat":1},{"version":"774a466295d26eddab911b9f567040364e7b7d0eb8003ad3bfc92b97eeecf066","signature":"f15b4a91c10bf30ff3708a5e3968c0a52ca4e86a4b9a5b1c4fc8e9b5f1292f21"},"1e9d4c3b066e0228765cef074a9bf49d0b8d3af461c97f2c511e8f7110b56235",{"version":"baa07ae4ae973ba8b5ff905cd8ea1430821ad43730813b052813a8b2cbf5986c","signature":"6da39ed4125f5dbf24242cd1858f36a453242870ac1cfc49b1b615d0d92c5b10"},"3e983a4e5756fa941c8f4877eb8310b0cb3d6dcd55c481fd252420860050d81c","9dfe98d745dfc706198852e032c3c936092a4484951872c0d18639cf2ab698cf","9f01d110e167ddcfaa01b236040a12699b6ed7a2070d7c362f4403f092fed008","030523c514236148e0f25975ef74b2490c391cb9596cd668728f7db5b0702e08","ca52a606c31ddaae5f7c4055fccb3563cf7e85601c96dbf28b7d0795d2d21af0","41d8a2df75ff7b6ee4c82ef8ce52032aa272358a5f9187a6b5986849200ed411","f25d11b3d781ff8db8614eeee12b43f81ad05389fb25acf10b8c3473b0e2a1d0","78b3214dba4e86c41e4cdf5de5dcc853806ff74fad5df3dc1087cdbe19ad00e0","9980dd11b1e848c16ad84eae18f4e7bfa3331f81c2617533b0e3bba61cb9ab3f","45b82fd88270dd3d0aff39220b341eca789f77c82813dc6695b2058479d8dc28","915d1bc5f4c3b9cc8e25964dcd29b3c00ffb36ab2c8b12b2472533b3113485a9","fcc8fb0967eda9256921f3cfc521d49f3d473232d4c754c09de1d50faa996e35","463efb47c0879fb7e518ca8d209ffc49e2d682d0c47eaf30d074a1032290ac50","a794572bfb0885ec1de20b701e498a415c0480e4fb6c20dbaa125b374ae691cb","dd26e8bac53b883eef657e5c7961170c27944f68825e82a43625c5ccc51c2937","016e4353e0414c98c2ed2eb75df1509a38b457ddf000e9ff98125f82ea42c335","3ef6579bdd5883302539b5370c5670331f3584dff9e2ef14bab39991f00a29cb","e34737b913a2f8775f45e495e660016e0ab0fda68c579f2024d1b596dde2d81c","6677681f753ead74430e87a3398cc92c183570992c77804fc4215178ffc86116","f5a22523635ca6f47c20b386b010ca1258aa19af5f4299f8752809c599315bcf",{"version":"214621f2f6a7dadf8232fb69c22f4373faac478a22f387a1827c37a93e82acd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"4f69209ce0e934946c859c4cc6248ef4a2dc528f5baf9b4fcdea5cf3e08d9d38","041b81f9c2cc3f95588f5ef2da13fce1d895ddd5160979c84c01aaa8873145b4","fb5ce2f104fde415289b4febf27da970e40afefe42b87b15db28818ca9f94132","6e568ff38a9d7070783b26b39b93df658c7466032f4ffa22431dfe2808b7a8bd","3613723853e81414c2e1220e3e0a696a997cc49e4390060b6ac7fd91aec150e4","e4bba7f9edd598a76e24e59f3d47d09cb0295d6c52c8a89e8fa04dc6e6428b16","082900437524e8bc6903f0d26479f590af1814cc5080fc502e07d38c951500be","34eb44fd7813a487540b6afa04da3175388b1841aa3612569e8aa07652363b69","a76367ab8ebbbfb0db994a3d394b71b72c3b72fb69542222ace317e4b61f74ca","cbeab042293806df5cb4e45ba714036477971cb40a2539b20c331a632c1a2c46","0f55b5907842f16784dca83f2c82ac05e1e8740f2ec866c95289e05061384e4b","7c8545a7c4ec6978ebb4af07475d76007eb084c4f7f45aeba7ee817eeb4316e1",{"version":"5a2cdf6adeec348bbc876221be4367e8adff0bb78a5680ebd7d71e5c3bad6cc0","impliedFormat":99},{"version":"e004826eac62081f867c66dabd92d3ef7d126d93a70430a2c88429228c3ecc50","impliedFormat":99},{"version":"38d6857b58d2ac42442e396311c542062d4f0dad40f2adb496dd5fd0756ee400","impliedFormat":99},{"version":"34b7d1e2d15845cf08bcf5e3c01adbb92cea1ec27564ee249ba486cdfb28526c","impliedFormat":99},{"version":"57a11712c0947d75a4ca92de7e354ee667f3bc24ea57e5038c5c1b2c316d174b","signature":"2791178671f71d9b41ed9ef814e549d85cc6a77c61e2f8a87ec25f2176d9a3fc"},"cf081b846c5f25474cebc31a61dac186ac3a71e94668f424b2476eac5b624aea",{"version":"968043e1fd7bb3c6b1c22d3341ede621d16a628b2bc4c35d1e43f0064ff7c1a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6d261c7be483027c9d281ba71314350ad8ce66efabf46f7b6099f39fe3b8d218",{"version":"9445c836eee19d76274eb41e66d782c17fa45e938cd6a3e6318e5cc51e5df3b3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7992a39d6cde5e050eb78461a8bf9ad986175a94826e835c110b3967290bd249","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"cc0e0705b17f5987925bf05b5a7da622a76ad691274a428cf18fb28b33a7a1cf","signature":"01e6799210215286acf67be8c15da37b72af300e0f7f32c7f11535415e25ee88"},{"version":"ab640e52df6129fa178d5c0f2860542954ea38af4b0801a92c3ac09f6a9eec7c","signature":"91212f9905f489a1993df856acac1939544f6166e4cafff1c4f0949e37a8a11d"},{"version":"c3d577953f04c0188d8b9c63b2748b814efda6440336fa49557f0079f5cf748a","impliedFormat":1},{"version":"787fe950e18951b7970ec98cb05b3d0b11fcdfeb2091a7ea481ac9e52bf6c086","impliedFormat":1},{"version":"13ceda04874f09091da1994ba5f58bf1e9439af93336616257691863560b3f13","impliedFormat":1},{"version":"9f51e1b45772c037ff9f4b4e7d1074192f7c5307e51f026c556af64081acd3a9","signature":"fb69d502157f1cf71cb8c737f6909c2e82f2a53b8157f840411444435f5da3d1"},"1aea4ec138a31bf0914fe68fe2b3e7bcd6de65dce1b693da7abe16e4b50a15ef",{"version":"a941595362ff7e12adee1605aea8495d9bc96cd833d95c87f83cad2b5838165a","signature":"b67fa3b5b051ead6f5048d73c953d289234953f832922ffc4dfe293d5c6bfc98"},"c98b1727a4c0ccfbd4df609bad278f1af184a069d232f978a327d53110677480",{"version":"e9d70d2ef380ac231bd7ac1996f3587deae58d5f124347535436c011af25d5fe","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"76cc225f61f545122672c27ff69aa27d1e7578d653c5fe942ebe88601cea0b02",{"version":"c9d408c70e4cddd361a8452f04d0bf25e66415d5f7ce2b92b9ed2c162e3082c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f3415880499901a01feef00e1b3042f670dabad8b5a131c22994f5f951dbdf2f","signature":"28007b7d2b577a868c587c22500f2ab77490b6390909ffbdd3b04dac98e69a18"},"789957c66d154bfb21cd2700f89938a754f100f30e4b4829fb5e376ed9898f90",{"version":"3b6c468202603e81e2dccc50efa84b0879c0a7fe7d852b2e9e95da15ee78b78b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"fc51205c27f22f7194f3c026cdf19c5b27f19190a97955b9ffce0db45858e42f","54c008f175512ea8e8854d138dcf76b2af5e59e6816e82e87a360d76f3c7f820",{"version":"532d30276f01efab1a3aa4f052f15abac54da5db376807bb869fcc7f0d9b305b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"8bc24afa3c5fb73fd0dc89f091d2cb65b9d54f7a90b37302e9bd679ba504b0e3","51610870e75caaf1ff890f1fb949366cd7d843b4aa2e734c166bb307a78f33ea",{"version":"502c4922baae4d2ddc7c46bc248cb168528939730cc7dcf643b1fecc471829c1","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ef4ca970edfb3d5ae43f56927d83ddd6afdba01a73f2c94a6b30e698aa1ce83e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f20b8d5c86e426ce2d1505f4a3114e66411272aa8394e0ad323c0c3b1d1fadff","signature":"b41f35e5ae414583d72cc2aa3a17cc23d40f4b9e221f92acd74ed09bb3daaa63"},{"version":"74b006e51c1fe0198db4fd239bdfb2063fb3b0139bbb3dbaab79f323f42ba6bf","signature":"83057fe16cf05e5bf626fd4e46379506199130438abbd2ae42de6234bb202181"},{"version":"c247b5bb6d297cb7c9607645b1486b2f7b3ee0c05fac97d18e6daf4e3b25ebeb","signature":"5a224c6b95c526ad3f70b7b5894a2fe9b50cb5a9eed53b87806cf1045f8d7bab"},{"version":"dd7a9804bfd52806479d69214126956478367bb3a2c333b589ddcc253aae03d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"33940e73c12951fdfd6d9b6e9c1e25057376adfa5561038cb59591098f159b19","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"20375a205b37d0f527f1f3fb6cc5d6c2076c1b57f74b9024f8153e0f3f0289a9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"3557b3416d97219e58a39fecce338b086bd42db6ce7ef701e8265783fbd20c6f",{"version":"83f21e09f1a6d980cc7cf83252deccd5d997e67266ae8bd450ef8899fcab1884","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6e70039e5a6af8ab06917dc2dd007fa8caabea0a2533303bca6be8510ae2cfd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f4722121739886d9694fe6d74b91f654b2b26459edd6e275fb5ff1a509bbc262","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c46f9542d2d4a44df84e20e37348c86abfb57804268f5236874fa8a8b7639f5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9304048358b92fcbf0eec60f51d53903407986386be57168d1d2caa302f30546","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"4332f611f915908b335662f95ac6047288d3bc0b939e06d59e369b96a28eaa70","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","1bbd475eaf5bfb166aaee62b5c40d5a2ef4a87787d0e08a6cbfcf71426aa205f",{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[559,561],661,695,[746,781],[786,791],795,796,[800,833]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[832,1],[559,2],[833,3],[829,4],[830,2],[831,5],[560,6],[561,7],[403,2],[566,2],[619,2],[782,2],[783,8],[784,9],[785,10],[679,2],[676,2],[675,2],[670,11],[681,12],[666,13],[677,14],[669,15],[668,16],[678,2],[673,17],[680,2],[674,18],[667,2],[665,19],[664,20],[663,13],[683,21],[662,2],[626,22],[624,2],[161,23],[162,23],[163,24],[101,25],[164,26],[165,27],[166,28],[99,2],[167,29],[168,30],[169,31],[170,32],[171,33],[172,34],[173,34],[174,35],[175,36],[176,37],[177,38],[102,2],[100,2],[178,39],[179,40],[180,41],[220,42],[181,43],[182,44],[183,43],[184,45],[185,46],[186,47],[187,48],[188,48],[189,48],[190,49],[191,50],[192,51],[193,52],[194,53],[195,54],[196,54],[197,55],[198,2],[199,2],[200,56],[201,57],[202,56],[203,58],[204,59],[205,60],[206,61],[207,62],[208,63],[209,64],[210,65],[211,66],[212,67],[213,68],[214,69],[215,70],[216,71],[217,72],[103,43],[104,2],[105,73],[106,74],[107,2],[108,75],[109,2],[152,76],[153,77],[154,78],[155,78],[156,79],[157,2],[158,26],[159,80],[160,77],[218,81],[219,82],[224,83],[488,84],[225,85],[223,86],[490,87],[489,88],[682,84],[221,89],[486,2],[222,90],[90,2],[92,91],[485,84],[255,84],[615,92],[614,2],[627,93],[648,94],[649,95],[647,2],[620,2],[633,96],[632,97],[644,96],[635,98],[637,99],[656,99],[636,100],[617,101],[616,2],[622,102],[623,103],[653,104],[629,105],[631,106],[652,2],[650,105],[630,2],[621,103],[628,2],[625,2],[91,2],[691,107],[693,108],[692,109],[690,110],[689,2],[729,111],[698,112],[708,112],[699,112],[709,112],[700,112],[701,112],[716,112],[715,112],[717,112],[718,112],[710,112],[702,112],[711,112],[703,112],[712,112],[704,112],[706,112],[714,113],[707,112],[713,113],[719,113],[705,112],[720,112],[725,112],[726,112],[721,112],[697,2],[727,2],[723,112],[722,112],[724,112],[728,112],[606,2],[608,114],[607,2],[696,115],[797,116],[735,117],[734,118],[741,119],[743,120],[739,121],[738,122],[742,118],[736,123],[733,124],[744,125],[745,125],[737,126],[731,2],[732,127],[799,128],[798,129],[740,2],[511,130],[516,131],[523,132],[506,133],[259,2],[267,134],[407,135],[410,136],[382,2],[395,137],[402,138],[284,2],[384,2],[265,2],[381,139],[427,140],[266,2],[257,141],[409,142],[411,143],[412,144],[483,145],[376,146],[329,147],[389,148],[390,149],[388,150],[387,2],[383,151],[408,152],[268,153],[453,2],[454,154],[295,155],[269,156],[296,155],[332,155],[235,155],[405,157],[404,2],[394,158],[501,2],[244,2],[522,159],[461,160],[462,161],[458,162],[540,2],[359,2],[463,163],[459,164],[545,165],[544,166],[539,2],[310,2],[362,167],[361,2],[538,168],[460,84],[315,169],[322,170],[324,171],[314,2],[319,172],[321,173],[323,174],[318,175],[316,2],[320,176],[541,2],[537,2],[543,177],[542,2],[313,178],[532,179],[535,180],[303,181],[302,182],[301,183],[548,84],[300,184],[289,2],[550,2],[793,185],[792,2],[551,84],[552,186],[227,2],[391,187],[392,188],[393,189],[231,2],[396,2],[251,190],[226,2],[475,84],[233,191],[474,192],[473,193],[464,2],[465,2],[472,2],[467,2],[470,194],[466,2],[468,195],[471,196],[469,195],[264,2],[261,2],[262,155],[416,2],[421,197],[422,198],[420,199],[418,200],[419,201],[414,2],[481,163],[256,163],[510,202],[517,203],[521,204],[350,205],[349,2],[344,2],[497,206],[505,207],[377,208],[378,209],[456,210],[366,2],[479,211],[354,84],[371,212],[482,213],[367,2],[370,214],[368,2],[480,215],[477,216],[476,2],[478,2],[374,2],[452,217],[239,218],[352,219],[356,220],[372,221],[375,222],[364,223],[357,224],[504,225],[430,226],[348,227],[236,228],[503,229],[232,230],[423,231],[415,2],[424,232],[441,233],[413,2],[440,234],[98,2],[435,235],[260,2],[455,236],[431,2],[245,2],[247,2],[386,2],[439,237],[263,2],[287,238],[373,239],[293,240],[353,2],[438,2],[417,2],[443,241],[444,242],[385,2],[446,243],[448,244],[447,245],[397,2],[437,228],[450,246],[347,247],[436,248],[442,249],[272,2],[276,2],[275,2],[274,2],[279,2],[273,2],[282,2],[281,2],[278,2],[277,2],[280,2],[283,250],[271,2],[339,251],[338,2],[343,252],[340,253],[342,254],[345,252],[341,253],[252,255],[331,256],[500,257],[498,2],[527,258],[529,259],[493,260],[528,261],[240,262],[237,262],[270,2],[254,263],[253,264],[249,265],[250,266],[258,267],[286,267],[297,267],[333,268],[298,268],[242,269],[241,2],[337,270],[336,271],[335,272],[334,273],[243,274],[484,275],[285,276],[492,277],[457,278],[487,279],[491,280],[380,281],[379,282],[360,283],[346,284],[328,285],[330,286],[327,287],[449,288],[351,2],[515,2],[248,289],[451,290],[499,291],[358,2],[288,292],[365,293],[363,294],[290,295],[425,296],[494,2],[291,297],[426,297],[513,2],[512,2],[514,2],[496,2],[495,2],[428,298],[355,2],[325,299],[246,300],[304,2],[230,301],[292,2],[519,84],[229,2],[531,302],[312,84],[525,163],[311,303],[508,304],[309,302],[234,2],[533,305],[307,84],[308,84],[299,2],[228,2],[306,306],[305,307],[294,308],[369,52],[429,52],[445,2],[433,309],[432,2],[317,178],[238,2],[326,84],[502,190],[509,310],[93,84],[96,311],[97,312],[94,84],[95,2],[406,74],[401,313],[400,2],[399,314],[398,2],[507,315],[518,316],[520,317],[524,318],[794,319],[526,320],[530,321],[558,322],[534,322],[557,323],[536,324],[546,325],[547,326],[549,327],[553,328],[556,190],[555,2],[554,329],[730,330],[602,331],[600,332],[601,333],[589,334],[590,332],[597,335],[588,336],[593,337],[603,2],[594,338],[599,339],[605,340],[604,341],[587,342],[595,343],[596,344],[591,345],[598,331],[592,346],[672,347],[671,2],[611,348],[574,349],[575,350],[578,351],[567,352],[577,353],[573,354],[565,2],[579,355],[580,356],[568,2],[569,2],[571,357],[570,2],[572,358],[434,359],[586,2],[645,2],[618,2],[88,2],[89,2],[14,2],[15,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[64,2],[65,2],[66,2],[11,2],[67,2],[68,2],[69,2],[70,2],[71,2],[72,2],[12,2],[73,2],[74,2],[75,2],[76,2],[77,2],[1,2],[78,2],[79,2],[13,2],[80,2],[81,2],[82,2],[83,2],[84,2],[85,2],[86,2],[87,2],[128,360],[140,361],[125,362],[141,363],[150,364],[116,365],[117,366],[115,367],[149,329],[144,368],[148,369],[119,370],[137,371],[118,372],[147,373],[113,374],[114,368],[120,375],[121,2],[127,376],[124,375],[111,377],[151,378],[142,379],[131,380],[130,375],[132,381],[135,382],[129,383],[133,384],[145,329],[122,385],[123,386],[136,387],[112,363],[139,388],[138,375],[126,386],[134,389],[143,2],[110,2],[146,390],[563,391],[613,392],[582,393],[564,391],[562,2],[581,394],[612,2],[610,2],[583,2],[609,395],[576,396],[585,2],[584,397],[655,398],[660,399],[654,400],[646,401],[642,402],[638,403],[651,2],[639,98],[687,404],[684,405],[658,406],[657,407],[640,408],[686,409],[634,2],[641,410],[659,411],[694,412],[688,413],[834,414],[685,2],[643,2],[804,415],[806,416],[805,417],[809,418],[808,419],[747,420],[751,421],[750,422],[754,423],[753,422],[755,424],[752,422],[757,425],[756,422],[759,426],[758,422],[761,427],[760,422],[766,428],[765,422],[767,429],[764,422],[763,430],[762,422],[769,431],[768,422],[771,432],[770,422],[773,433],[772,422],[775,434],[774,435],[778,436],[777,422],[779,437],[776,422],[812,438],[811,439],[815,440],[814,441],[816,442],[813,441],[796,443],[820,444],[819,445],[803,446],[821,447],[822,448],[823,449],[824,450],[825,451],[801,452],[826,453],[827,454],[818,455],[817,456],[807,163],[795,457],[810,458],[802,163],[800,459],[787,460],[788,461],[789,462],[828,463],[790,464],[749,465],[746,466],[781,467],[748,468],[786,469],[780,470],[791,468],[661,471],[695,472]],"affectedFilesPendingEmit":[833,831,561,804,806,805,809,808,747,751,750,754,753,755,752,757,756,759,758,761,760,766,765,767,764,763,762,769,768,771,770,773,772,775,774,778,777,779,776,812,811,815,814,816,813,796,820,819,803,821,822,823,824,825,801,826,827,818,817,807,795,810,802,800,787,788,789,828,790,749,746,781,748,786,780,791,661,695],"version":"6.0.3"} diff --git a/projects/api.py b/projects/api.py index b170dc0d..19c6d9ba 100644 --- a/projects/api.py +++ b/projects/api.py @@ -22,7 +22,12 @@ document_project_owned_viewset, logger, ) -from core.permissions import get_visible_projects_queryset +from core.permissions import ( + IsProjectAdmin, + IsProjectMember, + IsProjectMemberWritable, + get_visible_projects_queryset, +) from core.plugins.bluesky import BlueskySourcePlugin from projects.models import ( BlueskyCredentials, @@ -60,6 +65,23 @@ class ProjectViewSet(viewsets.ModelViewSet): queryset = Project.objects.select_related("group", "bluesky_credentials") lookup_url_kwarg = "id" + def get_permissions(self): + """Apply role-aware permissions by action for project-level operations.""" + + if self.action in { + "update", + "partial_update", + "destroy", + "rotate_intake_token", + "verify_bluesky_credentials", + }: + permission_classes = [IsProjectAdmin] + elif self.action in {"list", "retrieve"}: + permission_classes = [IsProjectMember] + else: + permission_classes = self.permission_classes + return [permission() for permission in permission_classes] + def get_queryset(self): """Limit projects to those visible through the authenticated user.""" @@ -179,6 +201,15 @@ class ProjectConfigViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = ProjectConfigSerializer queryset = ProjectConfig.objects.select_related("project") + def get_permissions(self): + """Allow all members to read project config, but only admins to modify it.""" + + if self.action in {"update", "partial_update", "create", "destroy"}: + permission_classes = [IsProjectAdmin] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] + @document_project_owned_viewset( resource_plural="Bluesky credentials", @@ -201,6 +232,11 @@ class BlueskyCredentialsViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet serializer_class = BlueskyCredentialsSerializer queryset = BlueskyCredentials.objects.select_related("project") + def get_permissions(self): + """Restrict Bluesky credential access to project admins.""" + + return [IsProjectAdmin()] + def get_queryset(self): """Restrict credentials to the selected project and current user.""" @@ -231,3 +267,14 @@ class SourceConfigViewSet(ProjectOwnedQuerysetMixin, viewsets.ModelViewSet): serializer_class = SourceConfigSerializer queryset = SourceConfig.objects.select_related("project") + + def get_permissions(self): + """Allow all members to read source configs, but only contributors to modify them.""" + + if self.action == "destroy": + permission_classes = [IsProjectMemberWritable] + elif self.action in {"create", "update", "partial_update"}: + permission_classes = [IsProjectMemberWritable] + else: + permission_classes = [IsProjectMember] + return [permission() for permission in permission_classes] diff --git a/projects/serializers.py b/projects/serializers.py index f4a220b6..0f401154 100644 --- a/projects/serializers.py +++ b/projects/serializers.py @@ -3,6 +3,7 @@ from rest_framework import serializers from core.plugins import validate_plugin_config +from core.permissions import get_user_role from core.serializers import ProjectScopedSerializerMixin from projects.models import BlueskyCredentials, Project, ProjectConfig, SourceConfig @@ -10,6 +11,7 @@ class ProjectSerializer(ProjectScopedSerializerMixin, serializers.ModelSerializer): """Serialize top-level project records.""" + user_role = serializers.SerializerMethodField() has_bluesky_credentials = serializers.SerializerMethodField() bluesky_handle = serializers.SerializerMethodField() bluesky_is_active = serializers.SerializerMethodField() @@ -26,6 +28,7 @@ class Meta: "content_retention_days", "intake_token", "intake_enabled", + "user_role", "has_bluesky_credentials", "bluesky_handle", "bluesky_is_active", @@ -35,6 +38,14 @@ class Meta: ] read_only_fields = ["id", "created_at"] + def get_user_role(self, obj: Project) -> str | None: + """Return the current request user's role for this project.""" + + request = self.context.get("request") + if not request or not request.user.is_authenticated: + return None + return get_user_role(request.user, obj) + def _get_bluesky_credentials(self, obj: Project): """Return the project's stored Bluesky credentials, if configured.""" diff --git a/users/__init__.py b/users/__init__.py index bf0ee3af..81d0e904 100644 --- a/users/__init__.py +++ b/users/__init__.py @@ -1 +1 @@ -"""Users app package.""" \ No newline at end of file +"""Users app package.""" diff --git a/users/apps.py b/users/apps.py index cef17b2f..ede25fd0 100644 --- a/users/apps.py +++ b/users/apps.py @@ -7,4 +7,4 @@ class UsersConfig(AppConfig): """App config for the custom user and profile foundation.""" default_auto_field = "django.db.models.BigAutoField" - name = "users" \ No newline at end of file + name = "users" From 776896e40f0ad1b3b8d741ea844c033d0a100a0c Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 30 Apr 2026 05:23:20 +0300 Subject: [PATCH 05/13] Harden the stale-login handling --- frontend/src/lib/__tests__/api.test.ts | 71 ++++++++++++++ frontend/src/lib/__tests__/useRole.test.tsx | 2 +- frontend/src/lib/api.ts | 103 +++++++++++++++++--- frontend/src/lib/useRole.ts | 2 +- frontend/tsconfig.tsbuildinfo | 2 +- 5 files changed, 162 insertions(+), 18 deletions(-) diff --git a/frontend/src/lib/__tests__/api.test.ts b/frontend/src/lib/__tests__/api.test.ts index d61116c8..fb7af867 100644 --- a/frontend/src/lib/__tests__/api.test.ts +++ b/frontend/src/lib/__tests__/api.test.ts @@ -109,6 +109,77 @@ describe("api helpers", () => { ) }) + it("retries once with basic auth when a session token has gone stale", async () => { + getServerSessionMock.mockResolvedValue({ backendAuth: { key: "stale-token" } }) + const fetchMock = vi + .fn() + .mockResolvedValueOnce( + jsonResponse( + { + type: "client_error", + errors: [ + { + code: "authentication_failed", + detail: "Invalid token.", + attr: null, + }, + ], + }, + { status: 403 }, + ), + ) + .mockResolvedValueOnce(jsonResponse([{ id: 1 }])) + vi.stubGlobal("fetch", fetchMock) + + const { apiFetch } = await import("@/lib/api") + const result = await apiFetch>("/api/v1/projects/") + + expect(result).toEqual([{ id: 1 }]) + expect(fetchMock).toHaveBeenNthCalledWith( + 1, + "https://api.example.com/api/v1/projects/", + expect.objectContaining({ + headers: expect.objectContaining({ Authorization: "Token stale-token" }), + }), + ) + expect(fetchMock).toHaveBeenNthCalledWith( + 2, + "https://api.example.com/api/v1/projects/", + expect.objectContaining({ + headers: expect.objectContaining({ + Authorization: getExpectedBasicAuthHeader(), + }), + }), + ) + }) + + it("does not retry with basic auth for non-authentication 403 responses", async () => { + getServerSessionMock.mockResolvedValue({ backendAuth: { key: "active-token" } }) + const fetchMock = vi.fn().mockResolvedValue( + jsonResponse( + { + type: "client_error", + errors: [ + { + code: "permission_denied", + detail: "You do not have permission to perform this action.", + attr: null, + }, + ], + }, + { status: 403 }, + ), + ) + vi.stubGlobal("fetch", fetchMock) + + const { apiFetch } = await import("@/lib/api") + + await expect(apiFetch("/api/v1/projects/")).rejects.toThrow( + "API request failed (403) from https://api.example.com/api/v1/projects/ with application/json: {\"type\":\"client_error\",\"errors\":[{\"code\":\"permission_denied\",\"detail\":\"You do not have permission to perform this action.\",\"attr\":null}]}", + ) + expect(fetchMock).toHaveBeenCalledTimes(1) + }) + it("surfaces a normalized error preview for failed requests", async () => { getServerSessionMock.mockResolvedValue(null) const fetchMock = vi diff --git a/frontend/src/lib/__tests__/useRole.test.tsx b/frontend/src/lib/__tests__/useRole.test.tsx index 189282f0..380d392d 100644 --- a/frontend/src/lib/__tests__/useRole.test.tsx +++ b/frontend/src/lib/__tests__/useRole.test.tsx @@ -66,4 +66,4 @@ describe("useRole", () => { expect(screen.getByTestId("role")).toHaveTextContent("null") }) -}) \ No newline at end of file +}) diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index f5e303bc..71c5a212 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -27,6 +27,8 @@ import type { const API_BASE_URL = process.env.NEWSLETTER_API_BASE_URL ?? "http://127.0.0.1:8080" +type AuthorizationSource = "token" | "bearer" | "basic" + type SessionWithBackendAuth = { backendAuth?: { access?: string @@ -87,14 +89,77 @@ async function getAuthorizationHeader() { const session = (await getServerSession(authOptions)) as SessionWithBackendAuth | null if (session?.backendAuth?.key) { - return `Token ${session.backendAuth.key}` + return { + authorization: `Token ${session.backendAuth.key}`, + source: "token" as const, + } } if (session?.backendAuth?.access) { - return `Bearer ${session.backendAuth.access}` + return { + authorization: `Bearer ${session.backendAuth.access}`, + source: "bearer" as const, + } + } + + return { + authorization: getBasicAuthHeader(), + source: "basic" as const, } +} - return getBasicAuthHeader() +function tryGetBasicAuthHeader() { + try { + return getBasicAuthHeader() + } catch { + return null + } +} + +function isAuthenticationFailure( + status: number, + contentType: string, + text: string, + source: AuthorizationSource, +) { + if (source === "basic" || ![401, 403].includes(status) || !contentType.includes("json")) { + return false + } + + try { + const payload = JSON.parse(text) as { + detail?: string + errors?: Array<{ code?: string; detail?: string }> + } + const details = [payload.detail, ...(payload.errors ?? []).map((error) => error.detail)] + .filter((detail): detail is string => Boolean(detail)) + .join(" ") + const codes = new Set((payload.errors ?? []).map((error) => error.code)) + + return ( + codes.has("authentication_failed") || + codes.has("not_authenticated") || + /invalid token|authentication credentials were not provided/i.test(details) + ) + } catch { + return false + } +} + +async function performApiRequest( + path: string, + init: RequestInit, + authorization: string, +) { + return fetch(buildUrl(path), { + ...init, + headers: { + Authorization: authorization, + "Content-Type": "application/json", + ...(init.headers ?? {}), + }, + cache: "no-store", + }) } /** @@ -133,24 +198,32 @@ export async function apiFetch( path: string, init: RequestInit = {}, ): Promise { - const authorization = await getAuthorizationHeader() + const { authorization, source } = await getAuthorizationHeader() - const response = await fetch(buildUrl(path), { - ...init, - headers: { - Authorization: authorization, - "Content-Type": "application/json", - ...(init.headers ?? {}), - }, - cache: "no-store", - }) + let response = await performApiRequest(path, init, authorization) if (response.status === 204) { return undefined as T } - const contentType = response.headers.get("content-type") ?? "" - const text = await response.text() + let contentType = response.headers.get("content-type") ?? "" + let text = await response.text() + + if (isAuthenticationFailure(response.status, contentType, text, source)) { + const basicAuthorization = tryGetBasicAuthHeader() + + if (basicAuthorization && basicAuthorization !== authorization) { + response = await performApiRequest(path, init, basicAuthorization) + + if (response.status === 204) { + return undefined as T + } + + contentType = response.headers.get("content-type") ?? "" + text = await response.text() + } + } + if (!response.ok) { throw new Error( `API request failed (${response.status}) from ${buildUrl(path)} with ${contentType || "unknown content type"}: ${previewResponseBody(text)}`, diff --git a/frontend/src/lib/useRole.ts b/frontend/src/lib/useRole.ts index d4d32225..9b51b729 100644 --- a/frontend/src/lib/useRole.ts +++ b/frontend/src/lib/useRole.ts @@ -25,4 +25,4 @@ export function useRole(projectId: number | null): ProjectRole | null { } return projects.find((project) => project.id === projectId)?.user_role ?? null -} \ No newline at end of file +} diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo index 8cce6a7a..09898ccc 100644 --- a/frontend/tsconfig.tsbuildinfo +++ b/frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.es2025.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.es2025.collection.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.es2025.intl.d.ts","./node_modules/typescript/lib/lib.es2025.iterator.d.ts","./node_modules/typescript/lib/lib.es2025.promise.d.ts","./node_modules/typescript/lib/lib.es2025.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.date.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.esnext.temporal.d.ts","./node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/dev/types/routes.d.ts","./next-env.d.ts","./next.config.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/index.d.ts","./node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionalTypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-Bh0IjN67.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.CEnv6XRv.d.ts","./node_modules/vitest/dist/chunks/plugin.d.BM2TCi12.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/jest-dom/types/matchers.d.ts","./node_modules/@testing-library/jest-dom/types/jest.d.ts","./node_modules/@testing-library/jest-dom/types/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./vitest.setup.ts","./node_modules/next-auth/adapters.d.ts","./node_modules/jose/dist/types/types.d.ts","./node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/verify.d.ts","./node_modules/jose/dist/types/jws/flattened/verify.d.ts","./node_modules/jose/dist/types/jws/general/verify.d.ts","./node_modules/jose/dist/types/jwt/verify.d.ts","./node_modules/jose/dist/types/jwt/decrypt.d.ts","./node_modules/jose/dist/types/jwt/produce.d.ts","./node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/sign.d.ts","./node_modules/jose/dist/types/jws/flattened/sign.d.ts","./node_modules/jose/dist/types/jws/general/sign.d.ts","./node_modules/jose/dist/types/jwt/sign.d.ts","./node_modules/jose/dist/types/jwt/encrypt.d.ts","./node_modules/jose/dist/types/jwk/thumbprint.d.ts","./node_modules/jose/dist/types/jwk/embedded.d.ts","./node_modules/jose/dist/types/jwks/local.d.ts","./node_modules/jose/dist/types/jwks/remote.d.ts","./node_modules/jose/dist/types/jwt/unsecured.d.ts","./node_modules/jose/dist/types/key/export.d.ts","./node_modules/jose/dist/types/key/import.d.ts","./node_modules/jose/dist/types/util/decode_protected_header.d.ts","./node_modules/jose/dist/types/util/decode_jwt.d.ts","./node_modules/jose/dist/types/util/errors.d.ts","./node_modules/jose/dist/types/key/generate_key_pair.d.ts","./node_modules/jose/dist/types/key/generate_secret.d.ts","./node_modules/jose/dist/types/util/base64url.d.ts","./node_modules/jose/dist/types/util/runtime.d.ts","./node_modules/jose/dist/types/index.d.ts","./node_modules/openid-client/types/index.d.ts","./node_modules/next-auth/providers/oauth-types.d.ts","./node_modules/next-auth/providers/oauth.d.ts","./node_modules/next-auth/providers/email.d.ts","./node_modules/next-auth/core/lib/cookie.d.ts","./node_modules/next-auth/core/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/next-auth/providers/index.d.ts","./node_modules/next-auth/jwt/types.d.ts","./node_modules/next-auth/jwt/index.d.ts","./node_modules/next-auth/utils/logger.d.ts","./node_modules/next-auth/core/types.d.ts","./node_modules/next-auth/next/index.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/github.d.ts","./node_modules/next-auth/providers/google.d.ts","./src/lib/auth.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/lib/types.ts","./src/lib/api.ts","./src/app/api/content-skills/route.ts","./src/app/api/content-skills/__tests__/route.test.ts","./src/app/api/entities/route.ts","./src/app/api/entities/[id]/route.ts","./src/app/api/entities/[id]/__tests__/route.test.ts","./src/app/api/entities/__tests__/route.test.ts","./src/app/api/entity-candidates/[id]/route.ts","./src/app/api/entity-candidates/[id]/__tests__/route.test.ts","./src/app/api/feedback/route.ts","./src/app/api/feedback/__tests__/route.test.ts","./src/app/api/projects/[id]/bluesky-credentials/route.ts","./src/app/api/projects/[id]/bluesky-credentials/__tests__/route.test.ts","./src/app/api/projects/[id]/intake/route.ts","./src/app/api/projects/[id]/intake/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/__tests__/route.test.ts","./src/app/api/projects/[id]/rotate-intake-token/route.ts","./src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/__tests__/route.test.ts","./src/app/api/review/[id]/route.ts","./src/app/api/review/[id]/__tests__/route.test.ts","./src/app/api/skills/[skillName]/route.ts","./src/app/api/skills/[skillName]/__tests__/route.test.ts","./src/app/api/source-configs/route.ts","./src/app/api/source-configs/[id]/route.ts","./src/app/api/source-configs/[id]/__tests__/route.test.ts","./src/app/api/source-configs/__tests__/route.test.ts","./src/lib/view-helpers.ts","./src/lib/dashboard-view.ts","./node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/lib/useRole.ts","./src/lib/__tests__/api.test.ts","./src/lib/__tests__/auth.test.ts","./src/lib/__tests__/dashboard-view.test.ts","./src/lib/__tests__/view-helpers.test.ts","./test-support/server-only.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/components/query-provider.tsx","./src/app/layout.tsx","./node_modules/next-auth/client/_utils.d.ts","./node_modules/next-auth/react/types.d.ts","./node_modules/next-auth/react/index.d.ts","./src/components/user-menu.tsx","./src/components/app-shell.tsx","./src/components/status-badge.tsx","./src/app/page.tsx","./src/app/__tests__/page.test.tsx","./src/app/admin/health/page.tsx","./src/app/admin/health/__tests__/page.test.tsx","./src/components/copy-button.tsx","./src/app/admin/sources/page.tsx","./src/app/admin/sources/__tests__/page.test.tsx","./src/components/skill-action-bar.tsx","./src/app/content/[id]/page.tsx","./src/app/content/[id]/__tests__/page.test.tsx","./src/app/entities/page.tsx","./src/app/entities/[id]/page.tsx","./src/app/entities/[id]/__tests__/page.test.tsx","./src/app/entities/__tests__/page.test.tsx","./src/components/auth/social-auth-buttons.tsx","./src/components/auth/login-form.tsx","./src/app/login/page.tsx","./src/app/login/__tests__/page.test.tsx","./src/components/__tests__/app-shell.test.tsx","./src/components/__tests__/query-provider.test.tsx","./src/components/__tests__/skill-action-bar.test.tsx","./src/components/__tests__/status-badge.test.tsx","./src/components/__tests__/user-menu.test.tsx","./src/components/auth/__tests__/login-form.test.tsx","./src/components/auth/__tests__/social-auth-buttons.test.tsx","./src/lib/__tests__/useRole.test.tsx","./.next/types/cache-life.d.ts","./.next/types/routes.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/validator.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[101,164,172,176,179,181,182,183,195,512,513,514,515,829],[101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,255,553,556,559,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,796,803,805,808,811,813,814,819,829,832],[101,164,172,176,179,181,182,183,195,512,513,514,515,832],[101,164,172,176,179,181,182,183,195,255,553,556,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,796,803,805,808,811,813,814,819,829,830,832],[101,164,172,176,179,181,182,183,195,557,558,559,829,832],[101,164,172,176,179,181,182,183,195,255,557,829,832],[101,164,172,176,179,181,182,183,195,782,829,832],[92,101,164,172,176,179,181,182,183,195,255,783,829,832],[101,164,172,176,179,181,182,183,195,784,829,832],[101,164,172,176,179,181,182,183,195,669,829,832],[101,164,172,176,179,181,182,183,195,666,667,668,669,670,673,674,675,676,677,678,679,680,829,832],[101,164,172,176,179,181,182,183,195,662,829,832],[101,164,172,176,179,181,182,183,195,672,829,832],[101,164,172,176,179,181,182,183,195,666,667,668,829,832],[101,164,172,176,179,181,182,183,195,666,667,829,832],[101,164,172,176,179,181,182,183,195,669,670,672,829,832],[101,164,172,176,179,181,182,183,195,667,829,832],[101,164,172,176,179,181,182,183,195,664,829,832],[101,164,172,176,179,181,182,183,195,663,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,681,682,829,832],[101,164,172,176,179,181,182,183,195,624,625,829,832],[101,161,162,164,172,176,179,181,182,183,195,829,832],[101,163,164,172,176,179,181,182,183,195,829,832],[164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,203,829,832],[101,164,165,170,172,175,176,179,181,182,183,185,195,200,212,829,832],[101,164,165,166,172,175,176,179,181,182,183,195,829,832],[101,164,167,172,176,179,181,182,183,195,213,829,832],[101,164,168,169,172,176,179,181,182,183,186,195,829,832],[101,164,169,172,176,179,181,182,183,195,200,209,829,832],[101,164,170,172,175,176,179,181,182,183,185,195,829,832],[101,163,164,171,172,176,179,181,182,183,195,829,832],[101,164,172,173,176,179,181,182,183,195,829,832],[101,164,172,174,175,176,179,181,182,183,195,829,832],[101,163,164,172,175,176,179,181,182,183,195,829,832],[101,164,172,175,176,177,179,181,182,183,195,200,212,829,832],[101,164,172,175,176,177,179,181,182,183,195,200,203,829,832],[101,151,164,172,175,176,178,179,181,182,183,185,195,200,212,829,832],[101,164,172,175,176,178,179,181,182,183,185,195,200,209,212,829,832],[101,164,172,176,178,179,180,181,182,183,195,200,209,212,829,832],[99,100,101,102,103,104,105,106,107,108,109,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,829,832],[101,164,172,175,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,183,195,829,832],[101,164,172,176,179,181,182,183,184,195,212,829,832],[101,164,172,175,176,179,181,182,183,185,195,200,829,832],[101,164,172,176,179,181,182,183,186,195,829,832],[101,164,172,176,179,181,182,183,187,195,829,832],[101,164,172,175,176,179,181,182,183,190,195,829,832],[101,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,829,832],[101,164,172,176,179,181,182,183,192,195,829,832],[101,164,172,176,179,181,182,183,193,195,829,832],[101,164,169,172,176,179,181,182,183,185,195,203,829,832],[101,164,172,175,176,179,181,182,183,195,196,829,832],[101,164,172,176,179,181,182,183,195,197,213,216,829,832],[101,164,172,175,176,179,181,182,183,195,200,202,203,829,832],[101,164,172,176,179,181,182,183,195,201,203,829,832],[101,164,172,176,179,181,182,183,195,203,213,829,832],[101,164,172,176,179,181,182,183,195,204,829,832],[101,161,164,172,176,179,181,182,183,195,200,206,212,829,832],[101,164,172,176,179,181,182,183,195,200,205,829,832],[101,164,172,175,176,179,181,182,183,195,207,208,829,832],[101,164,172,176,179,181,182,183,195,207,208,829,832],[101,164,169,172,176,179,181,182,183,185,195,200,209,829,832],[101,164,172,176,179,181,182,183,195,210,829,832],[101,164,172,176,179,181,182,183,185,195,211,829,832],[101,164,172,176,178,179,181,182,183,193,195,212,829,832],[101,164,172,176,179,181,182,183,195,213,214,829,832],[101,164,169,172,176,179,181,182,183,195,214,829,832],[101,164,172,176,179,181,182,183,195,200,215,829,832],[101,164,172,176,179,181,182,183,184,195,216,829,832],[101,164,172,176,179,181,182,183,195,217,829,832],[101,164,167,172,176,179,181,182,183,195,829,832],[101,164,169,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,213,829,832],[101,151,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,195,218,829,832],[101,164,172,176,179,181,182,183,190,195,829,832],[101,164,172,176,179,181,182,183,195,208,829,832],[101,151,164,172,175,176,177,179,181,182,183,190,195,200,203,212,215,216,218,829,832],[101,164,172,176,179,181,182,183,195,200,219,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,225,507,552,829,832],[92,101,164,172,176,179,181,182,183,195,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,224,488,507,552,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,224,225,507,552,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,489,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,829,832],[92,96,101,164,172,176,179,181,182,183,195,222,223,224,225,507,552,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,223,224,225,507,552,829,832],[90,91,101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,613,614,659,829,832],[101,164,172,176,179,181,182,183,195,617,618,619,622,623,626,829,832],[101,164,172,176,179,181,182,183,195,647,829,832],[101,164,172,176,179,181,182,183,195,647,648,829,832],[101,164,172,176,179,181,182,183,195,622,631,632,829,832],[101,164,172,176,179,181,182,183,195,622,631,829,832],[101,164,172,176,179,181,182,183,195,631,829,832],[101,164,172,176,179,181,182,183,195,620,631,635,636,829,832],[101,164,172,176,179,181,182,183,195,620,631,635,829,832],[101,164,172,176,179,181,182,183,195,616,829,832],[101,164,172,176,179,181,182,183,195,620,621,829,832],[101,164,172,176,179,181,182,183,195,620,829,832],[101,164,172,176,179,181,182,183,195,620,621,628,652,829,832],[101,164,172,176,179,181,182,183,195,628,829,832],[101,164,172,176,179,181,182,183,195,620,623,628,629,630,829,832],[101,164,172,176,179,181,182,183,195,689,690,829,832],[101,164,172,176,179,181,182,183,195,689,690,691,692,829,832],[101,164,172,176,179,181,182,183,195,689,691,829,832],[101,164,172,176,179,181,182,183,195,689,829,832],[101,164,172,176,179,181,182,183,195,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,829,832],[101,164,172,176,179,181,182,183,195,697,829,832],[101,164,172,176,179,181,182,183,195,697,707,829,832],[101,164,172,176,179,181,182,183,195,606,607,829,832],[101,164,172,176,179,181,182,183,195,743,829,832],[101,164,172,176,178,179,181,182,183,195,220,743,829,832],[101,164,172,176,179,181,182,183,195,734,741,829,832],[101,164,172,176,179,181,182,183,195,553,557,741,743,829,832],[101,164,172,176,179,181,182,183,195,696,730,737,739,740,829,832],[101,164,172,176,179,181,182,183,195,735,741,742,829,832],[101,164,172,176,179,181,182,183,195,553,557,738,743,829,832],[101,164,172,176,179,181,182,183,195,220,743,829,832],[101,164,172,176,179,181,182,183,195,735,737,743,829,832],[101,164,172,176,179,181,182,183,195,737,741,743,829,832],[101,164,172,176,179,181,182,183,195,737,829,832],[101,164,172,176,179,181,182,183,195,732,733,736,829,832],[101,164,172,176,179,181,182,183,195,729,730,731,737,743,829,832],[92,101,164,172,176,179,181,182,183,195,737,743,797,798,829,832],[92,101,164,172,176,179,181,182,183,195,737,743,829,832],[101,164,172,176,179,181,182,183,195,510,829,832],[101,164,172,176,179,181,182,183,195,512,513,514,515,829,832],[101,164,172,176,179,181,182,183,195,458,521,522,829,832],[101,164,172,176,179,181,182,183,195,230,231,233,245,269,384,395,503,829,832],[101,164,172,176,179,181,182,183,195,233,264,265,266,268,503,829,832],[101,164,172,176,179,181,182,183,195,233,401,403,405,406,408,503,505,829,832],[101,164,172,176,179,181,182,183,195,233,267,304,503,829,832],[101,164,172,176,179,181,182,183,195,231,233,244,245,251,257,262,383,384,385,394,503,505,829,832],[101,164,172,176,179,181,182,183,195,503,829,832],[101,164,172,176,179,181,182,183,195,240,246,265,285,380,829,832],[101,164,172,176,179,181,182,183,195,233,829,832],[101,164,172,176,179,181,182,183,195,226,240,246,829,832],[101,164,172,176,179,181,182,183,195,412,829,832],[101,164,172,176,179,181,182,183,195,409,410,412,829,832],[101,164,172,176,179,181,182,183,195,409,411,503,829,832],[101,164,172,176,178,179,181,182,183,195,285,482,500,829,832],[101,164,172,176,178,179,181,182,183,195,356,359,375,380,500,829,832],[101,164,172,176,178,179,181,182,183,195,328,500,829,832],[101,164,172,176,179,181,182,183,195,388,829,832],[101,164,172,176,179,181,182,183,195,387,388,389,829,832],[101,164,172,176,179,181,182,183,195,387,829,832],[98,101,164,172,176,178,179,181,182,183,195,226,233,245,251,257,263,265,269,270,283,284,351,381,382,395,503,507,829,832],[101,164,172,176,179,181,182,183,195,230,233,267,304,401,402,407,503,555,829,832],[101,164,172,176,179,181,182,183,195,267,555,829,832],[101,164,172,176,179,181,182,183,195,230,284,453,503,555,829,832],[101,164,172,176,179,181,182,183,195,555,829,832],[101,164,172,176,179,181,182,183,195,233,267,268,555,829,832],[101,164,172,176,179,181,182,183,195,404,555,829,832],[101,164,172,176,179,181,182,183,195,270,383,386,393,829,832],[92,101,164,172,176,179,181,182,183,195,458,829,832],[101,164,172,176,179,181,182,183,193,195,240,255,829,832],[101,164,172,176,179,181,182,183,195,240,255,829,832],[92,101,164,172,176,179,181,182,183,195,325,829,832],[92,101,164,172,176,179,181,182,183,195,255,829,832],[92,101,164,172,176,179,181,182,183,195,246,255,458,829,832],[101,164,172,176,179,181,182,183,195,240,311,325,326,537,544,829,832],[101,164,172,176,179,181,182,183,195,310,538,539,540,541,543,829,832],[101,164,172,176,179,181,182,183,195,361,829,832],[101,164,172,176,179,181,182,183,195,361,362,829,832],[101,164,172,176,179,181,182,183,195,244,246,313,314,829,832],[101,164,172,176,179,181,182,183,195,246,320,321,829,832],[101,164,172,176,179,181,182,183,195,246,315,323,829,832],[101,164,172,176,179,181,182,183,195,320,829,832],[101,164,172,176,179,181,182,183,195,238,246,313,314,315,316,317,318,319,320,323,829,832],[101,164,172,176,179,181,182,183,195,246,313,320,321,322,324,829,832],[101,164,172,176,179,181,182,183,195,246,314,316,317,829,832],[101,164,172,176,179,181,182,183,195,314,316,319,321,829,832],[101,164,172,176,179,181,182,183,195,542,829,832],[101,164,172,176,179,181,182,183,195,246,829,832],[92,101,164,172,176,179,181,182,183,195,234,531,829,832],[92,101,164,172,176,179,181,182,183,195,212,829,832],[92,101,164,172,176,179,181,182,183,195,267,302,829,832],[92,101,164,172,176,179,181,182,183,195,267,395,829,832],[101,164,172,176,179,181,182,183,195,300,305,829,832],[92,101,164,172,176,179,181,182,183,195,301,509,829,832],[101,164,172,176,179,181,182,183,195,792,829,832],[92,96,101,164,172,176,178,179,181,182,183,195,221,222,223,224,225,507,551,829,832],[101,164,172,176,178,179,181,182,183,195,246,829,832],[101,164,172,176,178,179,181,182,183,195,245,250,331,348,390,391,395,450,452,503,504,829,832],[101,164,172,176,179,181,182,183,195,283,392,829,832],[101,164,172,176,179,181,182,183,195,507,829,832],[101,164,172,176,179,181,182,183,195,232,829,832],[92,101,164,172,176,179,181,182,183,195,237,240,455,471,473,829,832],[101,164,172,176,179,181,182,183,193,195,240,455,470,471,472,554,829,832],[101,164,172,176,179,181,182,183,195,464,465,466,467,468,469,829,832],[101,164,172,176,179,181,182,183,195,466,829,832],[101,164,172,176,179,181,182,183,195,470,829,832],[101,164,172,176,179,181,182,183,195,255,419,420,422,829,832],[92,101,164,172,176,179,181,182,183,195,246,413,414,415,416,421,829,832],[101,164,172,176,179,181,182,183,195,419,421,829,832],[101,164,172,176,179,181,182,183,195,417,829,832],[101,164,172,176,179,181,182,183,195,418,829,832],[92,101,164,172,176,179,181,182,183,195,255,301,509,829,832],[92,101,164,172,176,179,181,182,183,195,255,508,509,829,832],[92,101,164,172,176,179,181,182,183,195,255,509,829,832],[101,164,172,176,179,181,182,183,195,348,349,829,832],[101,164,172,176,179,181,182,183,195,349,829,832],[101,164,172,176,178,179,181,182,183,195,504,509,829,832],[101,164,172,176,179,181,182,183,195,378,829,832],[101,163,164,172,176,179,181,182,183,195,377,829,832],[101,164,172,176,179,181,182,183,195,240,246,252,254,356,369,373,375,452,455,492,493,500,504,829,832],[101,164,172,176,179,181,182,183,195,246,295,317,829,832],[101,164,172,176,179,181,182,183,195,356,367,370,375,829,832],[92,101,164,172,176,179,181,182,183,195,237,240,356,359,375,378,412,459,460,461,462,463,474,475,476,477,478,479,480,481,555,829,832],[101,164,172,176,179,181,182,183,195,237,240,265,356,363,364,365,368,369,829,832],[101,164,172,176,179,181,182,183,195,200,246,265,367,374,455,456,500,829,832],[101,164,172,176,179,181,182,183,195,371,829,832],[101,164,172,176,178,179,181,182,183,193,195,234,246,250,260,292,293,296,348,351,416,450,451,492,503,504,505,507,555,829,832],[101,164,172,176,179,181,182,183,195,237,238,240,829,832],[101,164,172,176,179,181,182,183,195,356,829,832],[101,163,164,172,176,179,181,182,183,195,265,292,293,350,351,352,353,354,355,504,829,832],[101,164,172,176,179,181,182,183,195,375,829,832],[101,163,164,172,176,179,181,182,183,195,239,240,250,254,290,356,363,364,365,366,367,370,371,372,373,374,493,829,832],[101,164,172,176,178,179,181,182,183,195,290,291,363,504,505,829,832],[101,164,172,176,179,181,182,183,195,265,293,348,351,356,452,504,829,832],[101,164,172,176,178,179,181,182,183,195,503,505,829,832],[101,164,172,176,178,179,181,182,183,195,200,500,504,505,829,832],[101,164,172,176,178,179,181,182,183,193,195,226,240,245,252,254,257,260,267,287,292,293,294,295,296,331,332,334,337,339,342,343,344,345,347,395,450,452,500,503,504,505,829,832],[101,164,172,176,178,179,181,182,183,195,200,829,832],[101,164,172,176,179,181,182,183,195,233,234,235,263,500,501,502,507,509,555,829,832],[101,164,172,176,179,181,182,183,195,230,231,503,829,832],[101,164,172,176,179,181,182,183,195,424,829,832],[101,164,172,176,178,179,181,182,183,195,200,212,242,408,412,413,414,415,416,422,423,555,829,832],[101,164,172,176,179,181,182,183,193,195,212,226,240,242,254,257,293,332,337,347,348,401,428,429,430,436,439,440,450,452,500,503,829,832],[101,164,172,176,179,181,182,183,195,257,263,270,283,293,351,503,829,832],[101,164,172,176,178,179,181,182,183,195,212,234,245,254,293,434,500,503,829,832],[101,164,172,176,179,181,182,183,195,454,829,832],[101,164,172,176,178,179,181,182,183,195,424,437,438,447,829,832],[101,164,172,176,179,181,182,183,195,500,503,829,832],[101,164,172,176,179,181,182,183,195,353,493,829,832],[101,164,172,176,179,181,182,183,195,254,292,395,509,829,832],[101,164,172,176,178,179,181,182,183,193,195,232,337,397,401,430,436,439,442,500,829,832],[101,164,172,176,178,179,181,182,183,195,270,283,401,443,829,832],[101,164,172,176,179,181,182,183,195,233,294,395,445,503,505,829,832],[101,164,172,176,178,179,181,182,183,195,212,416,503,829,832],[101,164,172,176,178,179,181,182,183,195,267,294,395,396,397,406,424,444,446,503,829,832],[98,101,164,172,176,178,179,181,182,183,195,292,449,507,509,829,832],[101,164,172,176,179,181,182,183,195,346,450,829,832],[101,164,172,176,178,179,181,182,183,193,195,240,243,245,246,252,254,260,269,270,283,293,296,332,334,344,347,348,395,428,429,430,431,433,435,450,452,500,509,829,832],[101,164,172,176,178,179,181,182,183,195,200,270,436,441,447,500,829,832],[101,164,172,176,179,181,182,183,195,273,274,275,276,277,278,279,280,281,282,829,832],[101,164,172,176,179,181,182,183,195,287,338,829,832],[101,164,172,176,179,181,182,183,195,340,829,832],[101,164,172,176,179,181,182,183,195,338,829,832],[101,164,172,176,179,181,182,183,195,340,341,829,832],[101,164,172,176,178,179,181,182,183,195,244,245,246,250,251,504,829,832],[101,164,172,176,178,179,181,182,183,193,195,232,234,252,256,292,295,296,330,450,500,505,507,509,829,832],[101,164,172,176,178,179,181,182,183,193,195,212,236,243,244,254,256,293,448,493,499,504,829,832],[101,164,172,176,179,181,182,183,195,363,829,832],[101,164,172,176,179,181,182,183,195,364,829,832],[101,164,172,176,179,181,182,183,195,246,257,492,829,832],[101,164,172,176,179,181,182,183,195,365,829,832],[101,164,172,176,179,181,182,183,195,239,829,832],[101,164,172,176,179,181,182,183,195,241,253,829,832],[101,164,172,176,178,179,181,182,183,195,241,245,252,829,832],[101,164,172,176,179,181,182,183,195,248,253,829,832],[101,164,172,176,179,181,182,183,195,249,829,832],[101,164,172,176,179,181,182,183,195,241,242,829,832],[101,164,172,176,179,181,182,183,195,241,297,829,832],[101,164,172,176,179,181,182,183,195,241,829,832],[101,164,172,176,179,181,182,183,195,243,287,336,829,832],[101,164,172,176,179,181,182,183,195,335,829,832],[101,164,172,176,179,181,182,183,195,240,242,243,829,832],[101,164,172,176,179,181,182,183,195,243,333,829,832],[101,164,172,176,179,181,182,183,195,240,242,829,832],[101,164,172,176,179,181,182,183,195,292,395,829,832],[101,164,172,176,179,181,182,183,195,492,829,832],[101,164,172,176,178,179,181,182,183,195,212,252,254,258,292,395,449,452,455,456,457,483,484,487,491,493,500,504,829,832],[101,164,172,176,179,181,182,183,195,306,309,311,312,325,326,829,832],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,829,832],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,490,829,832],[101,164,172,176,179,181,182,183,195,379,829,832],[101,164,172,176,179,181,182,183,195,265,286,291,292,356,357,358,359,360,362,375,376,378,381,449,452,503,505,829,832],[101,164,172,176,179,181,182,183,195,325,829,832],[101,164,172,176,178,179,181,182,183,195,330,500,829,832],[101,164,172,176,179,181,182,183,195,330,829,832],[101,164,172,176,178,179,181,182,183,195,252,298,327,329,331,449,500,507,509,829,832],[101,164,172,176,179,181,182,183,195,306,307,308,309,311,312,325,326,508,829,832],[98,101,164,172,176,178,179,181,182,183,193,195,212,241,242,254,260,292,293,296,395,447,448,450,500,503,504,507,829,832],[101,164,172,176,179,181,182,183,195,237,240,247,829,832],[101,164,172,176,179,181,182,183,195,291,293,425,428,829,832],[101,164,172,176,179,181,182,183,195,291,426,494,495,496,497,498,829,832],[101,164,172,176,178,179,181,182,183,195,287,503,829,832],[101,164,172,176,178,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,290,375,829,832],[101,164,172,176,179,181,182,183,195,289,829,832],[101,164,172,176,179,181,182,183,195,291,344,829,832],[101,164,172,176,179,181,182,183,195,288,290,503,829,832],[101,164,172,176,178,179,181,182,183,195,236,291,425,426,427,500,503,504,829,832],[92,101,164,172,176,179,181,182,183,195,240,246,324,829,832],[92,101,164,172,176,179,181,182,183,195,238,829,832],[101,164,172,176,179,181,182,183,195,228,229,829,832],[92,101,164,172,176,179,181,182,183,195,234,829,832],[92,101,164,172,176,179,181,182,183,195,240,310,829,832],[92,98,101,164,172,176,179,181,182,183,195,292,296,507,509,829,832],[101,164,172,176,179,181,182,183,195,234,531,532,829,832],[92,101,164,172,176,179,181,182,183,195,305,829,832],[92,101,164,172,176,179,181,182,183,193,195,212,232,299,301,303,304,509,829,832],[101,164,172,176,179,181,182,183,195,240,267,504,829,832],[101,164,172,176,179,181,182,183,195,240,432,829,832],[92,101,164,172,176,178,179,181,182,183,193,195,230,232,305,403,507,508,829,832],[92,101,164,172,176,179,181,182,183,195,221,222,223,224,225,507,552,829,832],[92,93,94,95,96,101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,398,399,400,829,832],[101,164,172,176,179,181,182,183,195,398,829,832],[92,96,101,164,172,176,178,179,180,181,182,183,193,195,220,221,222,223,224,225,226,232,260,265,442,470,505,506,509,552,829,832],[101,164,172,176,179,181,182,183,195,517,829,832],[101,164,172,176,179,181,182,183,195,519,829,832],[101,164,172,176,179,181,182,183,195,523,829,832],[101,164,172,176,179,181,182,183,195,793,829,832],[101,164,172,176,179,181,182,183,195,525,829,832],[101,164,172,176,179,181,182,183,195,527,528,529,829,832],[101,164,172,176,179,181,182,183,195,533,829,832],[97,101,164,172,176,179,181,182,183,195,511,516,518,520,524,526,530,534,536,546,547,549,553,554,555,556,829,832],[101,164,172,176,179,181,182,183,195,535,829,832],[101,164,172,176,179,181,182,183,195,545,829,832],[101,164,172,176,179,181,182,183,195,301,829,832],[101,164,172,176,179,181,182,183,195,548,829,832],[101,163,164,172,176,179,181,182,183,195,291,425,426,428,494,495,497,498,550,552,829,832],[101,164,172,176,179,181,182,183,195,220,829,832],[101,164,169,172,176,178,179,180,181,182,183,195,212,213,220,729,829,832],[101,164,172,176,179,181,182,183,195,601,829,832],[101,164,172,176,179,181,182,183,195,599,601,829,832],[101,164,172,176,179,181,182,183,195,590,598,599,600,602,604,829,832],[101,164,172,176,179,181,182,183,195,588,829,832],[101,164,172,176,179,181,182,183,195,591,596,601,604,829,832],[101,164,172,176,179,181,182,183,195,587,604,829,832],[101,164,172,176,179,181,182,183,195,591,592,595,596,597,604,829,832],[101,164,172,176,179,181,182,183,195,591,592,593,595,596,604,829,832],[101,164,172,176,179,181,182,183,195,588,589,590,591,592,596,597,598,600,601,602,604,829,832],[101,164,172,176,179,181,182,183,195,604,829,832],[101,164,172,176,179,181,182,183,195,586,588,589,590,591,592,593,595,596,597,598,599,600,601,602,603,829,832],[101,164,172,176,179,181,182,183,195,586,604,829,832],[101,164,172,176,179,181,182,183,195,591,593,594,596,597,604,829,832],[101,164,172,176,179,181,182,183,195,595,604,829,832],[101,164,172,176,179,181,182,183,195,596,597,601,604,829,832],[101,164,172,176,179,181,182,183,195,589,599,829,832],[101,164,172,176,179,181,182,183,195,671,829,832],[101,164,172,176,179,181,182,183,195,573,829,832],[101,164,172,176,179,181,182,183,195,565,567,573,829,832],[101,164,172,176,179,181,182,183,195,566,567,829,832],[101,164,172,176,179,181,182,183,195,567,573,577,829,832],[101,164,172,176,179,181,182,183,195,566,829,832],[101,164,172,176,179,181,182,183,195,567,573,829,832],[101,164,172,176,179,181,182,183,195,565,566,567,572,829,832],[101,164,172,176,179,181,182,183,195,565,567,829,832],[101,164,172,176,179,181,182,183,195,566,567,579,829,832],[101,164,172,176,179,181,182,183,195,568,569,570,829,832],[101,164,172,176,179,181,182,183,195,571,829,832],[101,164,172,176,179,181,182,183,195,200,220,829,832],[101,116,119,122,123,164,172,176,179,181,182,183,195,212,829,832],[101,119,164,172,176,179,181,182,183,195,200,212,829,832],[101,119,123,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,195,200,829,832],[101,113,164,172,176,179,181,182,183,195,829,832],[101,117,164,172,176,179,181,182,183,195,829,832],[101,115,116,119,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,185,195,209,829,832],[101,113,164,172,176,179,181,182,183,195,220,829,832],[101,115,119,164,172,176,179,181,182,183,185,195,212,829,832],[101,110,111,112,114,118,164,172,175,176,179,181,182,183,195,200,212,829,832],[101,119,128,136,164,172,176,179,181,182,183,195,829,832],[101,111,117,164,172,176,179,181,182,183,195,829,832],[101,119,145,146,164,172,176,179,181,182,183,195,829,832],[101,111,114,119,164,172,176,179,181,182,183,195,203,212,220,829,832],[101,119,164,172,176,179,181,182,183,195,829,832],[101,115,119,164,172,176,179,181,182,183,195,212,829,832],[101,110,164,172,176,179,181,182,183,195,829,832],[101,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,195,829,832],[101,119,138,141,164,172,176,179,181,182,183,195,829,832],[101,119,128,129,130,164,172,176,179,181,182,183,195,829,832],[101,117,119,129,131,164,172,176,179,181,182,183,195,829,832],[101,118,164,172,176,179,181,182,183,195,829,832],[101,111,113,119,164,172,176,179,181,182,183,195,829,832],[101,119,123,129,131,164,172,176,179,181,182,183,195,829,832],[101,123,164,172,176,179,181,182,183,195,829,832],[101,117,119,122,164,172,176,179,181,182,183,195,212,829,832],[101,111,115,119,128,164,172,176,179,181,182,183,195,829,832],[101,119,138,164,172,176,179,181,182,183,195,829,832],[101,131,164,172,176,179,181,182,183,195,829,832],[101,113,119,145,164,172,176,179,181,182,183,195,203,218,220,829,832],[101,164,172,176,179,181,182,183,195,562,829,832],[101,164,172,175,176,178,179,180,181,182,183,185,195,200,209,212,219,220,562,563,564,574,575,576,578,580,582,583,584,585,605,609,610,611,612,613,829,832],[101,164,172,176,179,181,182,183,195,562,563,564,581,829,832],[101,164,172,176,179,181,182,183,195,564,829,832],[101,164,172,176,179,181,182,183,195,608,829,832],[101,164,172,176,179,181,182,183,195,574,584,613,829,832],[101,164,172,176,179,181,182,183,195,574,613,829,832],[101,164,172,176,179,181,182,183,195,654,829,832],[101,164,172,176,179,181,182,183,195,627,659,684,829,832],[101,164,172,176,179,181,182,183,195,617,620,622,623,629,630,631,633,634,637,638,650,651,653,684,829,832],[101,164,172,176,179,181,182,183,195,633,644,645,684,829,832],[101,164,172,176,179,181,182,183,195,633,634,641,684,829,832],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,684,829,832],[101,164,172,176,179,181,182,183,195,582,829,832],[101,164,172,176,179,181,182,183,195,620,627,633,634,637,646,684,829,832],[101,164,172,176,179,181,182,183,195,613,657,659,829,832],[101,164,167,172,176,179,181,182,183,195,200,613,620,622,627,631,633,634,637,638,641,642,643,646,649,650,651,655,656,659,684,829,832],[101,164,172,176,179,181,182,183,195,582,633,634,637,684,829,832],[101,164,172,176,179,181,182,183,195,633,644,645,646,684,829,832],[101,164,172,176,179,181,182,183,195,582,633,638,639,640,684,829,832],[101,164,167,172,176,179,181,182,183,195,200,582,613,620,622,627,631,633,634,637,638,639,640,641,642,643,644,645,646,649,650,651,655,656,657,658,659,684,829,832],[101,164,172,176,179,181,182,183,195,582,617,620,622,627,631,633,634,637,638,639,640,641,642,644,645,646,649,684,685,686,687,688,693,829,832],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,638,644,645,646,684,686,829,832],[101,164,172,176,179,181,182,183,195,694,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,803,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,805,829,832],[101,164,172,176,179,181,182,183,195,255,536,748,749,780,801,802,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,808,829,832],[101,164,172,176,179,181,182,183,195,255,748,749,780,801,802,807,829,832],[101,164,172,176,179,181,182,183,195,255,746,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,750,829,832],[101,164,172,176,179,181,182,183,195,255,553,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,753,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,752,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,756,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,758,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,760,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,765,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,764,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,762,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,768,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,770,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,772,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,774,829,832],[101,164,172,176,179,181,182,183,195,255,553,748,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,777,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,776,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,811,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,801,802,810,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,814,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,801,802,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,813,829,832],[92,101,164,172,176,179,181,182,183,195,255,554,557,794,795,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,819,829,832],[101,164,172,176,179,181,182,183,195,255,818,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,781,801,802,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,748,801,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,785,795,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,795,810,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,802,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,800,829,832],[92,101,164,172,176,179,181,182,183,195,255,536,748,800,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,818,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,817,829,832],[92,101,164,172,176,179,181,182,183,195,255,536,546,799,817,829,832],[101,164,172,176,179,181,182,183,195,255,799,829,832],[92,101,164,172,176,179,181,182,183,195,255,785,829,832],[92,101,164,172,176,179,181,182,183,195,255,546,748,785,829,832],[92,101,164,172,176,179,181,182,183,195,255,743,799,829,832],[92,101,164,172,176,179,181,182,183,195,255,694,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,746,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,781,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,748,785,786,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,780,829,832],[92,101,164,172,176,179,181,182,183,195,255,554,743,746,748,829,832],[101,164,172,176,179,181,182,183,195,255,554,736,743,744,745,829,832],[101,164,172,176,179,181,182,183,195,255,748,780,829,832],[101,164,172,176,179,181,182,183,195,255,829,832],[101,164,172,176,179,181,182,183,195,255,748,785,829,832],[101,164,172,176,179,181,182,183,195,255,748,829,832],[101,164,172,176,179,181,182,183,195,212,255,615,660,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,829,832]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc",{"version":"168aa44771e55cda628eeb5fbb6f626f6f263d827967b119e8c06abd7f1362ec","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","impliedFormat":99},{"version":"51d2ffea2d1ee4a81c775938588c1e16620281adb60cbc26579a2fc6baa10bd2","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"a413e4b0b99280e1e58f5fe7b2b585e8a9be4996df8c58585399c9e2ca8a683e","impliedFormat":99},{"version":"609ab2c225766bc0851251c1db0fd5492673e190074045d21dc5dc7c3c46d785","impliedFormat":99},{"version":"c074e054c9db79055d37d7d70131e9a3234b8186773b3edb617c13f80bcf8774","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"7f3857dc5cfe1e5e977edb14e931d9939a952e8e41997263a927f8f0299ea652","impliedFormat":99},{"version":"3559624d0102d10d7765c292c60ccbc229541534db32061e06df88bfe1064636","impliedFormat":99},{"version":"5a9834c603c65aee5cba0c1d6b3c7aee85cdc7862832a23165c6aa4139c165f2","impliedFormat":99},{"version":"a7d7b5fa83cd7b3b4c2aa73bc29e7cbd53d5690b74f6fb39a5558af0a94967ba","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"f093d4bd6a9267be5f8ecbfbca19f4f3359b3839883206150c5d833606569e84","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"4a13397dffad4475c45c70fde584c925fe8c9218b3c7ab94397b68fc434f63b6","impliedFormat":99},{"version":"2faebfa830ae4cfbfb58e48b0ec20a2a63882d776f0ca36ec7155d45cf1b7f2d","impliedFormat":99},{"version":"b478fad6cb2c66bfbfc027983240b416a7733013f878056ba92cf809020018a0","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","impliedFormat":99},{"version":"2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","impliedFormat":99},{"version":"860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","impliedFormat":99},{"version":"7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","impliedFormat":99},{"version":"07ad8a597ac75084e3dd9f9fadf5e8d7ccdcfe2f0c94ea0cf1cd8aa027a6c46e","impliedFormat":99},{"version":"94ddb4a2bb0c69e8efea22c58c2b6f84017eba469a4e433f5396ea8619d051cb","impliedFormat":99},{"version":"064499a671b662b25675beccdd04fb0bdebb6bd49bdb90d448e4b1ce3db20526","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"ae7d986f19db00cd62ce8573307f910ec2103d7fc30df09cedeec3cabec13082","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"ad763fa0c24ede2b818eb6598c12dd581451f94688fb9ed963beba20d513a7ec","signature":"90ec9100c29e008c3d9194acd818e2cfa6dc6e177154bc8e10c5959aa35619ed"},{"version":"b7ca2f47522d4ea41e65ff92c4c6dd9c4c8260da7c456a7631a9c88dc056b4d0","impliedFormat":1},{"version":"4f01e4d0959f9125b89e5737eb1ca2bfa69fd6b7d6126eba22feb8b505b00cde","impliedFormat":1},{"version":"4363a1adb9c77f2ed1ca383a41fbab1afadd35d485c018b2f84e834edde6a2c7","impliedFormat":1},{"version":"1d6458533adb99938d041a93e73c51d6c00e65f84724e9585e3cc8940b25523f","impliedFormat":1},{"version":"b0878fbd194bdc4d49fc9c42bfeeb25650842fe1412c88e283dc80854b019768","impliedFormat":1},{"version":"a892ea0b88d9d19281e99d61baba3155200acced679b8af290f86f695b589b16","impliedFormat":1},{"version":"03b42e83b3bcdf5973d28641d72b81979e3ce200318e4b46feb8347a1828cd5d","impliedFormat":1},{"version":"8a3d57426cd8fb0d59f6ca86f62e05dde8bfd769de3ba45a1a4b2265d84bac5a","impliedFormat":1},{"version":"afc6e1f323b476fdf274e61dab70f26550a1be2353e061ab34e6eed180d349b6","impliedFormat":1},{"version":"7c14483430d839976481fe42e26207f5092f797e1a4190823086f02cd09c113c","impliedFormat":1},{"version":"828a3bea78921789cbd015e968b5b09b671f19b1c14c4bbf3490b58fbf7d6841","impliedFormat":1},{"version":"69759c42e48938a714ee2f002fe5679a7ab56f0b5f29d571e4c31a5398d038fe","impliedFormat":1},{"version":"6e5e666fa6adeb60774b576084eeff65181a40443166f0a46ae9ba0829300fcb","impliedFormat":1},{"version":"1a4d43bdc0f2e240395fd204e597349411c1141dd08f5114c37d6268c3c9d577","impliedFormat":1},{"version":"874e58f8d945c7ac25599128a40ec9615aa67546e91ca12cbf12f97f6baf54ff","impliedFormat":1},{"version":"da2627da8d01662eb137ccd84af7ffa8c94cf2b2547d4970f17802324e54defc","impliedFormat":1},{"version":"07af06b740c01ed0473ebdd3f2911c8e4f5ebf4094291d31db7c1ab24ff559aa","impliedFormat":1},{"version":"ba1450574b1962fcf595fc53362b4d684c76603da5f45b44bc4c7eeed5de045b","impliedFormat":1},{"version":"b7903668ee9558d758c64c15d66a89ed328fee5ac629b2077415f0b6ca2f41bc","impliedFormat":1},{"version":"c7628425ee3076c4530b4074f7d48f012577a59f5ddade39cea236d6405c36ba","impliedFormat":1},{"version":"28c8aff998cc623ab0864a26e2eb1a31da8eb04e59f31fa80f02ec78eb225bcd","impliedFormat":1},{"version":"78d542989bdf7b6ba5410d5a884c0ab5ec54aa9ce46916d34267f885fcf65270","impliedFormat":1},{"version":"4d95060af2775a3a86db5ab47ca7a0ed146d1f6f13e71d96f7ac3b321718a832","impliedFormat":1},{"version":"6708cd298541a89c2abf66cceffc6c661f8ee31c013f98ddb58d2ec4407d0876","impliedFormat":1},{"version":"2e90928c29c445563409d89a834662c2ba6a660204fb3d4dc181914e77f8e29d","impliedFormat":1},{"version":"84be1b8b8011c2aab613901b83309d017d57f6e1c2450dfda11f7b107953286a","impliedFormat":1},{"version":"d7af890ef486b4734d206a66b215ebc09f6743b7fb2f3c79f2fb8716d1912d27","impliedFormat":1},{"version":"7e82c1d070c866eaf448ac7f820403d4e1b86112de582901178906317efc35ad","impliedFormat":1},{"version":"c5c4f547338457f4e8e2bec09f661af14ee6e157c7dc711ccca321ab476dbc6d","impliedFormat":1},{"version":"223e233cb645b44fa058320425293e68c5c00744920fc31f55f7df37b32f11ad","impliedFormat":1},{"version":"1394fe4da1ab8ab3ea2f2b0fcbfd7ccbb8f65f5581f98d10b037c91194141b03","impliedFormat":1},{"version":"086d9e59a579981bdf4f3bfa6e8e893570e5005f7219292bf7d90c153066cdfc","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"cd66a32437a555f7eb63490509a038d1122467f77fe7a114986186d156363215","impliedFormat":1},{"version":"f53d243499acfacc46e882bbf0bf1ae93ecea350e6c22066a062520b94055e47","impliedFormat":1},{"version":"65522e30a02d2720811b11b658c976bff99b553436d99bafd80944acba5b33b4","impliedFormat":1},{"version":"76b3244ec0b2f5b09b4ebf0c7419260813820f128d2b592b07ea59622038e45c","impliedFormat":1},{"version":"66eb7e876b49beff61e33f746f87b6e586382b49f3de21d54d41313aadb27ee6","impliedFormat":1},{"version":"69e8dc4b276b4d431f5517cd6507f209669691c9fb2f97933e7dbd5619fd07b7","impliedFormat":1},{"version":"361a647c06cec2e7437fa5d7cdf07a0dcce3247d93fbf3b6de1dc75139ff5700","impliedFormat":1},{"version":"fe5726291be816d0c89213057cd0c411bb9e39e315ed7e1987adc873f0e26856","impliedFormat":1},{"version":"1b76990de23762eb038e8d80b3f9c810974a7ed2335caa97262c5b752760f11a","impliedFormat":1},{"version":"5e050e05fe99cd06f2d4ad70e73aa4a72961d0df99525e9cad4a78fa588f387b","impliedFormat":1},{"version":"4ff327e8b16da9d54347b548f85675e35a1dc1076f2c22b2858e276771010dd2","impliedFormat":1},{"version":"f767787945b5c51c0c488f50b3b3aeb2804dfd2ddafcb61125d8d8857c339f5a","impliedFormat":1},{"version":"14ab21a9aeff5710d1d1262459a6d49fb42bed835aa0f4cfc36b75aa36faddcd","impliedFormat":1},{"version":"ba3c4682491b477c63716864a035b2cfdd727e64ec3a61f2ca0c9af3c0116cfd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b222d32836d745e1e021bb10f6a0f4a562dd42206203060a8539a6b9f16523f0","impliedFormat":1},{"version":"a3f6d8995864820a0207b7ef4ce1ed6a8dd2fccc7e70d015da15034807c38e1c","impliedFormat":1},{"version":"651df11341eff0b769fb83af75b1872e6cedf406674c5eaa2650551aceb5a816","impliedFormat":1},{"version":"774a466295d26eddab911b9f567040364e7b7d0eb8003ad3bfc92b97eeecf066","signature":"f15b4a91c10bf30ff3708a5e3968c0a52ca4e86a4b9a5b1c4fc8e9b5f1292f21"},"1e9d4c3b066e0228765cef074a9bf49d0b8d3af461c97f2c511e8f7110b56235",{"version":"baa07ae4ae973ba8b5ff905cd8ea1430821ad43730813b052813a8b2cbf5986c","signature":"6da39ed4125f5dbf24242cd1858f36a453242870ac1cfc49b1b615d0d92c5b10"},"3e983a4e5756fa941c8f4877eb8310b0cb3d6dcd55c481fd252420860050d81c","9dfe98d745dfc706198852e032c3c936092a4484951872c0d18639cf2ab698cf","9f01d110e167ddcfaa01b236040a12699b6ed7a2070d7c362f4403f092fed008","030523c514236148e0f25975ef74b2490c391cb9596cd668728f7db5b0702e08","ca52a606c31ddaae5f7c4055fccb3563cf7e85601c96dbf28b7d0795d2d21af0","41d8a2df75ff7b6ee4c82ef8ce52032aa272358a5f9187a6b5986849200ed411","f25d11b3d781ff8db8614eeee12b43f81ad05389fb25acf10b8c3473b0e2a1d0","78b3214dba4e86c41e4cdf5de5dcc853806ff74fad5df3dc1087cdbe19ad00e0","9980dd11b1e848c16ad84eae18f4e7bfa3331f81c2617533b0e3bba61cb9ab3f","45b82fd88270dd3d0aff39220b341eca789f77c82813dc6695b2058479d8dc28","915d1bc5f4c3b9cc8e25964dcd29b3c00ffb36ab2c8b12b2472533b3113485a9","fcc8fb0967eda9256921f3cfc521d49f3d473232d4c754c09de1d50faa996e35","463efb47c0879fb7e518ca8d209ffc49e2d682d0c47eaf30d074a1032290ac50","a794572bfb0885ec1de20b701e498a415c0480e4fb6c20dbaa125b374ae691cb","dd26e8bac53b883eef657e5c7961170c27944f68825e82a43625c5ccc51c2937","016e4353e0414c98c2ed2eb75df1509a38b457ddf000e9ff98125f82ea42c335","3ef6579bdd5883302539b5370c5670331f3584dff9e2ef14bab39991f00a29cb","e34737b913a2f8775f45e495e660016e0ab0fda68c579f2024d1b596dde2d81c","6677681f753ead74430e87a3398cc92c183570992c77804fc4215178ffc86116","f5a22523635ca6f47c20b386b010ca1258aa19af5f4299f8752809c599315bcf",{"version":"214621f2f6a7dadf8232fb69c22f4373faac478a22f387a1827c37a93e82acd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"4f69209ce0e934946c859c4cc6248ef4a2dc528f5baf9b4fcdea5cf3e08d9d38","041b81f9c2cc3f95588f5ef2da13fce1d895ddd5160979c84c01aaa8873145b4","fb5ce2f104fde415289b4febf27da970e40afefe42b87b15db28818ca9f94132","6e568ff38a9d7070783b26b39b93df658c7466032f4ffa22431dfe2808b7a8bd","3613723853e81414c2e1220e3e0a696a997cc49e4390060b6ac7fd91aec150e4","e4bba7f9edd598a76e24e59f3d47d09cb0295d6c52c8a89e8fa04dc6e6428b16","082900437524e8bc6903f0d26479f590af1814cc5080fc502e07d38c951500be","34eb44fd7813a487540b6afa04da3175388b1841aa3612569e8aa07652363b69","a76367ab8ebbbfb0db994a3d394b71b72c3b72fb69542222ace317e4b61f74ca","cbeab042293806df5cb4e45ba714036477971cb40a2539b20c331a632c1a2c46","0f55b5907842f16784dca83f2c82ac05e1e8740f2ec866c95289e05061384e4b","7c8545a7c4ec6978ebb4af07475d76007eb084c4f7f45aeba7ee817eeb4316e1",{"version":"5a2cdf6adeec348bbc876221be4367e8adff0bb78a5680ebd7d71e5c3bad6cc0","impliedFormat":99},{"version":"e004826eac62081f867c66dabd92d3ef7d126d93a70430a2c88429228c3ecc50","impliedFormat":99},{"version":"38d6857b58d2ac42442e396311c542062d4f0dad40f2adb496dd5fd0756ee400","impliedFormat":99},{"version":"34b7d1e2d15845cf08bcf5e3c01adbb92cea1ec27564ee249ba486cdfb28526c","impliedFormat":99},{"version":"57a11712c0947d75a4ca92de7e354ee667f3bc24ea57e5038c5c1b2c316d174b","signature":"2791178671f71d9b41ed9ef814e549d85cc6a77c61e2f8a87ec25f2176d9a3fc"},"cf081b846c5f25474cebc31a61dac186ac3a71e94668f424b2476eac5b624aea",{"version":"968043e1fd7bb3c6b1c22d3341ede621d16a628b2bc4c35d1e43f0064ff7c1a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6d261c7be483027c9d281ba71314350ad8ce66efabf46f7b6099f39fe3b8d218",{"version":"9445c836eee19d76274eb41e66d782c17fa45e938cd6a3e6318e5cc51e5df3b3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7992a39d6cde5e050eb78461a8bf9ad986175a94826e835c110b3967290bd249","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"cc0e0705b17f5987925bf05b5a7da622a76ad691274a428cf18fb28b33a7a1cf","signature":"01e6799210215286acf67be8c15da37b72af300e0f7f32c7f11535415e25ee88"},{"version":"ab640e52df6129fa178d5c0f2860542954ea38af4b0801a92c3ac09f6a9eec7c","signature":"91212f9905f489a1993df856acac1939544f6166e4cafff1c4f0949e37a8a11d"},{"version":"c3d577953f04c0188d8b9c63b2748b814efda6440336fa49557f0079f5cf748a","impliedFormat":1},{"version":"787fe950e18951b7970ec98cb05b3d0b11fcdfeb2091a7ea481ac9e52bf6c086","impliedFormat":1},{"version":"13ceda04874f09091da1994ba5f58bf1e9439af93336616257691863560b3f13","impliedFormat":1},{"version":"9f51e1b45772c037ff9f4b4e7d1074192f7c5307e51f026c556af64081acd3a9","signature":"fb69d502157f1cf71cb8c737f6909c2e82f2a53b8157f840411444435f5da3d1"},"1aea4ec138a31bf0914fe68fe2b3e7bcd6de65dce1b693da7abe16e4b50a15ef",{"version":"a941595362ff7e12adee1605aea8495d9bc96cd833d95c87f83cad2b5838165a","signature":"b67fa3b5b051ead6f5048d73c953d289234953f832922ffc4dfe293d5c6bfc98"},"c98b1727a4c0ccfbd4df609bad278f1af184a069d232f978a327d53110677480",{"version":"e9d70d2ef380ac231bd7ac1996f3587deae58d5f124347535436c011af25d5fe","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"76cc225f61f545122672c27ff69aa27d1e7578d653c5fe942ebe88601cea0b02",{"version":"c9d408c70e4cddd361a8452f04d0bf25e66415d5f7ce2b92b9ed2c162e3082c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f3415880499901a01feef00e1b3042f670dabad8b5a131c22994f5f951dbdf2f","signature":"28007b7d2b577a868c587c22500f2ab77490b6390909ffbdd3b04dac98e69a18"},"789957c66d154bfb21cd2700f89938a754f100f30e4b4829fb5e376ed9898f90",{"version":"3b6c468202603e81e2dccc50efa84b0879c0a7fe7d852b2e9e95da15ee78b78b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"fc51205c27f22f7194f3c026cdf19c5b27f19190a97955b9ffce0db45858e42f","54c008f175512ea8e8854d138dcf76b2af5e59e6816e82e87a360d76f3c7f820",{"version":"532d30276f01efab1a3aa4f052f15abac54da5db376807bb869fcc7f0d9b305b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"8bc24afa3c5fb73fd0dc89f091d2cb65b9d54f7a90b37302e9bd679ba504b0e3","51610870e75caaf1ff890f1fb949366cd7d843b4aa2e734c166bb307a78f33ea",{"version":"502c4922baae4d2ddc7c46bc248cb168528939730cc7dcf643b1fecc471829c1","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ef4ca970edfb3d5ae43f56927d83ddd6afdba01a73f2c94a6b30e698aa1ce83e","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f20b8d5c86e426ce2d1505f4a3114e66411272aa8394e0ad323c0c3b1d1fadff","signature":"b41f35e5ae414583d72cc2aa3a17cc23d40f4b9e221f92acd74ed09bb3daaa63"},{"version":"74b006e51c1fe0198db4fd239bdfb2063fb3b0139bbb3dbaab79f323f42ba6bf","signature":"83057fe16cf05e5bf626fd4e46379506199130438abbd2ae42de6234bb202181"},{"version":"c247b5bb6d297cb7c9607645b1486b2f7b3ee0c05fac97d18e6daf4e3b25ebeb","signature":"5a224c6b95c526ad3f70b7b5894a2fe9b50cb5a9eed53b87806cf1045f8d7bab"},{"version":"dd7a9804bfd52806479d69214126956478367bb3a2c333b589ddcc253aae03d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"33940e73c12951fdfd6d9b6e9c1e25057376adfa5561038cb59591098f159b19","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"20375a205b37d0f527f1f3fb6cc5d6c2076c1b57f74b9024f8153e0f3f0289a9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"3557b3416d97219e58a39fecce338b086bd42db6ce7ef701e8265783fbd20c6f",{"version":"83f21e09f1a6d980cc7cf83252deccd5d997e67266ae8bd450ef8899fcab1884","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6e70039e5a6af8ab06917dc2dd007fa8caabea0a2533303bca6be8510ae2cfd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f4722121739886d9694fe6d74b91f654b2b26459edd6e275fb5ff1a509bbc262","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c46f9542d2d4a44df84e20e37348c86abfb57804268f5236874fa8a8b7639f5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"9304048358b92fcbf0eec60f51d53903407986386be57168d1d2caa302f30546","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"4332f611f915908b335662f95ac6047288d3bc0b939e06d59e369b96a28eaa70","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","1bbd475eaf5bfb166aaee62b5c40d5a2ef4a87787d0e08a6cbfcf71426aa205f",{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[559,561],661,695,[746,781],[786,791],795,796,[800,833]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[832,1],[559,2],[833,3],[829,4],[830,2],[831,5],[560,6],[561,7],[403,2],[566,2],[619,2],[782,2],[783,8],[784,9],[785,10],[679,2],[676,2],[675,2],[670,11],[681,12],[666,13],[677,14],[669,15],[668,16],[678,2],[673,17],[680,2],[674,18],[667,2],[665,19],[664,20],[663,13],[683,21],[662,2],[626,22],[624,2],[161,23],[162,23],[163,24],[101,25],[164,26],[165,27],[166,28],[99,2],[167,29],[168,30],[169,31],[170,32],[171,33],[172,34],[173,34],[174,35],[175,36],[176,37],[177,38],[102,2],[100,2],[178,39],[179,40],[180,41],[220,42],[181,43],[182,44],[183,43],[184,45],[185,46],[186,47],[187,48],[188,48],[189,48],[190,49],[191,50],[192,51],[193,52],[194,53],[195,54],[196,54],[197,55],[198,2],[199,2],[200,56],[201,57],[202,56],[203,58],[204,59],[205,60],[206,61],[207,62],[208,63],[209,64],[210,65],[211,66],[212,67],[213,68],[214,69],[215,70],[216,71],[217,72],[103,43],[104,2],[105,73],[106,74],[107,2],[108,75],[109,2],[152,76],[153,77],[154,78],[155,78],[156,79],[157,2],[158,26],[159,80],[160,77],[218,81],[219,82],[224,83],[488,84],[225,85],[223,86],[490,87],[489,88],[682,84],[221,89],[486,2],[222,90],[90,2],[92,91],[485,84],[255,84],[615,92],[614,2],[627,93],[648,94],[649,95],[647,2],[620,2],[633,96],[632,97],[644,96],[635,98],[637,99],[656,99],[636,100],[617,101],[616,2],[622,102],[623,103],[653,104],[629,105],[631,106],[652,2],[650,105],[630,2],[621,103],[628,2],[625,2],[91,2],[691,107],[693,108],[692,109],[690,110],[689,2],[729,111],[698,112],[708,112],[699,112],[709,112],[700,112],[701,112],[716,112],[715,112],[717,112],[718,112],[710,112],[702,112],[711,112],[703,112],[712,112],[704,112],[706,112],[714,113],[707,112],[713,113],[719,113],[705,112],[720,112],[725,112],[726,112],[721,112],[697,2],[727,2],[723,112],[722,112],[724,112],[728,112],[606,2],[608,114],[607,2],[696,115],[797,116],[735,117],[734,118],[741,119],[743,120],[739,121],[738,122],[742,118],[736,123],[733,124],[744,125],[745,125],[737,126],[731,2],[732,127],[799,128],[798,129],[740,2],[511,130],[516,131],[523,132],[506,133],[259,2],[267,134],[407,135],[410,136],[382,2],[395,137],[402,138],[284,2],[384,2],[265,2],[381,139],[427,140],[266,2],[257,141],[409,142],[411,143],[412,144],[483,145],[376,146],[329,147],[389,148],[390,149],[388,150],[387,2],[383,151],[408,152],[268,153],[453,2],[454,154],[295,155],[269,156],[296,155],[332,155],[235,155],[405,157],[404,2],[394,158],[501,2],[244,2],[522,159],[461,160],[462,161],[458,162],[540,2],[359,2],[463,163],[459,164],[545,165],[544,166],[539,2],[310,2],[362,167],[361,2],[538,168],[460,84],[315,169],[322,170],[324,171],[314,2],[319,172],[321,173],[323,174],[318,175],[316,2],[320,176],[541,2],[537,2],[543,177],[542,2],[313,178],[532,179],[535,180],[303,181],[302,182],[301,183],[548,84],[300,184],[289,2],[550,2],[793,185],[792,2],[551,84],[552,186],[227,2],[391,187],[392,188],[393,189],[231,2],[396,2],[251,190],[226,2],[475,84],[233,191],[474,192],[473,193],[464,2],[465,2],[472,2],[467,2],[470,194],[466,2],[468,195],[471,196],[469,195],[264,2],[261,2],[262,155],[416,2],[421,197],[422,198],[420,199],[418,200],[419,201],[414,2],[481,163],[256,163],[510,202],[517,203],[521,204],[350,205],[349,2],[344,2],[497,206],[505,207],[377,208],[378,209],[456,210],[366,2],[479,211],[354,84],[371,212],[482,213],[367,2],[370,214],[368,2],[480,215],[477,216],[476,2],[478,2],[374,2],[452,217],[239,218],[352,219],[356,220],[372,221],[375,222],[364,223],[357,224],[504,225],[430,226],[348,227],[236,228],[503,229],[232,230],[423,231],[415,2],[424,232],[441,233],[413,2],[440,234],[98,2],[435,235],[260,2],[455,236],[431,2],[245,2],[247,2],[386,2],[439,237],[263,2],[287,238],[373,239],[293,240],[353,2],[438,2],[417,2],[443,241],[444,242],[385,2],[446,243],[448,244],[447,245],[397,2],[437,228],[450,246],[347,247],[436,248],[442,249],[272,2],[276,2],[275,2],[274,2],[279,2],[273,2],[282,2],[281,2],[278,2],[277,2],[280,2],[283,250],[271,2],[339,251],[338,2],[343,252],[340,253],[342,254],[345,252],[341,253],[252,255],[331,256],[500,257],[498,2],[527,258],[529,259],[493,260],[528,261],[240,262],[237,262],[270,2],[254,263],[253,264],[249,265],[250,266],[258,267],[286,267],[297,267],[333,268],[298,268],[242,269],[241,2],[337,270],[336,271],[335,272],[334,273],[243,274],[484,275],[285,276],[492,277],[457,278],[487,279],[491,280],[380,281],[379,282],[360,283],[346,284],[328,285],[330,286],[327,287],[449,288],[351,2],[515,2],[248,289],[451,290],[499,291],[358,2],[288,292],[365,293],[363,294],[290,295],[425,296],[494,2],[291,297],[426,297],[513,2],[512,2],[514,2],[496,2],[495,2],[428,298],[355,2],[325,299],[246,300],[304,2],[230,301],[292,2],[519,84],[229,2],[531,302],[312,84],[525,163],[311,303],[508,304],[309,302],[234,2],[533,305],[307,84],[308,84],[299,2],[228,2],[306,306],[305,307],[294,308],[369,52],[429,52],[445,2],[433,309],[432,2],[317,178],[238,2],[326,84],[502,190],[509,310],[93,84],[96,311],[97,312],[94,84],[95,2],[406,74],[401,313],[400,2],[399,314],[398,2],[507,315],[518,316],[520,317],[524,318],[794,319],[526,320],[530,321],[558,322],[534,322],[557,323],[536,324],[546,325],[547,326],[549,327],[553,328],[556,190],[555,2],[554,329],[730,330],[602,331],[600,332],[601,333],[589,334],[590,332],[597,335],[588,336],[593,337],[603,2],[594,338],[599,339],[605,340],[604,341],[587,342],[595,343],[596,344],[591,345],[598,331],[592,346],[672,347],[671,2],[611,348],[574,349],[575,350],[578,351],[567,352],[577,353],[573,354],[565,2],[579,355],[580,356],[568,2],[569,2],[571,357],[570,2],[572,358],[434,359],[586,2],[645,2],[618,2],[88,2],[89,2],[14,2],[15,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[64,2],[65,2],[66,2],[11,2],[67,2],[68,2],[69,2],[70,2],[71,2],[72,2],[12,2],[73,2],[74,2],[75,2],[76,2],[77,2],[1,2],[78,2],[79,2],[13,2],[80,2],[81,2],[82,2],[83,2],[84,2],[85,2],[86,2],[87,2],[128,360],[140,361],[125,362],[141,363],[150,364],[116,365],[117,366],[115,367],[149,329],[144,368],[148,369],[119,370],[137,371],[118,372],[147,373],[113,374],[114,368],[120,375],[121,2],[127,376],[124,375],[111,377],[151,378],[142,379],[131,380],[130,375],[132,381],[135,382],[129,383],[133,384],[145,329],[122,385],[123,386],[136,387],[112,363],[139,388],[138,375],[126,386],[134,389],[143,2],[110,2],[146,390],[563,391],[613,392],[582,393],[564,391],[562,2],[581,394],[612,2],[610,2],[583,2],[609,395],[576,396],[585,2],[584,397],[655,398],[660,399],[654,400],[646,401],[642,402],[638,403],[651,2],[639,98],[687,404],[684,405],[658,406],[657,407],[640,408],[686,409],[634,2],[641,410],[659,411],[694,412],[688,413],[834,414],[685,2],[643,2],[804,415],[806,416],[805,417],[809,418],[808,419],[747,420],[751,421],[750,422],[754,423],[753,422],[755,424],[752,422],[757,425],[756,422],[759,426],[758,422],[761,427],[760,422],[766,428],[765,422],[767,429],[764,422],[763,430],[762,422],[769,431],[768,422],[771,432],[770,422],[773,433],[772,422],[775,434],[774,435],[778,436],[777,422],[779,437],[776,422],[812,438],[811,439],[815,440],[814,441],[816,442],[813,441],[796,443],[820,444],[819,445],[803,446],[821,447],[822,448],[823,449],[824,450],[825,451],[801,452],[826,453],[827,454],[818,455],[817,456],[807,163],[795,457],[810,458],[802,163],[800,459],[787,460],[788,461],[789,462],[828,463],[790,464],[749,465],[746,466],[781,467],[748,468],[786,469],[780,470],[791,468],[661,471],[695,472]],"affectedFilesPendingEmit":[833,831,561,804,806,805,809,808,747,751,750,754,753,755,752,757,756,759,758,761,760,766,765,767,764,763,762,769,768,771,770,773,772,775,774,778,777,779,776,812,811,815,814,816,813,796,820,819,803,821,822,823,824,825,801,826,827,818,817,807,795,810,802,800,787,788,789,828,790,749,746,781,748,786,780,791,661,695],"version":"6.0.3"} +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.es2025.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.es2025.collection.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.es2025.intl.d.ts","./node_modules/typescript/lib/lib.es2025.iterator.d.ts","./node_modules/typescript/lib/lib.es2025.promise.d.ts","./node_modules/typescript/lib/lib.es2025.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.date.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.esnext.temporal.d.ts","./node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/dev/types/routes.d.ts","./next-env.d.ts","./next.config.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","./node_modules/@oxc-project/types/types.d.ts","./node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","./node_modules/rolldown/node_modules/@rolldown/pluginutils/dist/index.d.ts","./node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts","./node_modules/rolldown/dist/index.d.mts","./node_modules/rolldown/dist/parse-ast-index.d.mts","./node_modules/vite/types/internal/rollupTypeCompat.d.ts","./node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts","./node_modules/rolldown/dist/plugins-index.d.mts","./node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts","./node_modules/rolldown/dist/utils-index.d.mts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/vite/types/internal/esbuildOptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/types/internal/terserOptions.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/lightningcss/node/ast.d.ts","./node_modules/lightningcss/node/targets.d.ts","./node_modules/lightningcss/node/index.d.ts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/rolldown/dist/filter-index.d.mts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@vitejs/plugin-react/types/optionalTypes.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.ts","./node_modules/@vitest/spy/optional-types.d.ts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/tinyrainbow/dist/index.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/utils/dist/display.d.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/@vitest/utils/dist/timers.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-Bh0IjN67.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","./node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","./node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","./node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","./node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","./node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","./node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vitest/dist/chunks/coverage.d.BZtK59WP.d.ts","./node_modules/@vitest/utils/dist/serialize.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/vitest/dist/browser.d.ts","./node_modules/vitest/browser/context.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.CEnv6XRv.d.ts","./node_modules/vitest/dist/chunks/plugin.d.BM2TCi12.d.ts","./node_modules/vitest/dist/config.d.ts","./node_modules/vitest/config.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@testing-library/jest-dom/types/matchers.d.ts","./node_modules/@testing-library/jest-dom/types/jest.d.ts","./node_modules/@testing-library/jest-dom/types/index.d.ts","./node_modules/@testing-library/dom/types/matches.d.ts","./node_modules/@testing-library/dom/types/wait-for.d.ts","./node_modules/@testing-library/dom/types/query-helpers.d.ts","./node_modules/@testing-library/dom/types/queries.d.ts","./node_modules/@testing-library/dom/types/get-queries-for-element.d.ts","./node_modules/pretty-format/build/types.d.ts","./node_modules/pretty-format/build/index.d.ts","./node_modules/@testing-library/dom/types/screen.d.ts","./node_modules/@testing-library/dom/types/wait-for-element-to-be-removed.d.ts","./node_modules/@testing-library/dom/types/get-node-text.d.ts","./node_modules/@testing-library/dom/types/events.d.ts","./node_modules/@testing-library/dom/types/pretty-dom.d.ts","./node_modules/@testing-library/dom/types/role-helpers.d.ts","./node_modules/@testing-library/dom/types/config.d.ts","./node_modules/@testing-library/dom/types/suggestions.d.ts","./node_modules/@testing-library/dom/types/index.d.ts","./node_modules/@types/react-dom/test-utils/index.d.ts","./node_modules/@testing-library/react/types/index.d.ts","./node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","./node_modules/vitest/optional-runtime-types.d.ts","./node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","./node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","./node_modules/vitest/dist/runners.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./vitest.setup.ts","./node_modules/next-auth/adapters.d.ts","./node_modules/jose/dist/types/types.d.ts","./node_modules/jose/dist/types/jwe/compact/decrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/decrypt.d.ts","./node_modules/jose/dist/types/jwe/general/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/verify.d.ts","./node_modules/jose/dist/types/jws/flattened/verify.d.ts","./node_modules/jose/dist/types/jws/general/verify.d.ts","./node_modules/jose/dist/types/jwt/verify.d.ts","./node_modules/jose/dist/types/jwt/decrypt.d.ts","./node_modules/jose/dist/types/jwt/produce.d.ts","./node_modules/jose/dist/types/jwe/compact/encrypt.d.ts","./node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts","./node_modules/jose/dist/types/jws/compact/sign.d.ts","./node_modules/jose/dist/types/jws/flattened/sign.d.ts","./node_modules/jose/dist/types/jws/general/sign.d.ts","./node_modules/jose/dist/types/jwt/sign.d.ts","./node_modules/jose/dist/types/jwt/encrypt.d.ts","./node_modules/jose/dist/types/jwk/thumbprint.d.ts","./node_modules/jose/dist/types/jwk/embedded.d.ts","./node_modules/jose/dist/types/jwks/local.d.ts","./node_modules/jose/dist/types/jwks/remote.d.ts","./node_modules/jose/dist/types/jwt/unsecured.d.ts","./node_modules/jose/dist/types/key/export.d.ts","./node_modules/jose/dist/types/key/import.d.ts","./node_modules/jose/dist/types/util/decode_protected_header.d.ts","./node_modules/jose/dist/types/util/decode_jwt.d.ts","./node_modules/jose/dist/types/util/errors.d.ts","./node_modules/jose/dist/types/key/generate_key_pair.d.ts","./node_modules/jose/dist/types/key/generate_secret.d.ts","./node_modules/jose/dist/types/util/base64url.d.ts","./node_modules/jose/dist/types/util/runtime.d.ts","./node_modules/jose/dist/types/index.d.ts","./node_modules/openid-client/types/index.d.ts","./node_modules/next-auth/providers/oauth-types.d.ts","./node_modules/next-auth/providers/oauth.d.ts","./node_modules/next-auth/providers/email.d.ts","./node_modules/next-auth/core/lib/cookie.d.ts","./node_modules/next-auth/core/index.d.ts","./node_modules/next-auth/providers/credentials.d.ts","./node_modules/next-auth/providers/index.d.ts","./node_modules/next-auth/jwt/types.d.ts","./node_modules/next-auth/jwt/index.d.ts","./node_modules/next-auth/utils/logger.d.ts","./node_modules/next-auth/core/types.d.ts","./node_modules/next-auth/next/index.d.ts","./node_modules/next-auth/index.d.ts","./node_modules/next-auth/providers/github.d.ts","./node_modules/next-auth/providers/google.d.ts","./src/lib/auth.ts","./src/app/api/auth/[...nextauth]/route.ts","./src/lib/types.ts","./src/lib/api.ts","./src/app/api/content-skills/route.ts","./src/app/api/content-skills/__tests__/route.test.ts","./src/app/api/entities/route.ts","./src/app/api/entities/[id]/route.ts","./src/app/api/entities/[id]/__tests__/route.test.ts","./src/app/api/entities/__tests__/route.test.ts","./src/app/api/entity-candidates/[id]/route.ts","./src/app/api/entity-candidates/[id]/__tests__/route.test.ts","./src/app/api/feedback/route.ts","./src/app/api/feedback/__tests__/route.test.ts","./src/app/api/projects/[id]/bluesky-credentials/route.ts","./src/app/api/projects/[id]/bluesky-credentials/__tests__/route.test.ts","./src/app/api/projects/[id]/intake/route.ts","./src/app/api/projects/[id]/intake/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/route.ts","./src/app/api/projects/[id]/intake-allowlist/[allowlistId]/__tests__/route.test.ts","./src/app/api/projects/[id]/intake-allowlist/__tests__/route.test.ts","./src/app/api/projects/[id]/rotate-intake-token/route.ts","./src/app/api/projects/[id]/rotate-intake-token/__tests__/route.test.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/route.ts","./src/app/api/projects/[id]/verify-bluesky-credentials/__tests__/route.test.ts","./src/app/api/review/[id]/route.ts","./src/app/api/review/[id]/__tests__/route.test.ts","./src/app/api/skills/[skillName]/route.ts","./src/app/api/skills/[skillName]/__tests__/route.test.ts","./src/app/api/source-configs/route.ts","./src/app/api/source-configs/[id]/route.ts","./src/app/api/source-configs/[id]/__tests__/route.test.ts","./src/app/api/source-configs/__tests__/route.test.ts","./src/lib/view-helpers.ts","./src/lib/dashboard-view.ts","./node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/query-core/build/modern/index.d.ts","./node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","./node_modules/@tanstack/react-query/build/modern/index.d.ts","./src/lib/useRole.ts","./src/lib/__tests__/api.test.ts","./src/lib/__tests__/auth.test.ts","./src/lib/__tests__/dashboard-view.test.ts","./src/lib/__tests__/view-helpers.test.ts","./test-support/server-only.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./src/components/query-provider.tsx","./src/app/layout.tsx","./node_modules/next-auth/client/_utils.d.ts","./node_modules/next-auth/react/types.d.ts","./node_modules/next-auth/react/index.d.ts","./src/components/user-menu.tsx","./src/components/app-shell.tsx","./src/components/status-badge.tsx","./src/app/page.tsx","./src/app/__tests__/page.test.tsx","./src/app/admin/health/page.tsx","./src/app/admin/health/__tests__/page.test.tsx","./src/components/copy-button.tsx","./src/app/admin/sources/page.tsx","./src/app/admin/sources/__tests__/page.test.tsx","./src/components/skill-action-bar.tsx","./src/app/content/[id]/page.tsx","./src/app/content/[id]/__tests__/page.test.tsx","./src/app/entities/page.tsx","./src/app/entities/[id]/page.tsx","./src/app/entities/[id]/__tests__/page.test.tsx","./src/app/entities/__tests__/page.test.tsx","./src/components/auth/social-auth-buttons.tsx","./src/components/auth/login-form.tsx","./src/app/login/page.tsx","./src/app/login/__tests__/page.test.tsx","./src/components/__tests__/app-shell.test.tsx","./src/components/__tests__/query-provider.test.tsx","./src/components/__tests__/skill-action-bar.test.tsx","./src/components/__tests__/status-badge.test.tsx","./src/components/__tests__/user-menu.test.tsx","./src/components/auth/__tests__/login-form.test.tsx","./src/components/auth/__tests__/social-auth-buttons.test.tsx","./src/lib/__tests__/useRole.test.tsx","./.next/types/cache-life.d.ts","./.next/types/routes.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/validator.ts","./node_modules/vitest/globals.d.ts"],"fileIdsList":[[101,164,172,176,179,181,182,183,195,512,513,514,515,829],[101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,255,553,556,559,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,796,803,805,808,811,813,814,819,829,832],[101,164,172,176,179,181,182,183,195,512,513,514,515,832],[101,164,172,176,179,181,182,183,195,255,553,556,747,750,752,753,756,758,760,762,764,765,768,770,772,774,776,777,796,803,805,808,811,813,814,819,829,830,832],[101,164,172,176,179,181,182,183,195,557,558,559,829,832],[101,164,172,176,179,181,182,183,195,255,557,829,832],[101,164,172,176,179,181,182,183,195,782,829,832],[92,101,164,172,176,179,181,182,183,195,255,783,829,832],[101,164,172,176,179,181,182,183,195,784,829,832],[101,164,172,176,179,181,182,183,195,669,829,832],[101,164,172,176,179,181,182,183,195,666,667,668,669,670,673,674,675,676,677,678,679,680,829,832],[101,164,172,176,179,181,182,183,195,662,829,832],[101,164,172,176,179,181,182,183,195,672,829,832],[101,164,172,176,179,181,182,183,195,666,667,668,829,832],[101,164,172,176,179,181,182,183,195,666,667,829,832],[101,164,172,176,179,181,182,183,195,669,670,672,829,832],[101,164,172,176,179,181,182,183,195,667,829,832],[101,164,172,176,179,181,182,183,195,664,829,832],[101,164,172,176,179,181,182,183,195,663,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,681,682,829,832],[101,164,172,176,179,181,182,183,195,624,625,829,832],[101,161,162,164,172,176,179,181,182,183,195,829,832],[101,163,164,172,176,179,181,182,183,195,829,832],[164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,203,829,832],[101,164,165,170,172,175,176,179,181,182,183,185,195,200,212,829,832],[101,164,165,166,172,175,176,179,181,182,183,195,829,832],[101,164,167,172,176,179,181,182,183,195,213,829,832],[101,164,168,169,172,176,179,181,182,183,186,195,829,832],[101,164,169,172,176,179,181,182,183,195,200,209,829,832],[101,164,170,172,175,176,179,181,182,183,185,195,829,832],[101,163,164,171,172,176,179,181,182,183,195,829,832],[101,164,172,173,176,179,181,182,183,195,829,832],[101,164,172,174,175,176,179,181,182,183,195,829,832],[101,163,164,172,175,176,179,181,182,183,195,829,832],[101,164,172,175,176,177,179,181,182,183,195,200,212,829,832],[101,164,172,175,176,177,179,181,182,183,195,200,203,829,832],[101,151,164,172,175,176,178,179,181,182,183,185,195,200,212,829,832],[101,164,172,175,176,178,179,181,182,183,185,195,200,209,212,829,832],[101,164,172,176,178,179,180,181,182,183,195,200,209,212,829,832],[99,100,101,102,103,104,105,106,107,108,109,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,829,832],[101,164,172,175,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,183,195,829,832],[101,164,172,176,179,181,182,183,184,195,212,829,832],[101,164,172,175,176,179,181,182,183,185,195,200,829,832],[101,164,172,176,179,181,182,183,186,195,829,832],[101,164,172,176,179,181,182,183,187,195,829,832],[101,164,172,175,176,179,181,182,183,190,195,829,832],[101,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,829,832],[101,164,172,176,179,181,182,183,192,195,829,832],[101,164,172,176,179,181,182,183,193,195,829,832],[101,164,169,172,176,179,181,182,183,185,195,203,829,832],[101,164,172,175,176,179,181,182,183,195,196,829,832],[101,164,172,176,179,181,182,183,195,197,213,216,829,832],[101,164,172,175,176,179,181,182,183,195,200,202,203,829,832],[101,164,172,176,179,181,182,183,195,201,203,829,832],[101,164,172,176,179,181,182,183,195,203,213,829,832],[101,164,172,176,179,181,182,183,195,204,829,832],[101,161,164,172,176,179,181,182,183,195,200,206,212,829,832],[101,164,172,176,179,181,182,183,195,200,205,829,832],[101,164,172,175,176,179,181,182,183,195,207,208,829,832],[101,164,172,176,179,181,182,183,195,207,208,829,832],[101,164,169,172,176,179,181,182,183,185,195,200,209,829,832],[101,164,172,176,179,181,182,183,195,210,829,832],[101,164,172,176,179,181,182,183,185,195,211,829,832],[101,164,172,176,178,179,181,182,183,193,195,212,829,832],[101,164,172,176,179,181,182,183,195,213,214,829,832],[101,164,169,172,176,179,181,182,183,195,214,829,832],[101,164,172,176,179,181,182,183,195,200,215,829,832],[101,164,172,176,179,181,182,183,184,195,216,829,832],[101,164,172,176,179,181,182,183,195,217,829,832],[101,164,167,172,176,179,181,182,183,195,829,832],[101,164,169,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,213,829,832],[101,151,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,195,218,829,832],[101,164,172,176,179,181,182,183,190,195,829,832],[101,164,172,176,179,181,182,183,195,208,829,832],[101,151,164,172,175,176,177,179,181,182,183,190,195,200,203,212,215,216,218,829,832],[101,164,172,176,179,181,182,183,195,200,219,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,225,507,552,829,832],[92,101,164,172,176,179,181,182,183,195,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,223,224,488,507,552,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,222,224,225,507,552,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,489,829,832],[92,101,164,172,176,179,181,182,183,195,225,488,829,832],[92,96,101,164,172,176,179,181,182,183,195,222,223,224,225,507,552,829,832],[92,96,101,164,172,176,179,181,182,183,195,221,223,224,225,507,552,829,832],[90,91,101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,613,614,659,829,832],[101,164,172,176,179,181,182,183,195,617,618,619,622,623,626,829,832],[101,164,172,176,179,181,182,183,195,647,829,832],[101,164,172,176,179,181,182,183,195,647,648,829,832],[101,164,172,176,179,181,182,183,195,622,631,632,829,832],[101,164,172,176,179,181,182,183,195,622,631,829,832],[101,164,172,176,179,181,182,183,195,631,829,832],[101,164,172,176,179,181,182,183,195,620,631,635,636,829,832],[101,164,172,176,179,181,182,183,195,620,631,635,829,832],[101,164,172,176,179,181,182,183,195,616,829,832],[101,164,172,176,179,181,182,183,195,620,621,829,832],[101,164,172,176,179,181,182,183,195,620,829,832],[101,164,172,176,179,181,182,183,195,620,621,628,652,829,832],[101,164,172,176,179,181,182,183,195,628,829,832],[101,164,172,176,179,181,182,183,195,620,623,628,629,630,829,832],[101,164,172,176,179,181,182,183,195,689,690,829,832],[101,164,172,176,179,181,182,183,195,689,690,691,692,829,832],[101,164,172,176,179,181,182,183,195,689,691,829,832],[101,164,172,176,179,181,182,183,195,689,829,832],[101,164,172,176,179,181,182,183,195,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,829,832],[101,164,172,176,179,181,182,183,195,697,829,832],[101,164,172,176,179,181,182,183,195,697,707,829,832],[101,164,172,176,179,181,182,183,195,606,607,829,832],[101,164,172,176,179,181,182,183,195,743,829,832],[101,164,172,176,178,179,181,182,183,195,220,743,829,832],[101,164,172,176,179,181,182,183,195,734,741,829,832],[101,164,172,176,179,181,182,183,195,553,557,741,743,829,832],[101,164,172,176,179,181,182,183,195,696,730,737,739,740,829,832],[101,164,172,176,179,181,182,183,195,735,741,742,829,832],[101,164,172,176,179,181,182,183,195,553,557,738,743,829,832],[101,164,172,176,179,181,182,183,195,220,743,829,832],[101,164,172,176,179,181,182,183,195,735,737,743,829,832],[101,164,172,176,179,181,182,183,195,737,741,743,829,832],[101,164,172,176,179,181,182,183,195,737,829,832],[101,164,172,176,179,181,182,183,195,732,733,736,829,832],[101,164,172,176,179,181,182,183,195,729,730,731,737,743,829,832],[92,101,164,172,176,179,181,182,183,195,737,743,797,798,829,832],[92,101,164,172,176,179,181,182,183,195,737,743,829,832],[101,164,172,176,179,181,182,183,195,510,829,832],[101,164,172,176,179,181,182,183,195,512,513,514,515,829,832],[101,164,172,176,179,181,182,183,195,458,521,522,829,832],[101,164,172,176,179,181,182,183,195,230,231,233,245,269,384,395,503,829,832],[101,164,172,176,179,181,182,183,195,233,264,265,266,268,503,829,832],[101,164,172,176,179,181,182,183,195,233,401,403,405,406,408,503,505,829,832],[101,164,172,176,179,181,182,183,195,233,267,304,503,829,832],[101,164,172,176,179,181,182,183,195,231,233,244,245,251,257,262,383,384,385,394,503,505,829,832],[101,164,172,176,179,181,182,183,195,503,829,832],[101,164,172,176,179,181,182,183,195,240,246,265,285,380,829,832],[101,164,172,176,179,181,182,183,195,233,829,832],[101,164,172,176,179,181,182,183,195,226,240,246,829,832],[101,164,172,176,179,181,182,183,195,412,829,832],[101,164,172,176,179,181,182,183,195,409,410,412,829,832],[101,164,172,176,179,181,182,183,195,409,411,503,829,832],[101,164,172,176,178,179,181,182,183,195,285,482,500,829,832],[101,164,172,176,178,179,181,182,183,195,356,359,375,380,500,829,832],[101,164,172,176,178,179,181,182,183,195,328,500,829,832],[101,164,172,176,179,181,182,183,195,388,829,832],[101,164,172,176,179,181,182,183,195,387,388,389,829,832],[101,164,172,176,179,181,182,183,195,387,829,832],[98,101,164,172,176,178,179,181,182,183,195,226,233,245,251,257,263,265,269,270,283,284,351,381,382,395,503,507,829,832],[101,164,172,176,179,181,182,183,195,230,233,267,304,401,402,407,503,555,829,832],[101,164,172,176,179,181,182,183,195,267,555,829,832],[101,164,172,176,179,181,182,183,195,230,284,453,503,555,829,832],[101,164,172,176,179,181,182,183,195,555,829,832],[101,164,172,176,179,181,182,183,195,233,267,268,555,829,832],[101,164,172,176,179,181,182,183,195,404,555,829,832],[101,164,172,176,179,181,182,183,195,270,383,386,393,829,832],[92,101,164,172,176,179,181,182,183,195,458,829,832],[101,164,172,176,179,181,182,183,193,195,240,255,829,832],[101,164,172,176,179,181,182,183,195,240,255,829,832],[92,101,164,172,176,179,181,182,183,195,325,829,832],[92,101,164,172,176,179,181,182,183,195,255,829,832],[92,101,164,172,176,179,181,182,183,195,246,255,458,829,832],[101,164,172,176,179,181,182,183,195,240,311,325,326,537,544,829,832],[101,164,172,176,179,181,182,183,195,310,538,539,540,541,543,829,832],[101,164,172,176,179,181,182,183,195,361,829,832],[101,164,172,176,179,181,182,183,195,361,362,829,832],[101,164,172,176,179,181,182,183,195,244,246,313,314,829,832],[101,164,172,176,179,181,182,183,195,246,320,321,829,832],[101,164,172,176,179,181,182,183,195,246,315,323,829,832],[101,164,172,176,179,181,182,183,195,320,829,832],[101,164,172,176,179,181,182,183,195,238,246,313,314,315,316,317,318,319,320,323,829,832],[101,164,172,176,179,181,182,183,195,246,313,320,321,322,324,829,832],[101,164,172,176,179,181,182,183,195,246,314,316,317,829,832],[101,164,172,176,179,181,182,183,195,314,316,319,321,829,832],[101,164,172,176,179,181,182,183,195,542,829,832],[101,164,172,176,179,181,182,183,195,246,829,832],[92,101,164,172,176,179,181,182,183,195,234,531,829,832],[92,101,164,172,176,179,181,182,183,195,212,829,832],[92,101,164,172,176,179,181,182,183,195,267,302,829,832],[92,101,164,172,176,179,181,182,183,195,267,395,829,832],[101,164,172,176,179,181,182,183,195,300,305,829,832],[92,101,164,172,176,179,181,182,183,195,301,509,829,832],[101,164,172,176,179,181,182,183,195,792,829,832],[92,96,101,164,172,176,178,179,181,182,183,195,221,222,223,224,225,507,551,829,832],[101,164,172,176,178,179,181,182,183,195,246,829,832],[101,164,172,176,178,179,181,182,183,195,245,250,331,348,390,391,395,450,452,503,504,829,832],[101,164,172,176,179,181,182,183,195,283,392,829,832],[101,164,172,176,179,181,182,183,195,507,829,832],[101,164,172,176,179,181,182,183,195,232,829,832],[92,101,164,172,176,179,181,182,183,195,237,240,455,471,473,829,832],[101,164,172,176,179,181,182,183,193,195,240,455,470,471,472,554,829,832],[101,164,172,176,179,181,182,183,195,464,465,466,467,468,469,829,832],[101,164,172,176,179,181,182,183,195,466,829,832],[101,164,172,176,179,181,182,183,195,470,829,832],[101,164,172,176,179,181,182,183,195,255,419,420,422,829,832],[92,101,164,172,176,179,181,182,183,195,246,413,414,415,416,421,829,832],[101,164,172,176,179,181,182,183,195,419,421,829,832],[101,164,172,176,179,181,182,183,195,417,829,832],[101,164,172,176,179,181,182,183,195,418,829,832],[92,101,164,172,176,179,181,182,183,195,255,301,509,829,832],[92,101,164,172,176,179,181,182,183,195,255,508,509,829,832],[92,101,164,172,176,179,181,182,183,195,255,509,829,832],[101,164,172,176,179,181,182,183,195,348,349,829,832],[101,164,172,176,179,181,182,183,195,349,829,832],[101,164,172,176,178,179,181,182,183,195,504,509,829,832],[101,164,172,176,179,181,182,183,195,378,829,832],[101,163,164,172,176,179,181,182,183,195,377,829,832],[101,164,172,176,179,181,182,183,195,240,246,252,254,356,369,373,375,452,455,492,493,500,504,829,832],[101,164,172,176,179,181,182,183,195,246,295,317,829,832],[101,164,172,176,179,181,182,183,195,356,367,370,375,829,832],[92,101,164,172,176,179,181,182,183,195,237,240,356,359,375,378,412,459,460,461,462,463,474,475,476,477,478,479,480,481,555,829,832],[101,164,172,176,179,181,182,183,195,237,240,265,356,363,364,365,368,369,829,832],[101,164,172,176,179,181,182,183,195,200,246,265,367,374,455,456,500,829,832],[101,164,172,176,179,181,182,183,195,371,829,832],[101,164,172,176,178,179,181,182,183,193,195,234,246,250,260,292,293,296,348,351,416,450,451,492,503,504,505,507,555,829,832],[101,164,172,176,179,181,182,183,195,237,238,240,829,832],[101,164,172,176,179,181,182,183,195,356,829,832],[101,163,164,172,176,179,181,182,183,195,265,292,293,350,351,352,353,354,355,504,829,832],[101,164,172,176,179,181,182,183,195,375,829,832],[101,163,164,172,176,179,181,182,183,195,239,240,250,254,290,356,363,364,365,366,367,370,371,372,373,374,493,829,832],[101,164,172,176,178,179,181,182,183,195,290,291,363,504,505,829,832],[101,164,172,176,179,181,182,183,195,265,293,348,351,356,452,504,829,832],[101,164,172,176,178,179,181,182,183,195,503,505,829,832],[101,164,172,176,178,179,181,182,183,195,200,500,504,505,829,832],[101,164,172,176,178,179,181,182,183,193,195,226,240,245,252,254,257,260,267,287,292,293,294,295,296,331,332,334,337,339,342,343,344,345,347,395,450,452,500,503,504,505,829,832],[101,164,172,176,178,179,181,182,183,195,200,829,832],[101,164,172,176,179,181,182,183,195,233,234,235,263,500,501,502,507,509,555,829,832],[101,164,172,176,179,181,182,183,195,230,231,503,829,832],[101,164,172,176,179,181,182,183,195,424,829,832],[101,164,172,176,178,179,181,182,183,195,200,212,242,408,412,413,414,415,416,422,423,555,829,832],[101,164,172,176,179,181,182,183,193,195,212,226,240,242,254,257,293,332,337,347,348,401,428,429,430,436,439,440,450,452,500,503,829,832],[101,164,172,176,179,181,182,183,195,257,263,270,283,293,351,503,829,832],[101,164,172,176,178,179,181,182,183,195,212,234,245,254,293,434,500,503,829,832],[101,164,172,176,179,181,182,183,195,454,829,832],[101,164,172,176,178,179,181,182,183,195,424,437,438,447,829,832],[101,164,172,176,179,181,182,183,195,500,503,829,832],[101,164,172,176,179,181,182,183,195,353,493,829,832],[101,164,172,176,179,181,182,183,195,254,292,395,509,829,832],[101,164,172,176,178,179,181,182,183,193,195,232,337,397,401,430,436,439,442,500,829,832],[101,164,172,176,178,179,181,182,183,195,270,283,401,443,829,832],[101,164,172,176,179,181,182,183,195,233,294,395,445,503,505,829,832],[101,164,172,176,178,179,181,182,183,195,212,416,503,829,832],[101,164,172,176,178,179,181,182,183,195,267,294,395,396,397,406,424,444,446,503,829,832],[98,101,164,172,176,178,179,181,182,183,195,292,449,507,509,829,832],[101,164,172,176,179,181,182,183,195,346,450,829,832],[101,164,172,176,178,179,181,182,183,193,195,240,243,245,246,252,254,260,269,270,283,293,296,332,334,344,347,348,395,428,429,430,431,433,435,450,452,500,509,829,832],[101,164,172,176,178,179,181,182,183,195,200,270,436,441,447,500,829,832],[101,164,172,176,179,181,182,183,195,273,274,275,276,277,278,279,280,281,282,829,832],[101,164,172,176,179,181,182,183,195,287,338,829,832],[101,164,172,176,179,181,182,183,195,340,829,832],[101,164,172,176,179,181,182,183,195,338,829,832],[101,164,172,176,179,181,182,183,195,340,341,829,832],[101,164,172,176,178,179,181,182,183,195,244,245,246,250,251,504,829,832],[101,164,172,176,178,179,181,182,183,193,195,232,234,252,256,292,295,296,330,450,500,505,507,509,829,832],[101,164,172,176,178,179,181,182,183,193,195,212,236,243,244,254,256,293,448,493,499,504,829,832],[101,164,172,176,179,181,182,183,195,363,829,832],[101,164,172,176,179,181,182,183,195,364,829,832],[101,164,172,176,179,181,182,183,195,246,257,492,829,832],[101,164,172,176,179,181,182,183,195,365,829,832],[101,164,172,176,179,181,182,183,195,239,829,832],[101,164,172,176,179,181,182,183,195,241,253,829,832],[101,164,172,176,178,179,181,182,183,195,241,245,252,829,832],[101,164,172,176,179,181,182,183,195,248,253,829,832],[101,164,172,176,179,181,182,183,195,249,829,832],[101,164,172,176,179,181,182,183,195,241,242,829,832],[101,164,172,176,179,181,182,183,195,241,297,829,832],[101,164,172,176,179,181,182,183,195,241,829,832],[101,164,172,176,179,181,182,183,195,243,287,336,829,832],[101,164,172,176,179,181,182,183,195,335,829,832],[101,164,172,176,179,181,182,183,195,240,242,243,829,832],[101,164,172,176,179,181,182,183,195,243,333,829,832],[101,164,172,176,179,181,182,183,195,240,242,829,832],[101,164,172,176,179,181,182,183,195,292,395,829,832],[101,164,172,176,179,181,182,183,195,492,829,832],[101,164,172,176,178,179,181,182,183,195,212,252,254,258,292,395,449,452,455,456,457,483,484,487,491,493,500,504,829,832],[101,164,172,176,179,181,182,183,195,306,309,311,312,325,326,829,832],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,829,832],[92,101,164,172,176,179,181,182,183,195,223,225,255,485,486,490,829,832],[101,164,172,176,179,181,182,183,195,379,829,832],[101,164,172,176,179,181,182,183,195,265,286,291,292,356,357,358,359,360,362,375,376,378,381,449,452,503,505,829,832],[101,164,172,176,179,181,182,183,195,325,829,832],[101,164,172,176,178,179,181,182,183,195,330,500,829,832],[101,164,172,176,179,181,182,183,195,330,829,832],[101,164,172,176,178,179,181,182,183,195,252,298,327,329,331,449,500,507,509,829,832],[101,164,172,176,179,181,182,183,195,306,307,308,309,311,312,325,326,508,829,832],[98,101,164,172,176,178,179,181,182,183,193,195,212,241,242,254,260,292,293,296,395,447,448,450,500,503,504,507,829,832],[101,164,172,176,179,181,182,183,195,237,240,247,829,832],[101,164,172,176,179,181,182,183,195,291,293,425,428,829,832],[101,164,172,176,179,181,182,183,195,291,426,494,495,496,497,498,829,832],[101,164,172,176,178,179,181,182,183,195,287,503,829,832],[101,164,172,176,178,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,290,375,829,832],[101,164,172,176,179,181,182,183,195,289,829,832],[101,164,172,176,179,181,182,183,195,291,344,829,832],[101,164,172,176,179,181,182,183,195,288,290,503,829,832],[101,164,172,176,178,179,181,182,183,195,236,291,425,426,427,500,503,504,829,832],[92,101,164,172,176,179,181,182,183,195,240,246,324,829,832],[92,101,164,172,176,179,181,182,183,195,238,829,832],[101,164,172,176,179,181,182,183,195,228,229,829,832],[92,101,164,172,176,179,181,182,183,195,234,829,832],[92,101,164,172,176,179,181,182,183,195,240,310,829,832],[92,98,101,164,172,176,179,181,182,183,195,292,296,507,509,829,832],[101,164,172,176,179,181,182,183,195,234,531,532,829,832],[92,101,164,172,176,179,181,182,183,195,305,829,832],[92,101,164,172,176,179,181,182,183,193,195,212,232,299,301,303,304,509,829,832],[101,164,172,176,179,181,182,183,195,240,267,504,829,832],[101,164,172,176,179,181,182,183,195,240,432,829,832],[92,101,164,172,176,178,179,181,182,183,193,195,230,232,305,403,507,508,829,832],[92,101,164,172,176,179,181,182,183,195,221,222,223,224,225,507,552,829,832],[92,93,94,95,96,101,164,172,176,179,181,182,183,195,829,832],[101,164,172,176,179,181,182,183,195,398,399,400,829,832],[101,164,172,176,179,181,182,183,195,398,829,832],[92,96,101,164,172,176,178,179,180,181,182,183,193,195,220,221,222,223,224,225,226,232,260,265,442,470,505,506,509,552,829,832],[101,164,172,176,179,181,182,183,195,517,829,832],[101,164,172,176,179,181,182,183,195,519,829,832],[101,164,172,176,179,181,182,183,195,523,829,832],[101,164,172,176,179,181,182,183,195,793,829,832],[101,164,172,176,179,181,182,183,195,525,829,832],[101,164,172,176,179,181,182,183,195,527,528,529,829,832],[101,164,172,176,179,181,182,183,195,533,829,832],[97,101,164,172,176,179,181,182,183,195,511,516,518,520,524,526,530,534,536,546,547,549,553,554,555,556,829,832],[101,164,172,176,179,181,182,183,195,535,829,832],[101,164,172,176,179,181,182,183,195,545,829,832],[101,164,172,176,179,181,182,183,195,301,829,832],[101,164,172,176,179,181,182,183,195,548,829,832],[101,163,164,172,176,179,181,182,183,195,291,425,426,428,494,495,497,498,550,552,829,832],[101,164,172,176,179,181,182,183,195,220,829,832],[101,164,169,172,176,178,179,180,181,182,183,195,212,213,220,729,829,832],[101,164,172,176,179,181,182,183,195,601,829,832],[101,164,172,176,179,181,182,183,195,599,601,829,832],[101,164,172,176,179,181,182,183,195,590,598,599,600,602,604,829,832],[101,164,172,176,179,181,182,183,195,588,829,832],[101,164,172,176,179,181,182,183,195,591,596,601,604,829,832],[101,164,172,176,179,181,182,183,195,587,604,829,832],[101,164,172,176,179,181,182,183,195,591,592,595,596,597,604,829,832],[101,164,172,176,179,181,182,183,195,591,592,593,595,596,604,829,832],[101,164,172,176,179,181,182,183,195,588,589,590,591,592,596,597,598,600,601,602,604,829,832],[101,164,172,176,179,181,182,183,195,604,829,832],[101,164,172,176,179,181,182,183,195,586,588,589,590,591,592,593,595,596,597,598,599,600,601,602,603,829,832],[101,164,172,176,179,181,182,183,195,586,604,829,832],[101,164,172,176,179,181,182,183,195,591,593,594,596,597,604,829,832],[101,164,172,176,179,181,182,183,195,595,604,829,832],[101,164,172,176,179,181,182,183,195,596,597,601,604,829,832],[101,164,172,176,179,181,182,183,195,589,599,829,832],[101,164,172,176,179,181,182,183,195,671,829,832],[101,164,172,176,179,181,182,183,195,573,829,832],[101,164,172,176,179,181,182,183,195,565,567,573,829,832],[101,164,172,176,179,181,182,183,195,566,567,829,832],[101,164,172,176,179,181,182,183,195,567,573,577,829,832],[101,164,172,176,179,181,182,183,195,566,829,832],[101,164,172,176,179,181,182,183,195,567,573,829,832],[101,164,172,176,179,181,182,183,195,565,566,567,572,829,832],[101,164,172,176,179,181,182,183,195,565,567,829,832],[101,164,172,176,179,181,182,183,195,566,567,579,829,832],[101,164,172,176,179,181,182,183,195,568,569,570,829,832],[101,164,172,176,179,181,182,183,195,571,829,832],[101,164,172,176,179,181,182,183,195,200,220,829,832],[101,116,119,122,123,164,172,176,179,181,182,183,195,212,829,832],[101,119,164,172,176,179,181,182,183,195,200,212,829,832],[101,119,123,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,195,200,829,832],[101,113,164,172,176,179,181,182,183,195,829,832],[101,117,164,172,176,179,181,182,183,195,829,832],[101,115,116,119,164,172,176,179,181,182,183,195,212,829,832],[101,164,172,176,179,181,182,183,185,195,209,829,832],[101,113,164,172,176,179,181,182,183,195,220,829,832],[101,115,119,164,172,176,179,181,182,183,185,195,212,829,832],[101,110,111,112,114,118,164,172,175,176,179,181,182,183,195,200,212,829,832],[101,119,128,136,164,172,176,179,181,182,183,195,829,832],[101,111,117,164,172,176,179,181,182,183,195,829,832],[101,119,145,146,164,172,176,179,181,182,183,195,829,832],[101,111,114,119,164,172,176,179,181,182,183,195,203,212,220,829,832],[101,119,164,172,176,179,181,182,183,195,829,832],[101,115,119,164,172,176,179,181,182,183,195,212,829,832],[101,110,164,172,176,179,181,182,183,195,829,832],[101,113,114,115,117,118,119,120,121,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,164,172,176,179,181,182,183,195,829,832],[101,119,138,141,164,172,176,179,181,182,183,195,829,832],[101,119,128,129,130,164,172,176,179,181,182,183,195,829,832],[101,117,119,129,131,164,172,176,179,181,182,183,195,829,832],[101,118,164,172,176,179,181,182,183,195,829,832],[101,111,113,119,164,172,176,179,181,182,183,195,829,832],[101,119,123,129,131,164,172,176,179,181,182,183,195,829,832],[101,123,164,172,176,179,181,182,183,195,829,832],[101,117,119,122,164,172,176,179,181,182,183,195,212,829,832],[101,111,115,119,128,164,172,176,179,181,182,183,195,829,832],[101,119,138,164,172,176,179,181,182,183,195,829,832],[101,131,164,172,176,179,181,182,183,195,829,832],[101,113,119,145,164,172,176,179,181,182,183,195,203,218,220,829,832],[101,164,172,176,179,181,182,183,195,562,829,832],[101,164,172,175,176,178,179,180,181,182,183,185,195,200,209,212,219,220,562,563,564,574,575,576,578,580,582,583,584,585,605,609,610,611,612,613,829,832],[101,164,172,176,179,181,182,183,195,562,563,564,581,829,832],[101,164,172,176,179,181,182,183,195,564,829,832],[101,164,172,176,179,181,182,183,195,608,829,832],[101,164,172,176,179,181,182,183,195,574,584,613,829,832],[101,164,172,176,179,181,182,183,195,574,613,829,832],[101,164,172,176,179,181,182,183,195,654,829,832],[101,164,172,176,179,181,182,183,195,627,659,684,829,832],[101,164,172,176,179,181,182,183,195,617,620,622,623,629,630,631,633,634,637,638,650,651,653,684,829,832],[101,164,172,176,179,181,182,183,195,633,644,645,684,829,832],[101,164,172,176,179,181,182,183,195,633,634,641,684,829,832],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,684,829,832],[101,164,172,176,179,181,182,183,195,582,829,832],[101,164,172,176,179,181,182,183,195,620,627,633,634,637,646,684,829,832],[101,164,172,176,179,181,182,183,195,613,657,659,829,832],[101,164,167,172,176,179,181,182,183,195,200,613,620,622,627,631,633,634,637,638,641,642,643,646,649,650,651,655,656,659,684,829,832],[101,164,172,176,179,181,182,183,195,582,633,634,637,684,829,832],[101,164,172,176,179,181,182,183,195,633,644,645,646,684,829,832],[101,164,172,176,179,181,182,183,195,582,633,638,639,640,684,829,832],[101,164,167,172,176,179,181,182,183,195,200,582,613,620,622,627,631,633,634,637,638,639,640,641,642,643,644,645,646,649,650,651,655,656,657,658,659,684,829,832],[101,164,172,176,179,181,182,183,195,582,617,620,622,627,631,633,634,637,638,639,640,641,642,644,645,646,649,684,685,686,687,688,693,829,832],[101,164,172,176,179,181,182,183,195,620,622,633,634,637,638,644,645,646,684,686,829,832],[101,164,172,176,179,181,182,183,195,694,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,803,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,805,829,832],[101,164,172,176,179,181,182,183,195,255,536,748,749,780,801,802,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,808,829,832],[101,164,172,176,179,181,182,183,195,255,748,749,780,801,802,807,829,832],[101,164,172,176,179,181,182,183,195,255,746,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,750,829,832],[101,164,172,176,179,181,182,183,195,255,553,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,753,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,752,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,756,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,758,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,760,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,765,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,764,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,762,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,768,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,770,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,772,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,749,774,829,832],[101,164,172,176,179,181,182,183,195,255,553,748,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,777,829,832],[101,164,172,176,179,181,182,183,195,255,694,749,776,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,811,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,801,802,810,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,814,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,801,802,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,748,780,813,829,832],[92,101,164,172,176,179,181,182,183,195,255,554,557,794,795,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,819,829,832],[101,164,172,176,179,181,182,183,195,255,818,829,832],[101,164,172,176,179,181,182,183,195,255,536,749,780,781,801,802,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,748,801,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,785,795,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,795,810,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,802,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,800,829,832],[92,101,164,172,176,179,181,182,183,195,255,536,748,800,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,818,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,817,829,832],[92,101,164,172,176,179,181,182,183,195,255,536,546,799,817,829,832],[101,164,172,176,179,181,182,183,195,255,799,829,832],[92,101,164,172,176,179,181,182,183,195,255,785,829,832],[92,101,164,172,176,179,181,182,183,195,255,546,748,785,829,832],[92,101,164,172,176,179,181,182,183,195,255,743,799,829,832],[92,101,164,172,176,179,181,182,183,195,255,694,749,829,832],[101,164,172,176,179,181,182,183,195,255,694,746,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,781,829,832],[101,164,172,176,179,181,182,183,195,255,683,694,748,785,786,829,832],[101,164,172,176,179,181,182,183,195,255,694,748,780,829,832],[92,101,164,172,176,179,181,182,183,195,255,554,743,746,748,829,832],[101,164,172,176,179,181,182,183,195,255,554,736,743,744,745,829,832],[101,164,172,176,179,181,182,183,195,255,748,780,829,832],[101,164,172,176,179,181,182,183,195,255,829,832],[101,164,172,176,179,181,182,183,195,255,748,785,829,832],[101,164,172,176,179,181,182,183,195,255,748,829,832],[101,164,172,176,179,181,182,183,195,212,255,615,660,829,832],[92,101,164,172,176,179,181,182,183,195,255,683,694,829,832]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc",{"version":"168aa44771e55cda628eeb5fbb6f626f6f263d827967b119e8c06abd7f1362ec","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"e8e17dfef3cfa9f0847ac93dd535a9896af7fb57c1a1b164484bb1b0ee4a25d8","impliedFormat":99},{"version":"51d2ffea2d1ee4a81c775938588c1e16620281adb60cbc26579a2fc6baa10bd2","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"a413e4b0b99280e1e58f5fe7b2b585e8a9be4996df8c58585399c9e2ca8a683e","impliedFormat":99},{"version":"609ab2c225766bc0851251c1db0fd5492673e190074045d21dc5dc7c3c46d785","impliedFormat":99},{"version":"c074e054c9db79055d37d7d70131e9a3234b8186773b3edb617c13f80bcf8774","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"7f3857dc5cfe1e5e977edb14e931d9939a952e8e41997263a927f8f0299ea652","impliedFormat":99},{"version":"3559624d0102d10d7765c292c60ccbc229541534db32061e06df88bfe1064636","impliedFormat":99},{"version":"5a9834c603c65aee5cba0c1d6b3c7aee85cdc7862832a23165c6aa4139c165f2","impliedFormat":99},{"version":"a7d7b5fa83cd7b3b4c2aa73bc29e7cbd53d5690b74f6fb39a5558af0a94967ba","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"f093d4bd6a9267be5f8ecbfbca19f4f3359b3839883206150c5d833606569e84","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"4a13397dffad4475c45c70fde584c925fe8c9218b3c7ab94397b68fc434f63b6","impliedFormat":99},{"version":"2faebfa830ae4cfbfb58e48b0ec20a2a63882d776f0ca36ec7155d45cf1b7f2d","impliedFormat":99},{"version":"b478fad6cb2c66bfbfc027983240b416a7733013f878056ba92cf809020018a0","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"3b0a56d056d81a011e484b9c05d5e430711aaecd561a788bad1d0498aad782c7","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"9443967db823b66d1682be7fc66392be7c7924e10c3e54900f456341e94591a6","impliedFormat":99},{"version":"424f71d1fae96ac2e878af92345bb87bea1d29f757228fbc190133b305643f2c","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"ed9bb55ddcbebd5cb3eee991f57ff21438546ee40ee1c310281bd12a6c7cf65b","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"437b7613a30a2fcde463f7b707c6d5567a8823fbc51de50b8641bf5b1d126fad","impliedFormat":99},{"version":"63ea959e28c110923f495576e614fb8b36c09b6828b467b2c7cd7f03b03ccf9f","impliedFormat":99},{"version":"1601a95dbb33059fc3d12638ed2a9aecff899e339c5c0f3a0b28768866d385b4","impliedFormat":99},{"version":"56fc978580577d30f4c2cdb5b1eb9217b66ed66537dd27141256f426e4b8dd68","impliedFormat":99},{"version":"2c5413050a2580becf9d82dd7e3006b95623e96f145356bf73230cd635352f70","impliedFormat":99},{"version":"860bedc71ead192ea4a0ea5ef4686e65724d14b391ebd1a6671a7044e6bd8e15","impliedFormat":99},{"version":"7c0a845bee4a084cbb8654709f48e5f13e2f6d45e5e2dde7c57cadf79fd9e3d5","impliedFormat":99},{"version":"07ad8a597ac75084e3dd9f9fadf5e8d7ccdcfe2f0c94ea0cf1cd8aa027a6c46e","impliedFormat":99},{"version":"94ddb4a2bb0c69e8efea22c58c2b6f84017eba469a4e433f5396ea8619d051cb","impliedFormat":99},{"version":"064499a671b662b25675beccdd04fb0bdebb6bd49bdb90d448e4b1ce3db20526","impliedFormat":99},{"version":"7bbff6783e96c691a41a7cf12dd5486b8166a01b0c57d071dbcfca55c9525ec4","impliedFormat":99},{"version":"ae7d986f19db00cd62ce8573307f910ec2103d7fc30df09cedeec3cabec13082","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1},{"version":"3cfb7c0c642b19fb75132154040bb7cd840f0002f9955b14154e69611b9b3f81","impliedFormat":1},{"version":"8387ec1601cf6b8948672537cf8d430431ba0d87b1f9537b4597c1ab8d3ade5b","impliedFormat":1},{"version":"d16f1c460b1ca9158e030fdf3641e1de11135e0c7169d3e8cf17cc4cc35d5e64","impliedFormat":1},{"version":"a934063af84f8117b8ce51851c1af2b76efe960aa4c7b48d0343a1b15c01aedf","impliedFormat":1},{"version":"e3c5ad476eb2fca8505aee5bdfdf9bf11760df5d0f9545db23f12a5c4d72a718","impliedFormat":1},{"version":"462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","impliedFormat":1},{"version":"5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","impliedFormat":1},{"version":"d0570ce419fb38287e7b39c910b468becb5b2278cf33b1000a3d3e82a46ecae2","impliedFormat":1},{"version":"3aca7f4260dad9dcc0a0333654cb3cde6664d34a553ec06c953bce11151764d7","impliedFormat":1},{"version":"a0a6f0095f25f08a7129bc4d7cb8438039ec422dc341218d274e1e5131115988","impliedFormat":1},{"version":"b58f396fe4cfe5a0e4d594996bc8c1bfe25496fbc66cf169d41ac3c139418c77","impliedFormat":1},{"version":"45785e608b3d380c79e21957a6d1467e1206ac0281644e43e8ed6498808ace72","impliedFormat":1},{"version":"bece27602416508ba946868ad34d09997911016dbd6893fb884633017f74e2c5","impliedFormat":1},{"version":"2a90177ebaef25de89351de964c2c601ab54d6e3a157cba60d9cd3eaf5a5ee1a","impliedFormat":1},{"version":"82200e963d3c767976a5a9f41ecf8c65eca14a6b33dcbe00214fcbe959698c46","impliedFormat":1},{"version":"b4966c503c08bbd9e834037a8ab60e5f53c5fd1092e8873c4a1c344806acdab2","impliedFormat":1},{"version":"3d3208d0f061e4836dd5f144425781c172987c430f7eaee483fadaa3c5780f9f","impliedFormat":1},{"version":"34a8a5b4c21e7a6d07d3b6bce72371da300ec1aed58961067e13f1f4dc849712","impliedFormat":1},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"ad763fa0c24ede2b818eb6598c12dd581451f94688fb9ed963beba20d513a7ec","signature":"90ec9100c29e008c3d9194acd818e2cfa6dc6e177154bc8e10c5959aa35619ed"},{"version":"b7ca2f47522d4ea41e65ff92c4c6dd9c4c8260da7c456a7631a9c88dc056b4d0","impliedFormat":1},{"version":"4f01e4d0959f9125b89e5737eb1ca2bfa69fd6b7d6126eba22feb8b505b00cde","impliedFormat":1},{"version":"4363a1adb9c77f2ed1ca383a41fbab1afadd35d485c018b2f84e834edde6a2c7","impliedFormat":1},{"version":"1d6458533adb99938d041a93e73c51d6c00e65f84724e9585e3cc8940b25523f","impliedFormat":1},{"version":"b0878fbd194bdc4d49fc9c42bfeeb25650842fe1412c88e283dc80854b019768","impliedFormat":1},{"version":"a892ea0b88d9d19281e99d61baba3155200acced679b8af290f86f695b589b16","impliedFormat":1},{"version":"03b42e83b3bcdf5973d28641d72b81979e3ce200318e4b46feb8347a1828cd5d","impliedFormat":1},{"version":"8a3d57426cd8fb0d59f6ca86f62e05dde8bfd769de3ba45a1a4b2265d84bac5a","impliedFormat":1},{"version":"afc6e1f323b476fdf274e61dab70f26550a1be2353e061ab34e6eed180d349b6","impliedFormat":1},{"version":"7c14483430d839976481fe42e26207f5092f797e1a4190823086f02cd09c113c","impliedFormat":1},{"version":"828a3bea78921789cbd015e968b5b09b671f19b1c14c4bbf3490b58fbf7d6841","impliedFormat":1},{"version":"69759c42e48938a714ee2f002fe5679a7ab56f0b5f29d571e4c31a5398d038fe","impliedFormat":1},{"version":"6e5e666fa6adeb60774b576084eeff65181a40443166f0a46ae9ba0829300fcb","impliedFormat":1},{"version":"1a4d43bdc0f2e240395fd204e597349411c1141dd08f5114c37d6268c3c9d577","impliedFormat":1},{"version":"874e58f8d945c7ac25599128a40ec9615aa67546e91ca12cbf12f97f6baf54ff","impliedFormat":1},{"version":"da2627da8d01662eb137ccd84af7ffa8c94cf2b2547d4970f17802324e54defc","impliedFormat":1},{"version":"07af06b740c01ed0473ebdd3f2911c8e4f5ebf4094291d31db7c1ab24ff559aa","impliedFormat":1},{"version":"ba1450574b1962fcf595fc53362b4d684c76603da5f45b44bc4c7eeed5de045b","impliedFormat":1},{"version":"b7903668ee9558d758c64c15d66a89ed328fee5ac629b2077415f0b6ca2f41bc","impliedFormat":1},{"version":"c7628425ee3076c4530b4074f7d48f012577a59f5ddade39cea236d6405c36ba","impliedFormat":1},{"version":"28c8aff998cc623ab0864a26e2eb1a31da8eb04e59f31fa80f02ec78eb225bcd","impliedFormat":1},{"version":"78d542989bdf7b6ba5410d5a884c0ab5ec54aa9ce46916d34267f885fcf65270","impliedFormat":1},{"version":"4d95060af2775a3a86db5ab47ca7a0ed146d1f6f13e71d96f7ac3b321718a832","impliedFormat":1},{"version":"6708cd298541a89c2abf66cceffc6c661f8ee31c013f98ddb58d2ec4407d0876","impliedFormat":1},{"version":"2e90928c29c445563409d89a834662c2ba6a660204fb3d4dc181914e77f8e29d","impliedFormat":1},{"version":"84be1b8b8011c2aab613901b83309d017d57f6e1c2450dfda11f7b107953286a","impliedFormat":1},{"version":"d7af890ef486b4734d206a66b215ebc09f6743b7fb2f3c79f2fb8716d1912d27","impliedFormat":1},{"version":"7e82c1d070c866eaf448ac7f820403d4e1b86112de582901178906317efc35ad","impliedFormat":1},{"version":"c5c4f547338457f4e8e2bec09f661af14ee6e157c7dc711ccca321ab476dbc6d","impliedFormat":1},{"version":"223e233cb645b44fa058320425293e68c5c00744920fc31f55f7df37b32f11ad","impliedFormat":1},{"version":"1394fe4da1ab8ab3ea2f2b0fcbfd7ccbb8f65f5581f98d10b037c91194141b03","impliedFormat":1},{"version":"086d9e59a579981bdf4f3bfa6e8e893570e5005f7219292bf7d90c153066cdfc","impliedFormat":1},{"version":"1ea59d0d71022de8ea1c98a3f88d452ad5701c7f85e74ddaa0b3b9a34ed0e81c","impliedFormat":1},{"version":"cd66a32437a555f7eb63490509a038d1122467f77fe7a114986186d156363215","impliedFormat":1},{"version":"f53d243499acfacc46e882bbf0bf1ae93ecea350e6c22066a062520b94055e47","impliedFormat":1},{"version":"65522e30a02d2720811b11b658c976bff99b553436d99bafd80944acba5b33b4","impliedFormat":1},{"version":"76b3244ec0b2f5b09b4ebf0c7419260813820f128d2b592b07ea59622038e45c","impliedFormat":1},{"version":"66eb7e876b49beff61e33f746f87b6e586382b49f3de21d54d41313aadb27ee6","impliedFormat":1},{"version":"69e8dc4b276b4d431f5517cd6507f209669691c9fb2f97933e7dbd5619fd07b7","impliedFormat":1},{"version":"361a647c06cec2e7437fa5d7cdf07a0dcce3247d93fbf3b6de1dc75139ff5700","impliedFormat":1},{"version":"fe5726291be816d0c89213057cd0c411bb9e39e315ed7e1987adc873f0e26856","impliedFormat":1},{"version":"1b76990de23762eb038e8d80b3f9c810974a7ed2335caa97262c5b752760f11a","impliedFormat":1},{"version":"5e050e05fe99cd06f2d4ad70e73aa4a72961d0df99525e9cad4a78fa588f387b","impliedFormat":1},{"version":"4ff327e8b16da9d54347b548f85675e35a1dc1076f2c22b2858e276771010dd2","impliedFormat":1},{"version":"f767787945b5c51c0c488f50b3b3aeb2804dfd2ddafcb61125d8d8857c339f5a","impliedFormat":1},{"version":"14ab21a9aeff5710d1d1262459a6d49fb42bed835aa0f4cfc36b75aa36faddcd","impliedFormat":1},{"version":"ba3c4682491b477c63716864a035b2cfdd727e64ec3a61f2ca0c9af3c0116cfd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b222d32836d745e1e021bb10f6a0f4a562dd42206203060a8539a6b9f16523f0","impliedFormat":1},{"version":"a3f6d8995864820a0207b7ef4ce1ed6a8dd2fccc7e70d015da15034807c38e1c","impliedFormat":1},{"version":"651df11341eff0b769fb83af75b1872e6cedf406674c5eaa2650551aceb5a816","impliedFormat":1},{"version":"774a466295d26eddab911b9f567040364e7b7d0eb8003ad3bfc92b97eeecf066","signature":"f15b4a91c10bf30ff3708a5e3968c0a52ca4e86a4b9a5b1c4fc8e9b5f1292f21"},"1e9d4c3b066e0228765cef074a9bf49d0b8d3af461c97f2c511e8f7110b56235",{"version":"baa07ae4ae973ba8b5ff905cd8ea1430821ad43730813b052813a8b2cbf5986c","signature":"6da39ed4125f5dbf24242cd1858f36a453242870ac1cfc49b1b615d0d92c5b10"},{"version":"51cccc8cc1fa30e2f6f09d4889859c326061a51b6d191f7166b9d6da74deee09","signature":"3f310b0b316b3e2291fc6e077a76e1506f6697fc2c722fc25225d3ce9cc34e36"},"9dfe98d745dfc706198852e032c3c936092a4484951872c0d18639cf2ab698cf","9f01d110e167ddcfaa01b236040a12699b6ed7a2070d7c362f4403f092fed008","030523c514236148e0f25975ef74b2490c391cb9596cd668728f7db5b0702e08","ca52a606c31ddaae5f7c4055fccb3563cf7e85601c96dbf28b7d0795d2d21af0","41d8a2df75ff7b6ee4c82ef8ce52032aa272358a5f9187a6b5986849200ed411","f25d11b3d781ff8db8614eeee12b43f81ad05389fb25acf10b8c3473b0e2a1d0","78b3214dba4e86c41e4cdf5de5dcc853806ff74fad5df3dc1087cdbe19ad00e0","9980dd11b1e848c16ad84eae18f4e7bfa3331f81c2617533b0e3bba61cb9ab3f","45b82fd88270dd3d0aff39220b341eca789f77c82813dc6695b2058479d8dc28","915d1bc5f4c3b9cc8e25964dcd29b3c00ffb36ab2c8b12b2472533b3113485a9","fcc8fb0967eda9256921f3cfc521d49f3d473232d4c754c09de1d50faa996e35","463efb47c0879fb7e518ca8d209ffc49e2d682d0c47eaf30d074a1032290ac50","a794572bfb0885ec1de20b701e498a415c0480e4fb6c20dbaa125b374ae691cb","dd26e8bac53b883eef657e5c7961170c27944f68825e82a43625c5ccc51c2937","016e4353e0414c98c2ed2eb75df1509a38b457ddf000e9ff98125f82ea42c335","3ef6579bdd5883302539b5370c5670331f3584dff9e2ef14bab39991f00a29cb","e34737b913a2f8775f45e495e660016e0ab0fda68c579f2024d1b596dde2d81c","6677681f753ead74430e87a3398cc92c183570992c77804fc4215178ffc86116","f5a22523635ca6f47c20b386b010ca1258aa19af5f4299f8752809c599315bcf","214621f2f6a7dadf8232fb69c22f4373faac478a22f387a1827c37a93e82acd3","4f69209ce0e934946c859c4cc6248ef4a2dc528f5baf9b4fcdea5cf3e08d9d38","041b81f9c2cc3f95588f5ef2da13fce1d895ddd5160979c84c01aaa8873145b4","fb5ce2f104fde415289b4febf27da970e40afefe42b87b15db28818ca9f94132","6e568ff38a9d7070783b26b39b93df658c7466032f4ffa22431dfe2808b7a8bd","3613723853e81414c2e1220e3e0a696a997cc49e4390060b6ac7fd91aec150e4","e4bba7f9edd598a76e24e59f3d47d09cb0295d6c52c8a89e8fa04dc6e6428b16","082900437524e8bc6903f0d26479f590af1814cc5080fc502e07d38c951500be","34eb44fd7813a487540b6afa04da3175388b1841aa3612569e8aa07652363b69","a76367ab8ebbbfb0db994a3d394b71b72c3b72fb69542222ace317e4b61f74ca","cbeab042293806df5cb4e45ba714036477971cb40a2539b20c331a632c1a2c46","0f55b5907842f16784dca83f2c82ac05e1e8740f2ec866c95289e05061384e4b","7c8545a7c4ec6978ebb4af07475d76007eb084c4f7f45aeba7ee817eeb4316e1",{"version":"5a2cdf6adeec348bbc876221be4367e8adff0bb78a5680ebd7d71e5c3bad6cc0","impliedFormat":99},{"version":"e004826eac62081f867c66dabd92d3ef7d126d93a70430a2c88429228c3ecc50","impliedFormat":99},{"version":"38d6857b58d2ac42442e396311c542062d4f0dad40f2adb496dd5fd0756ee400","impliedFormat":99},{"version":"34b7d1e2d15845cf08bcf5e3c01adbb92cea1ec27564ee249ba486cdfb28526c","impliedFormat":99},{"version":"0d0861810ff9d344ab37f055edbc4d14e68e2fa18e113ce8cc33aef9bb500b5f","signature":"2791178671f71d9b41ed9ef814e549d85cc6a77c61e2f8a87ec25f2176d9a3fc"},{"version":"e45f677464af40f2d5e0007654078a92079bf4eedd58da79f376e0f215441ff5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"968043e1fd7bb3c6b1c22d3341ede621d16a628b2bc4c35d1e43f0064ff7c1a6","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"6d261c7be483027c9d281ba71314350ad8ce66efabf46f7b6099f39fe3b8d218",{"version":"9445c836eee19d76274eb41e66d782c17fa45e938cd6a3e6318e5cc51e5df3b3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"7992a39d6cde5e050eb78461a8bf9ad986175a94826e835c110b3967290bd249","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"cc0e0705b17f5987925bf05b5a7da622a76ad691274a428cf18fb28b33a7a1cf","signature":"01e6799210215286acf67be8c15da37b72af300e0f7f32c7f11535415e25ee88"},{"version":"ab640e52df6129fa178d5c0f2860542954ea38af4b0801a92c3ac09f6a9eec7c","signature":"91212f9905f489a1993df856acac1939544f6166e4cafff1c4f0949e37a8a11d"},{"version":"c3d577953f04c0188d8b9c63b2748b814efda6440336fa49557f0079f5cf748a","impliedFormat":1},{"version":"787fe950e18951b7970ec98cb05b3d0b11fcdfeb2091a7ea481ac9e52bf6c086","impliedFormat":1},{"version":"13ceda04874f09091da1994ba5f58bf1e9439af93336616257691863560b3f13","impliedFormat":1},{"version":"9f51e1b45772c037ff9f4b4e7d1074192f7c5307e51f026c556af64081acd3a9","signature":"fb69d502157f1cf71cb8c737f6909c2e82f2a53b8157f840411444435f5da3d1"},"1aea4ec138a31bf0914fe68fe2b3e7bcd6de65dce1b693da7abe16e4b50a15ef",{"version":"a941595362ff7e12adee1605aea8495d9bc96cd833d95c87f83cad2b5838165a","signature":"b67fa3b5b051ead6f5048d73c953d289234953f832922ffc4dfe293d5c6bfc98"},"c98b1727a4c0ccfbd4df609bad278f1af184a069d232f978a327d53110677480","e9d70d2ef380ac231bd7ac1996f3587deae58d5f124347535436c011af25d5fe","76cc225f61f545122672c27ff69aa27d1e7578d653c5fe942ebe88601cea0b02","c9d408c70e4cddd361a8452f04d0bf25e66415d5f7ce2b92b9ed2c162e3082c0",{"version":"f3415880499901a01feef00e1b3042f670dabad8b5a131c22994f5f951dbdf2f","signature":"28007b7d2b577a868c587c22500f2ab77490b6390909ffbdd3b04dac98e69a18"},"789957c66d154bfb21cd2700f89938a754f100f30e4b4829fb5e376ed9898f90","3b6c468202603e81e2dccc50efa84b0879c0a7fe7d852b2e9e95da15ee78b78b","fc51205c27f22f7194f3c026cdf19c5b27f19190a97955b9ffce0db45858e42f","54c008f175512ea8e8854d138dcf76b2af5e59e6816e82e87a360d76f3c7f820","532d30276f01efab1a3aa4f052f15abac54da5db376807bb869fcc7f0d9b305b","8bc24afa3c5fb73fd0dc89f091d2cb65b9d54f7a90b37302e9bd679ba504b0e3","51610870e75caaf1ff890f1fb949366cd7d843b4aa2e734c166bb307a78f33ea","502c4922baae4d2ddc7c46bc248cb168528939730cc7dcf643b1fecc471829c1","ef4ca970edfb3d5ae43f56927d83ddd6afdba01a73f2c94a6b30e698aa1ce83e",{"version":"f20b8d5c86e426ce2d1505f4a3114e66411272aa8394e0ad323c0c3b1d1fadff","signature":"b41f35e5ae414583d72cc2aa3a17cc23d40f4b9e221f92acd74ed09bb3daaa63"},{"version":"74b006e51c1fe0198db4fd239bdfb2063fb3b0139bbb3dbaab79f323f42ba6bf","signature":"83057fe16cf05e5bf626fd4e46379506199130438abbd2ae42de6234bb202181"},{"version":"c247b5bb6d297cb7c9607645b1486b2f7b3ee0c05fac97d18e6daf4e3b25ebeb","signature":"5a224c6b95c526ad3f70b7b5894a2fe9b50cb5a9eed53b87806cf1045f8d7bab"},{"version":"dd7a9804bfd52806479d69214126956478367bb3a2c333b589ddcc253aae03d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"33940e73c12951fdfd6d9b6e9c1e25057376adfa5561038cb59591098f159b19","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"20375a205b37d0f527f1f3fb6cc5d6c2076c1b57f74b9024f8153e0f3f0289a9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"3557b3416d97219e58a39fecce338b086bd42db6ce7ef701e8265783fbd20c6f",{"version":"83f21e09f1a6d980cc7cf83252deccd5d997e67266ae8bd450ef8899fcab1884","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6e70039e5a6af8ab06917dc2dd007fa8caabea0a2533303bca6be8510ae2cfd3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f4722121739886d9694fe6d74b91f654b2b26459edd6e275fb5ff1a509bbc262","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1c46f9542d2d4a44df84e20e37348c86abfb57804268f5236874fa8a8b7639f5","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5ac54163eb83d2dbb909dcdb00c6a1b11ebef9c9ac93789f1b65d10eabedc62b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"e37704e8bdf72de83d6ca4620f748ebf6272afc9b748f4e541afffd32b0c2924","affectsGlobalScope":true},"4332f611f915908b335662f95ac6047288d3bc0b939e06d59e369b96a28eaa70","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","1bbd475eaf5bfb166aaee62b5c40d5a2ef4a87787d0e08a6cbfcf71426aa205f",{"version":"8d7cbeea0454e05a3cdf3370c5df267072c4f1dc6c48a45a9ad750d7890443d7","affectsGlobalScope":true,"impliedFormat":99}],"root":[[559,561],661,695,[746,781],[786,791],795,796,[800,833]],"options":{"allowJs":false,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[832,1],[559,2],[833,3],[829,4],[830,2],[831,5],[560,6],[561,7],[403,2],[566,2],[619,2],[782,2],[783,8],[784,9],[785,10],[679,2],[676,2],[675,2],[670,11],[681,12],[666,13],[677,14],[669,15],[668,16],[678,2],[673,17],[680,2],[674,18],[667,2],[665,19],[664,20],[663,13],[683,21],[662,2],[626,22],[624,2],[161,23],[162,23],[163,24],[101,25],[164,26],[165,27],[166,28],[99,2],[167,29],[168,30],[169,31],[170,32],[171,33],[172,34],[173,34],[174,35],[175,36],[176,37],[177,38],[102,2],[100,2],[178,39],[179,40],[180,41],[220,42],[181,43],[182,44],[183,43],[184,45],[185,46],[186,47],[187,48],[188,48],[189,48],[190,49],[191,50],[192,51],[193,52],[194,53],[195,54],[196,54],[197,55],[198,2],[199,2],[200,56],[201,57],[202,56],[203,58],[204,59],[205,60],[206,61],[207,62],[208,63],[209,64],[210,65],[211,66],[212,67],[213,68],[214,69],[215,70],[216,71],[217,72],[103,43],[104,2],[105,73],[106,74],[107,2],[108,75],[109,2],[152,76],[153,77],[154,78],[155,78],[156,79],[157,2],[158,26],[159,80],[160,77],[218,81],[219,82],[224,83],[488,84],[225,85],[223,86],[490,87],[489,88],[682,84],[221,89],[486,2],[222,90],[90,2],[92,91],[485,84],[255,84],[615,92],[614,2],[627,93],[648,94],[649,95],[647,2],[620,2],[633,96],[632,97],[644,96],[635,98],[637,99],[656,99],[636,100],[617,101],[616,2],[622,102],[623,103],[653,104],[629,105],[631,106],[652,2],[650,105],[630,2],[621,103],[628,2],[625,2],[91,2],[691,107],[693,108],[692,109],[690,110],[689,2],[729,111],[698,112],[708,112],[699,112],[709,112],[700,112],[701,112],[716,112],[715,112],[717,112],[718,112],[710,112],[702,112],[711,112],[703,112],[712,112],[704,112],[706,112],[714,113],[707,112],[713,113],[719,113],[705,112],[720,112],[725,112],[726,112],[721,112],[697,2],[727,2],[723,112],[722,112],[724,112],[728,112],[606,2],[608,114],[607,2],[696,115],[797,116],[735,117],[734,118],[741,119],[743,120],[739,121],[738,122],[742,118],[736,123],[733,124],[744,125],[745,125],[737,126],[731,2],[732,127],[799,128],[798,129],[740,2],[511,130],[516,131],[523,132],[506,133],[259,2],[267,134],[407,135],[410,136],[382,2],[395,137],[402,138],[284,2],[384,2],[265,2],[381,139],[427,140],[266,2],[257,141],[409,142],[411,143],[412,144],[483,145],[376,146],[329,147],[389,148],[390,149],[388,150],[387,2],[383,151],[408,152],[268,153],[453,2],[454,154],[295,155],[269,156],[296,155],[332,155],[235,155],[405,157],[404,2],[394,158],[501,2],[244,2],[522,159],[461,160],[462,161],[458,162],[540,2],[359,2],[463,163],[459,164],[545,165],[544,166],[539,2],[310,2],[362,167],[361,2],[538,168],[460,84],[315,169],[322,170],[324,171],[314,2],[319,172],[321,173],[323,174],[318,175],[316,2],[320,176],[541,2],[537,2],[543,177],[542,2],[313,178],[532,179],[535,180],[303,181],[302,182],[301,183],[548,84],[300,184],[289,2],[550,2],[793,185],[792,2],[551,84],[552,186],[227,2],[391,187],[392,188],[393,189],[231,2],[396,2],[251,190],[226,2],[475,84],[233,191],[474,192],[473,193],[464,2],[465,2],[472,2],[467,2],[470,194],[466,2],[468,195],[471,196],[469,195],[264,2],[261,2],[262,155],[416,2],[421,197],[422,198],[420,199],[418,200],[419,201],[414,2],[481,163],[256,163],[510,202],[517,203],[521,204],[350,205],[349,2],[344,2],[497,206],[505,207],[377,208],[378,209],[456,210],[366,2],[479,211],[354,84],[371,212],[482,213],[367,2],[370,214],[368,2],[480,215],[477,216],[476,2],[478,2],[374,2],[452,217],[239,218],[352,219],[356,220],[372,221],[375,222],[364,223],[357,224],[504,225],[430,226],[348,227],[236,228],[503,229],[232,230],[423,231],[415,2],[424,232],[441,233],[413,2],[440,234],[98,2],[435,235],[260,2],[455,236],[431,2],[245,2],[247,2],[386,2],[439,237],[263,2],[287,238],[373,239],[293,240],[353,2],[438,2],[417,2],[443,241],[444,242],[385,2],[446,243],[448,244],[447,245],[397,2],[437,228],[450,246],[347,247],[436,248],[442,249],[272,2],[276,2],[275,2],[274,2],[279,2],[273,2],[282,2],[281,2],[278,2],[277,2],[280,2],[283,250],[271,2],[339,251],[338,2],[343,252],[340,253],[342,254],[345,252],[341,253],[252,255],[331,256],[500,257],[498,2],[527,258],[529,259],[493,260],[528,261],[240,262],[237,262],[270,2],[254,263],[253,264],[249,265],[250,266],[258,267],[286,267],[297,267],[333,268],[298,268],[242,269],[241,2],[337,270],[336,271],[335,272],[334,273],[243,274],[484,275],[285,276],[492,277],[457,278],[487,279],[491,280],[380,281],[379,282],[360,283],[346,284],[328,285],[330,286],[327,287],[449,288],[351,2],[515,2],[248,289],[451,290],[499,291],[358,2],[288,292],[365,293],[363,294],[290,295],[425,296],[494,2],[291,297],[426,297],[513,2],[512,2],[514,2],[496,2],[495,2],[428,298],[355,2],[325,299],[246,300],[304,2],[230,301],[292,2],[519,84],[229,2],[531,302],[312,84],[525,163],[311,303],[508,304],[309,302],[234,2],[533,305],[307,84],[308,84],[299,2],[228,2],[306,306],[305,307],[294,308],[369,52],[429,52],[445,2],[433,309],[432,2],[317,178],[238,2],[326,84],[502,190],[509,310],[93,84],[96,311],[97,312],[94,84],[95,2],[406,74],[401,313],[400,2],[399,314],[398,2],[507,315],[518,316],[520,317],[524,318],[794,319],[526,320],[530,321],[558,322],[534,322],[557,323],[536,324],[546,325],[547,326],[549,327],[553,328],[556,190],[555,2],[554,329],[730,330],[602,331],[600,332],[601,333],[589,334],[590,332],[597,335],[588,336],[593,337],[603,2],[594,338],[599,339],[605,340],[604,341],[587,342],[595,343],[596,344],[591,345],[598,331],[592,346],[672,347],[671,2],[611,348],[574,349],[575,350],[578,351],[567,352],[577,353],[573,354],[565,2],[579,355],[580,356],[568,2],[569,2],[571,357],[570,2],[572,358],[434,359],[586,2],[645,2],[618,2],[88,2],[89,2],[14,2],[15,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[64,2],[65,2],[66,2],[11,2],[67,2],[68,2],[69,2],[70,2],[71,2],[72,2],[12,2],[73,2],[74,2],[75,2],[76,2],[77,2],[1,2],[78,2],[79,2],[13,2],[80,2],[81,2],[82,2],[83,2],[84,2],[85,2],[86,2],[87,2],[128,360],[140,361],[125,362],[141,363],[150,364],[116,365],[117,366],[115,367],[149,329],[144,368],[148,369],[119,370],[137,371],[118,372],[147,373],[113,374],[114,368],[120,375],[121,2],[127,376],[124,375],[111,377],[151,378],[142,379],[131,380],[130,375],[132,381],[135,382],[129,383],[133,384],[145,329],[122,385],[123,386],[136,387],[112,363],[139,388],[138,375],[126,386],[134,389],[143,2],[110,2],[146,390],[563,391],[613,392],[582,393],[564,391],[562,2],[581,394],[612,2],[610,2],[583,2],[609,395],[576,396],[585,2],[584,397],[655,398],[660,399],[654,400],[646,401],[642,402],[638,403],[651,2],[639,98],[687,404],[684,405],[658,406],[657,407],[640,408],[686,409],[634,2],[641,410],[659,411],[694,412],[688,413],[834,414],[685,2],[643,2],[804,415],[806,416],[805,417],[809,418],[808,419],[747,420],[751,421],[750,422],[754,423],[753,422],[755,424],[752,422],[757,425],[756,422],[759,426],[758,422],[761,427],[760,422],[766,428],[765,422],[767,429],[764,422],[763,430],[762,422],[769,431],[768,422],[771,432],[770,422],[773,433],[772,422],[775,434],[774,435],[778,436],[777,422],[779,437],[776,422],[812,438],[811,439],[815,440],[814,441],[816,442],[813,441],[796,443],[820,444],[819,445],[803,446],[821,447],[822,448],[823,449],[824,450],[825,451],[801,452],[826,453],[827,454],[818,455],[817,456],[807,163],[795,457],[810,458],[802,163],[800,459],[787,460],[788,461],[789,462],[828,463],[790,464],[749,465],[746,466],[781,467],[748,468],[786,469],[780,470],[791,468],[661,471],[695,472]],"affectedFilesPendingEmit":[833,831,561,804,806,805,809,808,747,751,750,754,753,755,752,757,756,759,758,761,760,766,765,767,764,763,762,769,768,771,770,773,772,775,774,778,777,779,776,812,811,815,814,816,813,796,820,819,803,821,822,823,824,825,801,826,827,818,817,807,795,810,802,800,787,788,789,828,790,749,746,781,748,786,780,791,661,695],"version":"6.0.3"} \ No newline at end of file From 6b9e8450c132d54bca05f8fc134ee382c77581f4 Mon Sep 17 00:00:00 2001 From: Kevin Brown Date: Thu, 30 Apr 2026 05:55:29 +0300 Subject: [PATCH 06/13] Add user profile and avatar --- frontend/package-lock.json | 39 +++++ frontend/package.json | 1 + .../app/api/profile/__tests__/route.test.ts | 71 +++++++++ .../profile/avatar/__tests__/route.test.ts | 66 ++++++++ frontend/src/app/api/profile/avatar/route.ts | 43 +++++ frontend/src/app/api/profile/route.ts | 44 ++++++ frontend/src/app/profile/page.tsx | 32 ++++ .../components/__tests__/user-menu.test.tsx | 69 +++++--- .../__tests__/avatar-dropzone.test.tsx | 21 +++ .../components/profile/avatar-dropzone.tsx | 86 ++++++++++ .../src/components/profile/avatar-preview.tsx | 84 ++++++++++ .../src/components/profile/profile-form.tsx | 98 ++++++++++++ .../profile/profile-settings-panel.tsx | 148 ++++++++++++++++++ frontend/src/components/user-menu.tsx | 115 +++++++------- frontend/src/lib/__tests__/api.test.ts | 25 +++ frontend/src/lib/api.ts | 56 ++++++- frontend/src/lib/profile.ts | 117 ++++++++++++++ frontend/src/lib/types.ts | 13 ++ frontend/tsconfig.tsbuildinfo | 2 +- newsletter_maker/settings/__init__.py | 6 + newsletter_maker/settings/base.py | 31 ++++ newsletter_maker/urls.py | 3 + requirements.txt | 1 + users/api.py | 87 ++++++++++ users/api_urls.py | 10 ++ users/models.py | 39 +++++ users/serializers.py | 41 ++++- users/tasks.py | 65 ++++++++ users/tests/test_profile_api.py | 130 +++++++++++++++ 29 files changed, 1465 insertions(+), 78 deletions(-) create mode 100644 frontend/src/app/api/profile/__tests__/route.test.ts create mode 100644 frontend/src/app/api/profile/avatar/__tests__/route.test.ts create mode 100644 frontend/src/app/api/profile/avatar/route.ts create mode 100644 frontend/src/app/api/profile/route.ts create mode 100644 frontend/src/app/profile/page.tsx create mode 100644 frontend/src/components/profile/__tests__/avatar-dropzone.test.tsx create mode 100644 frontend/src/components/profile/avatar-dropzone.tsx create mode 100644 frontend/src/components/profile/avatar-preview.tsx create mode 100644 frontend/src/components/profile/profile-form.tsx create mode 100644 frontend/src/components/profile/profile-settings-panel.tsx create mode 100644 frontend/src/lib/profile.ts create mode 100644 users/api.py create mode 100644 users/api_urls.py create mode 100644 users/tasks.py create mode 100644 users/tests/test_profile_api.py diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4e2683a3..bd9a06dd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -25,6 +25,7 @@ "prettier": "^3.8.3", "react": "19.2.5", "react-dom": "19.2.5", + "react-dropzone": "^15.0.0", "react-hook-form": "^7.74.0", "tailwindcss": "^4.2.4", "typescript-eslint": "^8.59.1" @@ -3316,6 +3317,15 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -4729,6 +4739,18 @@ "node": ">=16.0.0" } }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -6990,6 +7012,23 @@ "react": "^19.2.5" } }, + "node_modules/react-dropzone": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-15.0.0.tgz", + "integrity": "sha512-lGjYV/EoqEjEWPnmiSvH4v5IoIAwQM2W4Z1C0Q/Pw2xD0eVzKPS359BQTUMum+1fa0kH2nrKjuavmTPOGhpLPg==", + "license": "MIT", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, "node_modules/react-hook-form": { "version": "7.74.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.74.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index fa5f07d3..5aa4253e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -33,6 +33,7 @@ "prettier": "^3.8.3", "react": "19.2.5", "react-dom": "19.2.5", + "react-dropzone": "^15.0.0", "react-hook-form": "^7.74.0", "tailwindcss": "^4.2.4", "typescript-eslint": "^8.59.1" diff --git a/frontend/src/app/api/profile/__tests__/route.test.ts b/frontend/src/app/api/profile/__tests__/route.test.ts new file mode 100644 index 00000000..231c435b --- /dev/null +++ b/frontend/src/app/api/profile/__tests__/route.test.ts @@ -0,0 +1,71 @@ +import { beforeEach, describe, expect, it, vi } from "vitest" + +import { + getCurrentUserProfile, + updateCurrentUserProfile, +} from "@/lib/api" + +import { GET, PATCH } from "../route" + +vi.mock("@/lib/api", () => ({ + getCurrentUserProfile: vi.fn(), + updateCurrentUserProfile: vi.fn(), +})) + +describe("/api/profile route", () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it("returns the current profile payload", async () => { + vi.mocked(getCurrentUserProfile).mockResolvedValue({ + id: 3, + username: "editor", + email: "editor@example.com", + display_name: "Editor", + avatar_url: null, + avatar_thumbnail_url: null, + bio: "Writes", + timezone: "UTC", + first_name: "", + last_name: "", + }) + + const response = await GET() + + expect(response.status).toBe(200) + await expect(response.json()).resolves.toMatchObject({ username: "editor" }) + }) + + it("updates editable profile fields", async () => { + vi.mocked(updateCurrentUserProfile).mockResolvedValue({ + id: 3, + username: "editor", + email: "editor@example.com", + display_name: "Updated Editor", + avatar_url: null, + avatar_thumbnail_url: null, + bio: "Writes", + timezone: "America/New_York", + first_name: "", + last_name: "", + }) + + const response = await PATCH( + new Request("http://localhost/api/profile", { + method: "PATCH", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + display_name: "Updated Editor", + timezone: "America/New_York", + }), + }), + ) + + expect(updateCurrentUserProfile).toHaveBeenCalledWith({ + display_name: "Updated Editor", + timezone: "America/New_York", + }) + expect(response.status).toBe(200) + }) +}) \ No newline at end of file diff --git a/frontend/src/app/api/profile/avatar/__tests__/route.test.ts b/frontend/src/app/api/profile/avatar/__tests__/route.test.ts new file mode 100644 index 00000000..714e0f58 --- /dev/null +++ b/frontend/src/app/api/profile/avatar/__tests__/route.test.ts @@ -0,0 +1,66 @@ +import { beforeEach, describe, expect, it, vi } from "vitest" + +import { deleteCurrentUserAvatar, uploadCurrentUserAvatar } from "@/lib/api" + +import { DELETE, POST } from "../route" + +vi.mock("@/lib/api", () => ({ + deleteCurrentUserAvatar: vi.fn(), + uploadCurrentUserAvatar: vi.fn(), +})) + +describe("/api/profile/avatar route", () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it("uploads a new avatar image", async () => { + vi.mocked(uploadCurrentUserAvatar).mockResolvedValue({ + id: 5, + username: "editor", + email: "editor@example.com", + display_name: "Editor", + avatar_url: "/media/avatars/5/avatar.png", + avatar_thumbnail_url: "/media/avatars/5/thumb.webp", + bio: "Writes", + timezone: "UTC", + first_name: "", + last_name: "", + }) + + const formData = new FormData() + formData.set( + "avatar", + new File(["avatar"], "avatar.png", { type: "image/png" }), + ) + + const request = { + formData: vi.fn().mockResolvedValue(formData), + } as unknown as Request + + const response = await POST(request) + + expect(uploadCurrentUserAvatar).toHaveBeenCalled() + expect(response.status).toBe(200) + }) + + it("deletes the current avatar image", async () => { + vi.mocked(deleteCurrentUserAvatar).mockResolvedValue({ + id: 5, + username: "editor", + email: "editor@example.com", + display_name: "Editor", + avatar_url: null, + avatar_thumbnail_url: null, + bio: "Writes", + timezone: "UTC", + first_name: "", + last_name: "", + }) + + const response = await DELETE() + + expect(deleteCurrentUserAvatar).toHaveBeenCalled() + expect(response.status).toBe(200) + }) +}) \ No newline at end of file diff --git a/frontend/src/app/api/profile/avatar/route.ts b/frontend/src/app/api/profile/avatar/route.ts new file mode 100644 index 00000000..b34134bd --- /dev/null +++ b/frontend/src/app/api/profile/avatar/route.ts @@ -0,0 +1,43 @@ +import { NextResponse } from "next/server" + +import { deleteCurrentUserAvatar, uploadCurrentUserAvatar } from "@/lib/api" + +function buildErrorResponse(error: unknown, fallbackMessage: string) { + const message = error instanceof Error ? error.message : fallbackMessage + return NextResponse.json({ error: message }, { status: 400 }) +} + +/** + * Upload a new avatar image for the current user. + * + * @param request - Multipart request containing an `avatar` file. + * @returns JSON profile payload from the backend API. + */ +export async function POST(request: Request) { + try { + const formData = await request.formData() + if (!(formData.get("avatar") instanceof File)) { + return NextResponse.json( + { error: "Select an avatar image to upload." }, + { status: 400 }, + ) + } + + return NextResponse.json(await uploadCurrentUserAvatar(formData)) + } catch (error) { + return buildErrorResponse(error, "Unable to upload avatar.") + } +} + +/** + * Remove the current user's avatar image. + * + * @returns JSON profile payload from the backend API. + */ +export async function DELETE() { + try { + return NextResponse.json(await deleteCurrentUserAvatar()) + } catch (error) { + return buildErrorResponse(error, "Unable to remove avatar.") + } +} \ No newline at end of file diff --git a/frontend/src/app/api/profile/route.ts b/frontend/src/app/api/profile/route.ts new file mode 100644 index 00000000..5f230127 --- /dev/null +++ b/frontend/src/app/api/profile/route.ts @@ -0,0 +1,44 @@ +import { NextResponse } from "next/server" + +import { + getCurrentUserProfile, + updateCurrentUserProfile, +} from "@/lib/api" + +function buildErrorResponse(error: unknown, fallbackMessage: string) { + const message = error instanceof Error ? error.message : fallbackMessage + return NextResponse.json({ error: message }, { status: 400 }) +} + +/** + * Return the current authenticated user's profile. + * + * @returns JSON profile payload from the backend API. + */ +export async function GET() { + try { + return NextResponse.json(await getCurrentUserProfile()) + } catch (error) { + return buildErrorResponse(error, "Unable to load profile.") + } +} + +/** + * Update editable fields on the current user's profile. + * + * @param request - Incoming JSON request containing editable profile fields. + * @returns JSON profile payload from the backend API. + */ +export async function PATCH(request: Request) { + try { + const payload = (await request.json()) as { + display_name?: string + bio?: string + timezone?: string + } + + return NextResponse.json(await updateCurrentUserProfile(payload)) + } catch (error) { + return buildErrorResponse(error, "Unable to save profile.") + } +} \ No newline at end of file diff --git a/frontend/src/app/profile/page.tsx b/frontend/src/app/profile/page.tsx new file mode 100644 index 00000000..8dd07ce5 --- /dev/null +++ b/frontend/src/app/profile/page.tsx @@ -0,0 +1,32 @@ +import { AppShell } from "@/components/app-shell" +import { ProfileSettingsPanel } from "@/components/profile/profile-settings-panel" +import { getProjects } from "@/lib/api" +import { selectProject } from "@/lib/view-helpers" + +type ProfilePageProps = { + searchParams: Promise> +} + +/** + * Render the current-user profile page inside the shared app shell. + * + * @param props - Async server component props from the App Router. + * @param props.searchParams - Search params promise containing the optional `project` id. + * @returns The current-user profile workspace. + */ +export default async function ProfilePage({ searchParams }: ProfilePageProps) { + const resolvedSearchParams = await searchParams + const projects = await getProjects() + const selectedProject = selectProject(projects, resolvedSearchParams) + + return ( + + + + ) +} \ No newline at end of file diff --git a/frontend/src/components/__tests__/user-menu.test.tsx b/frontend/src/components/__tests__/user-menu.test.tsx index 044b3e4e..0a4706b0 100644 --- a/frontend/src/components/__tests__/user-menu.test.tsx +++ b/frontend/src/components/__tests__/user-menu.test.tsx @@ -1,33 +1,52 @@ import { fireEvent, render, screen, waitFor } from "@testing-library/react" import { beforeEach, describe, expect, it, vi } from "vitest" +import { QueryProvider } from "@/components/query-provider" import { UserMenu } from "@/components/user-menu" -const { getSessionMock, signOutMock } = vi.hoisted(() => ({ - getSessionMock: vi.fn(), +const { fetchProfileMock, signOutMock } = vi.hoisted(() => ({ + fetchProfileMock: vi.fn(), signOutMock: vi.fn(), })) +vi.mock("@/lib/profile", () => ({ + PROFILE_QUERY_KEY: ["profile"], + fetchProfile: fetchProfileMock, +})) + vi.mock("next-auth/react", () => ({ - getSession: getSessionMock, signOut: signOutMock, })) +function renderMenu() { + return render( + + + , + ) +} + describe("UserMenu", () => { beforeEach(() => { - getSessionMock.mockReset() + fetchProfileMock.mockReset() signOutMock.mockReset() }) - it("renders initials from the current session and toggles the dropdown", async () => { - getSessionMock.mockResolvedValue({ - user: { - name: "Taylor Swift", - email: "taylor@example.com", - }, + it("renders profile data from the shared profile query and toggles the dropdown", async () => { + fetchProfileMock.mockResolvedValue({ + id: 7, + username: "taylor", + email: "taylor@example.com", + display_name: "Taylor Swift", + avatar_url: null, + avatar_thumbnail_url: null, + bio: "Editor", + timezone: "UTC", + first_name: "Taylor", + last_name: "Swift", }) - render() + renderMenu() await waitFor(() => { expect(screen.getByRole("button", { name: "Open user menu" })).toHaveTextContent("TS") @@ -38,25 +57,35 @@ describe("UserMenu", () => { expect(screen.getByRole("menu")).toBeInTheDocument() expect(screen.getByText("Taylor Swift")).toBeInTheDocument() expect(screen.getByText("taylor@example.com")).toBeInTheDocument() + expect(screen.getByRole("menuitem", { name: "View profile" })).toHaveAttribute( + "href", + "/profile", + ) expect(screen.getByRole("menuitem", { name: "Log out" })).toBeInTheDocument() }) it("logs out to the login page from the dropdown", async () => { - getSessionMock.mockResolvedValue({ - user: { - name: "Morgan Lee", - email: "morgan@example.com", - }, + fetchProfileMock.mockResolvedValue({ + id: 8, + username: "morgan", + email: "morgan@example.com", + display_name: "Morgan Lee", + avatar_url: null, + avatar_thumbnail_url: null, + bio: "Editor", + timezone: "UTC", + first_name: "Morgan", + last_name: "Lee", }) - render() - - fireEvent.click(screen.getByRole("button", { name: "Open user menu" })) + renderMenu() await waitFor(() => { - expect(screen.getByRole("menuitem", { name: "Log out" })).toBeInTheDocument() + expect(screen.getByRole("button", { name: "Open user menu" })).toBeInTheDocument() }) + fireEvent.click(screen.getByRole("button", { name: "Open user menu" })) + fireEvent.click(screen.getByRole("menuitem", { name: "Log out" })) expect(signOutMock).toHaveBeenCalledWith({ callbackUrl: "/login" }) diff --git a/frontend/src/components/profile/__tests__/avatar-dropzone.test.tsx b/frontend/src/components/profile/__tests__/avatar-dropzone.test.tsx new file mode 100644 index 00000000..cb47ca84 --- /dev/null +++ b/frontend/src/components/profile/__tests__/avatar-dropzone.test.tsx @@ -0,0 +1,21 @@ +import { fireEvent, render, screen, waitFor } from "@testing-library/react" +import { describe, expect, it, vi } from "vitest" + +import { AvatarDropzone } from "@/components/profile/avatar-dropzone" + +describe("AvatarDropzone", () => { + it("passes an accepted file to the upload callback", async () => { + const onUpload = vi.fn().mockResolvedValue(undefined) + + render() + + const input = screen.getByLabelText("Upload avatar image") + const file = new File(["avatar"], "avatar.png", { type: "image/png" }) + + fireEvent.change(input, { target: { files: [file] } }) + + await waitFor(() => { + expect(onUpload).toHaveBeenCalledWith(file) + }) + }) +}) \ No newline at end of file diff --git a/frontend/src/components/profile/avatar-dropzone.tsx b/frontend/src/components/profile/avatar-dropzone.tsx new file mode 100644 index 00000000..8af19f02 --- /dev/null +++ b/frontend/src/components/profile/avatar-dropzone.tsx @@ -0,0 +1,86 @@ +"use client" + +import { useState } from "react" +import { useDropzone } from "react-dropzone" + +type AvatarDropzoneProps = { + isUploading: boolean + onUpload: (file: File) => Promise +} + +const MAX_FILE_SIZE = 2 * 1024 * 1024 + +/** + * Render the drag-and-drop avatar upload surface. + * + * @param props - Dropzone props. + * @returns The avatar upload card. + */ +export function AvatarDropzone({ + isUploading, + onUpload, +}: AvatarDropzoneProps) { + const [errorMessage, setErrorMessage] = useState("") + + const { getInputProps, getRootProps, isDragActive, isDragReject } = useDropzone({ + accept: { + "image/jpeg": [], + "image/png": [], + "image/webp": [], + }, + disabled: isUploading, + maxFiles: 1, + maxSize: MAX_FILE_SIZE, + onDropAccepted: (files) => { + const selectedFile = files[0] + if (!selectedFile) { + return + } + + setErrorMessage("") + void onUpload(selectedFile) + }, + onDropRejected: (rejections) => { + const firstError = rejections[0]?.errors[0]?.message + setErrorMessage( + firstError ?? "Upload a PNG, JPEG, or WebP image under 2 MB.", + ) + }, + }) + + return ( +
+
+

Upload

+

+ Drag, drop, or browse +

+
+ +
+ +

+ {isUploading ? "Uploading avatar..." : "Drop an image here or click to browse."} +

+

+ PNG, JPEG, and WebP files up to 2 MB. +

+
+ + {errorMessage ? ( +
+ {errorMessage} +
+ ) : null} +
+ ) +} \ No newline at end of file diff --git a/frontend/src/components/profile/avatar-preview.tsx b/frontend/src/components/profile/avatar-preview.tsx new file mode 100644 index 00000000..36e1a729 --- /dev/null +++ b/frontend/src/components/profile/avatar-preview.tsx @@ -0,0 +1,84 @@ +"use client" + +import type { UserProfile } from "@/lib/types" + +type AvatarPreviewProps = { + profile: UserProfile + isRemoving: boolean + onRemove: () => void +} + +function buildInitials(name: string) { + const words = name + .split(/\s+/) + .map((part) => part.trim()) + .filter(Boolean) + + if (words.length === 0) { + return "GU" + } + + if (words.length === 1) { + return words[0].slice(0, 2).toUpperCase() + } + + return `${words[0][0] ?? ""}${words[1][0] ?? ""}`.toUpperCase() +} + +/** + * Render the current profile avatar, including the remove action. + * + * @param props - Avatar preview props. + * @returns The avatar preview card. + */ +export function AvatarPreview({ + profile, + isRemoving, + onRemove, +}: AvatarPreviewProps) { + const avatarUrl = profile.avatar_thumbnail_url ?? profile.avatar_url + const initials = buildInitials( + profile.display_name || profile.email || profile.username, + ) + + return ( +
+
+

Avatar

+

+ Profile image +

+
+ +
+ {avatarUrl ? ( + // eslint-disable-next-line @next/next/no-img-element + {`${profile.display_name + ) : ( +
+ {initials} +
+ )} +
+

+ Drop in a square image to personalize the editor cockpit and header menu. +

+ {profile.avatar_url ? ( + + ) : null} +
+
+
+ ) +} \ No newline at end of file diff --git a/frontend/src/components/profile/profile-form.tsx b/frontend/src/components/profile/profile-form.tsx new file mode 100644 index 00000000..284ecc45 --- /dev/null +++ b/frontend/src/components/profile/profile-form.tsx @@ -0,0 +1,98 @@ +"use client" + +import { useState } from "react" + +import type { UserProfile } from "@/lib/types" + +type ProfileFormProps = { + isSaving: boolean + onSave: (payload: { + display_name: string + bio: string + timezone: string + }) => Promise + profile: UserProfile +} + +/** + * Render editable profile fields for the current user. + * + * @param props - Form props. + * @returns The editable profile form. + */ +export function ProfileForm({ + isSaving, + onSave, + profile, +}: ProfileFormProps) { + const [displayName, setDisplayName] = useState(profile.display_name) + const [bio, setBio] = useState(profile.bio) + const [timezone, setTimezone] = useState(profile.timezone) + + return ( +
+
+

Identity

+

+ Profile details +

+
+ +
+
+ Username + {profile.username} +
+
+ Email + {profile.email} +
+
+ +
{ + event.preventDefault() + void onSave({ + display_name: displayName.trim(), + bio: bio.trim(), + timezone: timezone.trim(), + }) + }} + > + +