



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-0f910d8806d5761b.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-a7abd4d4c49ac593.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-5fc4c4a9cb41e596.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-ed0cee9214dedabd.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-78a2491d538dab5a.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-c26b63d7c532d0a2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-a6f60cea68c08405.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-f66faf28b2ea18b6.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-6701f6218c53cf5b.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-7037fa46ae124d97.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-97df7784617ce1ea.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-9be9fe6313f476af.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-62747e27e61258dc.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-b04ca6fccda778e2.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-72bd7d974b5ac1cc.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-4c5c0895f723f870.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_caches_react_shell","actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","actions_runners_react_shell","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_ahp_tool_call_timing","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_base_model_policy_row","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_early_task_provisioning","copilot_chat_persist_session_drafts","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_awps_batching","copilot_mission_control_early_stop","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_discussion_comment_trigger","copilot_swe_agent_discussion_opened_trigger","copilot_swe_agent_discussion_updated_trigger","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_assigned_trigger","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_issue_labeled_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_assigned_trigger","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_labeled_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_ready_for_review_trigger","copilot_swe_agent_pull_request_review_requested_trigger","copilot_swe_agent_pull_request_review_submitted_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_sub_issue_added_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_web_integration_cutover","copilot_workbench_sunset_redirect","dashboard_agents_module_auth_token_check","dashboard_indexeddb_caching","fgpat_permissions_selector_redesign","glc_code_quality_repo_settings_workflow_config","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_team_vs_personal","issue_relative_time_micro","issue_viewer_paved_path","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_header_feedback","milestone_closed_issues_prioritization","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","primer_react_timeline_list_semantics","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_copilot_attribution_header","pull_request_overview_merge_control","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_navigation_shortcuts","pull_request_virtualization_image_estimate","pull_request_virtualization_loader_batching","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_logged_out_repository_header","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_declutter","repo_pulls_dashboard_ga","repo_pulls_dashboard_persistence","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_nav_spark_models_removed","speculation_rules_ui_service","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","update_issue_suggestions","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-3663bcaacc724f4c.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-721126455a2225e3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-156c6259e31cc551.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-f6ce38f47c2e1d56.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-804a14996977c014.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-fb5d13278eb42203.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tp-ea613009a991e211.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-107a7753389a8a2d.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.25915bc98fb322a6.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-52ed81112a548e10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e8810f64c443fb9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-fe7e72f699fdf493.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-9da36843ba9d191d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-9a1160b939f2cd52.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3h-55903cf2303047ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hk-0d35a1220587d888.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-c964b1a3671f2a92.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-1d800d09e9a8720a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-1ad12374da9777f2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-531d35538b61fd0d.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-bf5e3b2aee197122.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-5e0b3ae3c4036207.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-752acdc868e2da64.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-e87ffadced20a3c9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-75bc55d9971828b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a9-34620c7b13885011.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-643d2814115561a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t6-5d0869970ac0aac0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pb0-a5c5ec36d311aeef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6n-afcf86ccabc4cad2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zj-f08c728cf00018aa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/o6-2a1c68d269710ee9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h9a-c6405aa090de0e84.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vy6-3c3e6e96629c2ce4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/js-4eb97d5803e657c0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g7-baf9e817ae102b01.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/unc-96389cade7bad821.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nu-65322a6997c6c93c.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-5dd3809b5c8bac3c.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.3792087592bf207a.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-4318f0f4c608f3dd.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-7afef75d393cf294.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/op-acddf38478d45ef9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-461e4b09f2e67ee5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qmp-c7cfba40cf5a93b0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-148a74299e5a01ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-a52ba56147f77909.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4u-ec4874f70bfd5d76.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s0-481bd34f90bc2bd7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y5-ed17e73b4c0bd15e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4-be595475cdbf7d4b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8-23a3c5ff8eef412d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-27679061f16e1495.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iu-9806a0291a782cbe.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ftx-39fb490e3c1d778f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zi-32a0c3c081ea5cce.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sg-7a5d50475874c0e1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pd-6a8710840033e042.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/86g-ec28c25ed7d5de06.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sn-1bab7384818953b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iq-6d4ecf6d2fb6993c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p2-7d8e7cee5b46cb45.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7d-2e3cc25d719f3a95.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4d-76d8acdf21a33266.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tsb-e0f6288ab985d9d2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lf-910ef220ce85c660.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2j-2f19c1afd2ceaf93.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/me-f1476ec44a29f34a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p2u-e654a57b1a70c47d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5d-d97cc006d4da4d9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r5-38f013bc2c0fd298.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r6s-9039f5619230a653.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9e-cece06724bf6ea3b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x9-3e077a3a37a73f9f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pj-87629cb5389d7663.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eq-3764fd5f66494289.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/13-d889936dff7e5c0f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/44-8193eea4af825ead.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/v4-9c1327d212e52a0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/id-7f39706ba9007db6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ah-271362a1ed227d03.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s1g-d434d712bca59d3a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vz-d7f4a583896f872e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/47-c8c0ce2700acc5be.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-4118a687d0150749.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/pj.75627bfeb9ceb1da.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ah.2623f7c6ecbe2ecd.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/47.78770c57a48a810c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.37656c95a9729fb9.module.css" />


  <title>ata-validator/CHANGELOG.md at master · ata-core/ata-validator · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:be0559ae-a57c-36ca-ad48-27856be3a21a">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="BEEA:1748:A109A2F:D260406:6ACA5F97" data-pjax-transient="true"/><meta name="html-safe-nonce" content="591919e1e7e84a969b65da310833ec8fe427237ff660f9c4e7677f5cd81618bd" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRUVBOjE3NDg6QTEwOUEyRjpEMjYwNDA2OjZBQ0E1Rjk3IiwidmlzaXRvcl9pZCI6IjQ5MTc3ODQzNDA3OTA0MDI5NjciLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="b99b97ecfc22e43d494b87f7503f3010e62ed61b321c15b81d55fbabe168649a" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:1188841276" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="JSON Schema validator that compiles to plain JavaScript, still runs where code generation is blocked, and can be compiled away at build time. Passes the full official test suite. https://socket.dev/npm/package/ata-validator - ata-validator/CHANGELOG.md at master · ata-core/ata-validator">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/60b6a94fb90f611a747ccb04364b395531c3d962e88036421729a1d18a893b1c/ata-core/ata-validator" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="ata-validator/CHANGELOG.md at master · ata-core/ata-validator" /><meta name="twitter:description" content="JSON Schema validator that compiles to plain JavaScript, still runs where code generation is blocked, and can be compiled away at build time. Passes the full official test suite. https://socket.dev..." />
  <meta property="og:image" content="https://opengraph.githubassets.com/60b6a94fb90f611a747ccb04364b395531c3d962e88036421729a1d18a893b1c/ata-core/ata-validator" /><meta property="og:image:alt" content="JSON Schema validator that compiles to plain JavaScript, still runs where code generation is blocked, and can be compiled away at build time. Passes the full official test suite. https://socket.dev..." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="ata-validator/CHANGELOG.md at master · ata-core/ata-validator" /><meta property="og:url" content="https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md" /><meta property="og:description" content="JSON Schema validator that compiles to plain JavaScript, still runs where code generation is blocked, and can be compiled away at build time. Passes the full official test suite. https://socket.dev..." />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="d05be8f8b6905b6460fc264e80447721dfee1e32cf9e4291c4bf58f160c9f705" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="c4a65e47b0c850e1157ae8e66298070851d7e3b558038de5a3b4ff7a93e630ed" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="a80b0545b169f440b929ce2b977c76b6988f014cca6513fb83c5df6581635fb3" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="af51c6f9d659be0324665373df3ee542f817dbd7f66f352a087935f2ceabe545" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/ata-core/ata-validator git https://github.com/ata-core/ata-validator.git">

  <meta name="octolytics-dimension-user_id" content="269996868" /><meta name="octolytics-dimension-user_login" content="ata-core" /><meta name="octolytics-dimension-repository_id" content="1188841276" /><meta name="octolytics-dimension-repository_nwo" content="ata-core/ata-validator" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1188841276" /><meta name="octolytics-dimension-repository_network_root_nwo" content="ata-core/ata-validator" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="3b1bb5b10f5c7fd1769d56e38b15dfddb34052a8" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/19-c660652a0a1639be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-47c5223d8d1af8ef.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.d53d993320d57e14.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-install-banner-partial-3c87deb7f0f20434.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-install-banner-partial.7b357012e82003e7.module.css" />

<react-partial
  partial-name="app-install-banner-partial"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>


          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/et9-7eeec247c287fca4.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/94v-e20946127faa8f6e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-892a9e99cc92858d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jag-441e702bfd4c7904.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hw-8ce7888b57d0a23c.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/rq-0ec82a12cf538a4d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1m-a7a4c022483b2713.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-70703fe17422eb58.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.fbc35b3d20e988ff.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/1m.fec8b575d0e5234f.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2Fata-core%2Fata-validator%2Fblob%2Fmaster%2FCHANGELOG.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=ata-core%2Fata-validator","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md\",\"user_id\":null}}","auth_hydro_click_hmac":"5751db47c48a57e1586ed3360b20942f82dabbec4e753c41af851b0e48658410","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2Fata-core%2Fata-validator%2Fblob%2Fmaster%2FCHANGELOG.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="5751db47c48a57e1586ed3360b20942f82dabbec4e753c41af851b0e48658410"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2Fata-core%2Fata-validator%2Fblob%2Fmaster%2FCHANGELOG.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="5751db47c48a57e1586ed3360b20942f82dabbec4e753c41af851b0e48658410"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=ata-core%2Fata-validator" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="5751db47c48a57e1586ed3360b20942f82dabbec4e753c41af851b0e48658410"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-f537414c-36c6-48ec-8569-84a7488b2cd4" aria-labelledby="tooltip-4ea1675c-2429-4c60-9f71-48f56e7b2f5e" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-4ea1675c-2429-4c60-9f71-48f56e7b2f5e" for="icon-button-f537414c-36c6-48ec-8569-84a7488b2cd4" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>






  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      
    


    








  

    <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ym-6bc2c9bf8112c038.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sk2-8deeef9351be3911.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ni-3e194d222c7770bf.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7x-71d30cb240cd901f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wwk-ad869086822937b1.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a1-9f79841ecac1da8e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wzg-40a3213b3e83400b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5f-64f8e7d5bcbd4787.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z5-b53a93078d026f1e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8h-cef26f68c1331011.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fq-3ce13a77e863807a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a7-596b507bd20acddc.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xfx-c82d8352413aea0a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j4-b3a9e87fa7878a98.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/global-nav-bar-29c7aef68ee9db41.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/pj.75627bfeb9ceb1da.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.2f2560cba06ab359.module.css" />

<react-partial
  partial-name="global-nav-bar"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"organization","label":"ata-core","is_root":false,"href":"/ata-core"},{"crumb_type":"repository","label":"ata-validator","is_root":false,"href":"/ata-core/ata-validator"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/ata-core/ata-validator","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/ata-core/ata-validator/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":1,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/ata-core/ata-validator/pulls","selectedLinks":["repo_pulls","checks"],"count":11,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"discussions","icon":"comment-discussion","label":"Discussions","href":"/ata-core/ata-validator/discussions","selectedLinks":["repo_discussions"],"popoverTarget":false,"commandId":"repositories:go-to-discussions","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/ata-core/ata-validator/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":"actions-workflows","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"projects","icon":"table","label":"Projects","href":"/ata-core/ata-validator/projects","selectedLinks":["repo_projects","new_repo_project","repo_project"],"popoverTarget":false,"commandId":"repositories:go-to-projects","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/ata-core/ata-validator/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/ata-core/ata-validator/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":null,"selectedLink":"repo_source"},"owner":null,"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"disabled","websocketChannel":null,"fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":false},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"href":"/repos"},"copilot":{"show":false,"showAgentsButton":false,"showRelaunchAnnouncement":false,"copilotChatUrl":null,"copilotApiUrl":"https://api.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:ata-core/ata-validator","current_repo_name":"ata-validator","current_repo_nwo":"ata-core/ata-validator","current_repo_org":"ata-core","user_id":"ata-core"}},"commandPalette":null,"enterpriseBar":{"show":false},"globalTransactionalMessage":[],"payloadsUrl":"/_global-navigation/payloads.json?can_toggle_site_admin_and_employee_status=0\u0026is_admin_mode_on=0\u0026is_ui_opted_out=0\u0026show_ui_opt_out=0\u0026v=7","contextRegionUrl":"/_global-navigation/context-region.json"}}</script>
  <div data-target="react-partial.reactRoot"><header aria-label="Global navigation menu" data-component="Stack" class="GlobalNav styles-module__appHeader__YzYWk prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div data-component="Stack" class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-center" data-component="Stack" class="styles-module__center__R3QRv styles-module__withLocalNavigation__rjTJ_ GlobalNavBar-module__loggedOut__Jv1rk prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="styles-module__contextRegion__VbSp2 prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal" data-component="Breadcrumbs"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/ata-core" data-discover="true"><span class="">ata-core</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/ata-core/ata-validator" data-discover="true"><span class="styles-module__contextCrumbLast__tI2e3">ata-validator</span></a></li></ol></nav></div><div data-testid="top-nav-right" data-component="Stack" class="styles-module__right__mlBQg styles-module__withLocalNavigation__rjTJ_ styles-module__rightWithResponsiveCreateButton__SKn2W prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj prc-UnderlineNav-UnderlineWrapper-GWONT LocalNavigation-module__LocalNavigation__b0Xc0" aria-label="Repository" data-variant="inset" data-overflow-mode="wrap" data-hide-icons-breakpoint="medium"><ul class="prc-UnderlineNav-ItemsList-oj8gN prc-components-UnderlineItemList-xKlKC" role="list"><li role="presentation" aria-hidden="true" class="prc-UnderlineNav-WrapSpacer--aLgz"></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="issues" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/issues" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">1</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->1<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/pulls" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">11</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->11<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="discussions" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/discussions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg></span><span data-component="text" data-content="Discussions">Discussions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="actions" data-react-nav="actions-workflows" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/actions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="projects" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/projects" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-table" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path></svg></span><span data-component="text" data-content="Projects">Projects</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/security" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/ata-core/ata-validator/pulse" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul><div class="prc-UnderlineNav-MoreButtonContainer-Dnrq6"><div class="prc-UnderlineNav-MoreButtonDivider-dN0a-"></div><button data-component="overflow-menu-button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-UnderlineNav-MoreButton-Y8soj" data-loading="false" data-size="medium" data-variant="invisible" id="_R_2ktp_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><span>More<span class="prc-src-InternalVisuallyHidden-2YaI6"> items</span></span></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></nav><div class="d-none"></div></header></div>
</react-partial>


  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/ata-core/ata-validator/blob/master/CHANGELOG.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"Changelog","anchor":"changelog","htmlText":"Changelog"},{"level":2,"text":"Unreleased","anchor":"unreleased","htmlText":"Unreleased"},{"level":3,"text":"Changed","anchor":"changed","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed","htmlText":"Fixed"},{"level":2,"text":"1.48.0 - 2026-10-09","anchor":"1480---2026-10-09","htmlText":"1.48.0 - 2026-10-09"},{"level":3,"text":"Added","anchor":"added","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-1","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-1","htmlText":"Changed"},{"level":2,"text":"1.47.0 - 2026-10-08","anchor":"1470---2026-10-08","htmlText":"1.47.0 - 2026-10-08"},{"level":3,"text":"Fixed","anchor":"fixed-2","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-2","htmlText":"Changed"},{"level":2,"text":"1.46.1 - 2026-10-06","anchor":"1461---2026-10-06","htmlText":"1.46.1 - 2026-10-06"},{"level":3,"text":"Fixed","anchor":"fixed-3","htmlText":"Fixed"},{"level":2,"text":"1.46.0 - 2026-10-06","anchor":"1460---2026-10-06","htmlText":"1.46.0 - 2026-10-06"},{"level":3,"text":"Added","anchor":"added-1","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-3","htmlText":"Changed"},{"level":2,"text":"1.45.0 - 2026-10-05","anchor":"1450---2026-10-05","htmlText":"1.45.0 - 2026-10-05"},{"level":3,"text":"Changed","anchor":"changed-4","htmlText":"Changed"},{"level":2,"text":"1.44.0 - 2026-10-05","anchor":"1440---2026-10-05","htmlText":"1.44.0 - 2026-10-05"},{"level":3,"text":"Fixed","anchor":"fixed-4","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-5","htmlText":"Changed"},{"level":2,"text":"1.43.0 - 2026-10-05","anchor":"1430---2026-10-05","htmlText":"1.43.0 - 2026-10-05"},{"level":3,"text":"Fixed","anchor":"fixed-5","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-6","htmlText":"Changed"},{"level":2,"text":"1.42.0 - 2026-10-04","anchor":"1420---2026-10-04","htmlText":"1.42.0 - 2026-10-04"},{"level":3,"text":"Changed","anchor":"changed-7","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed-6","htmlText":"Fixed"},{"level":2,"text":"1.41.0 - 2026-10-04","anchor":"1410---2026-10-04","htmlText":"1.41.0 - 2026-10-04"},{"level":3,"text":"Changed","anchor":"changed-8","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed-7","htmlText":"Fixed"},{"level":2,"text":"1.40.1 - 2026-09-30","anchor":"1401---2026-09-30","htmlText":"1.40.1 - 2026-09-30"},{"level":3,"text":"Security","anchor":"security","htmlText":"Security"},{"level":3,"text":"Fixed","anchor":"fixed-8","htmlText":"Fixed"},{"level":2,"text":"1.40.0 - 2026-09-30","anchor":"1400---2026-09-30","htmlText":"1.40.0 - 2026-09-30"},{"level":3,"text":"Added","anchor":"added-2","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-9","htmlText":"Changed"},{"level":2,"text":"1.39.2 - 2026-09-30","anchor":"1392---2026-09-30","htmlText":"1.39.2 - 2026-09-30"},{"level":3,"text":"Changed","anchor":"changed-10","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed-9","htmlText":"Fixed"},{"level":2,"text":"1.39.1 - 2026-09-30","anchor":"1391---2026-09-30","htmlText":"1.39.1 - 2026-09-30"},{"level":3,"text":"Fixed","anchor":"fixed-10","htmlText":"Fixed"},{"level":2,"text":"1.39.0 - 2026-09-29","anchor":"1390---2026-09-29","htmlText":"1.39.0 - 2026-09-29"},{"level":3,"text":"Fixed","anchor":"fixed-11","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-11","htmlText":"Changed"},{"level":2,"text":"1.38.0 - 2026-09-29","anchor":"1380---2026-09-29","htmlText":"1.38.0 - 2026-09-29"},{"level":3,"text":"Changed","anchor":"changed-12","htmlText":"Changed"},{"level":2,"text":"1.37.1 - 2026-09-29","anchor":"1371---2026-09-29","htmlText":"1.37.1 - 2026-09-29"},{"level":3,"text":"Fixed","anchor":"fixed-12","htmlText":"Fixed"},{"level":2,"text":"1.37.0 - 2026-09-29","anchor":"1370---2026-09-29","htmlText":"1.37.0 - 2026-09-29"},{"level":3,"text":"Added","anchor":"added-3","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-13","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-13","htmlText":"Changed"},{"level":2,"text":"1.36.1 - 2026-09-28","anchor":"1361---2026-09-28","htmlText":"1.36.1 - 2026-09-28"},{"level":3,"text":"Fixed","anchor":"fixed-14","htmlText":"Fixed"},{"level":2,"text":"1.36.0 - 2026-09-28","anchor":"1360---2026-09-28","htmlText":"1.36.0 - 2026-09-28"},{"level":3,"text":"Added","anchor":"added-4","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-15","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-14","htmlText":"Changed"},{"level":2,"text":"1.35.0 - 2026-09-28","anchor":"1350---2026-09-28","htmlText":"1.35.0 - 2026-09-28"},{"level":3,"text":"Added","anchor":"added-5","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-16","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-15","htmlText":"Changed"},{"level":2,"text":"1.34.0 - 2026-09-28","anchor":"1340---2026-09-28","htmlText":"1.34.0 - 2026-09-28"},{"level":3,"text":"Added","anchor":"added-6","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-17","htmlText":"Fixed"},{"level":2,"text":"1.33.3 - 2026-09-28","anchor":"1333---2026-09-28","htmlText":"1.33.3 - 2026-09-28"},{"level":3,"text":"Fixed","anchor":"fixed-18","htmlText":"Fixed"},{"level":2,"text":"1.33.2 - 2026-09-28","anchor":"1332---2026-09-28","htmlText":"1.33.2 - 2026-09-28"},{"level":3,"text":"Fixed","anchor":"fixed-19","htmlText":"Fixed"},{"level":2,"text":"1.33.1 - 2026-09-28","anchor":"1331---2026-09-28","htmlText":"1.33.1 - 2026-09-28"},{"level":3,"text":"Changed","anchor":"changed-16","htmlText":"Changed"},{"level":2,"text":"1.33.0 - 2026-09-28","anchor":"1330---2026-09-28","htmlText":"1.33.0 - 2026-09-28"},{"level":3,"text":"Fixed","anchor":"fixed-20","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-17","htmlText":"Changed"},{"level":2,"text":"1.32.3 - 2026-09-27","anchor":"1323---2026-09-27","htmlText":"1.32.3 - 2026-09-27"},{"level":3,"text":"Fixed","anchor":"fixed-21","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-18","htmlText":"Changed"},{"level":2,"text":"1.32.2 - 2026-09-27","anchor":"1322---2026-09-27","htmlText":"1.32.2 - 2026-09-27"},{"level":3,"text":"Changed","anchor":"changed-19","htmlText":"Changed"},{"level":2,"text":"1.32.1 - 2026-09-27","anchor":"1321---2026-09-27","htmlText":"1.32.1 - 2026-09-27"},{"level":3,"text":"Changed","anchor":"changed-20","htmlText":"Changed"},{"level":2,"text":"1.32.0 - 2026-09-26","anchor":"1320---2026-09-26","htmlText":"1.32.0 - 2026-09-26"},{"level":3,"text":"Added","anchor":"added-7","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-21","htmlText":"Changed"},{"level":2,"text":"1.31.3 - 2026-09-26","anchor":"1313---2026-09-26","htmlText":"1.31.3 - 2026-09-26"},{"level":3,"text":"Fixed","anchor":"fixed-22","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-22","htmlText":"Changed"},{"level":2,"text":"1.31.2 - 2026-09-26","anchor":"1312---2026-09-26","htmlText":"1.31.2 - 2026-09-26"},{"level":3,"text":"Fixed","anchor":"fixed-23","htmlText":"Fixed"},{"level":2,"text":"1.31.1 - 2026-09-26","anchor":"1311---2026-09-26","htmlText":"1.31.1 - 2026-09-26"},{"level":3,"text":"Fixed","anchor":"fixed-24","htmlText":"Fixed"},{"level":2,"text":"1.31.0 - 2026-09-26","anchor":"1310---2026-09-26","htmlText":"1.31.0 - 2026-09-26"},{"level":3,"text":"Changed","anchor":"changed-23","htmlText":"Changed"},{"level":2,"text":"1.30.3 - 2026-09-25","anchor":"1303---2026-09-25","htmlText":"1.30.3 - 2026-09-25"},{"level":3,"text":"Fixed","anchor":"fixed-25","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-24","htmlText":"Changed"},{"level":2,"text":"1.30.2 - 2026-09-25","anchor":"1302---2026-09-25","htmlText":"1.30.2 - 2026-09-25"},{"level":3,"text":"Fixed","anchor":"fixed-26","htmlText":"Fixed"},{"level":2,"text":"1.30.1 - 2026-09-24","anchor":"1301---2026-09-24","htmlText":"1.30.1 - 2026-09-24"},{"level":3,"text":"Fixed","anchor":"fixed-27","htmlText":"Fixed"},{"level":2,"text":"1.30.0 - 2026-09-24","anchor":"1300---2026-09-24","htmlText":"1.30.0 - 2026-09-24"},{"level":3,"text":"Fixed","anchor":"fixed-28","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-25","htmlText":"Changed"},{"level":2,"text":"1.29.0 - 2026-09-24","anchor":"1290---2026-09-24","htmlText":"1.29.0 - 2026-09-24"},{"level":3,"text":"Changed","anchor":"changed-26","htmlText":"Changed"},{"level":2,"text":"1.28.0 - 2026-09-23","anchor":"1280---2026-09-23","htmlText":"1.28.0 - 2026-09-23"},{"level":3,"text":"Added","anchor":"added-8","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-27","htmlText":"Changed"},{"level":2,"text":"1.27.1 - 2026-09-17","anchor":"1271---2026-09-17","htmlText":"1.27.1 - 2026-09-17"},{"level":3,"text":"Fixed","anchor":"fixed-29","htmlText":"Fixed"},{"level":2,"text":"1.27.0 - 2026-09-17","anchor":"1270---2026-09-17","htmlText":"1.27.0 - 2026-09-17"},{"level":3,"text":"Added","anchor":"added-9","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-30","htmlText":"Fixed"},{"level":2,"text":"1.26.0 - 2026-09-17","anchor":"1260---2026-09-17","htmlText":"1.26.0 - 2026-09-17"},{"level":3,"text":"Added","anchor":"added-10","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-31","htmlText":"Fixed"},{"level":2,"text":"1.25.0 - 2026-09-17","anchor":"1250---2026-09-17","htmlText":"1.25.0 - 2026-09-17"},{"level":3,"text":"Fixed","anchor":"fixed-32","htmlText":"Fixed"},{"level":3,"text":"Added","anchor":"added-11","htmlText":"Added"},{"level":2,"text":"1.24.0 - 2026-09-16","anchor":"1240---2026-09-16","htmlText":"1.24.0 - 2026-09-16"},{"level":3,"text":"Added","anchor":"added-12","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-33","htmlText":"Fixed"},{"level":2,"text":"1.23.0 - 2026-09-16","anchor":"1230---2026-09-16","htmlText":"1.23.0 - 2026-09-16"},{"level":3,"text":"Added","anchor":"added-13","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-28","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed-34","htmlText":"Fixed"},{"level":2,"text":"1.22.1 - 2026-09-16","anchor":"1221---2026-09-16","htmlText":"1.22.1 - 2026-09-16"},{"level":3,"text":"Fixed","anchor":"fixed-35","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-29","htmlText":"Changed"},{"level":2,"text":"1.22.0 - 2026-09-14","anchor":"1220---2026-09-14","htmlText":"1.22.0 - 2026-09-14"},{"level":3,"text":"Fixed","anchor":"fixed-36","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-30","htmlText":"Changed"},{"level":2,"text":"1.17.2 - 2026-09-13","anchor":"1172---2026-09-13","htmlText":"1.17.2 - 2026-09-13"},{"level":3,"text":"Changed","anchor":"changed-31","htmlText":"Changed"},{"level":2,"text":"1.17.1 - 2026-09-13","anchor":"1171---2026-09-13","htmlText":"1.17.1 - 2026-09-13"},{"level":3,"text":"Changed","anchor":"changed-32","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed-37","htmlText":"Fixed"},{"level":2,"text":"1.17.0 - 2026-09-13","anchor":"1170---2026-09-13","htmlText":"1.17.0 - 2026-09-13"},{"level":3,"text":"Changed","anchor":"changed-33","htmlText":"Changed"},{"level":2,"text":"1.16.2 - 2026-09-12","anchor":"1162---2026-09-12","htmlText":"1.16.2 - 2026-09-12"},{"level":3,"text":"Fixed","anchor":"fixed-38","htmlText":"Fixed"},{"level":2,"text":"1.16.1 - 2026-09-12","anchor":"1161---2026-09-12","htmlText":"1.16.1 - 2026-09-12"},{"level":3,"text":"Fixed","anchor":"fixed-39","htmlText":"Fixed"},{"level":2,"text":"1.16.0 - 2026-09-12","anchor":"1160---2026-09-12","htmlText":"1.16.0 - 2026-09-12"},{"level":3,"text":"Added","anchor":"added-14","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-34","htmlText":"Changed"},{"level":2,"text":"1.13.1 - 2026-09-06","anchor":"1131---2026-09-06","htmlText":"1.13.1 - 2026-09-06"},{"level":3,"text":"Fixed","anchor":"fixed-40","htmlText":"Fixed"},{"level":2,"text":"1.13.0 - 2026-09-06","anchor":"1130---2026-09-06","htmlText":"1.13.0 - 2026-09-06"},{"level":3,"text":"Changed","anchor":"changed-35","htmlText":"Changed"},{"level":3,"text":"Added","anchor":"added-15","htmlText":"Added"},{"level":2,"text":"1.12.1 - 2026-09-06","anchor":"1121---2026-09-06","htmlText":"1.12.1 - 2026-09-06"},{"level":3,"text":"Fixed","anchor":"fixed-41","htmlText":"Fixed"},{"level":2,"text":"1.12.0 - 2026-09-06","anchor":"1120---2026-09-06","htmlText":"1.12.0 - 2026-09-06"},{"level":3,"text":"Performance","anchor":"performance","htmlText":"Performance"},{"level":3,"text":"Fixed","anchor":"fixed-42","htmlText":"Fixed"},{"level":2,"text":"1.11.0 - 2026-08-31","anchor":"1110---2026-08-31","htmlText":"1.11.0 - 2026-08-31"},{"level":3,"text":"Fixed","anchor":"fixed-43","htmlText":"Fixed"},{"level":3,"text":"Performance","anchor":"performance-1","htmlText":"Performance"},{"level":2,"text":"1.10.0 - 2026-08-30","anchor":"1100---2026-08-30","htmlText":"1.10.0 - 2026-08-30"},{"level":3,"text":"Performance","anchor":"performance-2","htmlText":"Performance"},{"level":3,"text":"Fixed","anchor":"fixed-44","htmlText":"Fixed"},{"level":2,"text":"1.9.0 - 2026-08-28","anchor":"190---2026-08-28","htmlText":"1.9.0 - 2026-08-28"},{"level":3,"text":"Errors","anchor":"errors","htmlText":"Errors"},{"level":2,"text":"1.8.2 - 2026-08-28","anchor":"182---2026-08-28","htmlText":"1.8.2 - 2026-08-28"},{"level":3,"text":"Fixed","anchor":"fixed-45","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-36","htmlText":"Changed"},{"level":2,"text":"1.8.1 - 2026-08-27","anchor":"181---2026-08-27","htmlText":"1.8.1 - 2026-08-27"},{"level":3,"text":"Changed","anchor":"changed-37","htmlText":"Changed"},{"level":2,"text":"1.8.0 - 2026-08-27","anchor":"180---2026-08-27","htmlText":"1.8.0 - 2026-08-27"},{"level":3,"text":"Added","anchor":"added-16","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-46","htmlText":"Fixed"},{"level":2,"text":"1.7.4 - 2026-08-26","anchor":"174---2026-08-26","htmlText":"1.7.4 - 2026-08-26"},{"level":3,"text":"Fixed","anchor":"fixed-47","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-38","htmlText":"Changed"},{"level":2,"text":"1.7.3 - 2026-08-26","anchor":"173---2026-08-26","htmlText":"1.7.3 - 2026-08-26"},{"level":3,"text":"Added","anchor":"added-17","htmlText":"Added"},{"level":2,"text":"1.7.2 - 2026-08-24","anchor":"172---2026-08-24","htmlText":"1.7.2 - 2026-08-24"},{"level":3,"text":"Fixed","anchor":"fixed-48","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-39","htmlText":"Changed"},{"level":2,"text":"1.7.1 - 2026-08-23","anchor":"171---2026-08-23","htmlText":"1.7.1 - 2026-08-23"},{"level":3,"text":"Added","anchor":"added-18","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-40","htmlText":"Changed"},{"level":2,"text":"1.7.0 - 2026-08-23","anchor":"170---2026-08-23","htmlText":"1.7.0 - 2026-08-23"},{"level":3,"text":"Fixed","anchor":"fixed-49","htmlText":"Fixed"},{"level":3,"text":"Added","anchor":"added-19","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-41","htmlText":"Changed"},{"level":2,"text":"1.6.2 - 2026-08-19","anchor":"162---2026-08-19","htmlText":"1.6.2 - 2026-08-19"},{"level":3,"text":"Fixed","anchor":"fixed-50","htmlText":"Fixed"},{"level":2,"text":"1.6.1 - 2026-08-09","anchor":"161---2026-08-09","htmlText":"1.6.1 - 2026-08-09"},{"level":3,"text":"Fixed","anchor":"fixed-51","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-42","htmlText":"Changed"},{"level":2,"text":"1.6.0 - 2026-08-08","anchor":"160---2026-08-08","htmlText":"1.6.0 - 2026-08-08"},{"level":3,"text":"Added","anchor":"added-20","htmlText":"Added"},{"level":2,"text":"1.5.1 - 2026-08-07","anchor":"151---2026-08-07","htmlText":"1.5.1 - 2026-08-07"},{"level":3,"text":"Fixed","anchor":"fixed-52","htmlText":"Fixed"},{"level":3,"text":"Changed","anchor":"changed-43","htmlText":"Changed"},{"level":2,"text":"1.5.0 - 2026-08-05","anchor":"150---2026-08-05","htmlText":"1.5.0 - 2026-08-05"},{"level":3,"text":"Added","anchor":"added-21","htmlText":"Added"},{"level":2,"text":"1.4.0 - 2026-08-04","anchor":"140---2026-08-04","htmlText":"1.4.0 - 2026-08-04"},{"level":3,"text":"Fixed","anchor":"fixed-53","htmlText":"Fixed"},{"level":2,"text":"1.3.0 - 2026-08-02","anchor":"130---2026-08-02","htmlText":"1.3.0 - 2026-08-02"},{"level":3,"text":"Added","anchor":"added-22","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-54","htmlText":"Fixed"},{"level":2,"text":"1.2.2 - 2026-07-26","anchor":"122---2026-07-26","htmlText":"1.2.2 - 2026-07-26"},{"level":3,"text":"Fixed","anchor":"fixed-55","htmlText":"Fixed"},{"level":2,"text":"1.2.1 - 2026-07-18","anchor":"121---2026-07-18","htmlText":"1.2.1 - 2026-07-18"},{"level":3,"text":"Fixed","anchor":"fixed-56","htmlText":"Fixed"},{"level":2,"text":"1.2.0 - 2026-07-18","anchor":"120---2026-07-18","htmlText":"1.2.0 - 2026-07-18"},{"level":3,"text":"Added","anchor":"added-23","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-44","htmlText":"Changed"},{"level":2,"text":"1.1.0 - 2026-07-18","anchor":"110---2026-07-18","htmlText":"1.1.0 - 2026-07-18"},{"level":3,"text":"Added","anchor":"added-24","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-45","htmlText":"Changed"},{"level":3,"text":"Fixed","anchor":"fixed-57","htmlText":"Fixed"},{"level":2,"text":"1.0.2 - 2026-07-17","anchor":"102---2026-07-17","htmlText":"1.0.2 - 2026-07-17"},{"level":3,"text":"Fixed","anchor":"fixed-58","htmlText":"Fixed"},{"level":2,"text":"1.0.1 - 2026-07-16","anchor":"101---2026-07-16","htmlText":"1.0.1 - 2026-07-16"},{"level":3,"text":"Fixed","anchor":"fixed-59","htmlText":"Fixed"},{"level":2,"text":"1.0.0 - 2026-07-15","anchor":"100---2026-07-15","htmlText":"1.0.0 - 2026-07-15"},{"level":3,"text":"Removed","anchor":"removed","htmlText":"Removed"},{"level":3,"text":"Changed","anchor":"changed-46","htmlText":"Changed"},{"level":3,"text":"Added","anchor":"added-25","htmlText":"Added"},{"level":2,"text":"0.22.0 - 2026-07-14","anchor":"0220---2026-07-14","htmlText":"0.22.0 - 2026-07-14"},{"level":3,"text":"Deprecated","anchor":"deprecated","htmlText":"Deprecated"},{"level":2,"text":"0.21.0 - 2026-06-01","anchor":"0210---2026-06-01","htmlText":"0.21.0 - 2026-06-01"},{"level":3,"text":"Added","anchor":"added-26","htmlText":"Added"},{"level":2,"text":"0.20.1 - 2026-05-27","anchor":"0201---2026-05-27","htmlText":"0.20.1 - 2026-05-27"},{"level":3,"text":"Fixed","anchor":"fixed-60","htmlText":"Fixed"},{"level":2,"text":"0.20.0 - 2026-05-27","anchor":"0200---2026-05-27","htmlText":"0.20.0 - 2026-05-27"},{"level":3,"text":"Added","anchor":"added-27","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-47","htmlText":"Changed"},{"level":2,"text":"0.19.0 - 2026-05-27","anchor":"0190---2026-05-27","htmlText":"0.19.0 - 2026-05-27"},{"level":3,"text":"Added","anchor":"added-28","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-48","htmlText":"Changed"},{"level":2,"text":"0.18.2 - 2026-05-26","anchor":"0182---2026-05-26","htmlText":"0.18.2 - 2026-05-26"},{"level":3,"text":"Fixed","anchor":"fixed-61","htmlText":"Fixed"},{"level":2,"text":"0.18.1 - 2026-05-26","anchor":"0181---2026-05-26","htmlText":"0.18.1 - 2026-05-26"},{"level":3,"text":"Added","anchor":"added-29","htmlText":"Added"},{"level":2,"text":"0.18.0 - 2026-05-25","anchor":"0180---2026-05-25","htmlText":"0.18.0 - 2026-05-25"},{"level":3,"text":"Added","anchor":"added-30","htmlText":"Added"},{"level":2,"text":"0.17.5 - 2026-05-25","anchor":"0175---2026-05-25","htmlText":"0.17.5 - 2026-05-25"},{"level":3,"text":"Fixed","anchor":"fixed-62","htmlText":"Fixed"},{"level":2,"text":"0.17.4 - 2026-05-25","anchor":"0174---2026-05-25","htmlText":"0.17.4 - 2026-05-25"},{"level":3,"text":"Fixed","anchor":"fixed-63","htmlText":"Fixed"},{"level":2,"text":"0.17.3 - 2026-05-25","anchor":"0173---2026-05-25","htmlText":"0.17.3 - 2026-05-25"},{"level":3,"text":"Security","anchor":"security-1","htmlText":"Security"},{"level":2,"text":"0.17.2 - 2026-05-24","anchor":"0172---2026-05-24","htmlText":"0.17.2 - 2026-05-24"},{"level":3,"text":"Fixed","anchor":"fixed-64","htmlText":"Fixed"},{"level":2,"text":"0.17.1 - 2026-05-24","anchor":"0171---2026-05-24","htmlText":"0.17.1 - 2026-05-24"},{"level":3,"text":"Fixed","anchor":"fixed-65","htmlText":"Fixed"},{"level":2,"text":"0.17.0 - 2026-05-23","anchor":"0170---2026-05-23","htmlText":"0.17.0 - 2026-05-23"},{"level":3,"text":"Added","anchor":"added-31","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-66","htmlText":"Fixed"},{"level":2,"text":"0.16.0 - 2026-05-23","anchor":"0160---2026-05-23","htmlText":"0.16.0 - 2026-05-23"},{"level":3,"text":"Added","anchor":"added-32","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-67","htmlText":"Fixed"},{"level":2,"text":"0.15.1 - 2026-05-23","anchor":"0151---2026-05-23","htmlText":"0.15.1 - 2026-05-23"},{"level":3,"text":"Fixed","anchor":"fixed-68","htmlText":"Fixed"},{"level":2,"text":"0.15.0 - 2026-05-18","anchor":"0150---2026-05-18","htmlText":"0.15.0 - 2026-05-18"},{"level":3,"text":"Added","anchor":"added-33","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-49","htmlText":"Changed"},{"level":3,"text":"Notes","anchor":"notes","htmlText":"Notes"},{"level":2,"text":"0.14.0 - 2026-05-16","anchor":"0140---2026-05-16","htmlText":"0.14.0 - 2026-05-16"},{"level":3,"text":"Added","anchor":"added-34","htmlText":"Added"},{"level":3,"text":"Changed","anchor":"changed-50","htmlText":"Changed"},{"level":3,"text":"Notes","anchor":"notes-1","htmlText":"Notes"},{"level":2,"text":"0.13.4 — 2026-05-14","anchor":"0134--2026-05-14","htmlText":"0.13.4 — 2026-05-14"},{"level":3,"text":"Fixed","anchor":"fixed-69","htmlText":"Fixed"},{"level":3,"text":"Removed","anchor":"removed-1","htmlText":"Removed"},{"level":3,"text":"Changed","anchor":"changed-51","htmlText":"Changed"},{"level":2,"text":"0.13.3 — 2026-05-13","anchor":"0133--2026-05-13","htmlText":"0.13.3 — 2026-05-13"},{"level":3,"text":"Fixed","anchor":"fixed-70","htmlText":"Fixed"},{"level":2,"text":"0.13.2 — 2026-05-09","anchor":"0132--2026-05-09","htmlText":"0.13.2 — 2026-05-09"},{"level":3,"text":"Fixed","anchor":"fixed-71","htmlText":"Fixed"},{"level":2,"text":"0.13.1 — 2026-05-09","anchor":"0131--2026-05-09","htmlText":"0.13.1 — 2026-05-09"},{"level":3,"text":"Fixed","anchor":"fixed-72","htmlText":"Fixed"},{"level":2,"text":"0.13.0 — 2026-05-09","anchor":"0130--2026-05-09","htmlText":"0.13.0 — 2026-05-09"},{"level":3,"text":"Added","anchor":"added-35","htmlText":"Added"},{"level":3,"text":"Fixed","anchor":"fixed-73","htmlText":"Fixed"},{"level":3,"text":"Notes","anchor":"notes-2","htmlText":"Notes"}]},"issueTemplate":null,"discussionTemplate":null,"richText":null,"richTextTruncated":true,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"Changelog","fully_qualified_name":"Changelog","kind":"section_1","ident_start":2,"ident_end":11,"extent_start":0,"extent_end":252238,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":11}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":1340,"utf16_col":0}}},{"name":"Unreleased","fully_qualified_name":"Unreleased","kind":"section_2","ident_start":192,"ident_end":202,"extent_start":189,"extent_end":2700,"ident_utf16":{"start":{"line_number":4,"utf16_col":3},"end":{"line_number":4,"utf16_col":13}},"extent_utf16":{"start":{"line_number":4,"utf16_col":0},"end":{"line_number":15,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":208,"ident_end":215,"extent_start":204,"extent_end":2281,"ident_utf16":{"start":{"line_number":6,"utf16_col":4},"end":{"line_number":6,"utf16_col":11}},"extent_utf16":{"start":{"line_number":6,"utf16_col":0},"end":{"line_number":12,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":2285,"ident_end":2290,"extent_start":2281,"extent_end":2700,"ident_utf16":{"start":{"line_number":12,"utf16_col":4},"end":{"line_number":12,"utf16_col":9}},"extent_utf16":{"start":{"line_number":12,"utf16_col":0},"end":{"line_number":15,"utf16_col":0}}},{"name":"1.48.0 - 2026-10-09","fully_qualified_name":"1.48.0 - 2026-10-09","kind":"section_2","ident_start":2703,"ident_end":2722,"extent_start":2700,"extent_end":7052,"ident_utf16":{"start":{"line_number":15,"utf16_col":3},"end":{"line_number":15,"utf16_col":22}},"extent_utf16":{"start":{"line_number":15,"utf16_col":0},"end":{"line_number":35,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":3431,"ident_end":3436,"extent_start":3427,"extent_end":4468,"ident_utf16":{"start":{"line_number":21,"utf16_col":4},"end":{"line_number":21,"utf16_col":9}},"extent_utf16":{"start":{"line_number":21,"utf16_col":0},"end":{"line_number":26,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":4472,"ident_end":4477,"extent_start":4468,"extent_end":4768,"ident_utf16":{"start":{"line_number":26,"utf16_col":4},"end":{"line_number":26,"utf16_col":9}},"extent_utf16":{"start":{"line_number":26,"utf16_col":0},"end":{"line_number":29,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":4772,"ident_end":4779,"extent_start":4768,"extent_end":7052,"ident_utf16":{"start":{"line_number":29,"utf16_col":4},"end":{"line_number":29,"utf16_col":11}},"extent_utf16":{"start":{"line_number":29,"utf16_col":0},"end":{"line_number":35,"utf16_col":0}}},{"name":"1.47.0 - 2026-10-08","fully_qualified_name":"1.47.0 - 2026-10-08","kind":"section_2","ident_start":7055,"ident_end":7074,"extent_start":7052,"extent_end":15016,"ident_utf16":{"start":{"line_number":35,"utf16_col":3},"end":{"line_number":35,"utf16_col":22}},"extent_utf16":{"start":{"line_number":35,"utf16_col":0},"end":{"line_number":63,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":8536,"ident_end":8541,"extent_start":8532,"extent_end":9972,"ident_utf16":{"start":{"line_number":48,"utf16_col":4},"end":{"line_number":48,"utf16_col":9}},"extent_utf16":{"start":{"line_number":48,"utf16_col":0},"end":{"line_number":53,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":9976,"ident_end":9983,"extent_start":9972,"extent_end":15016,"ident_utf16":{"start":{"line_number":53,"utf16_col":4},"end":{"line_number":53,"utf16_col":11}},"extent_utf16":{"start":{"line_number":53,"utf16_col":0},"end":{"line_number":63,"utf16_col":0}}},{"name":"1.46.1 - 2026-10-06","fully_qualified_name":"1.46.1 - 2026-10-06","kind":"section_2","ident_start":15019,"ident_end":15038,"extent_start":15016,"extent_end":15960,"ident_utf16":{"start":{"line_number":63,"utf16_col":3},"end":{"line_number":63,"utf16_col":22}},"extent_utf16":{"start":{"line_number":63,"utf16_col":0},"end":{"line_number":69,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":15044,"ident_end":15049,"extent_start":15040,"extent_end":15960,"ident_utf16":{"start":{"line_number":65,"utf16_col":4},"end":{"line_number":65,"utf16_col":9}},"extent_utf16":{"start":{"line_number":65,"utf16_col":0},"end":{"line_number":69,"utf16_col":0}}},{"name":"1.46.0 - 2026-10-06","fully_qualified_name":"1.46.0 - 2026-10-06","kind":"section_2","ident_start":15963,"ident_end":15982,"extent_start":15960,"extent_end":30989,"ident_utf16":{"start":{"line_number":69,"utf16_col":3},"end":{"line_number":69,"utf16_col":22}},"extent_utf16":{"start":{"line_number":69,"utf16_col":0},"end":{"line_number":109,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":17612,"ident_end":17617,"extent_start":17608,"extent_end":18308,"ident_utf16":{"start":{"line_number":81,"utf16_col":4},"end":{"line_number":81,"utf16_col":9}},"extent_utf16":{"start":{"line_number":81,"utf16_col":0},"end":{"line_number":85,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":18312,"ident_end":18319,"extent_start":18308,"extent_end":30989,"ident_utf16":{"start":{"line_number":85,"utf16_col":4},"end":{"line_number":85,"utf16_col":11}},"extent_utf16":{"start":{"line_number":85,"utf16_col":0},"end":{"line_number":109,"utf16_col":0}}},{"name":"1.45.0 - 2026-10-05","fully_qualified_name":"1.45.0 - 2026-10-05","kind":"section_2","ident_start":30992,"ident_end":31011,"extent_start":30989,"extent_end":33416,"ident_utf16":{"start":{"line_number":109,"utf16_col":3},"end":{"line_number":109,"utf16_col":22}},"extent_utf16":{"start":{"line_number":109,"utf16_col":0},"end":{"line_number":127,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":31017,"ident_end":31024,"extent_start":31013,"extent_end":33416,"ident_utf16":{"start":{"line_number":111,"utf16_col":4},"end":{"line_number":111,"utf16_col":11}},"extent_utf16":{"start":{"line_number":111,"utf16_col":0},"end":{"line_number":127,"utf16_col":0}}},{"name":"1.44.0 - 2026-10-05","fully_qualified_name":"1.44.0 - 2026-10-05","kind":"section_2","ident_start":33419,"ident_end":33438,"extent_start":33416,"extent_end":38156,"ident_utf16":{"start":{"line_number":127,"utf16_col":3},"end":{"line_number":127,"utf16_col":22}},"extent_utf16":{"start":{"line_number":127,"utf16_col":0},"end":{"line_number":157,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":33444,"ident_end":33449,"extent_start":33440,"extent_end":35421,"ident_utf16":{"start":{"line_number":129,"utf16_col":4},"end":{"line_number":129,"utf16_col":9}},"extent_utf16":{"start":{"line_number":129,"utf16_col":0},"end":{"line_number":135,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":35425,"ident_end":35432,"extent_start":35421,"extent_end":38156,"ident_utf16":{"start":{"line_number":135,"utf16_col":4},"end":{"line_number":135,"utf16_col":11}},"extent_utf16":{"start":{"line_number":135,"utf16_col":0},"end":{"line_number":157,"utf16_col":0}}},{"name":"1.43.0 - 2026-10-05","fully_qualified_name":"1.43.0 - 2026-10-05","kind":"section_2","ident_start":38159,"ident_end":38178,"extent_start":38156,"extent_end":43524,"ident_utf16":{"start":{"line_number":157,"utf16_col":3},"end":{"line_number":157,"utf16_col":22}},"extent_utf16":{"start":{"line_number":157,"utf16_col":0},"end":{"line_number":188,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":38184,"ident_end":38189,"extent_start":38180,"extent_end":40348,"ident_utf16":{"start":{"line_number":159,"utf16_col":4},"end":{"line_number":159,"utf16_col":9}},"extent_utf16":{"start":{"line_number":159,"utf16_col":0},"end":{"line_number":166,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":40352,"ident_end":40359,"extent_start":40348,"extent_end":43524,"ident_utf16":{"start":{"line_number":166,"utf16_col":4},"end":{"line_number":166,"utf16_col":11}},"extent_utf16":{"start":{"line_number":166,"utf16_col":0},"end":{"line_number":188,"utf16_col":0}}},{"name":"1.42.0 - 2026-10-04","fully_qualified_name":"1.42.0 - 2026-10-04","kind":"section_2","ident_start":43527,"ident_end":43546,"extent_start":43524,"extent_end":47754,"ident_utf16":{"start":{"line_number":188,"utf16_col":3},"end":{"line_number":188,"utf16_col":22}},"extent_utf16":{"start":{"line_number":188,"utf16_col":0},"end":{"line_number":207,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":43552,"ident_end":43559,"extent_start":43548,"extent_end":45753,"ident_utf16":{"start":{"line_number":190,"utf16_col":4},"end":{"line_number":190,"utf16_col":11}},"extent_utf16":{"start":{"line_number":190,"utf16_col":0},"end":{"line_number":200,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":45757,"ident_end":45762,"extent_start":45753,"extent_end":47754,"ident_utf16":{"start":{"line_number":200,"utf16_col":4},"end":{"line_number":200,"utf16_col":9}},"extent_utf16":{"start":{"line_number":200,"utf16_col":0},"end":{"line_number":207,"utf16_col":0}}},{"name":"1.41.0 - 2026-10-04","fully_qualified_name":"1.41.0 - 2026-10-04","kind":"section_2","ident_start":47757,"ident_end":47776,"extent_start":47754,"extent_end":50598,"ident_utf16":{"start":{"line_number":207,"utf16_col":3},"end":{"line_number":207,"utf16_col":22}},"extent_utf16":{"start":{"line_number":207,"utf16_col":0},"end":{"line_number":228,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":47782,"ident_end":47789,"extent_start":47778,"extent_end":48878,"ident_utf16":{"start":{"line_number":209,"utf16_col":4},"end":{"line_number":209,"utf16_col":11}},"extent_utf16":{"start":{"line_number":209,"utf16_col":0},"end":{"line_number":213,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":48882,"ident_end":48887,"extent_start":48878,"extent_end":50598,"ident_utf16":{"start":{"line_number":213,"utf16_col":4},"end":{"line_number":213,"utf16_col":9}},"extent_utf16":{"start":{"line_number":213,"utf16_col":0},"end":{"line_number":228,"utf16_col":0}}},{"name":"1.40.1 - 2026-09-30","fully_qualified_name":"1.40.1 - 2026-09-30","kind":"section_2","ident_start":50601,"ident_end":50620,"extent_start":50598,"extent_end":52304,"ident_utf16":{"start":{"line_number":228,"utf16_col":3},"end":{"line_number":228,"utf16_col":22}},"extent_utf16":{"start":{"line_number":228,"utf16_col":0},"end":{"line_number":238,"utf16_col":0}}},{"name":"Security","fully_qualified_name":"Security","kind":"section_3","ident_start":50626,"ident_end":50634,"extent_start":50622,"extent_end":51881,"ident_utf16":{"start":{"line_number":230,"utf16_col":4},"end":{"line_number":230,"utf16_col":12}},"extent_utf16":{"start":{"line_number":230,"utf16_col":0},"end":{"line_number":234,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":51885,"ident_end":51890,"extent_start":51881,"extent_end":52304,"ident_utf16":{"start":{"line_number":234,"utf16_col":4},"end":{"line_number":234,"utf16_col":9}},"extent_utf16":{"start":{"line_number":234,"utf16_col":0},"end":{"line_number":238,"utf16_col":0}}},{"name":"1.40.0 - 2026-09-30","fully_qualified_name":"1.40.0 - 2026-09-30","kind":"section_2","ident_start":52307,"ident_end":52326,"extent_start":52304,"extent_end":54301,"ident_utf16":{"start":{"line_number":238,"utf16_col":3},"end":{"line_number":238,"utf16_col":22}},"extent_utf16":{"start":{"line_number":238,"utf16_col":0},"end":{"line_number":250,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":52332,"ident_end":52337,"extent_start":52328,"extent_end":54046,"ident_utf16":{"start":{"line_number":240,"utf16_col":4},"end":{"line_number":240,"utf16_col":9}},"extent_utf16":{"start":{"line_number":240,"utf16_col":0},"end":{"line_number":246,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":54050,"ident_end":54057,"extent_start":54046,"extent_end":54301,"ident_utf16":{"start":{"line_number":246,"utf16_col":4},"end":{"line_number":246,"utf16_col":11}},"extent_utf16":{"start":{"line_number":246,"utf16_col":0},"end":{"line_number":250,"utf16_col":0}}},{"name":"1.39.2 - 2026-09-30","fully_qualified_name":"1.39.2 - 2026-09-30","kind":"section_2","ident_start":54304,"ident_end":54323,"extent_start":54301,"extent_end":57162,"ident_utf16":{"start":{"line_number":250,"utf16_col":3},"end":{"line_number":250,"utf16_col":22}},"extent_utf16":{"start":{"line_number":250,"utf16_col":0},"end":{"line_number":267,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":54329,"ident_end":54336,"extent_start":54325,"extent_end":55792,"ident_utf16":{"start":{"line_number":252,"utf16_col":4},"end":{"line_number":252,"utf16_col":11}},"extent_utf16":{"start":{"line_number":252,"utf16_col":0},"end":{"line_number":261,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":55796,"ident_end":55801,"extent_start":55792,"extent_end":57162,"ident_utf16":{"start":{"line_number":261,"utf16_col":4},"end":{"line_number":261,"utf16_col":9}},"extent_utf16":{"start":{"line_number":261,"utf16_col":0},"end":{"line_number":267,"utf16_col":0}}},{"name":"1.39.1 - 2026-09-30","fully_qualified_name":"1.39.1 - 2026-09-30","kind":"section_2","ident_start":57165,"ident_end":57184,"extent_start":57162,"extent_end":57997,"ident_utf16":{"start":{"line_number":267,"utf16_col":3},"end":{"line_number":267,"utf16_col":22}},"extent_utf16":{"start":{"line_number":267,"utf16_col":0},"end":{"line_number":273,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":57190,"ident_end":57195,"extent_start":57186,"extent_end":57997,"ident_utf16":{"start":{"line_number":269,"utf16_col":4},"end":{"line_number":269,"utf16_col":9}},"extent_utf16":{"start":{"line_number":269,"utf16_col":0},"end":{"line_number":273,"utf16_col":0}}},{"name":"1.39.0 - 2026-09-29","fully_qualified_name":"1.39.0 - 2026-09-29","kind":"section_2","ident_start":58000,"ident_end":58019,"extent_start":57997,"extent_end":66464,"ident_utf16":{"start":{"line_number":273,"utf16_col":3},"end":{"line_number":273,"utf16_col":22}},"extent_utf16":{"start":{"line_number":273,"utf16_col":0},"end":{"line_number":310,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":58025,"ident_end":58030,"extent_start":58021,"extent_end":62551,"ident_utf16":{"start":{"line_number":275,"utf16_col":4},"end":{"line_number":275,"utf16_col":9}},"extent_utf16":{"start":{"line_number":275,"utf16_col":0},"end":{"line_number":290,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":62555,"ident_end":62562,"extent_start":62551,"extent_end":66464,"ident_utf16":{"start":{"line_number":290,"utf16_col":4},"end":{"line_number":290,"utf16_col":11}},"extent_utf16":{"start":{"line_number":290,"utf16_col":0},"end":{"line_number":310,"utf16_col":0}}},{"name":"1.38.0 - 2026-09-29","fully_qualified_name":"1.38.0 - 2026-09-29","kind":"section_2","ident_start":66467,"ident_end":66486,"extent_start":66464,"extent_end":68905,"ident_utf16":{"start":{"line_number":310,"utf16_col":3},"end":{"line_number":310,"utf16_col":22}},"extent_utf16":{"start":{"line_number":310,"utf16_col":0},"end":{"line_number":318,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":66492,"ident_end":66499,"extent_start":66488,"extent_end":68905,"ident_utf16":{"start":{"line_number":312,"utf16_col":4},"end":{"line_number":312,"utf16_col":11}},"extent_utf16":{"start":{"line_number":312,"utf16_col":0},"end":{"line_number":318,"utf16_col":0}}},{"name":"1.37.1 - 2026-09-29","fully_qualified_name":"1.37.1 - 2026-09-29","kind":"section_2","ident_start":68908,"ident_end":68927,"extent_start":68905,"extent_end":69953,"ident_utf16":{"start":{"line_number":318,"utf16_col":3},"end":{"line_number":318,"utf16_col":22}},"extent_utf16":{"start":{"line_number":318,"utf16_col":0},"end":{"line_number":324,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":68933,"ident_end":68938,"extent_start":68929,"extent_end":69953,"ident_utf16":{"start":{"line_number":320,"utf16_col":4},"end":{"line_number":320,"utf16_col":9}},"extent_utf16":{"start":{"line_number":320,"utf16_col":0},"end":{"line_number":324,"utf16_col":0}}},{"name":"1.37.0 - 2026-09-29","fully_qualified_name":"1.37.0 - 2026-09-29","kind":"section_2","ident_start":69956,"ident_end":69975,"extent_start":69953,"extent_end":73544,"ident_utf16":{"start":{"line_number":324,"utf16_col":3},"end":{"line_number":324,"utf16_col":22}},"extent_utf16":{"start":{"line_number":324,"utf16_col":0},"end":{"line_number":342,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":69981,"ident_end":69986,"extent_start":69977,"extent_end":71448,"ident_utf16":{"start":{"line_number":326,"utf16_col":4},"end":{"line_number":326,"utf16_col":9}},"extent_utf16":{"start":{"line_number":326,"utf16_col":0},"end":{"line_number":331,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":71452,"ident_end":71457,"extent_start":71448,"extent_end":71906,"ident_utf16":{"start":{"line_number":331,"utf16_col":4},"end":{"line_number":331,"utf16_col":9}},"extent_utf16":{"start":{"line_number":331,"utf16_col":0},"end":{"line_number":335,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":71910,"ident_end":71917,"extent_start":71906,"extent_end":73544,"ident_utf16":{"start":{"line_number":335,"utf16_col":4},"end":{"line_number":335,"utf16_col":11}},"extent_utf16":{"start":{"line_number":335,"utf16_col":0},"end":{"line_number":342,"utf16_col":0}}},{"name":"1.36.1 - 2026-09-28","fully_qualified_name":"1.36.1 - 2026-09-28","kind":"section_2","ident_start":73547,"ident_end":73566,"extent_start":73544,"extent_end":73908,"ident_utf16":{"start":{"line_number":342,"utf16_col":3},"end":{"line_number":342,"utf16_col":22}},"extent_utf16":{"start":{"line_number":342,"utf16_col":0},"end":{"line_number":348,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":73572,"ident_end":73577,"extent_start":73568,"extent_end":73908,"ident_utf16":{"start":{"line_number":344,"utf16_col":4},"end":{"line_number":344,"utf16_col":9}},"extent_utf16":{"start":{"line_number":344,"utf16_col":0},"end":{"line_number":348,"utf16_col":0}}},{"name":"1.36.0 - 2026-09-28","fully_qualified_name":"1.36.0 - 2026-09-28","kind":"section_2","ident_start":73911,"ident_end":73930,"extent_start":73908,"extent_end":84787,"ident_utf16":{"start":{"line_number":348,"utf16_col":3},"end":{"line_number":348,"utf16_col":22}},"extent_utf16":{"start":{"line_number":348,"utf16_col":0},"end":{"line_number":378,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":73936,"ident_end":73941,"extent_start":73932,"extent_end":75700,"ident_utf16":{"start":{"line_number":350,"utf16_col":4},"end":{"line_number":350,"utf16_col":9}},"extent_utf16":{"start":{"line_number":350,"utf16_col":0},"end":{"line_number":358,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":75704,"ident_end":75709,"extent_start":75700,"extent_end":80629,"ident_utf16":{"start":{"line_number":358,"utf16_col":4},"end":{"line_number":358,"utf16_col":9}},"extent_utf16":{"start":{"line_number":358,"utf16_col":0},"end":{"line_number":369,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":80633,"ident_end":80640,"extent_start":80629,"extent_end":84787,"ident_utf16":{"start":{"line_number":369,"utf16_col":4},"end":{"line_number":369,"utf16_col":11}},"extent_utf16":{"start":{"line_number":369,"utf16_col":0},"end":{"line_number":378,"utf16_col":0}}},{"name":"1.35.0 - 2026-09-28","fully_qualified_name":"1.35.0 - 2026-09-28","kind":"section_2","ident_start":84790,"ident_end":84809,"extent_start":84787,"extent_end":93294,"ident_utf16":{"start":{"line_number":378,"utf16_col":3},"end":{"line_number":378,"utf16_col":22}},"extent_utf16":{"start":{"line_number":378,"utf16_col":0},"end":{"line_number":408,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":84815,"ident_end":84820,"extent_start":84811,"extent_end":85862,"ident_utf16":{"start":{"line_number":380,"utf16_col":4},"end":{"line_number":380,"utf16_col":9}},"extent_utf16":{"start":{"line_number":380,"utf16_col":0},"end":{"line_number":384,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":85866,"ident_end":85871,"extent_start":85862,"extent_end":90162,"ident_utf16":{"start":{"line_number":384,"utf16_col":4},"end":{"line_number":384,"utf16_col":9}},"extent_utf16":{"start":{"line_number":384,"utf16_col":0},"end":{"line_number":398,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":90166,"ident_end":90173,"extent_start":90162,"extent_end":93294,"ident_utf16":{"start":{"line_number":398,"utf16_col":4},"end":{"line_number":398,"utf16_col":11}},"extent_utf16":{"start":{"line_number":398,"utf16_col":0},"end":{"line_number":408,"utf16_col":0}}},{"name":"1.34.0 - 2026-09-28","fully_qualified_name":"1.34.0 - 2026-09-28","kind":"section_2","ident_start":93297,"ident_end":93316,"extent_start":93294,"extent_end":94788,"ident_utf16":{"start":{"line_number":408,"utf16_col":3},"end":{"line_number":408,"utf16_col":22}},"extent_utf16":{"start":{"line_number":408,"utf16_col":0},"end":{"line_number":420,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":93322,"ident_end":93327,"extent_start":93318,"extent_end":93774,"ident_utf16":{"start":{"line_number":410,"utf16_col":4},"end":{"line_number":410,"utf16_col":9}},"extent_utf16":{"start":{"line_number":410,"utf16_col":0},"end":{"line_number":414,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":93778,"ident_end":93783,"extent_start":93774,"extent_end":94788,"ident_utf16":{"start":{"line_number":414,"utf16_col":4},"end":{"line_number":414,"utf16_col":9}},"extent_utf16":{"start":{"line_number":414,"utf16_col":0},"end":{"line_number":420,"utf16_col":0}}},{"name":"1.33.3 - 2026-09-28","fully_qualified_name":"1.33.3 - 2026-09-28","kind":"section_2","ident_start":94791,"ident_end":94810,"extent_start":94788,"extent_end":96362,"ident_utf16":{"start":{"line_number":420,"utf16_col":3},"end":{"line_number":420,"utf16_col":22}},"extent_utf16":{"start":{"line_number":420,"utf16_col":0},"end":{"line_number":429,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":94816,"ident_end":94821,"extent_start":94812,"extent_end":96362,"ident_utf16":{"start":{"line_number":422,"utf16_col":4},"end":{"line_number":422,"utf16_col":9}},"extent_utf16":{"start":{"line_number":422,"utf16_col":0},"end":{"line_number":429,"utf16_col":0}}},{"name":"1.33.2 - 2026-09-28","fully_qualified_name":"1.33.2 - 2026-09-28","kind":"section_2","ident_start":96365,"ident_end":96384,"extent_start":96362,"extent_end":97569,"ident_utf16":{"start":{"line_number":429,"utf16_col":3},"end":{"line_number":429,"utf16_col":22}},"extent_utf16":{"start":{"line_number":429,"utf16_col":0},"end":{"line_number":437,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":96390,"ident_end":96395,"extent_start":96386,"extent_end":97569,"ident_utf16":{"start":{"line_number":431,"utf16_col":4},"end":{"line_number":431,"utf16_col":9}},"extent_utf16":{"start":{"line_number":431,"utf16_col":0},"end":{"line_number":437,"utf16_col":0}}},{"name":"1.33.1 - 2026-09-28","fully_qualified_name":"1.33.1 - 2026-09-28","kind":"section_2","ident_start":97572,"ident_end":97591,"extent_start":97569,"extent_end":99524,"ident_utf16":{"start":{"line_number":437,"utf16_col":3},"end":{"line_number":437,"utf16_col":22}},"extent_utf16":{"start":{"line_number":437,"utf16_col":0},"end":{"line_number":448,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":97597,"ident_end":97604,"extent_start":97593,"extent_end":99524,"ident_utf16":{"start":{"line_number":439,"utf16_col":4},"end":{"line_number":439,"utf16_col":11}},"extent_utf16":{"start":{"line_number":439,"utf16_col":0},"end":{"line_number":448,"utf16_col":0}}},{"name":"1.33.0 - 2026-09-28","fully_qualified_name":"1.33.0 - 2026-09-28","kind":"section_2","ident_start":99527,"ident_end":99546,"extent_start":99524,"extent_end":102463,"ident_utf16":{"start":{"line_number":448,"utf16_col":3},"end":{"line_number":448,"utf16_col":22}},"extent_utf16":{"start":{"line_number":448,"utf16_col":0},"end":{"line_number":463,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":99552,"ident_end":99557,"extent_start":99548,"extent_end":99989,"ident_utf16":{"start":{"line_number":450,"utf16_col":4},"end":{"line_number":450,"utf16_col":9}},"extent_utf16":{"start":{"line_number":450,"utf16_col":0},"end":{"line_number":454,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":99993,"ident_end":100000,"extent_start":99989,"extent_end":102463,"ident_utf16":{"start":{"line_number":454,"utf16_col":4},"end":{"line_number":454,"utf16_col":11}},"extent_utf16":{"start":{"line_number":454,"utf16_col":0},"end":{"line_number":463,"utf16_col":0}}},{"name":"1.32.3 - 2026-09-27","fully_qualified_name":"1.32.3 - 2026-09-27","kind":"section_2","ident_start":102466,"ident_end":102485,"extent_start":102463,"extent_end":104653,"ident_utf16":{"start":{"line_number":463,"utf16_col":3},"end":{"line_number":463,"utf16_col":22}},"extent_utf16":{"start":{"line_number":463,"utf16_col":0},"end":{"line_number":476,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":102491,"ident_end":102496,"extent_start":102487,"extent_end":103555,"ident_utf16":{"start":{"line_number":465,"utf16_col":4},"end":{"line_number":465,"utf16_col":9}},"extent_utf16":{"start":{"line_number":465,"utf16_col":0},"end":{"line_number":469,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":103559,"ident_end":103566,"extent_start":103555,"extent_end":104653,"ident_utf16":{"start":{"line_number":469,"utf16_col":4},"end":{"line_number":469,"utf16_col":11}},"extent_utf16":{"start":{"line_number":469,"utf16_col":0},"end":{"line_number":476,"utf16_col":0}}},{"name":"1.32.2 - 2026-09-27","fully_qualified_name":"1.32.2 - 2026-09-27","kind":"section_2","ident_start":104656,"ident_end":104675,"extent_start":104653,"extent_end":106622,"ident_utf16":{"start":{"line_number":476,"utf16_col":3},"end":{"line_number":476,"utf16_col":22}},"extent_utf16":{"start":{"line_number":476,"utf16_col":0},"end":{"line_number":485,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":104681,"ident_end":104688,"extent_start":104677,"extent_end":106622,"ident_utf16":{"start":{"line_number":478,"utf16_col":4},"end":{"line_number":478,"utf16_col":11}},"extent_utf16":{"start":{"line_number":478,"utf16_col":0},"end":{"line_number":485,"utf16_col":0}}},{"name":"1.32.1 - 2026-09-27","fully_qualified_name":"1.32.1 - 2026-09-27","kind":"section_2","ident_start":106625,"ident_end":106644,"extent_start":106622,"extent_end":108091,"ident_utf16":{"start":{"line_number":485,"utf16_col":3},"end":{"line_number":485,"utf16_col":22}},"extent_utf16":{"start":{"line_number":485,"utf16_col":0},"end":{"line_number":492,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":106650,"ident_end":106657,"extent_start":106646,"extent_end":108091,"ident_utf16":{"start":{"line_number":487,"utf16_col":4},"end":{"line_number":487,"utf16_col":11}},"extent_utf16":{"start":{"line_number":487,"utf16_col":0},"end":{"line_number":492,"utf16_col":0}}},{"name":"1.32.0 - 2026-09-26","fully_qualified_name":"1.32.0 - 2026-09-26","kind":"section_2","ident_start":108094,"ident_end":108113,"extent_start":108091,"extent_end":110251,"ident_utf16":{"start":{"line_number":492,"utf16_col":3},"end":{"line_number":492,"utf16_col":22}},"extent_utf16":{"start":{"line_number":492,"utf16_col":0},"end":{"line_number":504,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":108119,"ident_end":108124,"extent_start":108115,"extent_end":109242,"ident_utf16":{"start":{"line_number":494,"utf16_col":4},"end":{"line_number":494,"utf16_col":9}},"extent_utf16":{"start":{"line_number":494,"utf16_col":0},"end":{"line_number":498,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":109246,"ident_end":109253,"extent_start":109242,"extent_end":110251,"ident_utf16":{"start":{"line_number":498,"utf16_col":4},"end":{"line_number":498,"utf16_col":11}},"extent_utf16":{"start":{"line_number":498,"utf16_col":0},"end":{"line_number":504,"utf16_col":0}}},{"name":"1.31.3 - 2026-09-26","fully_qualified_name":"1.31.3 - 2026-09-26","kind":"section_2","ident_start":110254,"ident_end":110273,"extent_start":110251,"extent_end":112948,"ident_utf16":{"start":{"line_number":504,"utf16_col":3},"end":{"line_number":504,"utf16_col":22}},"extent_utf16":{"start":{"line_number":504,"utf16_col":0},"end":{"line_number":518,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":110279,"ident_end":110284,"extent_start":110275,"extent_end":111266,"ident_utf16":{"start":{"line_number":506,"utf16_col":4},"end":{"line_number":506,"utf16_col":9}},"extent_utf16":{"start":{"line_number":506,"utf16_col":0},"end":{"line_number":512,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":111270,"ident_end":111277,"extent_start":111266,"extent_end":112948,"ident_utf16":{"start":{"line_number":512,"utf16_col":4},"end":{"line_number":512,"utf16_col":11}},"extent_utf16":{"start":{"line_number":512,"utf16_col":0},"end":{"line_number":518,"utf16_col":0}}},{"name":"1.31.2 - 2026-09-26","fully_qualified_name":"1.31.2 - 2026-09-26","kind":"section_2","ident_start":112951,"ident_end":112970,"extent_start":112948,"extent_end":115879,"ident_utf16":{"start":{"line_number":518,"utf16_col":3},"end":{"line_number":518,"utf16_col":22}},"extent_utf16":{"start":{"line_number":518,"utf16_col":0},"end":{"line_number":529,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":112976,"ident_end":112981,"extent_start":112972,"extent_end":115879,"ident_utf16":{"start":{"line_number":520,"utf16_col":4},"end":{"line_number":520,"utf16_col":9}},"extent_utf16":{"start":{"line_number":520,"utf16_col":0},"end":{"line_number":529,"utf16_col":0}}},{"name":"1.31.1 - 2026-09-26","fully_qualified_name":"1.31.1 - 2026-09-26","kind":"section_2","ident_start":115882,"ident_end":115901,"extent_start":115879,"extent_end":117831,"ident_utf16":{"start":{"line_number":529,"utf16_col":3},"end":{"line_number":529,"utf16_col":22}},"extent_utf16":{"start":{"line_number":529,"utf16_col":0},"end":{"line_number":536,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":115907,"ident_end":115912,"extent_start":115903,"extent_end":117831,"ident_utf16":{"start":{"line_number":531,"utf16_col":4},"end":{"line_number":531,"utf16_col":9}},"extent_utf16":{"start":{"line_number":531,"utf16_col":0},"end":{"line_number":536,"utf16_col":0}}},{"name":"1.31.0 - 2026-09-26","fully_qualified_name":"1.31.0 - 2026-09-26","kind":"section_2","ident_start":117834,"ident_end":117853,"extent_start":117831,"extent_end":121438,"ident_utf16":{"start":{"line_number":536,"utf16_col":3},"end":{"line_number":536,"utf16_col":22}},"extent_utf16":{"start":{"line_number":536,"utf16_col":0},"end":{"line_number":550,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":117859,"ident_end":117866,"extent_start":117855,"extent_end":121438,"ident_utf16":{"start":{"line_number":538,"utf16_col":4},"end":{"line_number":538,"utf16_col":11}},"extent_utf16":{"start":{"line_number":538,"utf16_col":0},"end":{"line_number":550,"utf16_col":0}}},{"name":"1.30.3 - 2026-09-25","fully_qualified_name":"1.30.3 - 2026-09-25","kind":"section_2","ident_start":121441,"ident_end":121460,"extent_start":121438,"extent_end":123494,"ident_utf16":{"start":{"line_number":550,"utf16_col":3},"end":{"line_number":550,"utf16_col":22}},"extent_utf16":{"start":{"line_number":550,"utf16_col":0},"end":{"line_number":560,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":121466,"ident_end":121471,"extent_start":121462,"extent_end":122420,"ident_utf16":{"start":{"line_number":552,"utf16_col":4},"end":{"line_number":552,"utf16_col":9}},"extent_utf16":{"start":{"line_number":552,"utf16_col":0},"end":{"line_number":556,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":122424,"ident_end":122431,"extent_start":122420,"extent_end":123494,"ident_utf16":{"start":{"line_number":556,"utf16_col":4},"end":{"line_number":556,"utf16_col":11}},"extent_utf16":{"start":{"line_number":556,"utf16_col":0},"end":{"line_number":560,"utf16_col":0}}},{"name":"1.30.2 - 2026-09-25","fully_qualified_name":"1.30.2 - 2026-09-25","kind":"section_2","ident_start":123497,"ident_end":123516,"extent_start":123494,"extent_end":125163,"ident_utf16":{"start":{"line_number":560,"utf16_col":3},"end":{"line_number":560,"utf16_col":22}},"extent_utf16":{"start":{"line_number":560,"utf16_col":0},"end":{"line_number":566,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":123522,"ident_end":123527,"extent_start":123518,"extent_end":125163,"ident_utf16":{"start":{"line_number":562,"utf16_col":4},"end":{"line_number":562,"utf16_col":9}},"extent_utf16":{"start":{"line_number":562,"utf16_col":0},"end":{"line_number":566,"utf16_col":0}}},{"name":"1.30.1 - 2026-09-24","fully_qualified_name":"1.30.1 - 2026-09-24","kind":"section_2","ident_start":125166,"ident_end":125185,"extent_start":125163,"extent_end":126581,"ident_utf16":{"start":{"line_number":566,"utf16_col":3},"end":{"line_number":566,"utf16_col":22}},"extent_utf16":{"start":{"line_number":566,"utf16_col":0},"end":{"line_number":572,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":125191,"ident_end":125196,"extent_start":125187,"extent_end":126581,"ident_utf16":{"start":{"line_number":568,"utf16_col":4},"end":{"line_number":568,"utf16_col":9}},"extent_utf16":{"start":{"line_number":568,"utf16_col":0},"end":{"line_number":572,"utf16_col":0}}},{"name":"1.30.0 - 2026-09-24","fully_qualified_name":"1.30.0 - 2026-09-24","kind":"section_2","ident_start":126584,"ident_end":126603,"extent_start":126581,"extent_end":131854,"ident_utf16":{"start":{"line_number":572,"utf16_col":3},"end":{"line_number":572,"utf16_col":22}},"extent_utf16":{"start":{"line_number":572,"utf16_col":0},"end":{"line_number":586,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":126609,"ident_end":126614,"extent_start":126605,"extent_end":127537,"ident_utf16":{"start":{"line_number":574,"utf16_col":4},"end":{"line_number":574,"utf16_col":9}},"extent_utf16":{"start":{"line_number":574,"utf16_col":0},"end":{"line_number":578,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":127541,"ident_end":127548,"extent_start":127537,"extent_end":131854,"ident_utf16":{"start":{"line_number":578,"utf16_col":4},"end":{"line_number":578,"utf16_col":11}},"extent_utf16":{"start":{"line_number":578,"utf16_col":0},"end":{"line_number":586,"utf16_col":0}}},{"name":"1.29.0 - 2026-09-24","fully_qualified_name":"1.29.0 - 2026-09-24","kind":"section_2","ident_start":131857,"ident_end":131876,"extent_start":131854,"extent_end":133841,"ident_utf16":{"start":{"line_number":586,"utf16_col":3},"end":{"line_number":586,"utf16_col":22}},"extent_utf16":{"start":{"line_number":586,"utf16_col":0},"end":{"line_number":594,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":131882,"ident_end":131889,"extent_start":131878,"extent_end":133841,"ident_utf16":{"start":{"line_number":588,"utf16_col":4},"end":{"line_number":588,"utf16_col":11}},"extent_utf16":{"start":{"line_number":588,"utf16_col":0},"end":{"line_number":594,"utf16_col":0}}},{"name":"1.28.0 - 2026-09-23","fully_qualified_name":"1.28.0 - 2026-09-23","kind":"section_2","ident_start":133844,"ident_end":133863,"extent_start":133841,"extent_end":136201,"ident_utf16":{"start":{"line_number":594,"utf16_col":3},"end":{"line_number":594,"utf16_col":22}},"extent_utf16":{"start":{"line_number":594,"utf16_col":0},"end":{"line_number":604,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":133869,"ident_end":133874,"extent_start":133865,"extent_end":134788,"ident_utf16":{"start":{"line_number":596,"utf16_col":4},"end":{"line_number":596,"utf16_col":9}},"extent_utf16":{"start":{"line_number":596,"utf16_col":0},"end":{"line_number":600,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":134792,"ident_end":134799,"extent_start":134788,"extent_end":136201,"ident_utf16":{"start":{"line_number":600,"utf16_col":4},"end":{"line_number":600,"utf16_col":11}},"extent_utf16":{"start":{"line_number":600,"utf16_col":0},"end":{"line_number":604,"utf16_col":0}}},{"name":"1.27.1 - 2026-09-17","fully_qualified_name":"1.27.1 - 2026-09-17","kind":"section_2","ident_start":136204,"ident_end":136223,"extent_start":136201,"extent_end":137839,"ident_utf16":{"start":{"line_number":604,"utf16_col":3},"end":{"line_number":604,"utf16_col":22}},"extent_utf16":{"start":{"line_number":604,"utf16_col":0},"end":{"line_number":611,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":136229,"ident_end":136234,"extent_start":136225,"extent_end":137839,"ident_utf16":{"start":{"line_number":606,"utf16_col":4},"end":{"line_number":606,"utf16_col":9}},"extent_utf16":{"start":{"line_number":606,"utf16_col":0},"end":{"line_number":611,"utf16_col":0}}},{"name":"1.27.0 - 2026-09-17","fully_qualified_name":"1.27.0 - 2026-09-17","kind":"section_2","ident_start":137842,"ident_end":137861,"extent_start":137839,"extent_end":139812,"ident_utf16":{"start":{"line_number":611,"utf16_col":3},"end":{"line_number":611,"utf16_col":22}},"extent_utf16":{"start":{"line_number":611,"utf16_col":0},"end":{"line_number":622,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":137867,"ident_end":137872,"extent_start":137863,"extent_end":139175,"ident_utf16":{"start":{"line_number":613,"utf16_col":4},"end":{"line_number":613,"utf16_col":9}},"extent_utf16":{"start":{"line_number":613,"utf16_col":0},"end":{"line_number":618,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":139179,"ident_end":139184,"extent_start":139175,"extent_end":139812,"ident_utf16":{"start":{"line_number":618,"utf16_col":4},"end":{"line_number":618,"utf16_col":9}},"extent_utf16":{"start":{"line_number":618,"utf16_col":0},"end":{"line_number":622,"utf16_col":0}}},{"name":"1.26.0 - 2026-09-17","fully_qualified_name":"1.26.0 - 2026-09-17","kind":"section_2","ident_start":139815,"ident_end":139834,"extent_start":139812,"extent_end":141564,"ident_utf16":{"start":{"line_number":622,"utf16_col":3},"end":{"line_number":622,"utf16_col":22}},"extent_utf16":{"start":{"line_number":622,"utf16_col":0},"end":{"line_number":634,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":139840,"ident_end":139845,"extent_start":139836,"extent_end":140907,"ident_utf16":{"start":{"line_number":624,"utf16_col":4},"end":{"line_number":624,"utf16_col":9}},"extent_utf16":{"start":{"line_number":624,"utf16_col":0},"end":{"line_number":629,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":140911,"ident_end":140916,"extent_start":140907,"extent_end":141564,"ident_utf16":{"start":{"line_number":629,"utf16_col":4},"end":{"line_number":629,"utf16_col":9}},"extent_utf16":{"start":{"line_number":629,"utf16_col":0},"end":{"line_number":634,"utf16_col":0}}},{"name":"1.25.0 - 2026-09-17","fully_qualified_name":"1.25.0 - 2026-09-17","kind":"section_2","ident_start":141567,"ident_end":141586,"extent_start":141564,"extent_end":146301,"ident_utf16":{"start":{"line_number":634,"utf16_col":3},"end":{"line_number":634,"utf16_col":22}},"extent_utf16":{"start":{"line_number":634,"utf16_col":0},"end":{"line_number":649,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":141592,"ident_end":141597,"extent_start":141588,"extent_end":142605,"ident_utf16":{"start":{"line_number":636,"utf16_col":4},"end":{"line_number":636,"utf16_col":9}},"extent_utf16":{"start":{"line_number":636,"utf16_col":0},"end":{"line_number":640,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":142609,"ident_end":142614,"extent_start":142605,"extent_end":146301,"ident_utf16":{"start":{"line_number":640,"utf16_col":4},"end":{"line_number":640,"utf16_col":9}},"extent_utf16":{"start":{"line_number":640,"utf16_col":0},"end":{"line_number":649,"utf16_col":0}}},{"name":"1.24.0 - 2026-09-16","fully_qualified_name":"1.24.0 - 2026-09-16","kind":"section_2","ident_start":146304,"ident_end":146323,"extent_start":146301,"extent_end":149903,"ident_utf16":{"start":{"line_number":649,"utf16_col":3},"end":{"line_number":649,"utf16_col":22}},"extent_utf16":{"start":{"line_number":649,"utf16_col":0},"end":{"line_number":663,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":146329,"ident_end":146334,"extent_start":146325,"extent_end":149030,"ident_utf16":{"start":{"line_number":651,"utf16_col":4},"end":{"line_number":651,"utf16_col":9}},"extent_utf16":{"start":{"line_number":651,"utf16_col":0},"end":{"line_number":659,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":149034,"ident_end":149039,"extent_start":149030,"extent_end":149903,"ident_utf16":{"start":{"line_number":659,"utf16_col":4},"end":{"line_number":659,"utf16_col":9}},"extent_utf16":{"start":{"line_number":659,"utf16_col":0},"end":{"line_number":663,"utf16_col":0}}},{"name":"1.23.0 - 2026-09-16","fully_qualified_name":"1.23.0 - 2026-09-16","kind":"section_2","ident_start":149906,"ident_end":149925,"extent_start":149903,"extent_end":154021,"ident_utf16":{"start":{"line_number":663,"utf16_col":3},"end":{"line_number":663,"utf16_col":22}},"extent_utf16":{"start":{"line_number":663,"utf16_col":0},"end":{"line_number":679,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":149931,"ident_end":149936,"extent_start":149927,"extent_end":151134,"ident_utf16":{"start":{"line_number":665,"utf16_col":4},"end":{"line_number":665,"utf16_col":9}},"extent_utf16":{"start":{"line_number":665,"utf16_col":0},"end":{"line_number":669,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":151138,"ident_end":151145,"extent_start":151134,"extent_end":153521,"ident_utf16":{"start":{"line_number":669,"utf16_col":4},"end":{"line_number":669,"utf16_col":11}},"extent_utf16":{"start":{"line_number":669,"utf16_col":0},"end":{"line_number":675,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":153525,"ident_end":153530,"extent_start":153521,"extent_end":154021,"ident_utf16":{"start":{"line_number":675,"utf16_col":4},"end":{"line_number":675,"utf16_col":9}},"extent_utf16":{"start":{"line_number":675,"utf16_col":0},"end":{"line_number":679,"utf16_col":0}}},{"name":"1.22.1 - 2026-09-16","fully_qualified_name":"1.22.1 - 2026-09-16","kind":"section_2","ident_start":154024,"ident_end":154043,"extent_start":154021,"extent_end":158734,"ident_utf16":{"start":{"line_number":679,"utf16_col":3},"end":{"line_number":679,"utf16_col":22}},"extent_utf16":{"start":{"line_number":679,"utf16_col":0},"end":{"line_number":697,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":154049,"ident_end":154054,"extent_start":154045,"extent_end":157041,"ident_utf16":{"start":{"line_number":681,"utf16_col":4},"end":{"line_number":681,"utf16_col":9}},"extent_utf16":{"start":{"line_number":681,"utf16_col":0},"end":{"line_number":690,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":157045,"ident_end":157052,"extent_start":157041,"extent_end":158734,"ident_utf16":{"start":{"line_number":690,"utf16_col":4},"end":{"line_number":690,"utf16_col":11}},"extent_utf16":{"start":{"line_number":690,"utf16_col":0},"end":{"line_number":697,"utf16_col":0}}},{"name":"1.22.0 - 2026-09-14","fully_qualified_name":"1.22.0 - 2026-09-14","kind":"section_2","ident_start":158737,"ident_end":158756,"extent_start":158734,"extent_end":164010,"ident_utf16":{"start":{"line_number":697,"utf16_col":3},"end":{"line_number":697,"utf16_col":22}},"extent_utf16":{"start":{"line_number":697,"utf16_col":0},"end":{"line_number":721,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":158762,"ident_end":158767,"extent_start":158758,"extent_end":159979,"ident_utf16":{"start":{"line_number":699,"utf16_col":4},"end":{"line_number":699,"utf16_col":9}},"extent_utf16":{"start":{"line_number":699,"utf16_col":0},"end":{"line_number":705,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":159983,"ident_end":159990,"extent_start":159979,"extent_end":164010,"ident_utf16":{"start":{"line_number":705,"utf16_col":4},"end":{"line_number":705,"utf16_col":11}},"extent_utf16":{"start":{"line_number":705,"utf16_col":0},"end":{"line_number":721,"utf16_col":0}}},{"name":"1.17.2 - 2026-09-13","fully_qualified_name":"1.17.2 - 2026-09-13","kind":"section_2","ident_start":164013,"ident_end":164032,"extent_start":164010,"extent_end":164887,"ident_utf16":{"start":{"line_number":721,"utf16_col":3},"end":{"line_number":721,"utf16_col":22}},"extent_utf16":{"start":{"line_number":721,"utf16_col":0},"end":{"line_number":727,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":164038,"ident_end":164045,"extent_start":164034,"extent_end":164887,"ident_utf16":{"start":{"line_number":723,"utf16_col":4},"end":{"line_number":723,"utf16_col":11}},"extent_utf16":{"start":{"line_number":723,"utf16_col":0},"end":{"line_number":727,"utf16_col":0}}},{"name":"1.17.1 - 2026-09-13","fully_qualified_name":"1.17.1 - 2026-09-13","kind":"section_2","ident_start":164890,"ident_end":164909,"extent_start":164887,"extent_end":166218,"ident_utf16":{"start":{"line_number":727,"utf16_col":3},"end":{"line_number":727,"utf16_col":22}},"extent_utf16":{"start":{"line_number":727,"utf16_col":0},"end":{"line_number":739,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":164915,"ident_end":164922,"extent_start":164911,"extent_end":165708,"ident_utf16":{"start":{"line_number":729,"utf16_col":4},"end":{"line_number":729,"utf16_col":11}},"extent_utf16":{"start":{"line_number":729,"utf16_col":0},"end":{"line_number":734,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":165712,"ident_end":165717,"extent_start":165708,"extent_end":166218,"ident_utf16":{"start":{"line_number":734,"utf16_col":4},"end":{"line_number":734,"utf16_col":9}},"extent_utf16":{"start":{"line_number":734,"utf16_col":0},"end":{"line_number":739,"utf16_col":0}}},{"name":"1.17.0 - 2026-09-13","fully_qualified_name":"1.17.0 - 2026-09-13","kind":"section_2","ident_start":166221,"ident_end":166240,"extent_start":166218,"extent_end":167667,"ident_utf16":{"start":{"line_number":739,"utf16_col":3},"end":{"line_number":739,"utf16_col":22}},"extent_utf16":{"start":{"line_number":739,"utf16_col":0},"end":{"line_number":748,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":166246,"ident_end":166253,"extent_start":166242,"extent_end":167667,"ident_utf16":{"start":{"line_number":741,"utf16_col":4},"end":{"line_number":741,"utf16_col":11}},"extent_utf16":{"start":{"line_number":741,"utf16_col":0},"end":{"line_number":748,"utf16_col":0}}},{"name":"1.16.2 - 2026-09-12","fully_qualified_name":"1.16.2 - 2026-09-12","kind":"section_2","ident_start":167670,"ident_end":167689,"extent_start":167667,"extent_end":168722,"ident_utf16":{"start":{"line_number":748,"utf16_col":3},"end":{"line_number":748,"utf16_col":22}},"extent_utf16":{"start":{"line_number":748,"utf16_col":0},"end":{"line_number":754,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":167695,"ident_end":167700,"extent_start":167691,"extent_end":168722,"ident_utf16":{"start":{"line_number":750,"utf16_col":4},"end":{"line_number":750,"utf16_col":9}},"extent_utf16":{"start":{"line_number":750,"utf16_col":0},"end":{"line_number":754,"utf16_col":0}}},{"name":"1.16.1 - 2026-09-12","fully_qualified_name":"1.16.1 - 2026-09-12","kind":"section_2","ident_start":168725,"ident_end":168744,"extent_start":168722,"extent_end":169405,"ident_utf16":{"start":{"line_number":754,"utf16_col":3},"end":{"line_number":754,"utf16_col":22}},"extent_utf16":{"start":{"line_number":754,"utf16_col":0},"end":{"line_number":760,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":168750,"ident_end":168755,"extent_start":168746,"extent_end":169405,"ident_utf16":{"start":{"line_number":756,"utf16_col":4},"end":{"line_number":756,"utf16_col":9}},"extent_utf16":{"start":{"line_number":756,"utf16_col":0},"end":{"line_number":760,"utf16_col":0}}},{"name":"1.16.0 - 2026-09-12","fully_qualified_name":"1.16.0 - 2026-09-12","kind":"section_2","ident_start":169408,"ident_end":169427,"extent_start":169405,"extent_end":172066,"ident_utf16":{"start":{"line_number":760,"utf16_col":3},"end":{"line_number":760,"utf16_col":22}},"extent_utf16":{"start":{"line_number":760,"utf16_col":0},"end":{"line_number":772,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":169433,"ident_end":169438,"extent_start":169429,"extent_end":171803,"ident_utf16":{"start":{"line_number":762,"utf16_col":4},"end":{"line_number":762,"utf16_col":9}},"extent_utf16":{"start":{"line_number":762,"utf16_col":0},"end":{"line_number":768,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":171807,"ident_end":171814,"extent_start":171803,"extent_end":172066,"ident_utf16":{"start":{"line_number":768,"utf16_col":4},"end":{"line_number":768,"utf16_col":11}},"extent_utf16":{"start":{"line_number":768,"utf16_col":0},"end":{"line_number":772,"utf16_col":0}}},{"name":"1.13.1 - 2026-09-06","fully_qualified_name":"1.13.1 - 2026-09-06","kind":"section_2","ident_start":172069,"ident_end":172088,"extent_start":172066,"extent_end":172563,"ident_utf16":{"start":{"line_number":772,"utf16_col":3},"end":{"line_number":772,"utf16_col":22}},"extent_utf16":{"start":{"line_number":772,"utf16_col":0},"end":{"line_number":778,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":172094,"ident_end":172099,"extent_start":172090,"extent_end":172563,"ident_utf16":{"start":{"line_number":774,"utf16_col":4},"end":{"line_number":774,"utf16_col":9}},"extent_utf16":{"start":{"line_number":774,"utf16_col":0},"end":{"line_number":778,"utf16_col":0}}},{"name":"1.13.0 - 2026-09-06","fully_qualified_name":"1.13.0 - 2026-09-06","kind":"section_2","ident_start":172566,"ident_end":172585,"extent_start":172563,"extent_end":173901,"ident_utf16":{"start":{"line_number":778,"utf16_col":3},"end":{"line_number":778,"utf16_col":22}},"extent_utf16":{"start":{"line_number":778,"utf16_col":0},"end":{"line_number":788,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":172591,"ident_end":172598,"extent_start":172587,"extent_end":173564,"ident_utf16":{"start":{"line_number":780,"utf16_col":4},"end":{"line_number":780,"utf16_col":11}},"extent_utf16":{"start":{"line_number":780,"utf16_col":0},"end":{"line_number":784,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":173568,"ident_end":173573,"extent_start":173564,"extent_end":173901,"ident_utf16":{"start":{"line_number":784,"utf16_col":4},"end":{"line_number":784,"utf16_col":9}},"extent_utf16":{"start":{"line_number":784,"utf16_col":0},"end":{"line_number":788,"utf16_col":0}}},{"name":"1.12.1 - 2026-09-06","fully_qualified_name":"1.12.1 - 2026-09-06","kind":"section_2","ident_start":173904,"ident_end":173923,"extent_start":173901,"extent_end":174510,"ident_utf16":{"start":{"line_number":788,"utf16_col":3},"end":{"line_number":788,"utf16_col":22}},"extent_utf16":{"start":{"line_number":788,"utf16_col":0},"end":{"line_number":794,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":173929,"ident_end":173934,"extent_start":173925,"extent_end":174510,"ident_utf16":{"start":{"line_number":790,"utf16_col":4},"end":{"line_number":790,"utf16_col":9}},"extent_utf16":{"start":{"line_number":790,"utf16_col":0},"end":{"line_number":794,"utf16_col":0}}},{"name":"1.12.0 - 2026-09-06","fully_qualified_name":"1.12.0 - 2026-09-06","kind":"section_2","ident_start":174513,"ident_end":174532,"extent_start":174510,"extent_end":177766,"ident_utf16":{"start":{"line_number":794,"utf16_col":3},"end":{"line_number":794,"utf16_col":22}},"extent_utf16":{"start":{"line_number":794,"utf16_col":0},"end":{"line_number":814,"utf16_col":0}}},{"name":"Performance","fully_qualified_name":"Performance","kind":"section_3","ident_start":174538,"ident_end":174549,"extent_start":174534,"extent_end":177082,"ident_utf16":{"start":{"line_number":796,"utf16_col":4},"end":{"line_number":796,"utf16_col":15}},"extent_utf16":{"start":{"line_number":796,"utf16_col":0},"end":{"line_number":808,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":177086,"ident_end":177091,"extent_start":177082,"extent_end":177766,"ident_utf16":{"start":{"line_number":808,"utf16_col":4},"end":{"line_number":808,"utf16_col":9}},"extent_utf16":{"start":{"line_number":808,"utf16_col":0},"end":{"line_number":814,"utf16_col":0}}},{"name":"1.11.0 - 2026-08-31","fully_qualified_name":"1.11.0 - 2026-08-31","kind":"section_2","ident_start":177769,"ident_end":177788,"extent_start":177766,"extent_end":182893,"ident_utf16":{"start":{"line_number":814,"utf16_col":3},"end":{"line_number":814,"utf16_col":22}},"extent_utf16":{"start":{"line_number":814,"utf16_col":0},"end":{"line_number":837,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":177794,"ident_end":177799,"extent_start":177790,"extent_end":181308,"ident_utf16":{"start":{"line_number":816,"utf16_col":4},"end":{"line_number":816,"utf16_col":9}},"extent_utf16":{"start":{"line_number":816,"utf16_col":0},"end":{"line_number":829,"utf16_col":0}}},{"name":"Performance","fully_qualified_name":"Performance","kind":"section_3","ident_start":181312,"ident_end":181323,"extent_start":181308,"extent_end":182893,"ident_utf16":{"start":{"line_number":829,"utf16_col":4},"end":{"line_number":829,"utf16_col":15}},"extent_utf16":{"start":{"line_number":829,"utf16_col":0},"end":{"line_number":837,"utf16_col":0}}},{"name":"1.10.0 - 2026-08-30","fully_qualified_name":"1.10.0 - 2026-08-30","kind":"section_2","ident_start":182896,"ident_end":182915,"extent_start":182893,"extent_end":184649,"ident_utf16":{"start":{"line_number":837,"utf16_col":3},"end":{"line_number":837,"utf16_col":22}},"extent_utf16":{"start":{"line_number":837,"utf16_col":0},"end":{"line_number":849,"utf16_col":0}}},{"name":"Performance","fully_qualified_name":"Performance","kind":"section_3","ident_start":182921,"ident_end":182932,"extent_start":182917,"extent_end":184131,"ident_utf16":{"start":{"line_number":839,"utf16_col":4},"end":{"line_number":839,"utf16_col":15}},"extent_utf16":{"start":{"line_number":839,"utf16_col":0},"end":{"line_number":844,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":184135,"ident_end":184140,"extent_start":184131,"extent_end":184649,"ident_utf16":{"start":{"line_number":844,"utf16_col":4},"end":{"line_number":844,"utf16_col":9}},"extent_utf16":{"start":{"line_number":844,"utf16_col":0},"end":{"line_number":849,"utf16_col":0}}},{"name":"1.9.0 - 2026-08-28","fully_qualified_name":"1.9.0 - 2026-08-28","kind":"section_2","ident_start":184652,"ident_end":184670,"extent_start":184649,"extent_end":187259,"ident_utf16":{"start":{"line_number":849,"utf16_col":3},"end":{"line_number":849,"utf16_col":21}},"extent_utf16":{"start":{"line_number":849,"utf16_col":0},"end":{"line_number":860,"utf16_col":0}}},{"name":"Errors","fully_qualified_name":"Errors","kind":"section_3","ident_start":184676,"ident_end":184682,"extent_start":184672,"extent_end":187259,"ident_utf16":{"start":{"line_number":851,"utf16_col":4},"end":{"line_number":851,"utf16_col":10}},"extent_utf16":{"start":{"line_number":851,"utf16_col":0},"end":{"line_number":860,"utf16_col":0}}},{"name":"1.8.2 - 2026-08-28","fully_qualified_name":"1.8.2 - 2026-08-28","kind":"section_2","ident_start":187262,"ident_end":187280,"extent_start":187259,"extent_end":190099,"ident_utf16":{"start":{"line_number":860,"utf16_col":3},"end":{"line_number":860,"utf16_col":21}},"extent_utf16":{"start":{"line_number":860,"utf16_col":0},"end":{"line_number":874,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":187286,"ident_end":187291,"extent_start":187282,"extent_end":189337,"ident_utf16":{"start":{"line_number":862,"utf16_col":4},"end":{"line_number":862,"utf16_col":9}},"extent_utf16":{"start":{"line_number":862,"utf16_col":0},"end":{"line_number":870,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":189341,"ident_end":189348,"extent_start":189337,"extent_end":190099,"ident_utf16":{"start":{"line_number":870,"utf16_col":4},"end":{"line_number":870,"utf16_col":11}},"extent_utf16":{"start":{"line_number":870,"utf16_col":0},"end":{"line_number":874,"utf16_col":0}}},{"name":"1.8.1 - 2026-08-27","fully_qualified_name":"1.8.1 - 2026-08-27","kind":"section_2","ident_start":190102,"ident_end":190120,"extent_start":190099,"extent_end":192116,"ident_utf16":{"start":{"line_number":874,"utf16_col":3},"end":{"line_number":874,"utf16_col":21}},"extent_utf16":{"start":{"line_number":874,"utf16_col":0},"end":{"line_number":886,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":190126,"ident_end":190133,"extent_start":190122,"extent_end":192116,"ident_utf16":{"start":{"line_number":876,"utf16_col":4},"end":{"line_number":876,"utf16_col":11}},"extent_utf16":{"start":{"line_number":876,"utf16_col":0},"end":{"line_number":886,"utf16_col":0}}},{"name":"1.8.0 - 2026-08-27","fully_qualified_name":"1.8.0 - 2026-08-27","kind":"section_2","ident_start":192119,"ident_end":192137,"extent_start":192116,"extent_end":194306,"ident_utf16":{"start":{"line_number":886,"utf16_col":3},"end":{"line_number":886,"utf16_col":21}},"extent_utf16":{"start":{"line_number":886,"utf16_col":0},"end":{"line_number":900,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":192143,"ident_end":192148,"extent_start":192139,"extent_end":193769,"ident_utf16":{"start":{"line_number":888,"utf16_col":4},"end":{"line_number":888,"utf16_col":9}},"extent_utf16":{"start":{"line_number":888,"utf16_col":0},"end":{"line_number":896,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":193773,"ident_end":193778,"extent_start":193769,"extent_end":194306,"ident_utf16":{"start":{"line_number":896,"utf16_col":4},"end":{"line_number":896,"utf16_col":9}},"extent_utf16":{"start":{"line_number":896,"utf16_col":0},"end":{"line_number":900,"utf16_col":0}}},{"name":"1.7.4 - 2026-08-26","fully_qualified_name":"1.7.4 - 2026-08-26","kind":"section_2","ident_start":194309,"ident_end":194327,"extent_start":194306,"extent_end":196787,"ident_utf16":{"start":{"line_number":900,"utf16_col":3},"end":{"line_number":900,"utf16_col":21}},"extent_utf16":{"start":{"line_number":900,"utf16_col":0},"end":{"line_number":910,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":194333,"ident_end":194338,"extent_start":194329,"extent_end":195283,"ident_utf16":{"start":{"line_number":902,"utf16_col":4},"end":{"line_number":902,"utf16_col":9}},"extent_utf16":{"start":{"line_number":902,"utf16_col":0},"end":{"line_number":906,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":195287,"ident_end":195294,"extent_start":195283,"extent_end":196787,"ident_utf16":{"start":{"line_number":906,"utf16_col":4},"end":{"line_number":906,"utf16_col":11}},"extent_utf16":{"start":{"line_number":906,"utf16_col":0},"end":{"line_number":910,"utf16_col":0}}},{"name":"1.7.3 - 2026-08-26","fully_qualified_name":"1.7.3 - 2026-08-26","kind":"section_2","ident_start":196790,"ident_end":196808,"extent_start":196787,"extent_end":197341,"ident_utf16":{"start":{"line_number":910,"utf16_col":3},"end":{"line_number":910,"utf16_col":21}},"extent_utf16":{"start":{"line_number":910,"utf16_col":0},"end":{"line_number":916,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":196814,"ident_end":196819,"extent_start":196810,"extent_end":197341,"ident_utf16":{"start":{"line_number":912,"utf16_col":4},"end":{"line_number":912,"utf16_col":9}},"extent_utf16":{"start":{"line_number":912,"utf16_col":0},"end":{"line_number":916,"utf16_col":0}}},{"name":"1.7.2 - 2026-08-24","fully_qualified_name":"1.7.2 - 2026-08-24","kind":"section_2","ident_start":197344,"ident_end":197362,"extent_start":197341,"extent_end":201918,"ident_utf16":{"start":{"line_number":916,"utf16_col":3},"end":{"line_number":916,"utf16_col":21}},"extent_utf16":{"start":{"line_number":916,"utf16_col":0},"end":{"line_number":931,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":197368,"ident_end":197373,"extent_start":197364,"extent_end":199275,"ident_utf16":{"start":{"line_number":918,"utf16_col":4},"end":{"line_number":918,"utf16_col":9}},"extent_utf16":{"start":{"line_number":918,"utf16_col":0},"end":{"line_number":923,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":199279,"ident_end":199286,"extent_start":199275,"extent_end":201918,"ident_utf16":{"start":{"line_number":923,"utf16_col":4},"end":{"line_number":923,"utf16_col":11}},"extent_utf16":{"start":{"line_number":923,"utf16_col":0},"end":{"line_number":931,"utf16_col":0}}},{"name":"1.7.1 - 2026-08-23","fully_qualified_name":"1.7.1 - 2026-08-23","kind":"section_2","ident_start":201921,"ident_end":201939,"extent_start":201918,"extent_end":205158,"ident_utf16":{"start":{"line_number":931,"utf16_col":3},"end":{"line_number":931,"utf16_col":21}},"extent_utf16":{"start":{"line_number":931,"utf16_col":0},"end":{"line_number":945,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":201945,"ident_end":201950,"extent_start":201941,"extent_end":202577,"ident_utf16":{"start":{"line_number":933,"utf16_col":4},"end":{"line_number":933,"utf16_col":9}},"extent_utf16":{"start":{"line_number":933,"utf16_col":0},"end":{"line_number":937,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":202581,"ident_end":202588,"extent_start":202577,"extent_end":205158,"ident_utf16":{"start":{"line_number":937,"utf16_col":4},"end":{"line_number":937,"utf16_col":11}},"extent_utf16":{"start":{"line_number":937,"utf16_col":0},"end":{"line_number":945,"utf16_col":0}}},{"name":"1.7.0 - 2026-08-23","fully_qualified_name":"1.7.0 - 2026-08-23","kind":"section_2","ident_start":205161,"ident_end":205179,"extent_start":205158,"extent_end":212821,"ident_utf16":{"start":{"line_number":945,"utf16_col":3},"end":{"line_number":945,"utf16_col":21}},"extent_utf16":{"start":{"line_number":945,"utf16_col":0},"end":{"line_number":971,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":205185,"ident_end":205190,"extent_start":205181,"extent_end":208417,"ident_utf16":{"start":{"line_number":947,"utf16_col":4},"end":{"line_number":947,"utf16_col":9}},"extent_utf16":{"start":{"line_number":947,"utf16_col":0},"end":{"line_number":956,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":208421,"ident_end":208426,"extent_start":208417,"extent_end":209994,"ident_utf16":{"start":{"line_number":956,"utf16_col":4},"end":{"line_number":956,"utf16_col":9}},"extent_utf16":{"start":{"line_number":956,"utf16_col":0},"end":{"line_number":963,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":209998,"ident_end":210005,"extent_start":209994,"extent_end":212821,"ident_utf16":{"start":{"line_number":963,"utf16_col":4},"end":{"line_number":963,"utf16_col":11}},"extent_utf16":{"start":{"line_number":963,"utf16_col":0},"end":{"line_number":971,"utf16_col":0}}},{"name":"1.6.2 - 2026-08-19","fully_qualified_name":"1.6.2 - 2026-08-19","kind":"section_2","ident_start":212824,"ident_end":212842,"extent_start":212821,"extent_end":214208,"ident_utf16":{"start":{"line_number":971,"utf16_col":3},"end":{"line_number":971,"utf16_col":21}},"extent_utf16":{"start":{"line_number":971,"utf16_col":0},"end":{"line_number":980,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":212848,"ident_end":212853,"extent_start":212844,"extent_end":214208,"ident_utf16":{"start":{"line_number":973,"utf16_col":4},"end":{"line_number":973,"utf16_col":9}},"extent_utf16":{"start":{"line_number":973,"utf16_col":0},"end":{"line_number":980,"utf16_col":0}}},{"name":"1.6.1 - 2026-08-09","fully_qualified_name":"1.6.1 - 2026-08-09","kind":"section_2","ident_start":214211,"ident_end":214229,"extent_start":214208,"extent_end":215871,"ident_utf16":{"start":{"line_number":980,"utf16_col":3},"end":{"line_number":980,"utf16_col":21}},"extent_utf16":{"start":{"line_number":980,"utf16_col":0},"end":{"line_number":992,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":214235,"ident_end":214240,"extent_start":214231,"extent_end":215236,"ident_utf16":{"start":{"line_number":982,"utf16_col":4},"end":{"line_number":982,"utf16_col":9}},"extent_utf16":{"start":{"line_number":982,"utf16_col":0},"end":{"line_number":987,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":215240,"ident_end":215247,"extent_start":215236,"extent_end":215871,"ident_utf16":{"start":{"line_number":987,"utf16_col":4},"end":{"line_number":987,"utf16_col":11}},"extent_utf16":{"start":{"line_number":987,"utf16_col":0},"end":{"line_number":992,"utf16_col":0}}},{"name":"1.6.0 - 2026-08-08","fully_qualified_name":"1.6.0 - 2026-08-08","kind":"section_2","ident_start":215874,"ident_end":215892,"extent_start":215871,"extent_end":217601,"ident_utf16":{"start":{"line_number":992,"utf16_col":3},"end":{"line_number":992,"utf16_col":21}},"extent_utf16":{"start":{"line_number":992,"utf16_col":0},"end":{"line_number":1000,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":215898,"ident_end":215903,"extent_start":215894,"extent_end":217601,"ident_utf16":{"start":{"line_number":994,"utf16_col":4},"end":{"line_number":994,"utf16_col":9}},"extent_utf16":{"start":{"line_number":994,"utf16_col":0},"end":{"line_number":1000,"utf16_col":0}}},{"name":"1.5.1 - 2026-08-07","fully_qualified_name":"1.5.1 - 2026-08-07","kind":"section_2","ident_start":217604,"ident_end":217622,"extent_start":217601,"extent_end":219044,"ident_utf16":{"start":{"line_number":1000,"utf16_col":3},"end":{"line_number":1000,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1000,"utf16_col":0},"end":{"line_number":1011,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":217628,"ident_end":217633,"extent_start":217624,"extent_end":218647,"ident_utf16":{"start":{"line_number":1002,"utf16_col":4},"end":{"line_number":1002,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1002,"utf16_col":0},"end":{"line_number":1007,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":218651,"ident_end":218658,"extent_start":218647,"extent_end":219044,"ident_utf16":{"start":{"line_number":1007,"utf16_col":4},"end":{"line_number":1007,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1007,"utf16_col":0},"end":{"line_number":1011,"utf16_col":0}}},{"name":"1.5.0 - 2026-08-05","fully_qualified_name":"1.5.0 - 2026-08-05","kind":"section_2","ident_start":219047,"ident_end":219065,"extent_start":219044,"extent_end":220109,"ident_utf16":{"start":{"line_number":1011,"utf16_col":3},"end":{"line_number":1011,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1011,"utf16_col":0},"end":{"line_number":1018,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":219071,"ident_end":219076,"extent_start":219067,"extent_end":220109,"ident_utf16":{"start":{"line_number":1013,"utf16_col":4},"end":{"line_number":1013,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1013,"utf16_col":0},"end":{"line_number":1018,"utf16_col":0}}},{"name":"1.4.0 - 2026-08-04","fully_qualified_name":"1.4.0 - 2026-08-04","kind":"section_2","ident_start":220112,"ident_end":220130,"extent_start":220109,"extent_end":220848,"ident_utf16":{"start":{"line_number":1018,"utf16_col":3},"end":{"line_number":1018,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1018,"utf16_col":0},"end":{"line_number":1024,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":220136,"ident_end":220141,"extent_start":220132,"extent_end":220848,"ident_utf16":{"start":{"line_number":1020,"utf16_col":4},"end":{"line_number":1020,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1020,"utf16_col":0},"end":{"line_number":1024,"utf16_col":0}}},{"name":"1.3.0 - 2026-08-02","fully_qualified_name":"1.3.0 - 2026-08-02","kind":"section_2","ident_start":220851,"ident_end":220869,"extent_start":220848,"extent_end":222855,"ident_utf16":{"start":{"line_number":1024,"utf16_col":3},"end":{"line_number":1024,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1024,"utf16_col":0},"end":{"line_number":1037,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":220875,"ident_end":220880,"extent_start":220871,"extent_end":221465,"ident_utf16":{"start":{"line_number":1026,"utf16_col":4},"end":{"line_number":1026,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1026,"utf16_col":0},"end":{"line_number":1030,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":221469,"ident_end":221474,"extent_start":221465,"extent_end":222855,"ident_utf16":{"start":{"line_number":1030,"utf16_col":4},"end":{"line_number":1030,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1030,"utf16_col":0},"end":{"line_number":1037,"utf16_col":0}}},{"name":"1.2.2 - 2026-07-26","fully_qualified_name":"1.2.2 - 2026-07-26","kind":"section_2","ident_start":222858,"ident_end":222876,"extent_start":222855,"extent_end":223915,"ident_utf16":{"start":{"line_number":1037,"utf16_col":3},"end":{"line_number":1037,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1037,"utf16_col":0},"end":{"line_number":1045,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":222882,"ident_end":222887,"extent_start":222878,"extent_end":223915,"ident_utf16":{"start":{"line_number":1039,"utf16_col":4},"end":{"line_number":1039,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1039,"utf16_col":0},"end":{"line_number":1045,"utf16_col":0}}},{"name":"1.2.1 - 2026-07-18","fully_qualified_name":"1.2.1 - 2026-07-18","kind":"section_2","ident_start":223918,"ident_end":223936,"extent_start":223915,"extent_end":225064,"ident_utf16":{"start":{"line_number":1045,"utf16_col":3},"end":{"line_number":1045,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1045,"utf16_col":0},"end":{"line_number":1053,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":223942,"ident_end":223947,"extent_start":223938,"extent_end":225064,"ident_utf16":{"start":{"line_number":1047,"utf16_col":4},"end":{"line_number":1047,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1047,"utf16_col":0},"end":{"line_number":1053,"utf16_col":0}}},{"name":"1.2.0 - 2026-07-18","fully_qualified_name":"1.2.0 - 2026-07-18","kind":"section_2","ident_start":225067,"ident_end":225085,"extent_start":225064,"extent_end":226513,"ident_utf16":{"start":{"line_number":1053,"utf16_col":3},"end":{"line_number":1053,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1053,"utf16_col":0},"end":{"line_number":1063,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":225091,"ident_end":225096,"extent_start":225087,"extent_end":225879,"ident_utf16":{"start":{"line_number":1055,"utf16_col":4},"end":{"line_number":1055,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1055,"utf16_col":0},"end":{"line_number":1059,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":225883,"ident_end":225890,"extent_start":225879,"extent_end":226513,"ident_utf16":{"start":{"line_number":1059,"utf16_col":4},"end":{"line_number":1059,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1059,"utf16_col":0},"end":{"line_number":1063,"utf16_col":0}}},{"name":"1.1.0 - 2026-07-18","fully_qualified_name":"1.1.0 - 2026-07-18","kind":"section_2","ident_start":226516,"ident_end":226534,"extent_start":226513,"extent_end":228211,"ident_utf16":{"start":{"line_number":1063,"utf16_col":3},"end":{"line_number":1063,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1063,"utf16_col":0},"end":{"line_number":1077,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":226540,"ident_end":226545,"extent_start":226536,"extent_end":227022,"ident_utf16":{"start":{"line_number":1065,"utf16_col":4},"end":{"line_number":1065,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1065,"utf16_col":0},"end":{"line_number":1069,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":227026,"ident_end":227033,"extent_start":227022,"extent_end":227645,"ident_utf16":{"start":{"line_number":1069,"utf16_col":4},"end":{"line_number":1069,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1069,"utf16_col":0},"end":{"line_number":1073,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":227649,"ident_end":227654,"extent_start":227645,"extent_end":228211,"ident_utf16":{"start":{"line_number":1073,"utf16_col":4},"end":{"line_number":1073,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1073,"utf16_col":0},"end":{"line_number":1077,"utf16_col":0}}},{"name":"1.0.2 - 2026-07-17","fully_qualified_name":"1.0.2 - 2026-07-17","kind":"section_2","ident_start":228214,"ident_end":228232,"extent_start":228211,"extent_end":228997,"ident_utf16":{"start":{"line_number":1077,"utf16_col":3},"end":{"line_number":1077,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1077,"utf16_col":0},"end":{"line_number":1085,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":228238,"ident_end":228243,"extent_start":228234,"extent_end":228997,"ident_utf16":{"start":{"line_number":1079,"utf16_col":4},"end":{"line_number":1079,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1079,"utf16_col":0},"end":{"line_number":1085,"utf16_col":0}}},{"name":"1.0.1 - 2026-07-16","fully_qualified_name":"1.0.1 - 2026-07-16","kind":"section_2","ident_start":229000,"ident_end":229018,"extent_start":228997,"extent_end":229343,"ident_utf16":{"start":{"line_number":1085,"utf16_col":3},"end":{"line_number":1085,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1085,"utf16_col":0},"end":{"line_number":1091,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":229024,"ident_end":229029,"extent_start":229020,"extent_end":229343,"ident_utf16":{"start":{"line_number":1087,"utf16_col":4},"end":{"line_number":1087,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1087,"utf16_col":0},"end":{"line_number":1091,"utf16_col":0}}},{"name":"1.0.0 - 2026-07-15","fully_qualified_name":"1.0.0 - 2026-07-15","kind":"section_2","ident_start":229346,"ident_end":229364,"extent_start":229343,"extent_end":230124,"ident_utf16":{"start":{"line_number":1091,"utf16_col":3},"end":{"line_number":1091,"utf16_col":21}},"extent_utf16":{"start":{"line_number":1091,"utf16_col":0},"end":{"line_number":1108,"utf16_col":0}}},{"name":"Removed","fully_qualified_name":"Removed","kind":"section_3","ident_start":229578,"ident_end":229585,"extent_start":229574,"extent_end":229849,"ident_utf16":{"start":{"line_number":1095,"utf16_col":4},"end":{"line_number":1095,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1095,"utf16_col":0},"end":{"line_number":1099,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":229853,"ident_end":229860,"extent_start":229849,"extent_end":229941,"ident_utf16":{"start":{"line_number":1099,"utf16_col":4},"end":{"line_number":1099,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1099,"utf16_col":0},"end":{"line_number":1103,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":229945,"ident_end":229950,"extent_start":229941,"extent_end":230124,"ident_utf16":{"start":{"line_number":1103,"utf16_col":4},"end":{"line_number":1103,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1103,"utf16_col":0},"end":{"line_number":1108,"utf16_col":0}}},{"name":"0.22.0 - 2026-07-14","fully_qualified_name":"0.22.0 - 2026-07-14","kind":"section_2","ident_start":230127,"ident_end":230146,"extent_start":230124,"extent_end":230495,"ident_utf16":{"start":{"line_number":1108,"utf16_col":3},"end":{"line_number":1108,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1108,"utf16_col":0},"end":{"line_number":1114,"utf16_col":0}}},{"name":"Deprecated","fully_qualified_name":"Deprecated","kind":"section_3","ident_start":230152,"ident_end":230162,"extent_start":230148,"extent_end":230495,"ident_utf16":{"start":{"line_number":1110,"utf16_col":4},"end":{"line_number":1110,"utf16_col":14}},"extent_utf16":{"start":{"line_number":1110,"utf16_col":0},"end":{"line_number":1114,"utf16_col":0}}},{"name":"0.21.0 - 2026-06-01","fully_qualified_name":"0.21.0 - 2026-06-01","kind":"section_2","ident_start":230498,"ident_end":230517,"extent_start":230495,"extent_end":231256,"ident_utf16":{"start":{"line_number":1114,"utf16_col":3},"end":{"line_number":1114,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1114,"utf16_col":0},"end":{"line_number":1121,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":230523,"ident_end":230528,"extent_start":230519,"extent_end":231256,"ident_utf16":{"start":{"line_number":1116,"utf16_col":4},"end":{"line_number":1116,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1116,"utf16_col":0},"end":{"line_number":1121,"utf16_col":0}}},{"name":"0.20.1 - 2026-05-27","fully_qualified_name":"0.20.1 - 2026-05-27","kind":"section_2","ident_start":231259,"ident_end":231278,"extent_start":231256,"extent_end":231727,"ident_utf16":{"start":{"line_number":1121,"utf16_col":3},"end":{"line_number":1121,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1121,"utf16_col":0},"end":{"line_number":1127,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":231284,"ident_end":231289,"extent_start":231280,"extent_end":231727,"ident_utf16":{"start":{"line_number":1123,"utf16_col":4},"end":{"line_number":1123,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1123,"utf16_col":0},"end":{"line_number":1127,"utf16_col":0}}},{"name":"0.20.0 - 2026-05-27","fully_qualified_name":"0.20.0 - 2026-05-27","kind":"section_2","ident_start":231730,"ident_end":231749,"extent_start":231727,"extent_end":233237,"ident_utf16":{"start":{"line_number":1127,"utf16_col":3},"end":{"line_number":1127,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1127,"utf16_col":0},"end":{"line_number":1153,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":231755,"ident_end":231760,"extent_start":231751,"extent_end":232988,"ident_utf16":{"start":{"line_number":1129,"utf16_col":4},"end":{"line_number":1129,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1129,"utf16_col":0},"end":{"line_number":1149,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":232992,"ident_end":232999,"extent_start":232988,"extent_end":233237,"ident_utf16":{"start":{"line_number":1149,"utf16_col":4},"end":{"line_number":1149,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1149,"utf16_col":0},"end":{"line_number":1153,"utf16_col":0}}},{"name":"0.19.0 - 2026-05-27","fully_qualified_name":"0.19.0 - 2026-05-27","kind":"section_2","ident_start":233240,"ident_end":233259,"extent_start":233237,"extent_end":234892,"ident_utf16":{"start":{"line_number":1153,"utf16_col":3},"end":{"line_number":1153,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1153,"utf16_col":0},"end":{"line_number":1165,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":233265,"ident_end":233270,"extent_start":233261,"extent_end":233797,"ident_utf16":{"start":{"line_number":1155,"utf16_col":4},"end":{"line_number":1155,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1155,"utf16_col":0},"end":{"line_number":1160,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":233801,"ident_end":233808,"extent_start":233797,"extent_end":234892,"ident_utf16":{"start":{"line_number":1160,"utf16_col":4},"end":{"line_number":1160,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1160,"utf16_col":0},"end":{"line_number":1165,"utf16_col":0}}},{"name":"0.18.2 - 2026-05-26","fully_qualified_name":"0.18.2 - 2026-05-26","kind":"section_2","ident_start":234895,"ident_end":234914,"extent_start":234892,"extent_end":235540,"ident_utf16":{"start":{"line_number":1165,"utf16_col":3},"end":{"line_number":1165,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1165,"utf16_col":0},"end":{"line_number":1171,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":234920,"ident_end":234925,"extent_start":234916,"extent_end":235540,"ident_utf16":{"start":{"line_number":1167,"utf16_col":4},"end":{"line_number":1167,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1167,"utf16_col":0},"end":{"line_number":1171,"utf16_col":0}}},{"name":"0.18.1 - 2026-05-26","fully_qualified_name":"0.18.1 - 2026-05-26","kind":"section_2","ident_start":235543,"ident_end":235562,"extent_start":235540,"extent_end":235832,"ident_utf16":{"start":{"line_number":1171,"utf16_col":3},"end":{"line_number":1171,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1171,"utf16_col":0},"end":{"line_number":1177,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":235568,"ident_end":235573,"extent_start":235564,"extent_end":235832,"ident_utf16":{"start":{"line_number":1173,"utf16_col":4},"end":{"line_number":1173,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1173,"utf16_col":0},"end":{"line_number":1177,"utf16_col":0}}},{"name":"0.18.0 - 2026-05-25","fully_qualified_name":"0.18.0 - 2026-05-25","kind":"section_2","ident_start":235835,"ident_end":235854,"extent_start":235832,"extent_end":236488,"ident_utf16":{"start":{"line_number":1177,"utf16_col":3},"end":{"line_number":1177,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1177,"utf16_col":0},"end":{"line_number":1183,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":235860,"ident_end":235865,"extent_start":235856,"extent_end":236488,"ident_utf16":{"start":{"line_number":1179,"utf16_col":4},"end":{"line_number":1179,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1179,"utf16_col":0},"end":{"line_number":1183,"utf16_col":0}}},{"name":"0.17.5 - 2026-05-25","fully_qualified_name":"0.17.5 - 2026-05-25","kind":"section_2","ident_start":236491,"ident_end":236510,"extent_start":236488,"extent_end":236963,"ident_utf16":{"start":{"line_number":1183,"utf16_col":3},"end":{"line_number":1183,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1183,"utf16_col":0},"end":{"line_number":1189,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":236516,"ident_end":236521,"extent_start":236512,"extent_end":236963,"ident_utf16":{"start":{"line_number":1185,"utf16_col":4},"end":{"line_number":1185,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1185,"utf16_col":0},"end":{"line_number":1189,"utf16_col":0}}},{"name":"0.17.4 - 2026-05-25","fully_qualified_name":"0.17.4 - 2026-05-25","kind":"section_2","ident_start":236966,"ident_end":236985,"extent_start":236963,"extent_end":237878,"ident_utf16":{"start":{"line_number":1189,"utf16_col":3},"end":{"line_number":1189,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1189,"utf16_col":0},"end":{"line_number":1197,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":236991,"ident_end":236996,"extent_start":236987,"extent_end":237878,"ident_utf16":{"start":{"line_number":1191,"utf16_col":4},"end":{"line_number":1191,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1191,"utf16_col":0},"end":{"line_number":1197,"utf16_col":0}}},{"name":"0.17.3 - 2026-05-25","fully_qualified_name":"0.17.3 - 2026-05-25","kind":"section_2","ident_start":237881,"ident_end":237900,"extent_start":237878,"extent_end":238448,"ident_utf16":{"start":{"line_number":1197,"utf16_col":3},"end":{"line_number":1197,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1197,"utf16_col":0},"end":{"line_number":1203,"utf16_col":0}}},{"name":"Security","fully_qualified_name":"Security","kind":"section_3","ident_start":237906,"ident_end":237914,"extent_start":237902,"extent_end":238448,"ident_utf16":{"start":{"line_number":1199,"utf16_col":4},"end":{"line_number":1199,"utf16_col":12}},"extent_utf16":{"start":{"line_number":1199,"utf16_col":0},"end":{"line_number":1203,"utf16_col":0}}},{"name":"0.17.2 - 2026-05-24","fully_qualified_name":"0.17.2 - 2026-05-24","kind":"section_2","ident_start":238451,"ident_end":238470,"extent_start":238448,"extent_end":238832,"ident_utf16":{"start":{"line_number":1203,"utf16_col":3},"end":{"line_number":1203,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1203,"utf16_col":0},"end":{"line_number":1209,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":238476,"ident_end":238481,"extent_start":238472,"extent_end":238832,"ident_utf16":{"start":{"line_number":1205,"utf16_col":4},"end":{"line_number":1205,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1205,"utf16_col":0},"end":{"line_number":1209,"utf16_col":0}}},{"name":"0.17.1 - 2026-05-24","fully_qualified_name":"0.17.1 - 2026-05-24","kind":"section_2","ident_start":238835,"ident_end":238854,"extent_start":238832,"extent_end":239166,"ident_utf16":{"start":{"line_number":1209,"utf16_col":3},"end":{"line_number":1209,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1209,"utf16_col":0},"end":{"line_number":1215,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":238860,"ident_end":238865,"extent_start":238856,"extent_end":239166,"ident_utf16":{"start":{"line_number":1211,"utf16_col":4},"end":{"line_number":1211,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1211,"utf16_col":0},"end":{"line_number":1215,"utf16_col":0}}},{"name":"0.17.0 - 2026-05-23","fully_qualified_name":"0.17.0 - 2026-05-23","kind":"section_2","ident_start":239169,"ident_end":239188,"extent_start":239166,"extent_end":240109,"ident_utf16":{"start":{"line_number":1215,"utf16_col":3},"end":{"line_number":1215,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1215,"utf16_col":0},"end":{"line_number":1225,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":239194,"ident_end":239199,"extent_start":239190,"extent_end":239741,"ident_utf16":{"start":{"line_number":1217,"utf16_col":4},"end":{"line_number":1217,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1217,"utf16_col":0},"end":{"line_number":1221,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":239745,"ident_end":239750,"extent_start":239741,"extent_end":240109,"ident_utf16":{"start":{"line_number":1221,"utf16_col":4},"end":{"line_number":1221,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1221,"utf16_col":0},"end":{"line_number":1225,"utf16_col":0}}},{"name":"0.16.0 - 2026-05-23","fully_qualified_name":"0.16.0 - 2026-05-23","kind":"section_2","ident_start":240112,"ident_end":240131,"extent_start":240109,"extent_end":241050,"ident_utf16":{"start":{"line_number":1225,"utf16_col":3},"end":{"line_number":1225,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1225,"utf16_col":0},"end":{"line_number":1238,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":240137,"ident_end":240142,"extent_start":240133,"extent_end":240699,"ident_utf16":{"start":{"line_number":1227,"utf16_col":4},"end":{"line_number":1227,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1227,"utf16_col":0},"end":{"line_number":1232,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":240703,"ident_end":240708,"extent_start":240699,"extent_end":241050,"ident_utf16":{"start":{"line_number":1232,"utf16_col":4},"end":{"line_number":1232,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1232,"utf16_col":0},"end":{"line_number":1238,"utf16_col":0}}},{"name":"0.15.1 - 2026-05-23","fully_qualified_name":"0.15.1 - 2026-05-23","kind":"section_2","ident_start":241053,"ident_end":241072,"extent_start":241050,"extent_end":241596,"ident_utf16":{"start":{"line_number":1238,"utf16_col":3},"end":{"line_number":1238,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1238,"utf16_col":0},"end":{"line_number":1245,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":241078,"ident_end":241083,"extent_start":241074,"extent_end":241596,"ident_utf16":{"start":{"line_number":1240,"utf16_col":4},"end":{"line_number":1240,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1240,"utf16_col":0},"end":{"line_number":1245,"utf16_col":0}}},{"name":"0.15.0 - 2026-05-18","fully_qualified_name":"0.15.0 - 2026-05-18","kind":"section_2","ident_start":241599,"ident_end":241618,"extent_start":241596,"extent_end":245396,"ident_utf16":{"start":{"line_number":1245,"utf16_col":3},"end":{"line_number":1245,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1245,"utf16_col":0},"end":{"line_number":1272,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":241624,"ident_end":241629,"extent_start":241620,"extent_end":244466,"ident_utf16":{"start":{"line_number":1247,"utf16_col":4},"end":{"line_number":1247,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1247,"utf16_col":0},"end":{"line_number":1261,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":244470,"ident_end":244477,"extent_start":244466,"extent_end":244772,"ident_utf16":{"start":{"line_number":1261,"utf16_col":4},"end":{"line_number":1261,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1261,"utf16_col":0},"end":{"line_number":1266,"utf16_col":0}}},{"name":"Notes","fully_qualified_name":"Notes","kind":"section_3","ident_start":244776,"ident_end":244781,"extent_start":244772,"extent_end":245396,"ident_utf16":{"start":{"line_number":1266,"utf16_col":4},"end":{"line_number":1266,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1266,"utf16_col":0},"end":{"line_number":1272,"utf16_col":0}}},{"name":"0.14.0 - 2026-05-16","fully_qualified_name":"0.14.0 - 2026-05-16","kind":"section_2","ident_start":245399,"ident_end":245418,"extent_start":245396,"extent_end":246283,"ident_utf16":{"start":{"line_number":1272,"utf16_col":3},"end":{"line_number":1272,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1272,"utf16_col":0},"end":{"line_number":1287,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":245424,"ident_end":245429,"extent_start":245420,"extent_end":245830,"ident_utf16":{"start":{"line_number":1274,"utf16_col":4},"end":{"line_number":1274,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1274,"utf16_col":0},"end":{"line_number":1279,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":245834,"ident_end":245841,"extent_start":245830,"extent_end":246148,"ident_utf16":{"start":{"line_number":1279,"utf16_col":4},"end":{"line_number":1279,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1279,"utf16_col":0},"end":{"line_number":1283,"utf16_col":0}}},{"name":"Notes","fully_qualified_name":"Notes","kind":"section_3","ident_start":246152,"ident_end":246157,"extent_start":246148,"extent_end":246283,"ident_utf16":{"start":{"line_number":1283,"utf16_col":4},"end":{"line_number":1283,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1283,"utf16_col":0},"end":{"line_number":1287,"utf16_col":0}}},{"name":"0.13.4 — 2026-05-14","fully_qualified_name":"0.13.4 — 2026-05-14","kind":"section_2","ident_start":246286,"ident_end":246307,"extent_start":246283,"extent_end":247962,"ident_utf16":{"start":{"line_number":1287,"utf16_col":3},"end":{"line_number":1287,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1287,"utf16_col":0},"end":{"line_number":1302,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":246313,"ident_end":246318,"extent_start":246309,"extent_end":247300,"ident_utf16":{"start":{"line_number":1289,"utf16_col":4},"end":{"line_number":1289,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1289,"utf16_col":0},"end":{"line_number":1294,"utf16_col":0}}},{"name":"Removed","fully_qualified_name":"Removed","kind":"section_3","ident_start":247304,"ident_end":247311,"extent_start":247300,"extent_end":247635,"ident_utf16":{"start":{"line_number":1294,"utf16_col":4},"end":{"line_number":1294,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1294,"utf16_col":0},"end":{"line_number":1298,"utf16_col":0}}},{"name":"Changed","fully_qualified_name":"Changed","kind":"section_3","ident_start":247639,"ident_end":247646,"extent_start":247635,"extent_end":247962,"ident_utf16":{"start":{"line_number":1298,"utf16_col":4},"end":{"line_number":1298,"utf16_col":11}},"extent_utf16":{"start":{"line_number":1298,"utf16_col":0},"end":{"line_number":1302,"utf16_col":0}}},{"name":"0.13.3 — 2026-05-13","fully_qualified_name":"0.13.3 — 2026-05-13","kind":"section_2","ident_start":247965,"ident_end":247986,"extent_start":247962,"extent_end":248607,"ident_utf16":{"start":{"line_number":1302,"utf16_col":3},"end":{"line_number":1302,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1302,"utf16_col":0},"end":{"line_number":1308,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":247992,"ident_end":247997,"extent_start":247988,"extent_end":248607,"ident_utf16":{"start":{"line_number":1304,"utf16_col":4},"end":{"line_number":1304,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1304,"utf16_col":0},"end":{"line_number":1308,"utf16_col":0}}},{"name":"0.13.2 — 2026-05-09","fully_qualified_name":"0.13.2 — 2026-05-09","kind":"section_2","ident_start":248610,"ident_end":248631,"extent_start":248607,"extent_end":249409,"ident_utf16":{"start":{"line_number":1308,"utf16_col":3},"end":{"line_number":1308,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1308,"utf16_col":0},"end":{"line_number":1314,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":248637,"ident_end":248642,"extent_start":248633,"extent_end":249409,"ident_utf16":{"start":{"line_number":1310,"utf16_col":4},"end":{"line_number":1310,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1310,"utf16_col":0},"end":{"line_number":1314,"utf16_col":0}}},{"name":"0.13.1 — 2026-05-09","fully_qualified_name":"0.13.1 — 2026-05-09","kind":"section_2","ident_start":249412,"ident_end":249433,"extent_start":249409,"extent_end":250224,"ident_utf16":{"start":{"line_number":1314,"utf16_col":3},"end":{"line_number":1314,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1314,"utf16_col":0},"end":{"line_number":1321,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":249439,"ident_end":249444,"extent_start":249435,"extent_end":250224,"ident_utf16":{"start":{"line_number":1316,"utf16_col":4},"end":{"line_number":1316,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1316,"utf16_col":0},"end":{"line_number":1321,"utf16_col":0}}},{"name":"0.13.0 — 2026-05-09","fully_qualified_name":"0.13.0 — 2026-05-09","kind":"section_2","ident_start":250227,"ident_end":250248,"extent_start":250224,"extent_end":252238,"ident_utf16":{"start":{"line_number":1321,"utf16_col":3},"end":{"line_number":1321,"utf16_col":22}},"extent_utf16":{"start":{"line_number":1321,"utf16_col":0},"end":{"line_number":1340,"utf16_col":0}}},{"name":"Added","fully_qualified_name":"Added","kind":"section_3","ident_start":250254,"ident_end":250259,"extent_start":250250,"extent_end":251482,"ident_utf16":{"start":{"line_number":1323,"utf16_col":4},"end":{"line_number":1323,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1323,"utf16_col":0},"end":{"line_number":1332,"utf16_col":0}}},{"name":"Fixed","fully_qualified_name":"Fixed","kind":"section_3","ident_start":251486,"ident_end":251491,"extent_start":251482,"extent_end":251958,"ident_utf16":{"start":{"line_number":1332,"utf16_col":4},"end":{"line_number":1332,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1332,"utf16_col":0},"end":{"line_number":1336,"utf16_col":0}}},{"name":"Notes","fully_qualified_name":"Notes","kind":"section_3","ident_start":251962,"ident_end":251967,"extent_start":251958,"extent_end":252238,"ident_utf16":{"start":{"line_number":1336,"utf16_col":4},"end":{"line_number":1336,"utf16_col":9}},"extent_utf16":{"start":{"line_number":1336,"utf16_col":0},"end":{"line_number":1340,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":1188841276,"defaultBranch":"master","name":"ata-validator","ownerLogin":"ata-core","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-03-22T16:53:00.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/269996868?v=4","public":true,"private":false,"isOrgOwned":true,"isArchived":false},"currentUser":null,"uploadToken":"1FMrK19Jc5ymaIyHhX19Pa4jlLjpmvfQw2vsHEqL2kolVAT_nQdqyYyKgSGRFyHHed5ISzCkj8QHL7Rz5xPaTw","allShortcutsEnabled":false,"treeExpanded":true,"path":"CHANGELOG.md","symbolsExpanded":false,"refInfo":{"name":"master","listCacheKey":"v0:1791570919.0","canEdit":false,"currentOid":"4284b4a735f650d89b5318e1c35f298ae1a87eaf"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"":{"items":[{"name":".codex","path":".codex","contentType":"directory"},{"name":".github","path":".github","contentType":"directory"},{"name":"assets","path":"assets","contentType":"directory"},{"name":"benchmark","path":"benchmark","contentType":"directory"},{"name":"bin","path":"bin","contentType":"directory"},{"name":"binding","path":"binding","contentType":"directory"},{"name":"bowtie","path":"bowtie","contentType":"directory"},{"name":"deps","path":"deps","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"fuzz","path":"fuzz","contentType":"directory"},{"name":"include","path":"include","contentType":"directory"},{"name":"jsr","path":"jsr","contentType":"directory"},{"name":"lib","path":"lib","contentType":"directory"},{"name":"scripts","path":"scripts","contentType":"directory"},{"name":"singleheader","path":"singleheader","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".gitmodules","path":".gitmodules","contentType":"file"},{"name":".npmignore","path":".npmignore","contentType":"file"},{"name":"AGENTS.md","path":"AGENTS.md","contentType":"file"},{"name":"ARCHITECTURE.md","path":"ARCHITECTURE.md","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CLAUDE.md","path":"CLAUDE.md","contentType":"file"},{"name":"CMakeLists.txt","path":"CMakeLists.txt","contentType":"file"},{"name":"CODE_OF_CONDUCT.md","path":"CODE_OF_CONDUCT.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"GOVERNANCE.md","path":"GOVERNANCE.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"aot.d.ts","path":"aot.d.ts","contentType":"file"},{"name":"aot.js","path":"aot.js","contentType":"file"},{"name":"aot.mjs","path":"aot.mjs","contentType":"file"},{"name":"build.d.ts","path":"build.d.ts","contentType":"file"},{"name":"build.js","path":"build.js","contentType":"file"},{"name":"build.mjs","path":"build.mjs","contentType":"file"},{"name":"compat.d.ts","path":"compat.d.ts","contentType":"file"},{"name":"compat.js","path":"compat.js","contentType":"file"},{"name":"compat.mjs","path":"compat.mjs","contentType":"file"},{"name":"compiled-verdict.d.ts","path":"compiled-verdict.d.ts","contentType":"file"},{"name":"compiled-verdict.js","path":"compiled-verdict.js","contentType":"file"},{"name":"compiled-verdict.mjs","path":"compiled-verdict.mjs","contentType":"file"},{"name":"compiled.d.ts","path":"compiled.d.ts","contentType":"file"},{"name":"compiled.js","path":"compiled.js","contentType":"file"},{"name":"compiled.mjs","path":"compiled.mjs","contentType":"file"},{"name":"index.browser.mjs","path":"index.browser.mjs","contentType":"file"},{"name":"index.d.ts","path":"index.d.ts","contentType":"file"},{"name":"index.js","path":"index.js","contentType":"file"},{"name":"index.mjs","path":"index.mjs","contentType":"file"},{"name":"index.node.mjs","path":"index.node.mjs","contentType":"file"},{"name":"lite.d.ts","path":"lite.d.ts","contentType":"file"},{"name":"lite.js","path":"lite.js","contentType":"file"},{"name":"lite.mjs","path":"lite.mjs","contentType":"file"},{"name":"package-lock.json","path":"package-lock.json","contentType":"file"},{"name":"package.json","path":"package.json","contentType":"file"},{"name":"t.d.ts","path":"t.d.ts","contentType":"file"},{"name":"t.js","path":"t.js","contentType":"file"},{"name":"t.mjs","path":"t.mjs","contentType":"file"},{"name":"test.js","path":"test.js","contentType":"file"}],"totalCount":62}},"fileTreeProcessingTime":32.014860999999996,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"master","listCacheKey":"v0:1791570919.0","canEdit":false,"refType":"branch","currentOid":"4284b4a735f650d89b5318e1c35f298ae1a87eaf","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"CHANGELOG.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/ata-core/ata-validator/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"CHANGELOG.md","displayUrl":"https://github.com/ata-core/ata-validator/blob/master/CHANGELOG.md?raw=true","headerInfo":{"blobSize":"246 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"c60c763","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fata-core%2Fata-validator%2Fblob%2Fmaster%2FCHANGELOG.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"1340","truncatedSloc":"829"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/ata-core/ata-validator/blob/master/CHANGELOG.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/ata-core/ata-validator/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/ata-core/ata-validator/raw/refs/heads/master/CHANGELOG.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# Changelog","","All notable changes to ata-validator are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/), and this project adheres to semantic versioning.","","## Unreleased","","### Changed","- More patterns run on the platform RegExp instead of the linear-time engine. The rule in `lib/regex-linear.js` now also accepts a pattern that is deterministic around its loops, on the Glushkov construction: the characters that can follow a position inside a loop are pairwise disjoint, a position reaches a follower by one route only (so `(a+)+` and `(\\w+\\s?)*` stay out), no loop body matches the empty string, and the pattern is anchored. That takes in dotted identifiers, `^[^/]+/[^/]+$`, version numbers and `(ab)*`. Over SchemaStore's 1277 patterns 90 more go native, with no answer difference on 18000 random inputs and no slow run on 20000-character adversarial probes; the engine is 3.5 to 5x the RegExp per character, so a schema whose checks are mostly patterns moves accordingly (SchemaStore's elm from 289 to 89 ns a document and mimetypes from 176 to 65, against the default validator's 161 and 82).","- An `enum` test on a property binds the value once instead of reading the property for every member: a 32-member enum on a required property read it 32 times. On an array of 32 items in six shapes, 2694 to 1507 ns; SchemaStore's devinit 4650 to 2454.","- The linear-time engine steps the last character outside its loop, so the loop selects no table per character; a few percent on long strings, no change in answers.","- The generated defaults pass reads a key before it asks `Object.hasOwn` about it, and asks only when the read gives undefined, for plain objects and keys `Object.prototype` does not have. On a configuration schema with 82 defaults (SchemaStore's rustfmt), `validate()` on a document that already carried every key cost 827 ns and now costs 52; with `useDefaults: false` it is 12. What is written is unchanged: a new test pins the generated pass to the closure pass on documents with inherited names, null prototypes, explicit `undefined` and `__proto__` keys. Found by timing SchemaStore's 431 sample-bearing schemas against the default validator, where ata lost on the schemas with many defaults and nowhere else for this reason.","","### Fixed","- A standalone module built without `--one-pass` reported every error with an extra `_o` field, the ordinal the runtime sorts errors by, which a module never reads: the collector is now compiled without it for modules and bundles, so an error carries the documented keys only (`tests/test_aot_error_shape.js`). Present since the ordinal was introduced; the one-pass module and the runtime were not affected.","","## 1.48.0 - 2026-10-09","","Large schemas compile to code V8 can optimize, which makes a 167 KB configuration schema three to seven times faster to validate; the lite entry is published at last; the text scanner stops at the first member it can refuse; the package is run under Deno in CI and published on JSR; and `parseJSON` works with the native engine loaded.","","Measured against 1.47.0 on an Apple M4 Pro, Node 25.2.1, pure JS: cold start 7.2 to 6.9 ms and `require` alone 4.8 to 4.5 ms; a served request, hot validation, compile time, heap per validator and every `ata build` module unchanged, the modules byte for byte. A 69 KB request body whose first item is wrong is refused from the text in 26 µs where 1.47.0 took 112.","","### Added","- `ata-validator/lite` is published: the `Validator` and the one-shot functions on the interpreted engine alone, without the code generator, for pages and workers where the size of what ships matters. It existed in the repository with its parity test since 1.19.0 and was never in the tarball or the `exports` map, so nothing could import it. In a Hono app bundled for Workers the runtime entry is 136 KB gzipped and the lite entry 58 KB, with the same verdicts and errors.","- A JSR package, `@ata/validator`, from `jsr/`: it re-exports the npm package of the same version, so `jsr:@ata/validator` and `npm:ata-validator` are one engine. Published by `.github/workflows/jsr.yml` after the npm version is visible; `tests/test_version_sync.js` holds its version and specifiers to `package.json`.","- CI runs the package under Deno on every change: a smoke test with dynamic code refused the way Deno Deploy refuses it (`tests/deno_smoke.ts`), the suite with `eval` and `new Function` blocked, and the official suite in three dialects.","","### Fixed","- `parseJSON` threw `native.parseJSON is not a function` whenever the native engine was loaded: the addon has not carried that function since the per-platform packages, and the pure-JS fallback hid it. It parses with JSON.parse, and a Buffer is decoded first (`tests/test_parse_json.js`).","","### Changed","- `validateJSON()` resolves the position map on the first read of an error's `dataFrame` or `anchor`, not when the error list is read. The map is a walk of the document that a caller reading messages and paths never needs; on a 60 KB document with 137 errors reading the list went from 907 to 505 µs, and reading every frame costs what it did. The frames are the same shape: present when the text has the value, absent otherwise, enumerable and serialized, and assignable.","- Large property subschemas compile to functions of their own instead of inline code, in all three generators (the verdict, the error collector and the one-pass function). V8 does not optimize a function past its bytecode budget, and a configuration schema of a few hundred properties compiled to one function of a megabyte or more that ran in the interpreter for its whole life. Measured on a 167 KB schema of 140 sections with a 60 KB document, fresh `JSON.parse` on every call: the runtime verdict 522 to 154 µs (the parse alone is 115), a rejected document with its errors read 335 to 71 µs; a standalone module's `validate()` on the rejected document 891 to 146 µs, its `validateJSON()` with positions 1249 to 494, and with `--one-pass` 613 to 402. The threshold is on the schema's own size, so small schemas compile exactly as before; a property of fewer than 700 bytes of schema stays inline unless the function around it already holds 24 KB of code.","- The JSON text scanner behind `isValidJSON()` and `validateJSON()` ends the scan when a member fails and its key cannot repeat later in the object: two native searches over the rest of the text, for the key as written and for any backslash, which is the only way to spell it differently, replace the full pass the duplicate-key rule required. A 69 KB request body whose first item is wrong is refused in 26 µs where it took 112, against 149 for JSON.parse alone; a wrong top-level shape stays at 1.5 µs. Verdicts are unchanged: a key that does repeat, plain or escaped, still goes to the parser (`tests/test_scanner_early_exit.js`, and the scanner differential's 413,178 comparisons agree).","- `package.json` declares `\"type\": \"commonjs\"`, which it already was. Deno reads a `.js` file as ESM without it; Node's default is unchanged.","","## 1.47.0 - 2026-10-08","","Standalone modules can carry the runtime's one-pass error function, the package starts faster and holds less per validator, the generators decline a subschema they produced no code for, and the supply chain is tightened: a tracked lockfile, pinned tools, attested release tarballs, and one place each for dynamic code and environment reads.","","Measured against 1.46.1 on an Apple M4 Pro, Node 25.2.1, pure JS:","- a Hono route on Bun to its first served request through the runtime API, from `benchmark/bundle`: 9.1 to 7.6 ms, against 3.5 for the same app with no validation;","- cold start (require, compile, first validate): 8.5 to 7.0 ms; `require` alone 6.4 to 4.6 ms, since the error generators are read on the first error compile and the format and regex sources on the first schema that needs them;","- heap retained per validator that has validated, two thousand validators of a ten-key schema: 9.5 to 8.3 KB;","- a served request, hot validation, the suite harness and the official suite: unchanged within noise;","- modules from `ata build` without `--one-pass`: byte for byte the same; with it, on a 175 KB schema and a 15 KB document, a rejected document in 39 µs where the older collector took 89.","","Costs: the browser runtime bundle 125.2 to 128.0 KB gzipped (the one-pass emitter and the generator check); `ata build` over twenty schemas 94 to 99 ms, since a module's emission compiles the verdict in full where the validator kept only the light form.","","### Fixed","","- The code generators decline a subschema that constrains something and produced no code for it, instead of reading \"no lines\" as \"holds\". Every place that turns a subschema into lines (a nested verdict, a branch verdict, the inline annotation verdicts of run-time `unevaluatedProperties` and `unevaluatedItems`, the three entry points) now checks that a schema with a validating keyword produced at least one line; a schema that trips it runs on the interpreted engine. This is the shape of the silent acceptances the generator has produced through `$ref` handling, and of the simplest form of the 1.46.0 one (with that fix removed, the check alone keeps `{ anyOf: [{}, { additionalProperties: { const: true } }] }` rejecting). It cannot see a check dropped from a subschema that produced other lines; the differential test below is what catches those. `format` and an already-known `type` are not counted, and unknown keywords are not either. No schema of the official suite, the SchemaStore corpus or the differential tests changed engine.","- The unevaluated differential test now compares `validate()` after enough reads that it is the one-pass function, runs every third schema through a standalone module (with and without the one-pass error path), and generates branches that are empty or carry `additionalProperties` at their root. With the 1.46.0 fix removed and the generator check disabled, it reports the acceptance.","","### Changed","","- Every place the package turns generated source into a function goes through one module, `lib/compile-fn.js`, instead of calling `new Function` in seven files, and every environment variable the package honours is read through `lib/env.js`, which lists them. Nothing changes in what runs; a reader auditing what the package evaluates, or a supply-chain scanner reporting it, finds one site. Where dynamic code is blocked the fallback to the interpreted engine is as before (`tests/test_no_eval.js`).","- A test bundles the Node entry with esbuild and runs the bundle (`tests/test_node_bundle.js`): the native engine is found through seven optional packages of which at most one is installed on any machine, so the loader must require the platform package by a computed name, and a literal require of each, tried in this cycle, stopped the bundle of every app that imports the package.","- Supply chain: the package's own `package-lock.json` is tracked and CI, the prebuilds and the publish install with `npm ci`; the npm the publish job updates itself to is pinned; the Bowtie image is pinned by digest. A new workflow attaches to every GitHub release the packed tarball, a Sigstore build provenance attestation for it and a checksum file, so a tarball taken from a release verifies with `gh attestation verify`. On the repository, Dependabot alerts and security updates, secret scanning and push protection are on. `tests/test_version_sync.js` now also holds the lockfile to the package version, so a release bump that forgets `npm install --package-lock-only` fails the release check.","- A validator retains 8.3 KB of heap instead of 9.5 once it has validated (two thousand validators of a ten-key schema, each with its own schema, measured with `benchmark/bench_memory.cjs`). The compiled verdict function carried, for as long as it lived, the generated source and the factories that build the tiered forms from it, 2.2 of the 3.4 KB it retained; they are now compiled in full only when asked for, at the tier a validator reaches after its first calls or when a build emits it, from the schema again. A validator that gets there pays one more compile, a few hundred microseconds once; one that answers a handful of requests, or only verdicts, never does. Schemas with custom keywords compile in full at once, so a keyword's compile form still runs once per schema.","- The error generator and the one-pass generator moved out of `lib/js-compiler.js` into `lib/js-compiler-errors.js`, read on the first call that compiles a validator's errors. They were 45 percent of the generator's source, parsed by every process at require; a verdict-only process never reads them now, and one that reads errors parses them when it does. The two files share the generator's helpers through an internal object; nothing in the package's interface changes.","- The format checkers' source (`lib/formats-source.js`) and the linear regex engine (`lib/safe-regex.js`) are read on the first schema that needs them, a `format` or a `pattern`, instead of with the compiler. Requiring the package costs 10 percent less (6.25 to 5.61 ms, pure JS, medians of 25 interleaved cold processes); a first validation against a schema with a format or a pattern pays about 0.3 ms of that back once.","- Standalone modules can report errors with the runtime's one-pass function: `toStandaloneModule(schema, { onePass: true })` or `ata compile --one-pass`. The one-pass function is what `validate()` runs once a validator's errors have been read, one walk that checks and collects with a verdict per subtree, written into the module with its closure values as declarations. The older collector walked everything and built every path: on a 175 KB SchemaStore schema and a 15 KB document with two errors, the module's `validate()` on the rejected document takes 39 µs with the one-pass function where the older collector took 89 (a report from a config validator measured 2 to 2.7x against the default validator on 84 to 234 KB schemas and guessed at the position pass, which costs 11 of those). Not the default: the one-pass module is 1.3 to 1.7 times the older one, gzipped, since it carries a verdict per subtree and a counting copy per branch. Where the older collector declines a schema (`unevaluated*` next to a `$ref`), the one-pass function is taken without asking: 83 more schemas of the official suite get a module with real errors where they got the stub. The module's program is written without the counting copies the runtime uses to score oneOf and anyOf branches (a second copy of each branch's error body); when no branch holds, every branch's error function runs and the closest is picked from their errors, which measured the same on rejected documents and takes 5 to 12 percent off the module. Errors carry the same fields as before (code, keyword, instancePath, schemaPath, params, message, docUrl) and come in schema order, as the runtime's do. A module built with `--source` frames, or from a validator with a custom format, keeps the older collector.","","## 1.46.1 - 2026-10-06","","### Fixed","","- Once a validator's errors had been read, `validate()` accepted some documents the verdict and the interpreted engine rejected: a oneOf or anyOf branch under run-time `unevaluatedProperties` or `unevaluatedItems` that carried `additionalProperties` (a schema or `false`) or `items` at the root lost that check, so the branch read as holding for every object and the properties it evaluated were never reported as unevaluated. `{ anyOf: [{}, { additionalProperties: { const: true } }], unevaluatedProperties: false }` accepted `{ \"c\": null }` through `validate()` after three reads, and rejected it through `isValidObject()`. The verdict generator deferred a root-level check to the end of the function, where the subschema verdict written inside a block had nothing to flush it into. Since 1.46.0, through the one-pass function. `tests/test_nested_verdict_deferred_checks.js` holds it on every entry point.","","## 1.46.0 - 2026-10-06","","Reading the errors of a rejected document is what this release is about. Once a validator's errors have been read, `validate()` is one function that checks and collects in a single pass, and the parts of that pass that were slow are rewritten below: run-time `unevaluatedProperties` and `unevaluatedItems` as straight-line code, oneOf and anyOf branches scored with counting copies instead of run twice, error order kept beside the list instead of sorted afterwards, `$dynamicRef` schemas on generated code, `$ref` schemas on the one-pass function where they were handed back.","","Measured against 1.45.0 on an Apple M4 Pro, Node 25.2.1, pure JS. Twenty SchemaStore API schemas, each with an accepted body, a rejected body and a realistic rejected body (one wrong type deep inside), both builds in one process with the rounds alternating, medians of eleven, summed over the twenty:","- `validate()` on an accepted body: 37 percent less time; the verdict alone 39 percent less;","- a rejected body with every error read: 47 percent less; the realistic one 52 percent less, and its verdict 59 percent less.","","The official test suite harness, every error read, draft 2020-12: 70 to 49 µs per round; draft 7: 30 to 29. With the default rich errors: 160 to 142 on 2020-12, 78 to 81 on draft 7.","","Costs: cold start (require, compile, first validate) 8.0 to 8.4 ms; the browser runtime bundle 116.4 to 125.2 KB gzipped. Modules from `ata build` are byte for byte the same size, except for a schema with `$ref: \"#\"`, whose module now carries its error function instead of a stub. A served request's cost is unchanged within three percent.","","### Added","","- `ata migrate [dir]` reports what switching a project from ajv to `ata-validator/compat` would change: the imports to rewrite, the `addFormats()` calls that go, and the sites compat cannot take (`$data`, a keyword defined through `code`, the `ajv-errors`, `ajv-keywords`, `ajv-i18n` and `ajv-merge-patch` plugins), each with its line. `--write` applies the import rewrite and removes standalone `addFormats()` statements, and leaves every flagged site untouched. The exit code is 1 while something is flagged, so the command can run as a readiness check in CI. Sources are read through a masker that skips comments and string contents, so a mention of ajv in a comment is not an import.","","### Changed","","- Schemas that use `$dynamicRef` run on generated code. The code generators never read the keyword: such a schema is unrolled by dynamic scope first, one copy per schema node and scope, and every reference in a copy becomes a plain local reference to the copy its scope selects (two scopes are the same when every dynamic anchor name resolves to the same resource in both). A reference reached through another document is unrolled the same way, so a schema that is only a `$ref` to a document using `$dynamicRef` compiles too. On the Draft 2020-12 suite, 142 of the 150 groups in the reference files (`dynamicRef`, `defs`, `ref`, `refRemote`, `anchor`, `unevaluatedProperties`, `unevaluatedItems`) run on generated code where 121 did; the one `$dynamicRef` group left is the one whose target is a boolean schema, which generated code declines for `$ref` as well. The JSON Schema v1 dialect, which drops bookending, keeps the interpreted engine for this keyword. On the official test suite with every error read, a Draft 2020-12 run takes 1.09 times less time with `richErrors: false` and 1.03 times less with the default errors; draft 7 is unchanged. `tests/test_dynamic_scopes.js` holds the unrolled schemas to the interpreted engine on 1456 documents.","  - Cost: validating a schema against the 2020-12 meta-schema (`{ \"$ref\": \"https://json-schema.org/draft/2020-12/schema\" }`) now generates code for the unrolled meta-schema at its first call, 22 ms where the interpreted engine alone took 16; validating with it afterwards takes the same time on either engine, about 2.3 µs for a small schema.","- The verdict for a node whose `unevaluatedProperties` is worked out at run time (what is evaluated depends on which branches pass) no longer decides the node's `anyOf` and `oneOf` twice. The pass that collects what the branches evaluate already decides each branch, and the verdict is now read from its counts; the keywords' own blocks run only for a value that is not an object, which that pass does not look at. Inside the pass, a `oneOf` stops at its second passing branch. On the suite's \"dynamic evaluation inside nested refs\" schema, `isValidObject()` over the valid documents takes 0.60 of the time it took, and over the invalid ones 1.16 times as long, since the collecting pass is heavier per branch than a plain verdict and now carries the rejection too. `validate()` with errors read is unchanged within noise on the official suite and on SchemaStore's sample documents. `tests/test_uneval_verdict_counts.js` holds the verdict to the interpreted engine on 189 values, non-objects included.","- A pattern with a finite repeat of a group, such as a SHA-256 fingerprint `^(?:[A-F0-9]{2}:){31}[A-F0-9]{2}$` or a dotted quad `^(?:\\\\d{1,3}\\\\.){3}\\\\d{1,3}$`, runs on the platform RegExp when the group holds no unbounded quantifier, where every grouped quantifier used to send the pattern to the linear-time engine. Of SchemaStore's 1199 patterns, 903 now run on the platform RegExp, 41 of them newly; on 16,400 generated inputs the two engines gave the same answer for every one. On SchemaStore's assetlinks schema, a verdict on its sample document takes 362 ns where it took 1769.","- The one-pass error function (what `validate()` runs once a validator's errors have been read) decides each array element and each object-valued property with that subtree's verdict code first and runs its collecting code only for a value the verdict rejects. Before, the whole function ran behind one verdict of the whole document, so a rejected document was validated twice in full, and where a oneOf or anyOf branch held a `$ref` the branch decision itself ran the error-collecting code on every value, accepted or not: a valid list of six JSON Patch operations cost 1363 ns through that path where its verdict costs 261. Such branches now get a verdict compiled on their own. Definitions of some size are functions of their own in this program too: a 25-definition API schema was one 122 KB function, which the optimizing compiler reached after tens of thousands of calls, so its first twenty thousand answers cost 89 ns each where the hundred-thousandth cost 10; it is now a 3 KB function calling 14. On twenty SchemaStore API schemas with a realistic invalid body (one wrong type, missing key or unknown key in an otherwise valid document), reading every error went from 0.74x to 1.09x the speed of the default validator with allErrors on, and `validate()` on the valid body from 0.89x to 1.01x.","- The one-pass error function keeps each error's place in schema order beside the list as it collects, and hands the list out as it is when it came in order, which most lists do; one that did not is put in order by those integers in the function itself. The reader's sort, which looked every error's path up in a map, still answers for collapsed branch errors and for errors whose order is the rank of their paths. Reading the two errors of a wrongly typed babelrc document took 91 ns and now takes 32, and every list is checked against the reader's order by the test suites under `ATA_CHECK_SORT`.","- `validateJSON()` on a validator whose errors are being read, with `richErrors: false`, parses a rejected text and hands it to the one-pass function directly, instead of to the layers that parsed it, decided again and wrapped a rejection whose errors were built on first read. The scanner, which answers an accepted text without parsing, is skipped while a validator's texts are mostly rejected and runs again when they are mostly accepted. Reading the errors of a rejected 1.7 KB body took 9.2 microseconds and now takes 4.4; on the twenty API schemas, reading every error from a realistic invalid text went from 0.86x to 0.97x the default validator's `JSON.parse` plus validate, and from 0.56x to 0.96x on a wrongly typed one.","- The one-pass function takes its run-time helpers (the error list and its order, the branch collapse, deep equality, pointer escaping, the presence helpers) from one module, `lib/combined-runtime.js`, as closure values, where each program used to carry its own copy in its source. Building the one-pass functions of twenty API schemas took 2.01 ms and now takes 1.72. The standalone modules keep their embedded copies.","- A subtree guard of up to 2 KB of verdict source is written into the one-pass function as a labelled block instead of a function it calls. In the first thousands of calls of a process, before the optimizing compiler has inlined anything, each call was paid in full. On the official suite's unevaluatedProperties cases in that regime the excess over the default validator went from 227 to 163 ns per case.","- Run-time `unevaluatedProperties` in the one-pass function is written as straight-line code: the names the node and its in-place applicators can evaluate are a bit each in an integer (declared names, one bit per `patternProperties` pattern, one for a branch that evaluates every key), each branch's verdict a labelled block, a failed oneOf's rollback the integer it started from. The annotation functions this replaces pushed names onto an array, searched it for every key and were a call per branch per level. Shapes outside the model (a nested `unevaluatedProperties` that checks something, a reference cycle, more than 30 names) keep the annotation functions. On the suite's `unevaluatedProperties with anyOf` case, reading the errors of a rejected document in the first thousands of calls of a process went from 219 to 71 ns against the default validator's 55, and once optimized from 46 to 36 against 47.","- When no branch of a oneOf or anyOf holds, the one-pass function scores the branches with counting copies of their error code (a count and a severity per would-be error, nothing built) and runs only the closest branch's error function, where it ran every branch's to keep one branch's errors. Branches that call a shared definition or hold a collapse of their own keep the old path.","- A schema with `$dynamicRef` or `$dynamicAnchor` that runs on generated code took a direct path from before the keyword was unrolled by scope: a verdict, then the error function, on every rejection, and never the one-pass function. It now takes the same assembly as any other schema. On the official suite's 44 dynamicRef cases a pass over all of them with every error read went from 5229 to 3136 ns.","- The error generator writes a `$ref` that has validating keywords beside it (2020-12) as the reference and then the rest of the node, as the one-pass generator already did; it used to decline such a node, which kept the 2020-12 meta-schema, whose vocabulary schemas are all references with siblings once unrolled by scope, off generated code for its errors and on the interpreter, about 2 microseconds a rejection. The runtime unevaluatedProperties fuzz test compiles 1321 of its schemas on generated code where it compiled 1174.","- The counts of a nested anyOf or oneOf that the run-time unevaluatedProperties pass works out are kept where the keyword's own error code and the branch scoring copies can read them, instead of deciding the branches again: the suite's nested-reference case decided each branch four times over. On its 20 documents with every error read, 3953 ns went to 2644 (the default validator: 2049).","- A standalone module for a schema with `$ref: \"#\"` anywhere in it reports the real errors. The error generator declined the self-reference, so `ata build` and `toStandaloneModule` emitted a module that reported every failure as the single ATA9000 stub (with a warning) for such schemas; a SchemaStore component schema in the cold-start harness was one. The self-reference is now a helper over the root schema that takes the path as an argument, as a definition on a cycle does. Two generator paths that emitted nothing for a reference they could not resolve, which read as valid, decline instead; `tests/test_aot_self_ref_errors.js` and the entry-point agreement test hold both.","- The one-pass function's error keys are dense integers in the reader's order, ordinal then path rank, given per program when it is assembled, so two errors with one key are ones the reader keeps as they came. Keyed by the ordinal alone, two errors under one synthetic definition (every `$dynamicRef` schema) shared a key and sent the list to the reader, which ranked the paths again: 45 percent of reading a list schema's two errors. Errors behind a reference into a shared definition keep a coarse key and still go to the reader when two of them share it.","- Run-time `unevaluatedItems` in the one-pass function is written as straight-line code too: without `contains`, the positions a node and its in-place applicators evaluate are a prefix, so the record is one integer raised where a branch holds, and what is left starts at that index. `contains`, a tuple `items`, a nested `unevaluatedItems` that checks something, dynamic references and reference cycles keep the annotation functions.","- A oneOf or anyOf with one branch that does not hold reports that branch's errors directly: there is nothing to score, so the counting copy of the branch is neither written nor run (the branch ran three times, for the verdict, the count and the errors).","- Cost of the one-pass function: it collects from its first check and no longer asks the whole-document verdict first, so on an accepted document it costs more than the verdict where the schema names few of the document's keys (a root `additionalProperties` holding a `$ref`, a definition entered per value): on three of the twenty SchemaStore API schemas of the cold-start harness, `validate()` on an accepted body costs 60 to 70 ns more than on 1.45.0 (95 against 35 ns on the largest), while on the same schemas a rejected body read in full costs a third to a tenth. Asking the verdict first, always or decided from the traffic, was tried in three forms and each cost a stream of rejected documents 30 to 40 percent in the suite harness, so it is not done.","- The one-pass error function built the allowed-name Set of an `additionalProperties: false` object with more than eight declared properties on every call, where the verdict and plain error functions hold it in the closure. On SchemaStore's npm-badges schema, reading the errors of a rejected document took 701 ns and now takes 269; the verdict was never affected.","- A rejected `parse()` works out its errors when they are first read, as `validate()` does, instead of before throwing. The `errors` property is still an own, enumerable, serialisable field of the thrown error. A rejection that is only caught costs 2.4 µs where it cost 8.1 on a document with 16 violations, measured in the schemabenchmarks.dev harness.","","## 1.45.0 - 2026-10-05","","### Changed","","- The interpreted engine is faster. It answers where code generation is blocked (a Content Security Policy without `unsafe-eval`, some edge runtimes), it is the engine of `ata-validator/lite`, and it answers the first calls of a large schema. Measured against 1.44.0 on SchemaStore schemas and their sample documents:","  - with code generation blocked, validating and reading the errors takes 4.7 µs per tsconfig.json sample where it took 8.5, and 427 µs per SARIF log where it took 568; the other schemas measured are unchanged;","  - on the valid samples of five popular schemas, a verdict takes 9.9 µs where it took 16.2, and a validation that collects errors 16.0 µs where it took 23.4.","","  Where it comes from:","  - `enum` membership is a Set lookup for primitive values instead of a deep comparison with every allowed value;","  - `uniqueItems` keys items by value, or by a structural hash for objects, instead of comparing every pair;","  - the `uri` format checks its characters through a table;","  - while collecting errors, a child schema with no subschemas of its own is asked for its verdict first, and the paths of its errors are built only when it fails.","- `uniqueItems` over arrays of objects is faster in generated code too: each item is hashed instead of turned into a canonical string, in one implementation both engines now run. A verdict on SchemaStore's SARIF samples takes 57.5 µs where it took 71.8.","- Reading the errors of a rejected document is a little faster: the error list is created with its first error instead of grown from an empty array, and a schema that reaches its root again through a definition used once (a tree whose nodes hold trees) now gets the one-pass function that validates and collects together. On the official test suite, validating every case and reading every error, a run takes 1.05 times less time on Draft 2020-12 with the default errors and 1.05 times less on draft 7, and 1.05 and 1.11 times less with `richErrors: false`.","- The interpreted engine compares values for `enum`, `const` and `uniqueItems` by own properties, as generated code does. The two differed only for objects with inherited enumerable properties, which JSON never produces.","- Cost: the browser runtime bundle is 116.4 KB gzipped, up from 115.8 KB. Startup and accepting documents are unchanged within noise. Modules from `ata build` are byte for byte the same size.","","## 1.44.0 - 2026-10-05","","### Fixed","","- A schema that names something `\"__proto__\"` could accept documents it rejects. Several places copied a schema, or a map keyed by property names, by assignment, and assigning the key `\"__proto__\"` sets the copy's prototype instead of creating the property, so the constraint on it was gone from the copy. It happened for a property named `\"__proto__\"` next to a `$ref` that is resolved at compile time (one relative to a nested `$id`, for example), for a `$ref` pointing at such a property, and for draft-07 `dependencies` on such a property, which affected every engine. For example `{\"$id\": \"http://e.x/root\", \"$defs\": {\"S\": {\"$id\": \"s\", \"type\": \"string\"}}, \"properties\": {\"__proto__\": {\"type\": \"number\"}, \"r\": {\"$ref\": \"s\"}}}` accepted `{\"__proto__\": \"s\"}`. A schema that lists `\"__proto__\": false` to keep that key out of documents was affected the same way. Affected: measured on 1.40.1, 1.41.0 and 1.43.0; earlier versions were not checked. Every copy now writes such a key as an own property. `tests/test_proto_name_rename_invariance.js` checks that a schema and a document using the name answer exactly as the same pair with the name renamed, on every engine and every read, ahead-of-time modules included: 3328 documents, none different.","- `validateJSON()` with `richErrors: false` returned the errors of a rejected document in the order generated code found them, where `validate()` returns them in schema order, so one document could list its errors in two orders. Both now give the same list. Reading those errors costs about 50 ns more per rejection on a small schema.","- A typo hint for a missing required property could name an unrelated key: a missing `c` was matched to a present `a`, and a missing `name` to a present `age`, because any key within two edits counted. The allowance now scales with the name (none under three characters, one edit under five, two from five), and the hint names the one nearest key, or nothing when two are equally near.","","### Changed","","- Faster from process start to the first answer. Measured on 20 SchemaStore schemas as API routes and on the SARIF schema as a command line tool, each run in a fresh process, median of 11, against 1.43.0 (milliseconds, an empty Node process included):","","  | | 1.43.0 | 1.44.0 |","  |---|---|---|","  | 20 routes, first valid requests | 47.9 | 40.7 |","  | 20 routes, first errors read | 67.7 | 60.2 |","  | SARIF, one rejection with its errors read | 90.9 | 33.4 |","  | 5 MB SARIF log through `validateJSON()`, valid | 89.1 | 57.5 |","  | 5 MB SARIF log through `validateJSON()`, invalid, errors read | 135.8 | 82.4 |","","  Where it comes from:","  - The first 64 calls of a large schema (over about 16K characters with its references followed) are answered by the interpreted engine, which the test suite holds to the same answers and errors, and the schema is compiled if the validator is still in use after that. A short-lived process never pays to generate and compile the code for it.","  - A schema that would expand past about 400K characters gets its verdict function with shared definitions from the start, instead of expanded first and thrown away.","  - The vendored meta-schemas load only for a schema that references one, not for every schema that names its dialect in `$schema`, which made each compile's cache key a 30 KB string.","  - The errorMessage module loads only for a schema that uses the keyword.","  - `validateJSON()` parses the text once when its errors are read, and on a large ASCII document finds the positions of the failing values through the native addon (simdjson), 3.1 ms instead of 8.3 on 5 MB. Without the addon, or with an older one, it works as before.","- More schemas run on generated code: `propertyNames` with any subschema (each key is checked as a value), a property named `$ref`, and properties named after `Object.prototype` members such as `constructor` and `__proto__`. Of the 980 SchemaStore schemas, 869 run on generated code where 840 did.","- Reading errors is a little faster. On the official test suite, validating every case and reading every error, a run takes 1.04 times less time on Draft 2020-12 and on draft 7 with the default errors, and 1.03 and 1.08 times less with `richErrors: false`. On the negative sample documents of the 66 SchemaStore schemas with a `oneOf` or `anyOf` over references and samples, reading the default errors takes 9% less in total, mostly from the edit distance behind typo hints, which now computes only the cells within its bound.","- Cost: the browser runtime bundle is 115.8 KB gzipped, up from 114.1 KB. Requiring the package, compiling a schema and validating once takes the same time within noise. Modules from `ata build` are byte for byte the same size.","","## 1.43.0 - 2026-10-05","","### Fixed","","- `validateJSON()` and `isValidJSON()` could abort the whole Node process on large schemas with many references to the same definitions, such as SchemaStore's traefik and detekt. The text scanner generated for such a schema came to 0.5 to 1 MB of source in one function, and V8's Maglev compiler aborted the process (`raw_hash_map\u003c\u003e::at`) while optimizing it, after about a hundred calls, in plain JavaScript on Node 24 and 25. It was intermittent, about half of the runs on those schemas. Affected: 1.30.0 to 1.42.0, measured on the published versions. The scanner is now emitted as one function where it fits in 64 KB and otherwise split into functions of bounded size, with large definitions and members called rather than repeated; the largest scanner function on SchemaStore went from 1 MB to 64 KB. Every one of the 980 SchemaStore schemas was run in its own process, with and without the native addon, with no failure. On traefik-v2 the split scanner is 1.47 times slower than parsing the text would be; on the six other schemas that split it is 1.0 to 2.3 times faster.","- The compile cache and the preprocess cache were unbounded. They kept every schema's text and generated functions for the life of the process: after compiling each of the 975 SchemaStore schemas once and dropping the validators, 1247 MB stayed on the heap. Both caches now keep at most 128 entries, oldest out first, and the same run keeps 572 MB. A schema compiled again after its entry was dropped is compiled again.","- With both `$defs` and `definitions` at the root and the same name in both, generated code read `#/definitions/x` as `$defs/x`, so a document the schema accepts was rejected and one it rejects was accepted. Such a schema now runs on the interpreted engine, which resolves each pointer as written. Affected: every version from 0.6.0 to 1.42.0. None of the 980 SchemaStore schemas has both containers.","- A property name holding a control character, such as a line break, broke the source of the function that validates and collects errors in one pass. Answers were right, but such a schema validated a rejected document twice every time its errors were read.","","### Changed","","- Reading the errors of a rejected document is faster again. On the official test suite, validating every case and reading every error, a run takes 1.12 times less time on Draft 2020-12 and 1.05 times less on draft 7 with the default errors, and 1.18 and 1.05 times less with `richErrors: false`. Measured against 1.42.0 in one harness on an Apple M4 Pro with Node 25. Where it comes from:","  - `oneOf` and `anyOf` count their passing branches with verdict functions and run the branches that collect errors only when none passes; a `oneOf` matched by more than one branch builds its `ATA4002` error from that count.","  - Where `unevaluatedProperties` is worked out at run time, its branch counts are reused by `oneOf` and `anyOf`, and each branch's validity is worked out once, bottom up.","- More schemas get one-pass validation, or generated code at all:","  - recursive schemas, through `$ref: \"#\"` or definitions on a reference cycle;","  - `unevaluatedItems` whose evaluated positions depend on which branches pass;","  - a `$ref` beside keywords that validate, such as `{ \"$ref\": \"#/$defs/n\", \"minimum\": 5 }`, which Draft 2020-12 applies together; it used to send the whole schema to the interpreted engine;","  - patterns with Unicode property escapes such as `\\p{L}`, compiled with the unicode flag as the interpreted engine compiles them; they used to send the whole schema to the interpreted engine.","","  Of the 980 SchemaStore schemas, 840 run on generated code where 838 did.","- A definition referenced from several places is written once as a function and called at each reference, in the function that collects errors, and in the verdict function when its source would pass 64 KB. The first rejection with its errors read (16 calls, compiling included, plain JavaScript) takes 85 ms on SchemaStore's SARIF schema where it took 128 ms, 33 ms on cloud-run where it took 92 ms, and 40 ms on putout where it took 150 ms.","- The text scanner behind `validateJSON()` and `isValidJSON()` covers 85 of the 980 SchemaStore schemas, up from 62, now that it reads draft 7 `definitions`, and finds long property names with `indexOf`. Over the 48 of those schemas with sample documents, each in its own process, `validateJSON()` takes 0.88 of the time it took, as a geometric mean.","- `ata build` used to refuse a schema with a `$ref` beside a validating keyword. It now emits a module whose verdict applies both, without `parse` and with the single `ATA9000` abort-early error in place of detailed errors, and says so for each through `onWarning`.","- Cost of the above:","  - the browser runtime bundle is 114.1 KB gzipped, up from 108.9 KB;","  - requiring the package, compiling a schema and validating once takes about 0.35 ms longer (8.07 ms where it took 7.70, plain JavaScript), from the larger code generator;","  - a schema that now gets the one-pass function compiles it at its first rejections: on SchemaStore, partial-eslint-plugins takes 195 ms over its first 16 calls where it took 145, and apollo-router 120 ms where it took 109.","","  Validating an accepted or rejected document, warm, is unchanged within noise. Modules from `ata build` are byte for byte the same size.","","## 1.42.0 - 2026-10-04","","### Changed","","- Reading the errors of a rejected document is faster. On the official test suite, validating every case and reading every error of each rejection, a run takes 1.4 times less time on Draft 2020-12 and 1.5 times less on draft 7 with the default errors, and 1.75 and 2.1 times less with `richErrors: false`. Measured against 1.41.0 in one harness, on an Apple M4 Pro with Node 25. Where it comes from:","  - Once a validator's errors are being read, `validate()` with `richErrors: false` decides and collects in one pass, and with `richErrors: true` each error is built enriched where it fails rather than plain and enriched afterwards. A validator whose errors are never read is unaffected, and reading only `.valid` still costs the verdict alone.","  - Past its first calls, `validate()` is a function generated for the schema rather than shared wrappers around the generated checks.","  - `oneOf` and `anyOf` (with the collapsed `ATA4001` to `ATA4003` error), `additionalProperties` as a schema, and `unevaluatedProperties` whose evaluated set depends on which branches pass now compile into the function that collects errors.","  - A `uniqueItems` error, a collapsed `oneOf` or `anyOf` error, and a `const` error on an object or array value cost a fraction of what they did.","- More schemas run on generated code instead of the interpreted engine. Every `$ref` the interpreted engine can resolve (a pointer deeper than a top-level definition, an `$id`-relative or absolute URI, a URN, an anchor) is resolved at compile time by that engine's own resolver, and `unevaluatedProperties` that depends on which branches pass is evaluated at run time in generated code. Of the 980 SchemaStore schemas, 838 compile where 797 did, tsconfig.json and jsconfig.json among them. On the official suite, 326 of 384 Draft 2020-12 groups compile where 305 did, and 238 of 258 draft 7 groups where 219 did.","- Cost of the above: the browser runtime bundle is 108.9 KB gzipped, up from 102.9 KB, and loading the package takes about 0.2 ms longer, both from the larger code generator. Modules from `ata build` are byte for byte the same size. A Fastify app with 10 routes reaches its first validated request 4% sooner.","","### Fixed","","- `validateJSON()` returned a bare `false` instead of a result for an invalid document when any string in the schema contained the word `function`, such as a property named `function`. Code that checks `if (!result.valid)` behaved correctly, but reading `result.errors` threw, and a check written as `result.valid === false` let the document through. The generated code is rewritten as text to build that path, and the rewrite read the word inside a string as the start of a function. Strings are now skipped. Affected: 1.23.0 to 1.41.0. `validate()`, `isValidObject()` and `isValidJSON()` were not affected. `tests/test_generated_returns_rewrite.js` puts the words and characters that rewrite looks for into property names, enum values and patterns, and checks every entry point against the interpreted engine.","- A `uniqueItems` error named a different duplicate pair depending on the engine that answered. Every engine now reports the first item that has a later equal, and its first later equal (`params: { i, j }`), as the interpreted engine did. The message for a document checked by generated code can name a different pair than before.","- Generated code and the interpreted engine gave different error lists for the same document in a few shapes; what is accepted did not differ. A value of the wrong type is now also checked against the keywords that apply to its own type (`minimum` for `2.5` against `type: \"integer\"`, `allOf` and `if` for `null` against `type: \"object\"`), a collapsed `oneOf` or `anyOf` under a pattern sorts in schema order, and `type` written as a one-element array is reported as an array. The SchemaStore sample documents, 31080 of them with mutated copies, now get identical error lists from both engines; three differed before.","- An `isValidObject` taken before the validator's first call, as in `const check = v.isValidObject`, classified the schema again on every call, about ten times the cost of the check. It now hands straight to the compiled check.","","## 1.41.0 - 2026-10-04","","### Changed","","- Custom keywords (the `keywords` option, and `addKeyword` in the Ajv-compatible layer) compile into the generated verdict function as calls to your functions. Before, a schema using one ran on the interpreted engine. On a strict request body with one custom keyword, accepting a document went from 118.7 to 24.0 ns, and the first call from 2.59 to 2.24 ms; in a one-keyword microbenchmark, 56.3 to 7.2 ns. Reading the errors of a rejected document is unchanged (662 to 642 ns): errors still come from the interpreted engine, which now loads at the first rejection instead of at the first call, so that first rejection takes about 1.7 ms longer, once. Macro keywords stay on the interpreted engine, and `ata build` still refuses custom keywords. Measured on an Apple M4 Pro with Node 25, interleaved. `tests/test_custom_keyword_codegen.js` holds the compiled form to the interpreted engine on random schemas with keywords in every applicator and behind `$ref`: 68880 answers across `validate()`, `isValidObject()`, `validateJSON()`, `isValidJSON()` and the buffer path, none different.","","### Fixed","","- A custom keyword used only in a schema reached through `$ref` (from `schemas` or `addSchema`) was not applied by the compiled paths, so a document it should reject was accepted. Whether keywords are in use was decided from the root schema alone. Affected: 1.16.0 to 1.40.1.","- A percent-encoded `$ref` fragment, as ts-json-schema-generator writes for generic type names (`#/definitions/Node%3CRow%3E`), sent the whole schema to the interpreted engine, and `ata compile` refused it as too complex. It now resolves on every engine.","- The native engine read numbers by how they are written rather than as JSON.parse reads them. On the buffer APIs, and in `validateJSON` past the native threshold:","  - `{\"id\": 1.0}` was rejected against `type: \"integer\"`;","  - an integer past 64 bits made the document invalid, with a generic error;","  - a schema with such a bound, such as `minimum: 1e20`, made `isValid()` throw;","  - `minLength` and the other count keywords at 1e21 and above were ignored;","  - `multipleOf` disagreed with `validate()` on very large values.","","  `tests/test_number_text_parity.js` checks every text path against `validate()` on 2352 number spellings. One gap remains, in simdjson: a 20-digit integer at or past 2^64 fails to parse where the document reaches the DOM parser.","- A module from `ata build` and the other emitters inlined in a `\u003cscript\u003e` element could be cut short by a schema string holding `\u003c/script\u003e`. Emitted modules now write the `\u003c` of `\u003c/script` and `\u003c!--` as `\\x3C`; output for other schemas is byte for byte the same.","- The glob fallback `ata build` uses on Node 18 to 21 matched with a regular expression that ran in polynomial time on long patterns. It splits by index now.","","## 1.40.1 - 2026-09-30","","### Security","","- A property name in a schema could run as code in the validator ata generates for it. Where `required` or `dependentRequired` sits under `items`, `patternProperties`, `additionalProperties` or a `$ref`, and in every standalone module, the error for a missing property put its name in a single-quoted string literal escaped only for double quotes, so a name holding a single quote closed the literal and the rest of the name was compiled into the validator. It ran when a document missing that property was validated. Only a schema written to do this is affected, so an application that compiles schemas it does not control, at run time or with `ata build`, should upgrade; one whose schemas are its own is not exposed. Affected: 0.4.3 to 1.40.0. The helper that escapes these strings now escapes the single quote too; error messages and `params` are unchanged. `tests/test_schema_code_injection.js` puts strings built to break out of a literal into every string a schema can carry, runs each schema through every path that generates code (the runtime compiler, the interpreter, standalone modules, bundles, the compiled wrapper, `parse()`), validates documents carrying the same strings and renders the errors, and checks that none of it ran.","","### Fixed","","- `renderPretty`, `renderCompact` and `renderJSON` threw a ReferenceError in a browser: they read `process` for colour, terminal width and the working directory, and the browser entry exports them. Without `process` they now render without colour, at the default width, with paths as given. `tests/test_render_without_process.js` calls each with the global removed and checks the output is the same as with it.","","## 1.40.0 - 2026-09-30","","### Added","","- `ata-validator/compiled-verdict` exports `fromCompiledVerdict(mod, schema, options)`: the wrapper around an ahead-of-time module that answers only `isValidObject()` and `isValidJSON()`, as a default `Validator` does, defaults filled in first. It carries none of the error pipeline. `@ata-project/unplugin` puts it in place of `new Validator(schema)` when the code never reads errors; a small app that only calls `isValidObject()` goes from 102.0 KB to 2.6 KB gzipped, where the full wrapper gives 12.1 KB, measured on the published 1.40.0 with `@ata-project/unplugin` 0.5.0. (The release notes first said 2.1 and 11.5 KB, measured before the `_extendChecks` support below added about half a kilobyte to each wrapper.) The official suite holds it to the runtime's answers, input mutation from defaults included, in `tests/test_compiled_parity.js` (31536 checks over 817 schemas, with `fromCompiled`).","","- The compiled wrappers take a check the schema does not carry, registered with `_extendChecks` the way `withKeywords` from `@ata-project/keywords` registers `instanceof` and `typeof`, and answer under it as the runtime does: the verdict is the schema's and the check's, `validate()` lists the schema's errors and then the check's, and the JSON entry points run the check only on text the schema accepts. `withKeywords(fromCompiled(...))` therefore behaves as `withKeywords(new Validator(...))`. `tests/test_compiled_extension_parity.js` holds that over 19440 checks on 120 random schemas, with documents only the check rejects, documents both reject, and documents both accept all drawn. A wrapper without a registered check answers at the same speed as before (4.97 against 4.96 ns for `validate()`).","","### Changed","","- The option check, defaults pass and JSON parsing the two wrappers share moved to `lib/compiled-common.js`. The full wrapper's bundle was 81 bytes larger gzipped for it (11451 to 11532 for the same app), before the `_extendChecks` support.","","## 1.39.2 - 2026-09-30","","### Changed","","- Reading the errors of a rejected document is faster, with the same errors:","  - Reading `errors` used to go back through `validate()`, which ran the verdict a second time and built a second rejection object before the error function ran. It now runs the error function directly.","  - The runtime's error functions write errors in the shape the legacy (`richErrors: false`) list returns, without the ordering key, `code` and `docUrl` that standalone modules need. Reading them no longer copies each error to remove those fields. The runtime derives `code` and `docUrl` from the keyword when it enriches, and orders errors by `schemaPath` through the same ordinal as before.","  - Errors at a fixed path are still copied per read, so each read gets its own objects to edit, as it always has.","","  Measured on the official suite's Draft 2020-12 cases, over the invalid documents of schemas that run generated code, against 1.39.1: legacy errors 470 to 372 ns per document, rich errors 658 to 521 ns. The interpreted engine takes the same direct path, and errors behind a `$ref`, whose order is found by walking the path back to a schema node, remember the answer instead of walking it on every read: on the suite's schemas that engine answers, legacy errors 539 to 510 ns, rich 752 to 709. On one two-error body the read went from 96 to 62 ns. Reading only `.valid` costs the same as before, and so do accepting documents, compiling and cold start, within 3%.","","### Fixed","","- A standalone module built with `--source` from a schema file kept on one line grew with every error site: each error carried its source line inline, and on one line that line is the whole schema. A 2 KB product schema built to 181 KB minified, 7.5 KB gzipped. A source line longer than 120 characters is now written once at module scope and each frame is built once from it, frozen as before; the same schema builds to 41 KB minified, 5.8 KB gzipped, with identical errors. Shorter lines stay inline, where gzip folds the repeats, so a pretty-printed schema builds byte for byte as before.","- `verbose` was ignored by the interpreted engine: the same validator added `parentSchema`, `schema` and `data` to its errors when generated code answered and left them out when the interpreter did, as it does under `engine: 'interpreter'`, for schemas code generation declines, and in every case in the lite build. Both engines now go through the same step.","- `renderPretty` drew every caret one column left of the value it pointed at: the source line carried an extra leading space, so its `|` sat one column right of the bar on the rows above and below it. The bar now follows the width of the line number, so a caret lands on the first character of the value on lines 1 to 9, 10 to 99 and beyond. The README example is replaced with the output ata prints today.","","## 1.39.1 - 2026-09-30","","### Fixed","","- The Intel macOS addon (`@ata-validator/native-darwin-x64`) crashed the process the moment it loaded, from 1.7.3 to 1.38.0. `src/ata.cpp` includes mimalloc's `operator new` whenever `mimalloc-new-delete.h` is on the include path, and the addon never linked mimalloc; on Intel macOS Homebrew installs the header on the compiler's default path, so the addon's allocations went to an unresolved `mi_new` and jumped to address zero. Reproduced with 1.38.0's published binary under Rosetta, and on the CI runner once 1.39.0's prebuild loaded each binary before shipping it. The addon build now defines `ATA_NO_MIMALLOC`, which is what every other platform effectively had, since their build did not find the header. 1.39.0 was tagged but not published because of this; its changes ship in this release.","","## 1.39.0 - 2026-09-29","","### Fixed","","- Three schema shapes were compiled with a check missing, so documents they forbid were accepted. Each goes back to at least 0.9.0, on `validate()`, `isValidObject()` and compiled modules alike, and the interpreted engine answered all three correctly.","  - `unevaluatedProperties: false` next to an `if` without `then` or `else` emitted no check at all: `{ if: { properties: { foo: { const: 1 } } }, unevaluatedProperties: false }` accepted `{ bar: 1 }`. More generally, the code generator tracks which properties are evaluated with a few runtime models (if/then/else, one `anyOf` or `oneOf`, `dependentSchemas`, patterns), and each reads only the keywords it was written for. A schema whose evaluated properties come from anything else is no longer generated; the interpreter answers it.","  - `anyOf` next to `unevaluatedProperties: true` or a schema was never checked, because the generator left it to the `unevaluatedProperties` model and only the `false` model checks it: `{ anyOf: [{ required: ['a'] }, { required: ['b'] }], unevaluatedProperties: true }` accepted `{}`.","  - Under `additionalProperties: false`, counting an object's keys stands in for looking at each one when every declared property is required. The condition compared the lengths of the two lists instead, so `{ properties: { c: {} }, required: ['b'], additionalProperties: false }` accepted `{ b: 1 }`.","","  None of SchemaStore's schemas changed engine: 408 still run generated code, 396 still compile away, and all 2213 sample documents get the same answer as before. A new test, `tests/test_unevaluated_differential.js`, builds schemas from the applicators that produce annotations and holds every path, the generated verdict and error functions, `validate()`, `isValidObject()` and standalone modules, to the interpreter. On the previous code it finds 1133 differences in 36000 documents; now none, and none over twelve seeds and 576000 documents.","","- For a value of the wrong type, `enum` and `const` errors were missing when the error list came from the single-pass error function: `{ type: 'number', enum: [1, 2, 3] }` reported only `type` for `'x'`, where the interpreted engine, and other validators, report `type` and `enum`. Both keywords apply to values of any type. The error-shape differential now includes `type` next to `enum` and `const`; on the previous code 207 of its 3168 cases differ. Found by comparing against another validator in the react-jsonschema-form playground.","","- The error list no longer depends on which engine answered. A collapsed `oneOf`/`anyOf` error's `branchErrors` were passed through raw: from generated code they carried an internal ordering key (`_o`) and `code`/`docUrl`, from the interpreter neither, and they were not put in schema order, so their order followed each engine's walk. They are now enriched like any other error and ordered, at every depth, including when the list holds a single error. With `richErrors: false`, errors from the generated error function also carried `code` and `docUrl`, which the legacy shape does not have; they are dropped there, except on collapsed errors, which both engines give a code. A new test, `tests/test_error_list_differential.js`, builds random schemas from `anyOf`, `oneOf`, `$ref` between two definitions, objects and arrays, and compares the whole error list from both engines, in both shapes: 5010 of 12000 lists differed on the previous code, none now.","- A `$ref` cycle that comes back to the same value, such as a definition that includes itself through `allOf`, made generated code and the closure engine recurse until the stack ran out, and `validate()` threw a `RangeError` where the interpreter answers. On SchemaStore this is `cloudify.json`: a document with a string where one of its self-including definitions expects an object threw on 1.38.0. Schemas with such a cycle within what validation can reach now go to the interpreter; cycles that pass through `properties`, `items` or another keyword that moves to a child value are ordinary recursion and keep generated code. SchemaStore: 407 schemas run generated code and 395 compile away, one fewer each, and all 2213 sample documents get the same answer as before.","- The core package's size ceiling moves from 300 to 320 KB. The fixes above took the tarball to 308 KB after comments had been trimmed twice to stay under 300; the ceiling is there to catch weight nobody meant to ship, and the same release strips the native binaries, which takes 250 to 300 KB off every install with an addon.","","### Changed","","- Reading the errors of a rejected document is faster on schemas with `anyOf` and `$defs`, with the same errors. Three changes to the generated error function:","  - `anyOf` stops at the first passing branch. It used to run every branch with full error collection even after one passed.","  - Branches are first asked only whether they pass, stopping at their first error. When the branch holds an `anyOf` of its own that fails, it no longer collects and collapses that `anyOf`'s alternatives only for the next branch to pass. On Uniswap's token list, an object value tried against the branch for primitive values did this 2353 times per validation.","  - With `$defs`, the helpers (definition functions, patterns, name sets, branch functions) are built once per validator instead of on every call. Reading an error list on a large schema with many definitions used to rebuild all of them first.","","  Measured on Node 25 against 1.38.0:","  - Uniswap's token-list schema, rejecting its 1723-token default list with four errors and reading them: 2169 to 1352 us.","  - SchemaStore's 125 schemas with rejected sample documents, reading every error list: 5501 to 4551 us in total.","  - The first error read in a fresh process: 16.87 to 14.96 ms.","","  Accepting documents, compiling, cold start and small schemas measured the same, within 3%.","- Standalone modules from `ata build` and `toStandaloneModule` get the same error path. Their error function rebuilt its helpers on every call; it now builds them on the first error read and keeps them, so importing a module costs the same as before (0.76 ms for Uniswap's, measured in fresh processes). Uniswap's token-list module, rejecting the default list and reading four errors: 2262 to 1419 us, with the same errors. Bundled and minified it went from 8980 to 8867 bytes gzipped.","- The Linux glibc addons are built in a manylinux_2_28 container, the same floor Node's own Linux binaries have, instead of on the CI runner's Ubuntu 24.04. They needed glibc 2.38 and the GCC 13 libstdc++, so on Debian 12 (the `node:22` Docker image), Debian 11, Ubuntu 22.04, Amazon Linux 2023 and Rocky Linux 9 the addon failed to load and ata ran on pure JS, with the binary installed and unused. Checked on all five for arm64 and x64: 1.38.0's addon loads on none of them, the new build on all of them, answering correctly. It now needs glibc 2.17 and GLIBCXX 3.4.22, and the build fails if that floor rises.","- Native binaries are stripped of symbols again. pkg-prebuilds stripped them until 1.1.0 replaced it with a plain build, and nothing noticed the step was gone. Linux x64 went from 1.73 to 1.42 MB and arm64 from 1.52 to 1.25 MB; a local macOS arm64 build went from 1.31 to 1.16 MB. The prebuild workflow now loads each binary it ships, after stripping and signing, and requires it to answer. On the arm64 build, nine interleaved rounds against 1.38.0's binary measured no slowdown.","- Without the native addon, the buffer APIs decode the bytes and answer through `isValidJSON()`, which reads text the scanner covers without parsing it, instead of parsing and calling `validate()`. A small document went from 350 to 177 ns on Node 25; the addon answers it in 92. The answers are `validate()`'s, and the test for this path now also covers coercion, defaults, removal and a custom keyword.","- The linear-time regex engine is one function, and standalone modules embed that function's own text. The embed used to come from a generated copy of the engine as a string, which every install carried next to the engine itself. The packed tarball went from 308530 to 306590 bytes.","- Nine test files were not run by `npm test` or CI. They are now, and the three that no longer matched the code, together with `tests/test_browser.js`, which still expected the buffer APIs to throw without the addon, were updated to the current behavior. `tests/fuzz_differential.js` runs in `npm test` too.","","## 1.38.0 - 2026-09-29","","### Changed","","- The error function writes a definition referenced from several places once, as a function each reference calls with its own paths, instead of repeating its error code at every reference, as it already did for recursive definitions. Errors are unchanged; only the size and the speed of the error path move. Uniswap's token-list validator, 16 references to 10 definitions, went from 115.4 to 72.1 KB before gzip and, bundled, from 10.9 to 8.8 KB gzipped; rejecting its 1723-token default list with three errors and reading them went from about 2600 to 2200 us. The function that answers valid documents is byte for byte the same, and valid documents take the same time.","- The buffer APIs, `isValid(buffer)`, `isValidPrepadded`, `isValidNDJSON`, `isValidParallel` and `countValid`, work without the native addon: they answer through `validate()`, as they already did for the schema shapes the native walker gets wrong. They threw before, so the addon was a requirement for five methods where it is an accelerator everywhere else, and they now work in Workers with `nodejs_compat` too. The addon stays faster where it loads, measured on Node 25: 90 ns against 243 for a small document, 79 us against 292 for a 118 KB one, and the same for 10,000 lines of NDJSON (2.15 against 2.04 ms). A new test runs every official suite case through the five methods with the addon disabled and requires validate()'s answer: 1293 cases over 381 schemas. The browser build, which has no `Buffer`, throws as before.","- A pattern that a backtracking engine also runs in linear time now goes to the platform `RegExp` instead of ata's linear-time engine: every quantifier on a single character or class, at most one of them unbounded and then anchored with `^`, few bounded choices in total, and only escapes both engines read alike. The answers are the same, and a compiled module whose patterns are all like that no longer embeds the engine, about 15 KB of it before gzip: Uniswap's token-list validator went from 13.6 to 10.9 KB gzipped. Of SchemaStore's 1187 patterns, 857 qualify; both engines gave the same answer on all 171400 generated inputs, and none took more than 100 ms on a 50000-character input built to make a backtracking engine retry. A new test holds this on the official suite's patterns and adversarial inputs, and patterns that could retry, such as `(a+)+$` or `^a+a+$`, stay on the linear-time engine.","","## 1.37.1 - 2026-09-29","","### Fixed","","- Patterns using `\\s`, `\\S` or `.` could accept strings they should reject. JSON Schema patterns follow ECMA-262, where `\\s` is every whitespace and line-terminator character, U+00A0, U+2028, U+3000 and U+FEFF among them, and `.` matches anything but a line terminator. The linear-time engine that runs user patterns stopped `\\s` at U+00A0 and let `.` match a carriage return and U+2028, so `^\\S+$` accepted `\"a\\u2028b\"` and `^.+$` accepted `\"a\\rb\"`. It has done so since that engine arrived in 0.17.3. The engine now uses the ECMA-262 sets. The native addon's RE2 has the same two differences, and it answered large texts and the buffer APIs, so a schema whose patterns use `\\s`, `\\S` or an unescaped `.` outside a class now takes the JS path there. A new test holds the engine to the platform's own `RegExp` on 900 pattern and input pairs with every such character, and every path, `validate()`, the interpreter, compiled modules, large `validateJSON`/`isValidJSON` text and `isValid(buffer)`, on 5760 checks.","","## 1.37.0 - 2026-09-29","","### Added","","- Standard JSON Schema: `validator['~standard'].jsonSchema.input({ target })` and `.output()` return the schema the validator checks, as a copy, so a consumer that publishes schemas can take an ata `Validator` as it is. The MCP TypeScript SDK is one: on `@modelcontextprotocol/server` 2.2.0 a `new Validator(schema)` passed as a tool's `inputSchema` or `outputSchema` is published in `tools/list` and checks every call, with ata's error messages, tested end to end over an in-memory client and server. The target has to be the dialect the schema declares, and a schema without `$schema` is 2020-12; any other target throws, since ata does not convert between dialects.","- `fromCompiled(mod, schema, { useDefaults: false })`: the compile-away wrapper now reproduces `new Validator(schema, { useDefaults: false })`, leaving the input as it is. Any other option throws a `TypeError` instead of being ignored, and `compiledOptions` from `ata-validator/build` lists what is supported, so a bundler plugin can tell which calls with options it may replace. Found by reading a real user's code: every runtime `Validator` in JollyPixel's network worker is built with `{ useDefaults: false }`, which compile-away had to leave alone. The parity test now also runs the seeded schemas with defaults under that option, comparing results and the input afterwards: 19680 checks over 814 schemas, no differences; making the wrapper ignore the option makes 1110 of them differ.","","### Fixed","","- Errors raised inside a recursive definition named the definition's own schema path, `#/$defs/Node/required`, where the interpreted engine and an inlined definition name the path the value was reached by, `#/properties/kids/items/required`. The generated helper for such a definition now takes the schema path as an argument, as it already took the instance path. It showed on SchemaStore's web-types schema once aliases (below) let it compile.","","### Changed","","- A definition that is only a reference to another, `X: { $ref: '#/definitions/XUnion' }`, no longer sends the schema to the interpreted engine. TypeScript-to-schema generators emit it for every named union, so schemas generated from TypeScript types mostly could not be compiled ahead of time: PostHog's ExperimentMetric schema, 71 definitions with 4 aliases, was one. A chain of aliases that loops still declines. - `propertyNames: { $ref: '#/definitions/Key' }` and `propertyNames: { type: 'string', ... }` no longer send a schema to the interpreted engine. The reference is replaced by what it names, through aliases, and `type: 'string'` is dropped since every property name is a string, on a copy the generators read; errors keep the path the interpreted engine reports. What is left must be keywords the generators express (`minLength`, `maxLength`, `pattern`, `const`, `enum`), and anything else still declines. Uniswap's token-list schema uses both forms and can now be compiled ahead of time. Finding the nodes means walking the schema once per validator: 11 ms of SchemaStore's 7.6 MB Kestra schema, whose first answer took 1066 ms against 1082 at the median of three runs, and within noise on ordinary schemas (2000 distinct schemas compiled warm, 111.6 against 112.5 us each).","","With both changes, 408 of the 487 SchemaStore schemas with sample documents take the code generator (387 before) and 396 can be compiled away (375), with no differences between engines over the 2213 documents.","- `lib/plan-source.js`, which nothing in the package loads, is no longer published: 304507 bytes packed instead of 307804.","","## 1.36.1 - 2026-09-28","","### Fixed","","- 1.36.0 kept an entry in its preprocess cache for every schema, including the ones with nothing to rewrite, keyed by the whole schema text, so each validator in use held 0.21 KB more than on 1.35.0: 8.33 KB against 8.12 in `benchmark/bench_memory.cjs used`. Only generated passes are kept now, and the figure is 8.12 KB again.","","## 1.36.0 - 2026-09-28","","### Added","","- `compiledSchemaFor(schema)` in `ata-validator/build`: the normalized schema a default `Validator` reads, which `fromCompiled()` now takes so its defaults, error order and diagnostics follow the same document the runtime does.","- A `baseURI` option: the URI the root schema was retrieved from, which its relative `$ref`s resolve against when it declares no `$id` of its own. Draft-07 ignores an `$id` beside a root `$ref`, and SchemaStore writes its schemas that way, so a relative reference in them, `bitrise-step.json` from `bitrise.json` say, had no base to resolve against. Run against SchemaStore's own sample documents, with each schema given the address it is served from, ata answers 99.05% of the 2213 JSON samples as SchemaStore expects; of the 21 it does not, 17 need a schema outside SchemaStore that the offline run could not fetch, and 4 depend on draft-07 applying keywords beside `$ref`, which the specification says to ignore and ata ignores.","- `npm run test:schemastore \u003ccheckout\u003e`: every SchemaStore schema against SchemaStore's own sample documents, requiring the default engine, the interpreted engine and the compile-away wrapper to give the same verdict and the same errors. It found the silent accept, the `ReferenceError` and the engine-dependent error order below, all of which passed the official suite. CI runs it weekly and on changes to the engine, against a pinned SchemaStore commit: 487 schemas on 2213 documents, 375 of them compiled away too, no differences.","- A test that pins the modules an ordinary schema's first answers load, so a module joining every process's start is a decision rather than a side effect.","- `docs/API.md` documents `compiledModuleFor`, `compiledSchemaFor`, `compiledEligible` and `fromCompiled`.","","### Fixed","","- The code generator accepted documents a schema rejects when the constraint sat below a node with `additionalProperties: true`. Its safety check stopped at such a node and called everything under it safe, so a construct the generator cannot express was dropped instead of handed to the interpreted engine: `{ properties: { f: { additionalProperties: false } }, additionalProperties: true }` accepted `{ f: { x: 1 } }`. It has done so since 1.0.0. Checks the generator made only on the root schema, a Unicode property escape in a `patternProperties` key and `propertyNames` keywords it cannot express, now apply at every depth too. Found by running the 977 SchemaStore schemas against their own sample documents on both engines, where SchemaStore's invalid samples for treefmt and popxf were accepted. A new test runs every official suite case again with the schema placed under a permissive parent, in three positions, and requires both engines to agree: 8490 cases.","- With `coerceTypes`, only top-level properties were coerced; the default validator coerces at every depth, including the properties of nested objects and the elements under `items`. With Fastify's options, a body such as `{ address: { zip: 34000 } }` against a schema declaring `zip` a string was rejected where the default validator coerces it to `\"34000\"` and accepts. Both engines now coerce nested properties and array items, in the generated preprocess pass as in the closure one, so a request on a Fastify-shaped schema still costs what it did: 314 ns against 317 on 1.35.0, now with the nested value coerced. A new test compares verdicts and coerced data with the default validator on 2400 seeded nested documents, on both engines; the rules for individual values still differ in a few places, `null` and the strings `\"1\"` and `\"0\"` as booleans among them, and that test keeps to values both treat alike. The larger pass costs more to build; with the preprocess changes under Changed, 30 distinct Fastify-style route schemas loaded with `require` reach their first answers in 11.81 ms against 11.60 on 1.35.0 (median of 31 interleaved runs, installed packages, Node 25), the one place this release is slower, and with `import` in 12.78 ms against 14.64.","- A default or a coercion below the top level of a schema was applied by the interpreted engine and skipped on the default one: the generated preprocess pass reached only top-level properties. The same schema then accepted a document on one engine and rejected it on the other, as SchemaStore's airlock-microgateway schema did with its own sample. Such schemas now take the closure pass the interpreted engine uses, so both apply the same rewrite. A seeded test compares verdicts and rewritten data across engines on 7200 documents.","- A `pattern` error from the code generator lost the backslashes of the pattern it quotes: `\\.litertlm$` was reported as `.litertlm$`. The generated code wrote the pattern into a string literal unescaped.","- `validate()` threw `ReferenceError: _validate is not defined` on schemas where a definition on a reference cycle refers back to the root, such as `{ $defs: { v: { anyOf: [{ $ref: '#' }, { items: { $ref: '#/$defs/v' } }] } }, additionalProperties: { $ref: '#/$defs/v' } }`, for every document that reached the definition: 14 of 30 in the new test. The generated function for the definition sits above the entry function and called it by a name not in scope there. This has been the case since at least 1.20.0; with code generation blocked the same schemas answered correctly. Found through SchemaStore's jsone schema. Such schemas now go to another engine.","- Errors behind a `$ref` came out in a different order depending on the engine. Their `schemaPath` runs on past the `$ref` into the target, and the sort that puts errors in schema declaration order stopped at the `$ref`, so they kept the order the engine produced: `additionalProperties` first from generated code, the document's key order from the interpreted engine. They now follow the target's declaration order, as they do when the same schema is written inline, on every engine and in `fromCompiled()`. This changes the order a caller sees on the default engine: for a target with `properties` before `required`, a property's error now comes before the missing-property error.","- Under Node ESM, `import { compiledModuleFor } from 'ata-validator/build'` threw a SyntaxError, as did `schemaHash`; `build.mjs` lists its names by hand and lacked them, and `build.d.ts` did not declare `compiledModuleFor` or `compiledEligible`. Both now carry every name, and the ESM export test covers the six subpath entries as well as the main ones.","- In an error from a `patternProperties` subschema, the generated error function dropped the backslashes of the key from `schemaPath` (`^d+$` for `^\\d+$`), and declined a key containing a quote. It is used where the single-pass error function declines.","","### Changed","","- The generated preprocess pass (coercion, defaults, removal of undeclared keys) is built once per schema and options, and compiled once per distinct source. Validators for the same schema used to generate and compile it again each, and it depends only on property names, types, defaults and closed objects, so routes that share a shape with different limits, an `id` param or a `page`/`limit` querystring, now share one compiled function. The pass is also no longer generated at all for the defaults of a schema that has none. In a 30-route app this took the pass from 30 compilations to 12.","- `import { Validator } from 'ata-validator'` loads in 6.1 ms instead of 8.3 on Node 22.10 and later (installed package, median of 15 interleaved runs, Node 25). Node ran its CommonJS lexer over every module the package loads, to find named exports the ESM entry lists by hand anyway. Node now resolves a new entry, `index.node.mjs`, through the `module-sync` export condition, which loads the package the way `require` does. Bundlers do not match that condition and keep `index.mjs`; builds with esbuild, Rollup through Vite, Rolldown, webpack, Rspack and Bun run from their output alone as before. Older Node versions and Bun use `index.mjs` as before.","- `compiledModuleFor()` no longer declines a schema with `default` values, and `fromCompiled()` fills them in before every check, with the same defaults pass the core uses. A schema with defaults was the most common reason a `new Validator(schema)` could not be compiled away: across SchemaStore's 977 schemas it was the reason for 544. A new part of the parity test runs 150 seeded schemas with defaults at every depth through both, in addition to the official suite: 15180 checks over 814 schemas, no differences; switching the defaults pass off in the wrapper makes 744 of them differ. With this and the code generator change below, 725 of SchemaStore's 977 schemas can be compiled away, against 235 on 1.35.0. The wrapper is 9.9 KB gzipped in a browser bundle, against 9.2 KB on 1.35.0; the defaults pass and the error ordering behind `$ref` account for the difference.","- Very large schemas reach their first answer several times sooner and in a fraction of the memory. SchemaStore's Kestra schema, 7.6 MB with a `oneOf` of several hundred task types referenced from every task list, took 7.5 seconds and 1.36 GB before its first answer; it now takes 1.0 second and 281 MB (median of three runs, Node 25, Apple M4 Pro). Three changes: a `oneOf` or `anyOf` branch reached through many references is generated once rather than at every reference, which alone took the generated code from 197 MB to 77 MB; the generator now tracks whether a helper flag was used instead of searching the code it had emitted for its name, which every enclosing node repeated and which was 2.2 of the 5 seconds generation took; and generated code has a budget of 16 MB, past which the schema goes to another engine instead of being generated in full. Across the 977 SchemaStore schemas the median emits 11 KB and the largest ordinary one 3.4 MB, so only Kestra's five versions reach the budget.","- A `$ref` with only annotations beside it, such as `description`, `title`, `default`, `examples`, `deprecated` or an `x-` vendor key, is compiled like a bare `$ref`. Any sibling key sent the whole schema to the interpreted engine before, and editor-oriented schemas put a description next to nearly every `$ref`. A sibling that validates, or one the list does not know, still declines. Of the SchemaStore schemas with sample documents, 325 of 487 take the code generator with this change, against 268 on 1.35.0.","- `additionalProperties: false` on an object with no `properties`, only `patternProperties` or nothing at all, is compiled by the code generator. It went to the interpreted engine before, and it was the most common reason a SchemaStore schema did: 114 of them. With this, 387 of the 487 SchemaStore schemas with sample documents take the code generator. Every one of their 2213 sample documents gets the same verdict and the same errors, in the same order, from the default engine and the interpreted one.","","## 1.35.0 - 2026-09-28","","### Added","","- `ata-validator/compiled` and `compiledModuleFor(schema)` from `ata-validator/build`: what a bundler plugin needs to put a build-time compiled validator in place of `new Validator(schema)`, so the runtime compiler stays out of the bundle while the code keeps the runtime API. `compiledModuleFor` returns the module, or `null` for a schema the replacement would not answer the same way: one with `default` anywhere, since the runtime applies defaults by default and the module does not, one with custom `errorMessage`s, and one whose errors the generator cannot express. `fromCompiled(module, schema)` answers `validate()`, `isValidObject()`, `validateJSON()` and `isValidJSON()` as a `Validator` with default options does, errors included, through the same rejection classes the core uses. A new test holds that over the official suite: 12045 checks over 652 schemas, no differences; 338 schemas are left to the runtime. The wrapper is 9.2 KB gzipped in a browser bundle. `@ata-project/unplugin` uses it for its new `compileAway` option.","","### Fixed","","- Under Node ESM, `import { toTypeScript } from 'ata-validator'` threw a SyntaxError, as did `compile`, `parseJSON`, `toOutput`, `toRetryMessage` and `describeSchema`, all declared in `index.d.ts`; the ESM entry listed its names by hand and had fallen behind. The browser entry also lacked `defineSchema`, so a Vite build that imported it failed. Both entries now export every public name, and a test keeps them in step with the CommonJS entry.","- A property `dependentRequired` asks for is reported with the keyword `required`, and its code was `ATA7001` from the default engine and the interpreter but `ATA7005`, the documented one, from the generated error function and ahead-of-time modules. It is `ATA7005` everywhere now.","","- `validateJSON()` on a document of 8192 bytes or more accepted documents that `validate()` rejects whenever the native addon was loaded, which is a default install on a supported platform. Past that size the text went to the addon, and a document its fast walker rejected went on to the addon's own validator for errors, which accepted it: a schema of `false` accepted `null`, and schemas using `unevaluatedProperties`, `patternProperties`, `dependentRequired`, `dependentSchemas`, `propertyNames`, `enum` or several formats accepted what they should refuse. Padded past the threshold with leading whitespace, 231 of the official suite's cases came out wrong. The addon now only answers where lib/buffer-gate.js says its walker agrees with `validate()`, and the errors of a rejection come from the same path as a small document's. Its errors were also worded differently (`string does not match pattern` where `validate()` says `must match pattern`), so a message could change with the size of the request.","- With `engine: 'interpreter'`, `validateJSON()` and `isValidJSON()` parsed the text and checked it without applying defaults, coercion or `removeAdditional`, so they could accept a document `validate()` rejects. A schema whose default fails its own constraints, `{ properties: { bar: { type: 'string', minLength: 4, default: 'bad' } } }`, accepted `'{}'` there. This happened wherever the native addon loaded; without it the text path was already right. `engine: 'interpreter'` is the option for schemas from outside the trust boundary, so this was the worst place for it.","- `validateJSON()` errors lacked `received`, and the suggestion built from it, on schemas whose generated error function stamps a `docUrl`: the text path took that for errors already enriched. Where a default was applied, `received` now shows the value that was checked, as `validate()` does.","- Where the error generator declines a schema, errors came from the native addon when it was installed and from the interpreted engine when it was not. The two word errors differently, and the addon's carry `schemaPath: null`, so the same validator reported `expected type number, got string` on one machine and `must be number` on another. The interpreted engine now answers on every platform. Schemas affected include property names with quotes, backslashes or control characters, and `additionalProperties: false` next to a recursive `$ref: '#'`.","- Text that does not parse is reported the same way everywhere: `ATA9001`, keyword `__parse__`, with the parser's message. With the addon it said only `invalid JSON document`; without it, the keyword was `syntax`. The interpreted engine's text path also reported any exception thrown during validation as a syntax error.","- `abortEarly: true` returned full errors instead of the `ATA9000` result from `validate()` under `engine: 'interpreter'` with the addon loaded, and from `validateJSON()` on the code generation path unless the JSON scanner had answered.","- A buffer API called before anything else, such as `isValidNDJSON()` on a new validator, threw a `TypeError` from inside the addon. `isValidPrepadded()`, `isValidParallel()` and `isValidNDJSON()` also skipped the gate for shapes the native walker gets wrong when called first, and passed the addon a slot of `-1` once its registry of 4096 fast slots was full. All six buffer APIs now compile the schema first and go through the gate.","- A boolean root schema with a `schemas` registry threw `TypeError: Cannot create property '$defs' on boolean` under `engine: 'interpreter'`.","","### Changed","","- The native addon loads on first use: a buffer API, a `validateJSON()` or `isValidJSON()` document of 8192 bytes or more, `parseJSON()` or `version()`. It used to load when the package was required, which cost about 1.9 ms of a serverless start for every process that never calls any of those. The renderers, TypeScript generation, the retry message, the schema description, error enrichment, the position cache and the vendored metaschemas load on first use too. From `require` to a first validated and a first rejected object, Node 25 on an Apple M4 Pro, median of 31 processes: 10.69 to 6.73 ms with the addon installed, 8.87 to 6.81 ms without it. A Hono route on Bun 1.4, `benchmark/bundle`, is ready to serve in 7.7 ms against 11.4, with 24 MB resident against 33; the same app with no validation takes 3.5 ms.","- `validateAndParse()` parses with `JSON.parse` and validates with `validate()` everywhere. Without the addon it threw when it was a validator's first call, and on the interpreted engine every time.","- On a 51 KB rejected document, `validateJSON(text).valid` costs 43 µs against 168: the verdict no longer builds the addon's error list. Reading the errors costs 250 µs against 287.","- Error messages read the same on every engine. `contains` said `contains: need at least 1 match(es)` and `contains: at most 2 match(es)` on the default engine and `must contain at least 1 valid item(s)` and `must NOT contain more than 2 valid item(s)` on the interpreted one; both now use the second pair. The interpreted engine now names the duplicate items in a `uniqueItems` error and joins a type list with a comma, `must be integer, string`, as the default engine did. Error codes, keywords and paths are unchanged.","- The validator core and the code generator are separate modules now, with the generator registered by the package entry; the package exports the same names. With the lazy loading above, the browser bundle for the user schema in `tests/fixtures/error-dx` is 93.2 KB gzipped against 92.2 KB on 1.34.0. The split exists so the interpreted engine can be tested in a process with no code generator, which is the test that found the interpreter bugs above.","","Checked against 1.34.0 before release, interleaved across processes from two worktrees: accepting and rejecting a request (`benchmark/bench_docs_site.mjs`), compiling 2000 distinct schemas, 1000 JSON-parsed order bodies with and without code generation, a small rejected `validateJSON` with its errors read, and the Fastify boot benchmark all measure within run-to-run noise; the start-up figures are above. The compiled module for the user schema is 2.2 KB gzipped on both. New tests hold the fixes: every official suite case through `validateJSON` and `validate()`, plain and padded past the threshold, errors compared field by field (6730 documents); the interpreted engine in a process without the code generator against the default engine, with and without the addon (6922 documents); the compiled wrapper against the runtime (12045 checks); both ESM entries against the CommonJS one; and the addon staying unloaded until a buffer call.","","## 1.34.0 - 2026-09-28","","### Added","","- `ata-validator/compat` exports its class as `Ajv` too, so `import { Ajv, type ErrorObject, type Options } from 'ajv'` switches by changing only the module name. Its `ErrorObject` type takes the same type parameters as the reference's and types `parentSchema`, `schema` and `data` the same way, so code that names `ErrorObject\u003cstring, Record\u003cstring, any\u003e, unknown\u003e` or passes an error to a function typed for the reference compiles unchanged.","","### Fixed","","- The compat entry worded a `type` error the way ata does rather than the way the reference does, which broke tests that match messages. A field declared `{ type: 'integer', nullable: true }` reported `must be integer, null` with `params.type` of `['integer', 'null']`; the reference reports `must be integer` with `params.type` of `'integer'`, adding `null` only when the declared type is already a list. A type list was joined with a comma and a space; the reference uses a bare comma, `must be string,number`. Found by running the TypeSpec compiler's own test suite against the compat entry: with the import changed on one line it builds and passes all 4474 of its tests, where two failed on these messages before.","","Checked against 1.33.3 before release: only the compat entry changed, its error wording and its types; `Validator`, `validate()`, the generated code and the AOT output are untouched. The four checks pass, and the new parity cases fail on 1.33.3 with the differences described above.","","## 1.33.3 - 2026-09-28","","### Fixed","","- The one-shot `validate(schema, data)` returned the native engine's raw result whenever the native addon was loaded, which is every default install on a supported platform: numeric error codes, `path` in place of `instancePath`, no `keyword`, different messages, and no `data` on success. It has done so since the first native binding; `Validator` was brought to the documented shape in 1.11.0 and this entry point was missed. It now goes through a `Validator` like every other entry point, so its result matches `new Validator(schema).validate(data)` exactly, and a schema passed again comes from the compile cache: on a small object schema a call went from 2294 to 26 ns. A new test runs every case of the official suite through both and compares them. Reported through the missing `data` in #49.","- `validate()` takes its return type from the schema, as `validateAsync()` and `parseAsync()` already did: a schema written with `defineSchema` or as a `const` literal types `data`, and a `Validator` instance can be passed in place of a schema. A type argument, `validate\u003cT\u003e(schema, data)`, still works for a schema TypeScript cannot see into, such as one read from a file; it is an assertion, not something the schema is checked against, and the declaration now says so. #49.","","Checked against 1.33.2 before release: only the one-shot `validate()` changed; with the native addon loaded, a call on a small object schema went from 2294 to 26 ns. The four checks pass, and the type tests fail on the old declaration with the error from #49.","","## 1.33.2 - 2026-09-28","","### Fixed","","- `parse()` works on a validator with checks added to it, such as `withKeywords` from @ata-project/keywords. It refused them with a `TypeError`, so on the product schema of the schemabenchmarks project, which checks two dates with `instanceof: 'Date'`, every call threw and a benchmark harness counted each valid document as a failure. The added checks only narrow what passes, so `parse()` now runs them in its verdict and reports their errors with a rejection, and a property checked with `instanceof` is carried into the copy as it is: it holds a `Date` or another class instance, and copying the keys its schema declares would have turned a `Date` into `{}`. Custom keywords registered through the `keywords` option are still refused, since what they accept is not known to the copy. The project's own test file, run against this build with a `parse()` configuration added, passes all 60 of that configuration's cases; against 1.32.0 it failed 26.","","Checked against 1.33.1 before release, both built from worktrees and interleaved across processes: `parse()` on a plain object schema costs the same, 10.1 ns; the verdict, `validate()` and compile paths are untouched.","","## 1.33.1 - 2026-09-28","","### Changed","","- With code generation blocked, the way Cloudflare Workers and a strict CSP block it, checking an object costs what it did before 1.31.2 again. The eval-free engine tests whether each property is the object's own, and since 1.31.2 that test compared the name against every name on `Object.prototype`, then ran `in`, then read the prototype through its accessor, for every property of every object. It is now one `hasOwnProperty` call, which gives the same answer. On the 14-property schema zod's JSON Schema produces for the @ata-project/zod benchmark, Apple M4 Pro, Node 25, `--disallow-code-generation-from-strings`: accepting 776 to 626 ns, rejecting 155 to 103 ns, against 641 and 106 on 1.31.1. Found by measuring every release from 1.25.0 to 1.33.0 on that path; the slowdown entered in 1.31.2 and stayed. Schemas the interpreted engine answers without that test, such as the request-cost benchmark's, are unchanged.","- When `parse()` refuses a validator, the error names which reason applies: `coerceTypes`, `removeAdditional: 'all'`, custom keywords, or checks added to the validator such as `withKeywords` from @ata-project/keywords. It gave one sentence for all four, and on a schema with an `instanceof: 'Date'` check a benchmark read the refusal as `parse()` failing on valid data. For added checks it now points at `validate()`, whose valid result carries the input unchanged.","","The official test suite pin moves to ab079cc: the three dialects still pass every case, 1301, 929 and 1135, and the optional format tests go from 764 to 771 passes with the same 95 failures as before, the new ones all passing.","","Checked against 1.33.0 before release, both built from equivalent worktrees and interleaved across processes: from a cold process to the first validated request with ten route schemas, 2.69 and 2.68 ms; the request-cost bench unchanged within noise with code generation allowed and with it blocked.","","## 1.33.0 - 2026-09-28","","### Fixed","","- `parse()` handed back an array of primitives as the input's own array rather than a copy, so a caller who changed the copy changed the input with it. `{ tags: ['a'] }` against `{ tags: { type: 'array', items: { type: 'string' } } }` returned an object whose `tags` was the input's `tags`. It is now a new array. The `parse()` an ahead-of-time module exports is built by the same emitter; rebuild emitted modules to pick it up.","","### Changed","","- A required property that is itself an object or an array is read into a local once, and its checks read the local. The verdict read `data.customer` again on every line, and V8 cannot reuse the first read across the helper calls in between. On a thousand realistic order bodies (nested customer and address objects, 1 to 20 line items), checking a valid body went from 388 to 292 ns; with the formats and the pattern taken out of the same schema, from 185 to 103 ns. Emitted modules get slightly smaller: 9341 to 9313 bytes for the error-dx fixture.","- The first check of a schema costs less. Most of what it cost was V8 compiling ata's own code generators the first time they ran, and the verdict generator held every keyword family in one 65 KB function, so every schema paid to compile `unevaluatedProperties`, `patternProperties`, `$ref` and the applicators whether it used them or not. Those families now live in functions of their own in all three generators, and a schema compiles only the ones it uses. The generated code is byte for byte the same on all 2970 compiles of the official suite. On the order schema, from a cold process: first `isValidObject` 2.81 to 2.25 ms, first `parse()` 3.93 to 3.41 ms.","- A first rejection whose errors are read builds one generator, not two. It built both the error generator and the combined one although it uses only one; the other is built when the validator needs it. First rejection with errors read on the order schema: 7.40 to 5.14 ms. A new test checks that one is built on each of the 224 suite groups that go through code generation, and that the errors do not change once the validator is warm.","- `parse()` copies a property whose schema is an `anyOf` or `oneOf` of primitive branches, such as `number | null` in the form zod's JSON Schema writes it. It declined the whole schema before; a value that passes one of those branches is a primitive, so there is nothing inside it to strip.","","Checked against 1.32.3 before release, interleaved across processes, Apple M4 Pro, Node 25, pure JS: from a cold process to the first validated request with ten route schemas, 3.36 to 2.93 ms (median of three rounds of 15 runs); compiling 2000 distinct schemas in a warm process, unchanged at 115 us each; the request-cost bench is slower on no row, a valid verdict 43.0 to 39.7 ns; the runtime bundled for the browser is unchanged at 94.3 KB gzipped, 2.3 KB larger before compression, which is the split generators.","","## 1.32.3 - 2026-09-27","","### Fixed","","- A `pattern` of one character class repeated a fixed number of times accepted strings it should reject when the class had more than one range or character. `^[A-Za-z]{2}$` accepted `\"xyz\"` and `\"1a\"` through `isValidObject`, `validate()` and `validateJSON()`, while the interpreted engine and the regex itself reject both. Such patterns are compiled to one character test per position, and the test for a class like `[A-Za-z]` was emitted as `a||b` without parentheses, so joining the positions with `\u0026\u0026` bound it as `(length \u0026\u0026 a) || (b \u0026\u0026 ...)` and the length check stopped applying. Present since 0.12.1. The class test is now grouped. A new test builds 1500 seeded random fixed-length patterns and strings that match, miss by one character, run long or short or carry non-ASCII characters, and compares every entry point and the interpreted engine with the regex, 102010 answers; it found 2667 disagreements before the fix. Country codes, currency codes and short identifiers written as such patterns are the common case; if you rely on one, upgrade.","","### Changed","","- A pattern that matches one fixed-length sequence, such as `^[A-Z]{3}-\\d{4}$` for a SKU, is compiled into character tests instead of going through the regex matcher. On a thousand realistic order bodies with one such pattern per line item, checking a valid body went from about 560 to 385 ns. An ahead-of-time module no longer embeds the regex matcher for such a pattern: a schema with two of them went from 6283 to 1422 bytes gzipped.","- `parse()` copies a property whose schema is an `enum` or a `const` of plain values with no `type`, such as `{ enum: ['USD', 'EUR'] }`. It declined the whole schema before, since it could not prove what to keep inside such a property; a value that passes can only be one of those plain values, so there is nothing inside it to strip.","","Checked against 1.32.2 before release, interleaved across processes: cold start, compile cost, request cost, `validate()`, `validateJSON()` and reading errors are unchanged within noise; the runtime bundled for the browser is 0.5 KB larger gzipped, 92.4 KB, which is the new pattern compiler and the enum copy.","","## 1.32.2 - 2026-09-27","","### Changed","","- Compiling a schema no longer builds forms of it that nothing has asked for. Every compile rewrote the generated source into the hybrid form used by `validate()` and `validateJSON()` and into the tail form used by extended validators, and compiled the hybrid with a second `new Function`, before the first document was checked. The default `validate()` reaches the hybrid only when errors are read, and `validateJSON()` only when it is called, so most validators paid for it and never used it. Both forms are now built on demand, and `validate()` and `validateJSON()` answer their first 64 calls through the verdict function and the error resolver before switching to the hybrid, so a validator that serves a few requests never compiles it and a busy one runs the same code as before. The exact own-property checks added in 1.31.2 made the generated source about 40% larger, which is what made this cost visible. Per schema, measured on 2000 distinct schemas on an Apple M4 Pro, Node 25: 143 to 179 us on 1.32.1, 72 to 74 us now, against 93 us on 1.25.0. From a cold process to the first validated request with ten route schemas, medians of 31 runs: 3.62 to 3.50 ms through `isValidObject` and 3.71 to 3.36 ms through `validate()`. A new test runs the official suite through both tiers of `validate()` and `validateJSON()`, with and without `coerceTypes`, and compares their answers, 5204 of them.","- The own-property helpers are hoisted one by one where something uses them, instead of as one block, and the prototype test is written with shorter aliases. Compiled modules are 6 to 10 bytes smaller gzipped.","","Checked against 1.32.1 before release, interleaved across processes: request cost, `validate()`, `validateJSON()` and reading errors are unchanged within noise; `validate()` with `coerceTypes` went from 25 to 22 ns; the runtime bundled for the browser is 0.2 KB larger gzipped, 91.9 KB, which is the tiering code itself.","","## 1.32.1 - 2026-09-27","","### Changed","","- Generated code no longer depends on the `__proto__` accessor to tell a plain object from any other. It asks whether an object's prototype is `Object.prototype` before trusting `in` for property presence, and it read that prototype through `Object.prototype.__proto__`, which Deno removes. On Deno every read came back undefined, every object took the per-key `hasOwnProperty` path, and an ahead-of-time module that imports nothing took 40 ns a call where Node takes 2.2. Where the accessor is missing the prototype now comes from `Object.getPrototypeOf`, chosen by a constant the engine folds, so Node is unchanged. On Deno 2.1.9, M4, `isValidObject` on a seven-property object went from about 42 to 17.5 ns. The answers were already correct on Deno; only the cost changes. A new test compares every object entry point with the interpreted engine over 12000 documents, 5886 of them with keys on a prototype, and runs again in a process with the accessor deleted. Ahead-of-time modules need a rebuild to pick this up.","- The error-reporting code generator checks `additionalProperties: false` by counting keys first when every declared property is required, and compares key names only when the count or a presence test disagrees. On an accepted document it had compared every key against every declared name, which put it at 2.1 to 3.3 times the verdict function on CI runners; locally the ratio went from 1.70-1.97 to 1.62-1.81.","","## 1.32.0 - 2026-09-26","","### Added","","- `Validator#parse(data)` validates, throws an `AtaValidationError` carrying the validator's errors on failure, and returns a copy holding only the properties the schema declares, with declared defaults filled in. The input is not modified. It is the runtime form of the `parse()` an ahead-of-time module exports with `parse: true`, built by the same emitter and admitting the same schemas; where that emitter cannot prove which keys to keep, or where `coerceTypes`, `removeAdditional: 'all'` or custom keywords are in use, `parse()` throws a `TypeError` saying so instead of answering. A test holds it to the module's `parse()` over 3600 random documents: the same copy, the same rejection, the same decline, and the input left alone. Because the copy is built from the schema's key list, unknown keys are dropped without being enumerated: on a seven-property document, Node 25 on an M4, it takes 3.2 ns a call where `validate()` with `removeAdditional` takes 10.9 ns, and a `parseSafe` case written with it measures 77M operations a second on the Moltar harness, against 57M through `removeAdditional` in 1.31.3.","","### Changed","","- `type: number` is checked with one `Number.isFinite(v)` call instead of `typeof v === 'number' \u0026\u0026 isFinite(v)`. The two answer the same for every value, NaN and Infinity still fail, and the single call is cheaper; every code generator, the closure compiler, the interpreter and the flat-object validator use it now. On the Moltar harness, Node 24 on an M4, `assertLoose` went from 159M to 169M operations a second and `parseSafe` from 78M to 82M. On a seven-property object parsed from JSON with one `number` field, `isValidObject` went from 5.0 to 4.5 ns.","- The `parse()` an ahead-of-time module exports builds its copy from a plain object literal with the declared keys written out, instead of computed keys and `Object.hasOwn`, which V8 does not inline. On the same document a call went from 4.1 to 2.9 ns.","- The copy emitter moved from `lib/aot-impl.js` to `lib/clone-emit.js`, so the browser bundle, which now reaches it through `Validator#parse`, does not also pull in the AOT compiler.","","## 1.31.3 - 2026-09-26","","### Fixed","","- `validate()` threw a TypeError with `removeAdditional` when an object above a level to clean was missing or null: with `{ type: 'object', properties: { c: { type: 'object', properties: { d: { type: 'object', additionalProperties: false } } } } }`, `validate({})` threw reading `d` of undefined. The removal pass checked each level only for itself and read it through its parent. Each level's removal now sits inside its parent's check. Present since at least 1.14.1.","- With `removeAdditional`, a node with `properties: {}` and `additionalProperties: false` kept its keys; every key there is additional, and the interpreted engine already removed them.","- Where the code generator declines a schema, for example one with a property named `toString`, `isValidObject()` skipped coercion, defaults and key removal, and answered differently from `validate()`: with `coerceTypes`, `{ n: '5' }` against `{ n: { type: 'integer' } }` was valid through one and invalid through the other.","","### Changed","","- Reading `.errors` got slower in 1.31.2, 3.9 to 5.8 us on a product document with fifteen errors, because the own-property test read the object's prototype inside a shared helper for every key. The prototype is read once per object now, and only where a key test uses it, which brings the error path back to 3.9 us and removes the five percent the check cost `assertLoose` on the Moltar benchmark. The AOT module of a 50-property schema is about 390 bytes larger gzipped than before 1.31.2, which is what the exact own-property check costs there.","- `removeAdditional` deletes unknown keys during the verdict walk instead of in a separate pass before it, for schemas where that cannot change an answer. A document the verdict accepts is answered in one walk; anything else takes the full path, which removes, validates and reports as before. The fused path is limited to schemas built from keywords that only look at declared properties or scalar values, since a keyword that sees a key before it is deleted, such as `minProperties`, an object `const` or an `anyOf` branch, could pass where it fails after removal; a test compares the result, the errors and the object left behind against the interpreted engine over 12000 random documents. On the Moltar harness, Node 24 on an M4, runtime `parseSafe` went from 31M to 57M operations a second.","- Internal: `lib/plan-source.js` generates a verdict function from interpreter plans, the first part of replacing the three code generators with one. It agrees with the interpreted engine on 3980 results over 461 schemas and matches the current generator's speed on the product schema. It is not wired into `Validator` yet.","","## 1.31.2 - 2026-09-26","","### Fixed","","- `isValidObject` accepted objects missing a required property, on its first calls, when that property had no entry in `properties`. `new Validator({ type: 'object', required: ['id'] }).isValidObject({})` returned true. The first calls of `isValidObject` go through a small validator for flat object schemas, which checks presence through the per-property constraints, so a required name without one was never checked; the schema moved to generated code on the second call, and never did when the generator declined the schema, as it does for a required name such as `constructor`. Present since at least 1.14.1. Such a schema is no longer given to that validator.","- A property inherited through the prototype chain counted as present. `required: ['toString']` was satisfied by `{}`, whose `toString` comes from `Object.prototype`, through `isValidObject` for every such name and through every entry point for `dependentRequired`, and `properties: { constructor: { type: 'string' } }` rejected `{}` because the inherited `constructor` was checked against the subschema. The generators asked whether a key was present with `'k' in d` or `d.k !== undefined`, both of which see inherited names; the interpreted engine asks `Object.hasOwn`, which is what JSON Schema means. Every generator, the closure compiler and the flat-object validator now answer the same way: a name on `Object.prototype` is checked with `hasOwnProperty`, and any other name with `in` on an object whose prototype is `Object.prototype`, which is every object `JSON.parse` returns, and with `hasOwnProperty` on anything else, such as a class instance or an object from `Object.create`. On the product schema of the schemabenchmarks.dev harness the verdict is unchanged at about 200 ns. Present since at least 1.14.1. A test compares every name on `Object.prototype` across the keywords that ask about presence and every entry point against the interpreted engine, 1132 comparisons.","- Errors from the combined code generator carried the source escapes of a key: a property named `it's` was reported at `#/properties/it\\'s/type`, and `instancePath` had the same backslash. The generator built those error objects once from text meant for generated source instead of from the values. Present since at least 1.29.0.","- A root `false` schema reported the keyword `false schema` with code ATA9001, while a nested one, and the interpreted engine, report `not` with ATA4005. It is `not` everywhere now. `ata-validator/compat` names it `false schema` for both, as the validator it mirrors does; before this it matched that validator only at the root.","","A new test compares the errors of both error-reporting generators against the interpreted engine over the official suite and schemas with keys that need escaping, 3548 results; the verdict agreement test compared only verdicts, which is how the two error faults above went unnoticed.","","## 1.31.1 - 2026-09-26","","### Fixed","","- `validateJSON` accepted documents that `validate()` rejects, for a schema with a `$dynamicRef` back to the root. With `{ $dynamicAnchor: 'node', type: 'object', properties: { child: { $dynamicRef: '#node' } } }`, `validateJSON('{\"child\":5}')` returned `{ valid: true }` while `validate({ child: 5 })` returned false. The combined code generator has no named functions, so it cannot follow a reference to the root, and it emitted nothing there, which its function then answered as valid. `validateJSON` takes the error slot of the hybrid, and that slot was the combined function, so the verdict function's rejection was replaced by the combined function's acceptance. `validate()` and `isValidObject()` were not affected, because their outer layer takes the verdict from the boolean function. Present in 1.29.0 through 1.31.0. The combined generator now declines a `$dynamicRef` to the root or around a cycle, and every error resolver that runs after a verdict of false now turns a `valid: true` into a rejection with a generic error instead of returning it, so a disagreement between two generators cannot become an acceptance again.","- `not: { $ref: '#' }` and `if: { $ref: '#' }` threw `ReferenceError: _validate is not defined` from `.errors` and from `validateJSON`. The error and combined generators compile the subschemas of `not`, `if` and `contains` with the boolean generator, which reaches the root through a function named `_validate` and a reference cycle through a named function in its preamble; neither exists in the other two generators' functions, and a cycle was cut so the reference checked nothing. Those shapes now decline and take the path that handles them. The combined generator also now binds the safe-regex factory for a pattern compiled this way, which had thrown on the first document that reached it. Both were found by inventorying the three generators side by side, not by a report.","","## 1.31.0 - 2026-09-26","","### Changed","","- `format: \"uri\"` answers the usual shape of a URL with one regular expression before it walks the string: a scheme, then either \"//\" and a host with no userinfo, port, brackets or percent escapes, or no authority at all, then characters RFC 3986 allows. Everything it accepts the walk accepts too, and anything it declines the walk decides as before. On a 34-character URL it takes 25 ns where the walk took 43. A test holds the subset relation over half a million strings and fails on the first draft of the expression, which accepted `http://[::1` by backtracking the \"//\" into a path.","- `format: \"ipv4\"` is one regular expression, measured equal to the walk it replaces on 312000 strings and 12 ns against 17 on a dotted quad. `format: \"ipv6\"` accepts the uncompressed eight-group form with one expression first, 30 ns against 64, and leaves every other form, compressed or with an embedded IPv4, to the walk; it is only tried from 15 characters, so a short rejection does not pay for it.","- The error generator declared its helpers, the uri tables, compiled patterns, `anyOf` collapse functions and name sets, inside the generated function, so they were rebuilt on every call: 655 ns on a product document with no errors, where the verdict function takes about 200. They are built once now, for schemas without `$defs` or recursion, whose helpers read per-call state and keep the old form. Reading `.errors` on that document went from 786 ns to 435.","- The Standard Schema adapter cached parsed paths in a `Map`, which hashes every path freshly concatenated by a rejection before it can look anything up. It compares against the few cached paths of the same length instead: a rejection with sixteen issues went from 1771 ns to 1250.","- `new Validator(schema)` no longer registers the instance in the identity cache that lets a later `new Validator(sameSchema)` return it. Setting that `WeakMap` entry cost about 780 ns against 150 for the rest of the constructor. The instance is registered when it first compiles instead. Two validators built from one schema object before either is used are now two instances; after the first has validated anything, the second call returns it as before.","- `t.object` reads its members with one `Object.values` call and uses the fresh key list as `required` when no member is optional. The builder output is unchanged.","- New internal hooks for wrappers that enforce checks a schema does not carry, used by `@ata-project/keywords` 0.3.3: `_extendChecks(resolve)` registers a check and its error collector once, and the validator runs the check inside its generated verdict function in place of the final `return true`, applies it to `validate()` and to the three JSON entry points, and appends the collector's errors after the schema's own. The wrapper no longer holds the entry points behind accessors, which had put the instance into V8's dictionary mode, so every property read on it, `validator.validate` included, had been a hash lookup. A test checks over 3867 suite cases that the check runs exactly when the schema accepts.","","Measured on the schemabenchmarks.dev harness on an M4 with Node 26, which is the Node version its CI runs, against 1.30.3 with `@ata-project/keywords` 0.3.2, interleaved: initialization 3190 ns to 659, validation of the valid product 361 to 235, parsing 368 to 243, Standard Schema valid 367 to 247 and invalid 1998 to 1061. The rejecting rows were already at the harness floor of about 21 ns and stay there. These are not the site's figures, which come from its own runners and have not been rerun.","","## 1.30.3 - 2026-09-25","","### Fixed","","- The buffer path threw once the native fast-schema registry filled up. The addon keeps compiled schemas for the zero-copy buffer path in a fixed array of 4096 slots, and registering the 4097th distinct schema threw `Max fast schema slots reached` out of `isValid()`, so every validator built after that point in the process was unusable on that path. A service that compiles a schema per tenant or per request reaches that on its own. Swallowing the throw on its own would have been worse than the throw: with no slot the instance holds -1, and the native bounds check turns a negative slot into \"invalid\", so a valid document would have been reported invalid. A full registry now routes `isValid`, `batchIsValid` and `countValid` through the JS engine instead, which is slower than the zero-copy walk and gives the same answer. The registry still deduplicates on schema text, so a process that builds the same schema repeatedly never fills it.","","### Changed","","- The differential fuzzer now checks something. It built one validator, set `ATA_FORCE_NAPI`, and built a second from the same schema object, which the identity cache answers with the first instance, so both results came from one compiled function and could not differ; it also counted every throw as a pass, which is how the exhaustion above had been passing, and used unseeded randomness, so a mismatch could not have been replayed. It now compares the compiled engine against the interpreted one from separate schema objects, treats a throw from one side as a divergence, seeds from `FUZZ_SEED`, and prints how many iterations reached the code generator, 92.5% of 10000 where the figure was previously unknowable. Its header records what it cannot find, measured rather than assumed: reverting either leaked-flag fix from 1.30.1 or 1.30.2 and running 20000 iterations still reports all clear, because those need a three-way coincidence of roughly one in a million per iteration, and the targeted corpus in `test_engine_differential.js` is what covers them.","","## 1.30.2 - 2026-09-25","","### Fixed","","- A sibling's `propertyNames` disabled the next node's. The generators coordinate within one schema node using a couple of flags, \"this node's `patternProperties` already emitted the `propertyNames` check\" and \"this node already emitted its key count early\", and those were kept on the compile context, which outlives the node, and were never reset. With `properties: { a: { patternProperties: { '^x': ... }, propertyNames: { pattern: '^x' } }, b: { propertyNames: { pattern: '^y' } } }`, `a` is compiled first and sets the flag, `b` reads it and emits no `propertyNames` check at all, so `validate({ b: { zzz: 1 } })` returned true where the interpreted engine returned false. The constraint was not misplaced but absent, which accepts what it should refuse. The flag was clobbered downward as well as sideways, since a node's children are compiled between the point it is set and the point it is read, so a parent's `propertyNames` could vanish because a child had its own. Reachable on the verdict and combined generators; the error generator has its own handling and was already right. This is the same class as the deferred `additionalProperties` bug fixed in 1.30.1, per-node state on a per-compile object, and it was found by sweeping the compiler for the rest of that class rather than by a report. The flags are locals now, so the class is gone by construction. A new test enumerates every compile-context field and fails on one that is not genuinely per-compile, so the next such flag has to justify itself, and both shapes are in the engine differential, where they split the engines on 12 of 23664 cases without the fix.","","## 1.30.1 - 2026-09-24","","### Fixed","","- A `$defs` entry that is both self-recursive and carries `additionalProperties: false` made the code generator reject valid documents. With `$defs.f` declaring `properties: { not: { $ref: '#/$defs/f' } }` alongside `additionalProperties: false`, and a root referring to it through an `anyOf`, `validate({ id: 1 })` returned false where the interpreted engine returned true. `additionalProperties` is held back to the end of the emitted function, because the body optimizes better when the key walk is last, and the list it waits in hung off the whole compile rather than the one function. A def on a `$ref` cycle is emitted as a function of its own, so the def's key set was flushed into whichever function was being compiled: the root above walked its own keys against the def's list and refused `id` for not being `not`. The combined generator never flushed that list at all, which drops the constraint rather than misplacing it. Modules built with `ata build` carry the same fault, since they go through the same generator. Present in 1.27.1, 1.29.0 and 1.30.0. A def now keeps its own list for the length of its own body. The shape is also in the engine differential now, which had the blind spot that let this ship: its corpus had `$defs` and it had `additionalProperties`, but never the two crossed with recursion. Without the fix it splits the engines on 30 of 21168 cases.","","## 1.30.0 - 2026-09-24","","### Fixed","","- Reading `.errors` threw a `TypeError` for an invalid `uri-template`. `new Validator({ format: 'uri-template' }).validate('http://example.com/dictionary/{term:1}/{term').errors` raised `(_e || _e).push is not a function`. The combined generator accumulates errors in `_e`, and the emitted source for that format declared its own `const _e` for the index of a closing brace, which shadowed the accumulator inside its block. It was the only emitted format source that declared that name. The verdict was always right, which is why the suite never caught it: the suite reads verdicts, and only a caller reading the errors got the throw. Present in 1.27.1 and 1.29.0. Three checks now hold the class rather than the one format: the case itself, a static check that no emitted format source declares the accumulator's name, and a sweep of the official suite reading `.errors` on every rejection, 642 schemas and 2230 cases.","","### Changed","","- `additionalProperties: false` no longer materialises the object's keys on every document that has nothing extra. The error has to name the offending property, so the keys have to be materialised to report one; they do not have to be materialised to find out whether there is one. The combined and error generators both called `Object.keys` and walked the array regardless, where the verdict generator has always used a bare for-in count. A for-in decides, and the keys are built only when something is actually extra. A bare count would be wrong, since an extra key present while a declared one is missing leaves the count matching, so the gate tests each key. Measured on three declared properties: the check 12.93 to 9.71 nanoseconds against the verdict generator's 8.91 floor, and the combined function 2.80x the verdict function on a valid document down to 1.50x. The request-body schema on the docs site is a strict one, so this moves the published per-request figures: accepting a body 64.8 to 41.8 nanoseconds, rejecting it 51.5 to 28.6, reading its errors 337.4 to 246.5.","- `validateJSON(text)` asks the wire scanner for its verdict, the way `isValidJSON` already did. Above the simdjson threshold it encoded the whole document to a Buffer and called the native validator instead, which measured 349 microseconds against the scanner's 191 on a 149 KB config, 16.8% of it in `utf8Write`, and the same against the published per-platform addon as against a local build. An accepted document now stops at the scanner; a rejected one goes on to the path that produces errors, skipping an encode and a native call that would only return false. Valid 349 to 177 microseconds, invalid verdict 445 to 383, invalid with frames 773 to 712. The valid row is now 0.91x a bare `JSON.parse` of the same text, because the document is never parsed.","- A rejection is validated once rather than twice, from the first rejection on. The hybrid assembly ran the verdict function and then handed the document to the error resolver, which ran the combined function over the whole document again; the combined function decides and collects in one pass. It stays lazy, since compiling it eagerly triples what a first call costs: the hybrid answers until the first rejection and the combined function from then on. Reading errors went from 3.15x the verdict-only API to 2.14x, with accepted documents unchanged. One more layer above this one still does the same thing and gets its own change.","- The position map is built for the pointers an error names instead of for every node in the document, in the runtime and in emitted modules. A rejection names two or three pointers and nothing reads any other entry, so on a 149 KB config the map was 1322 microseconds of a 2378 microsecond frame read. A subtree that cannot contain a wanted pointer is scanned to its end and never walked, and the walk stops once every wanted pointer is found: 11.5x on pointers near the start of a document and 3.7x in the worst case for the technique, one pointer at the very end. Reading an error with its frame went from 705 to 270 microseconds on a 50 KB config and from 2378 to 772 on a 149 KB one. In a module built with `{ positions: true }` the same change took framing an error from 8.02x a `JSON.parse` of the document to 1.72x, and it costs nothing to carry: 21 bytes larger raw and 361 bytes smaller gzipped. A derivation that misses a pointer must not cost a frame, so the runtime answers anything outside the set from the full map rather than reporting no position.","- The `email` format reads both halves of the address in one forward pass. `@` is not a local-part character, so in an unquoted address the first one is the separator and the local part is checked on the way to it; the check read the string backwards with `lastIndexOf` and then forwards twice, and sliced both halves out. On a 1000-user array with `format: email`, against ajv with ajv-formats at its strictest mode, five rotating rounds: ata 42 microseconds and none of twelve edge cases wrong, `mode:full` 42 microseconds and five wrong, `mode:fast` 41 and seven wrong. That row started at ata 57 against ajv 37. The others accept a doubled dot, a leading dot and a local part over the RFC's 64 characters, and reject quoted local parts and address literals.","","## 1.29.0 - 2026-09-24","","### Changed","","- `validateJSON(text)` defers every diagnostic to first access to `.errors`, the way `validate(data)` has since 1.9.0. Reading `.valid` on a 50 KB invalid document went from 585 to 152 microseconds, which is what the same validator costs with `richErrors: false`, and it parses the document zero times instead of once. Two things were eager and both had to move: the position map was resolved in the `validate` wrapper on every rejection where `validateJSON` had set the raw input, before the rejection object was even built, and the `validateJSON` wrapper then parsed the document and ran the whole enrich, frame and payload pass. Deferring only the first makes it slower, not faster, because the wrapper reads `result.errors[0]` to test for a `docUrl` and that realizes the map, whose cache is then reset, so the wrapper builds it again. Error content is unchanged. A check on a timer that reads a verdict and no message, which is where this shows up, now pays nothing for messages it does not read.","- An emitted module records the ata that wrote it. `ataVersion` sits next to `schemaHash` and is declared in the emitted `.d.ts`, and every generated artifact names the version on its first line. Staleness was detectable on one axis only: the schema hash catches a changed schema, and an ata upgrade leaves it matching, so a module compiled by an older version reads as current and goes on being used, which hides anything that improves inside the emitted code. A standalone module imports nothing by design and cannot ask the installed ata about itself, so it carries the fact instead and a build compares both. The two CJS bundle paths had emitted no provenance line at all.","- The npm package no longer ships `CHANGELOG.md`. Its history had reached about 13% of the packed tarball, 40 KB of every install, and it is a click away in the repository. The tarball is 263954 bytes, against a 307200 byte ceiling that had 3270 bytes of headroom left.","","## 1.28.0 - 2026-09-23","","### Added","","- `engine: 'interpreter'`, a per-validator setting that keeps a schema off code generation: no `new Function`, no shared compile cache; the eval-free interpreted engine answers `validate()`, `isValidObject()` and `validateJSON()`. The default is the right trade for a schema the application wrote. A schema that arrives at runtime from a plugin or a tenant is input, and until now the only way to validate against one without executing source derived from it was the process-wide `ATA_FORCE_NAPI` switch. `engine()` reports `'interpreter'` for such a validator; any value other than `'auto'` or `'interpreter'` throws, so a misspelling cannot fall through to the generator. `tests/test_engine_option.js` holds the verdicts equal across engines and proves, with `Function` guarded, that the interpreter validator never builds a function from source while the default one does. Contributed by @d4tocchini in #43.","","### Changed","","- The position map behind `dataFrame` is built without per-node work, which makes an invalid document cheaper to report on. It used to record an entry for every node in the document: a JSON pointer rebuilt from a path array with `concat`, `map` and `join`, a binary search and an object allocation for the value and another pair for its key, and a `JSON.parse` of every string value whose result was then discarded. String values are now spanned and not decoded, a key decodes only when its token holds an escape or a raw control character, the pointer is carried down the walk instead of being rebuilt, and line and column are resolved at the end for the nodes that were recorded. On a 132 KB config with three errors the map went from 2800 to about 1040 microseconds, which is 19.8x down to 7.3x the cost of `JSON.parse` on the same text, and the whole `validateJSON` call went from 3673 to 1825 microseconds. Output is unchanged: 112661 fuzzed documents, random and truncated and CRLF and BOM-prefixed and byte-punched, map identically against the previous walker, field order and throws included, so a document that declined to map still declines. Standalone modules built with `{ positions: true }` embed this walk, so they carry the same improvement once rebuilt. `tests/test_position_map_cost.js` gates it as a ratio to `JSON.parse` rather than as a time, because the cost is what regressed.","","## 1.27.1 - 2026-09-17","","### Fixed","","- A default fills a property the instance does not carry, and both engines asked `key in data` to find out, which also answers for what the instance inherits: a property named `constructor` never received its default, and one named `__proto__` sent its nested defaults to `Object.prototype`, since the interpreter's applier walked `data.__proto__` as the parent. Both now ask `Object.hasOwn`. `tests/test_defaults_own_keys.js` holds it for either engine. Reported and fixed by @d4tocchini in #43.","- Completing that report, every remaining prototype-unsafe write and walk in the defaults machinery is closed. The nested-defaults applier now refuses to walk a parent the instance does not carry as an own key, which was the reachable pollution: a schema declaring a property named `__proto__` with nested defaults, no matter what the input held, resolved `data.__proto__` to `Object.prototype` and wrote the child defaults onto it, for every object in the realm, on both engines. Fills of a property named `__proto__` go through `Object.defineProperty`, because plain assignment of that name rewrites the object's prototype instead of creating a property; type coercion skips that name for the same reason, and the raw value still goes through validation. The AOT `parse()` emitter gets the same treatment defensively (computed keys in literals, `Object.hasOwn` presence checks, `defineProperty` for the one dangerous name), and its record loop, whose keys come from the input, now keeps a JSON-parsed own `__proto__` key as an own key in the output instead of silently rewriting the output's prototype.","","## 1.27.0 - 2026-09-17","","### Added","","- `parse()` is now emitted for the record shape: `additionalProperties` as a schema, which is what `z.record` and every generator's map type compile to, with or without declared `properties` beside it. The key set is open by declaration, so keeping every key is exact, and every undeclared value is rebuilt against the one schema that governs it, stripping unknown keys inside it the same way a declared property's rebuild would. Defaults under a record value are not filled, because the runtime's `useDefaults` does not fill them there and `parse()` output stays equal to `validate().data`. Still declined, loudly: `additionalProperties: true` (the value is unconstrained, and this pass only copies what it can prove), applicators next to a record (a branch could constrain some keys' values beyond the record schema), and `patternProperties` (a key matching several patterns must satisfy all of them at once, which the rebuild cannot pick a shape for).","- `onWarning` now receives a second argument, `{ kind }`, naming which capability degraded: `'error-detail'` or `'parse'`. A build that requested both can tell the warnings apart instead of treating any warning as degraded errors. `build()` result warnings carry the same `kind` field. Existing single-argument callbacks keep working unchanged.","","### Fixed","","- Two more fixed-name collisions in the generated-code path, the same family as the `patternProperties` helper-scope bug in 1.26.0: a record whose values are themselves records (`additionalProperties` nested in itself) generated an inner loop that redeclared the outer loop's variables and threw `ReferenceError: Cannot access '_av' before initialization` at validation time, and `patternProperties` inside a `patternProperties` value schema had the same collision on its own loop variables. All three loop names now carry a unique suffix. The combined error generator already did this; the boolean generator now matches it.","","## 1.26.0 - 2026-09-17","","### Added","","- `toStandaloneModule(schema, { parse: true })` inlines local, acyclic `$ref`s before the clone proof runs, so schemas that keep their shapes in `$defs` and reference them, which is every schema a generator emits, now get a `parse()`. Only a node that is exactly a `$ref` plus annotations is inlined; a cycle, an external reference or a constraining sibling keyword leaves the reference in place and the clone declines as before. Defaults follow the runtime exactly: a `default` written next to the `$ref` fills, a `default` written inside the referenced definition does not, because `validate()` with `useDefaults` draws the same line and `parse()` must not be more generous than `validate()`. A new test holds `parse()` output equal to the runtime's `validate().data` on the same input.","- When `parse: true` is requested and the clone still cannot be proven, the decline is loud: `onWarning` fires with the reason, and the emitted module carries a NOTE comment saying it has no `parse` export. Previously the only way to notice was reading the export list.","","### Fixed","","- The runtime compiler built `patternProperties` (and combined `additionalProperties`) child validators with `new Function`, which discarded the parent's helper scope: a child schema that needed a compiled pattern or format helper threw `ReferenceError` at validation time. Child checks are now generated inline in the parent validator and share its helper bindings. Reported and fixed by @jdalton in #46.","- The TypeScript declarations emitted next to a compiled module now declare the `schemaHash` export; 1.25.0 added it to every module but not to the generated `.d.mts`, so importing it by name failed type checking while working at runtime.","","## 1.25.0 - 2026-09-17","","### Fixed","","- Emitted standalone modules compiled their regex patterns on every call. The compiler stores each pattern both as a closure variable and as an inline `const _reN = __ataSafeRe(...)` in the stored source; in process the inline line never runs (the closure binds the compiled matcher once), but every emitter placed it inside the emitted function, where it shadowed the module-scope binding and rebuilt the matcher per call. A schema with one `pattern` validated at 202 thousand ops/s as a standalone module while the in-process path ran at millions. Patterns are now declared once at load scope in all four emitters (`toStandalone`, `toStandaloneModule`, `bundleStandalone`, `bundleCompact`); the same document on the same schema now measures 27.0 million ops/s, 134x. `bundleCompact` needed care: its deduplication keyed on body text alone, and with the pattern no longer in the body, two schemas differing only in their pattern would have merged, so the key now includes the factory-scope declarations.","","### Added","","- Provably local `unevaluated*` compiles real error detail on the generated-code path, and therefore in standalone modules. When every occurrence of `unevaluatedProperties`/`unevaluatedItems` sits on a node with no `$ref` and no `patternProperties`, and every in-place applicator (`allOf`, `anyOf`, `oneOf`, `if`/`then`/`else`) contributes only property names the node's own `properties` already declares, the keyword is exactly `additionalProperties`/`items` in disguise and both the error and combined generators now emit it as such, keeping the keyword's own identity: one error per stray key with `params.unevaluatedProperty` (ATA7003), one error with `params.limit` for extra items. `toStandaloneModule` with error detail requested no longer degrades on these schemas; a config schema of the common `if/then/else` plus root `unevaluatedProperties: false` shape ships an AOT module with the same per-field errors the runtime reports. Schemas where the annotations cannot be proven local (`unevaluated*` next to a `$ref`, cousin-visible shapes) still decline, loudly, as before. Verified by the error-shape differential (2,816 cases), the engine differential (18,126 cases) and the official suite on all three dialects.","- `toStandaloneModule(schema, { positions: true })` also exports `validateJSON(text)`: parse, validate, and on failure attach a `dataFrame` (`byteOffset`, `length`, `line`, `col`, `text`) to every error by walking the original text once. The mapping goes through `instancePath`, so a key that appears in several sections frames each error on its own occurrence, which a first-occurrence string search does not. A syntax error is the single ATA9001 error with a frame on the document. The walker is the runtime's own `buildDataPositionMap`, embedded verbatim so the two cannot drift, and it costs about 5 KB in the module (1.7 KB gzipped), which is why it is opt-in.","- `toStandaloneModule(schema, { parse: true })`'s `parse(data)` now fills declared `default` values for absent optional properties (object and array defaults are fresh per call) and is emitted for composed schemas under the same proof the `unevaluated*` error generators use: in-place applicators are admitted when every property name they mention is already declared in the node's own `properties`. The common config shape, `if`/`then`/`else` over declared fields with root `unevaluatedProperties: false`, now gets a `parse` that enforces the conditional, rejects undeclared keys, and returns the ready object. Two default shapes decline because they are where `parse` and the runtime would disagree: a required property with a default, and a default the property's own schema rejects.","- Every emitted module exports `schemaHash`, a 16 character content hash of the schema it was compiled from, over canonical JSON so key order does not matter, computed from the schema as the caller wrote it so dialect normalization does not break the comparison. `schemaHash(schema)` from `ata-validator/build` computes the same value; a build detects a stale artifact by comparing the two instead of embedding its own fingerprint.","- The agreement between compiled modules and the runtime is now a stated contract, in `docs/STABILITY.md` and the API reference: same version, same verdict on every document, enforced by the differential test in every CI run, with the emitters declining or degrading loudly where they cannot prove equivalence.","- The compat shim exports `attachDataFrames(errors, text)`: the same one-pass mapping for Ajv-shaped errors, for callers that keep the source text around. Not an Ajv API; it exists because hand-written line finders based on a string search get repeated keys wrong.","","## 1.24.0 - 2026-09-16","","### Added","","- A schema-directed scanner: `isValidJSON()` answers the verdict from the JSON text without building the document. Parsing is about three quarters of the cost of a request that only needs yes or no, and a rejection now stops at the byte that caused it. The scanner compiles per schema, on the codegen path only, after 64 calls (generating one costs about 20 µs, so a caller that checks one document never pays), and it declines anything outside its supported core: `type`, `properties`, `required`, `additionalProperties`, `items`, `prefixItems`, the length, size and range keywords, `pattern`, `format`, `const`, `enum`, local `$ref` (inlined, acyclic, no base-changing keywords below the root), `allOf` (merged, with the `additionalProperties` cross-branch rule written out in full), and `unevaluated*` where it is provably a synonym for `additionalProperties`/`items`. Whatever it cannot answer it declines at compile time or bails from at runtime, and the parse path takes over unchanged. `tests/test_scanner_differential.js` holds the scanner and `validate()` to the same verdict on the same text: 413,130 comparisons over the official suite, a malformed-JSON corpus and generated corruptions, zero disagreements, and the count must stay at zero.","  - Cross-process medians against the same call forced through `JSON.parse`: accepted documents 1.19x to 1.43x by size; rejection at the first element 37x at 4 KB and 385x at 41 KB.","  - Generated config schemas are first-class: up to 4096 properties per node, and past 48 names the dispatch is a rolling hash accumulated during the key scan, one lookup in a Map passed outside the source, one `startsWith` to confirm, bodies shared per distinct subschema, and an in-order fast path for machine-written JSON that resynchronises across omitted optional keys. A 26.6 KB config with 1300 declared properties: 136.7 µs by parse-and-validate, 43.8 µs by scan.","  - `isValidJSON` also remembers the last (text, verdict) pair, since the verdict is a pure function of the text: a drift monitor re-reading an unchanged file answers in 0.44 µs by native string compare. Withheld when user formats or custom keywords are present, since user functions may not be pure.","- Strict mode covers all four cases from issue #44: unknown keywords (with a spelling suggestion), unresolvable local `$ref`s, keywords the node's own `type` makes inert (`minimum` on a string can never fire), and `required` names nothing can satisfy (`additionalProperties: false` with the name absent from `properties`). `ata compile --strict-schema` and `build({ strictSchema: true })` run the same checks at build time and refuse to emit a module from a schema that fails them.","","### Fixed","","- An AOT module that cannot carry error detail says so. `toStandaloneModule` with error detail requested builds the error function from the error generator, which declines some schemas, `unevaluated*` among them; the runtime validator falls back to the interpreted engine there, but a standalone module has nothing to fall back to, so it shipped with an exact verdict and a single ATA9000 stub for every failure, silently. The module still ships, since the verdict is exact and validating the rare failing document with the runtime `Validator` is a legitimate pattern, but the degradation is loud in every layer: `onWarning` on the emitter, a NOTE in the module header, a `warnings` list in the `build()` report, a printed warning from `ata compile`, and a refused build under `--strict`. Found by a gateway team that lost their per-field startup errors to it.","","## 1.23.0 - 2026-09-16","","### Added","","- `strictSchema: true | 'log'`, and the compat shim's `strict`/`strictSchema` now enforce it: the authoring-time checks for the mistakes that fail open. An unknown keyword throws at construction with its path and the nearest known spelling, `strict mode: unknown keyword \"maxLenght\" (did you mean \"maxLength\"?) at #/properties/a/maxLenght`, and a local `$ref` that does not resolve in its own document throws instead of compiling a validator that rejects everything. `'log'` warns through the logger and continues. Off by default. The known-keyword list is derived from the vendored meta-schema documents rather than maintained by hand, plus the keywords ata implements beyond them; `x-` prefixed names and keywords registered through the `keywords` option pass. Property names, `enum` and `const` values, `default` and `examples` are data, not keywords, and the walk knows the difference, including the draft-07 `dependencies` form. `strictTypes`, `strictTuples` and `strictRequired` remain accepted and ignored, and `compat.d.ts` now says which is which. Reported as issue #44 by a migration that fuzzed 1,364 mutations against both validators, found zero divergence, and then shipped a typo.","","### Changed","","- The error and combined generators compile on the first rejection instead of at startup. Every schema compiled three functions eagerly: the verdict, the combined validate-and-collect form, and the error generator, which on a cold first call cost 8.2, 10.4 and 7.8 ms on a 120-property config schema, most of it V8 compiling each generator's own code the first time it is entered. A caller that never reads an error never needs the last two, and `validate()` on a passing document does not either, so they are built on the first rejection. Compile plus first verdict on that schema: 30.7 to 10.8 ms, interleaved runs of committed builds. The warm path measured the same on all ten cases checked. The shared compile cache keeps `undefined` meaning not built yet and `null` meaning the compiler declined, in both places that seed it, and `tests/test_compile_cache_order.js` caught the one seam where the two seeders disagreed during this change.","- The static `unevaluatedProperties` tier stopped checking membership with a first-character switch. Keys sharing a first character, `ENV_0` through `ENV_999` say, all land in one case whose body chains every name, per key of the document: the `additionalProperties` quadratic in a different coat. Above 128 declared names the generated code reads the hoisted lookup that fixed the first one; below that the switch stays. A 1300-property config document with both of its objects closed: 87.7 to 24.5 µs, and the keyword now costs what `additionalProperties` costs, which is the membership test itself. Only the boolean generator has this code; the error and combined generators decline `unevaluated*` and the interpreted engine produces those errors.","- The compat shim derives each error's pointer segments and kinds once, into a key map shared by the reference-order sort and the shaping loop. The sort comparator used to re-split and re-classify both errors' pointers on every one of its comparisons, and the loop derived the same segments again per error, with the `if` wrapper's flush doing it a third time. A seven-error rejection through `ata-validator/compat` with `allErrors`: 5.79 to 3.27 µs. The shim's own overhead over `Validator.validate` fell from 4.4 µs to 1.9. The compat surface is pinned by `test_compat`, 106 error-format cases, 36 parity cases and the error-shape differential, all green before and after.","","### Fixed","","- The API table said `verbose` attaches only `parentSchema`; it attaches `parentSchema`, `schema` and `data`, and the migration guide now lists which `params` key each keyword carries. The performance notes recorded \"length-bucketed key comparison for `additionalProperties: false`\" as measured and dropped on the grounds that each comparison is a pointer compare; that was right about one comparison and wrong about the total, and the note now carries the measurements that replaced it.","","## 1.22.1 - 2026-09-16","","### Fixed","","- `validateJSON()` did not return on a document that ends inside an array. `validateJSON('[')` was one byte, any schema, the default configuration, and it never came back. On a rejection the error carries a caret, so a map from pointer to position is built from the raw text; its array loop asked for the next element without checking that the input had ended, `walk` returned without moving, and nothing else could close the array. `'[}'` hung the same way, because a character that begins no value leaves the position where it was. The object loop escaped only by accident: an unterminated string throws, and `lib/data-position-cache.js` catches throws. It cannot catch a loop. Both container loops now stop at the end of the input, and the array loop stops when an iteration does not advance, so a truncated document still yields a map of what was there.","  - A regression here is an infinite loop, which an ordinary test cannot report because it never reaches a failure. `tests/test_malformed_json_termination.js` runs its corpus in a child process under a watchdog, so a hang becomes a timeout and a red test. The corpus is every prefix of ten documents plus characters inserted where they cannot begin a value: 1793 inputs, 7172 verdicts. It was confirmed to fail before this change and pass after.","  - `tests/fuzz_positions.js` had never fed malformed text to this walker; it fuzzes schema positions with `JSON.stringify` output, which is always well formed. Nothing else changes: on the same five-field schema, `validate()` on a valid document, `validate()` on an invalid one with the errors read, and `validateJSON()` on both are all within measurement noise of 1.22.0.","","- `unevaluatedProperties: false` reported the boolean schema underneath the keyword instead of the keyword itself: `keyword: 'not'`, empty `params`, and an `instancePath` pointing at the offending member rather than the object holding it. Nothing in that error said which key was unexpected, so a caller branching on `params.unevaluatedProperty` to flag unknown keys saw nothing at all. It now reports `unevaluatedProperties` on the object, with `params.unevaluatedProperty` naming the key, one error per key. `unevaluatedItems: false` had the same shape and now reports one error for the array, with `params.limit` at the first unevaluated position. Both engines were changed together and `tests/test_unevaluated_error_shape.js` holds them to it. Reported by a config linter reading `err.params.unevaluatedProperty` through `ata-validator/compat`.","- `verbose: true` attached only `parentSchema`. It now also attaches `data`, the value the error points at, and `schema`, the failing keyword's own value, which is the whole set the option is supposed to carry. Without `data` a caller had to walk the document by the instance path itself. The default error shape is unchanged: the two fields appear only when `verbose` is on, including on the errors `ata-validator/compat` synthesises for an `if` wrapper.","","### Changed","","- `additionalProperties: false` no longer compiles to a comparison per declared name. It was one comparison per name per key of the document, which is quadratic in the number of properties: a 1000-property schema spent 75 µs on a document where the same schema without the keyword took 3, and doubling the properties quadrupled that. Above 128 declared names the generated code now reads a name lookup built once per compiled function; below that the comparison chain stays, because it allocates nothing and the two are the same within noise there.","  - Cross-process medians, one variant per process, properties of type string: 250 names 8.76 µs to 5.49, 500 names 26.29 to 12.47. With no per-property work, so the membership test is all that is measured: 1000 names 77.3 µs to 18.1, 2000 names 273.6 to 38.9.","  - Measured and not taken: `for...in` over the document instead of an indexed loop over `Object.keys` was about a quarter slower at every size, even though it allocates no key array.","  - `tests/test_additional_properties_scaling.js` guards this structurally, on the emitted source: the lookup is present above the threshold, absent below it, and declared outside the function that runs per call. It asserts no timing, because a wall-clock ratio was not a guard here: the quadratic shape measured 7.7x for four times the properties on the machine the test was written on, where a CI runner measured 8.3x for the fixed code. The comparison chain short-circuits as soon as a key matches, so the ratio never separated the two. Found by a config linter whose schema is generated from a project's environment variables, so its property count is whatever the project has.","","## 1.22.0 - 2026-09-14","","### Fixed","","- A schema validated once with `isValidObject()` lost its generated error function for the rest of the process. The verdict-only fast path compiles that one function and seeds the shared compile cache with the other two set to null, meaning \"not built yet\"; the full compile read those nulls as \"the compiler declined this schema\" and never tried again, so errors fell back to the interpreted engine or the addon. Every server hits that order, because most documents are valid. Cache entries now record whether they are complete. Verdicts and error content were never affected, and `tests/test_compile_cache_order.js` runs both orders in separate processes and holds the engine and the error list equal.","  - Measured on a five-field schema with an enum and a format, after validating one valid document: `validate(bad).errors` 3.89 µs to 0.66 µs, the Standard Schema path 3.52 µs to 0.07 µs. With no addon installed at all (`ATA_NO_NATIVE=1`), where the fallback was the interpreter rather than the addon, 1.05 µs to 0.66 µs and 0.42 µs to 0.07 µs.","  - `engine()` reported `closure` for a schema that compiles, once a valid document had been validated first. It now reports `codegen` in either order.","","### Changed","","- The official test suite submodule moved 60 commits forward, to 2026-09-13. All three dialects stay at zero regressions and the case counts rose: Draft 2020-12 1299 to 1301, draft 7 927 to 929, the v1 dialect 1133 to 1135, identical with code generation blocked. The buffer path agrees with `validate()` on all 3365 of them. Every figure in the README, the docs and the contributor notes was remeasured and updated together, and the floors in `tests/test_no_eval.js` were raised so the new cases cannot be lost silently.","","- `uri` is one walk over the string instead of three, and reads its character classes out of tables instead of comparison chains. It was the most expensive thing an ordinary document carried: on a schema with five formats over a 1.6 KB payload, format assertion was 94 percent of the validation cost and `uri` was most of that, while the structural check of the whole nested document was 43 ns. The authority's landmarks, the last `@`, the colons after it and whether a bracket came before it, are now recorded during the character scan rather than by cutting the authority out with `slice` and asking the copy for `lastIndexOf` and two regular expressions.","  - `format: uri` on one string, through a compiled validator: 92 to 42 ns. The same product schema's document: 697 to 423 ns. End to end, where `JSON.parse` is the other 75 percent: 2.98 to 2.69 µs.","  - Measured, and not taken: nine `===` tests per character cost more than the loop they guarded, a lookup table is 2.3x that chain, and a three-regex formulation of the whole rule landed at 65 ns against the table walk's 41.","  - The code generator hoists the walk once per compiled function and calls it, rather than inlining it at each call site where the tables would have to be rebuilt. This is the shape `email` already had. `tests/test_uri_helper_parity.js` holds the function, the generated text and a compiled validator to the same answer over 35,677 strings built from the walk's own boundaries.","","- Enriching a rejection no longer reads more of the document than the diagnostic it produces. `received` describes the offending value in at most 60 characters, and it used to find out whether a value fitted by serialising it whole, so a `required` error on a large payload cost a `JSON.stringify` of that payload, once per error. Sizing is now bounded by those 60 characters and stops as soon as they are spent. Enriching one error on a document holding a thousand rows: 61.5 µs to 160 ns, and flat in the size of the document rather than linear. On the schema-benchmarks product schema, where `validate()` reports 16 errors, reading `.errors` went from 9.84 to 5.10 µs (48 percent less) on the same machine, separate processes. Verdict paths, `isValidObject()` and the Standard Schema bridge are unchanged.","- An object too large to show reports its shape rather than its serialised size: `[object, 5 keys]` where it used to say `[object, ~0.1KB]`. This is the only change to error output; every value that printed its body before prints the same body now, including nested objects, arrays and values with their own `toJSON`.","- The error's value is resolved from its pointer once and handed to both the `received` repr and the suggestion sources. `lib/suggestions.js` had a second pointer walk that split the string and mapped over the segments; both paths now use `resolvePointer` in `lib/pointer.js`.","- A `required` typo hint is offered on containers of up to 64 keys. Past that the nearest key stops being evidence of a typo, which is the cap `suggestEnumTypo` already applied to its candidate list, and the scan is a distance computation per key.","- `levenshtein` reads characters by code and swaps its two rows through a temporary. The destructured swap it used built an array per row. About 9 percent faster on the key pairs the suggestion sources compare.","- `tests/test_enrich_received.js` holds enrichment to within 4x across a hundredfold increase in document volume. Before this change the same measurement was 122x.","","## 1.17.2 - 2026-09-13","","### Changed","","- `new Validator(schema)` no longer walks the schema. Normalization (the draft-07 rewrites, `nullable`, `format` removal under `assertFormat: false`) and the scan that decides whether any of it is needed now run on the first read of the schema, which is the first compile. Construction is the instance and its fields. Measured on the schema-benchmarks product schema built fresh each time: 4.28 to 0.91 µs; with the `@ata-project/keywords` wrapper (0.3.1, which reads the schema lazily too) 6.70 to 2.81 µs. Nothing observable changes for a schema that is used: the same normalized document reaches the engines, and the identity cache, `keywords`, `assertFormat` and `source` options behave as before. `tests/test_lazy_normalization.js` counts property reads on the schema during construction and holds them at the dialect lookup alone.","","## 1.17.1 - 2026-09-13","","### Changed","","- The rejection object behind a failing `validate()` is an instance of a class with prototype accessors rather than an object literal that defined a getter and a closure on every rejection. Same shape, same laziness, same caching; `JSON.stringify` still sees the errors.","- Declaration-order sorting of short error lists is a stable in-place insertion sort over the integer keys, with no comparator and no index array. Measured on the raw error list of the schema-benchmarks product schema, 15 errors: 1.49 to 1.10 µs; through the Standard Schema bridge 2.02 to 1.63 µs. Since 1.16.2 that row has gone from 3.30 to 1.63 µs on the same machine, and in the schema-benchmarks harness itself standard invalid went from 3.57 to 1.44 µs (60 percent less), every other row within noise.","","### Fixed","","- `validateJSON()` reports errors in schema declaration order, as `validate()` does. The text path enriched errors in emission order, so the first error could differ between the two entry points for the same document.","- An instance built with options no longer answers a later `new Validator(sameSchema)` without options. The identity cache was seeded by every instance, so a validator created with `richErrors: false` or `coerceTypes` could be handed back to a caller that asked for the defaults.","","## 1.17.0 - 2026-09-13","","### Changed","","- Errors are put in schema declaration order by an integer computed when the schema is compiled, not by walking each error's schemaPath at read time. The rank of a path is its pre-order position in the schema tree, which is exactly the order the old array-of-indexes comparison produced; the code generator now writes that position into each error literal (`_o`, an internal field), the reader compares integers, and a list that already arrives in order is returned without sorting or allocating. Errors without a position (an appended custom-keyword error, a path into another document) keep their place next to the error before them. The ordinal logic lives in `lib/schema-order.js`; `tests/test_error_order_ordinal.js` holds the ordinal to the array rank on a set of paths and holds the public error order unchanged.","- The Standard Schema bridge caches parsed issue paths per instancePath string (bounded, entries frozen), instead of splitting the string for every issue of every rejection.","- Measured on the schema-benchmarks harness locally, before and after on the same machine: standard invalid 3.57 to 2.83 µs (21 percent less); every other row within noise. On the raw error list of that schema, 15 errors: 1.88 to 1.50 µs; through the Standard Schema bridge 3.30 to 1.99 µs. Verdict paths are untouched.","- `richErrors: false` keeps the v0.14 key set: the ordering field is dropped from that shape.","","## 1.16.2 - 2026-09-12","","### Fixed","","- A schema with `unevaluatedProperties` or `unevaluatedItems` reported every failure as one placeholder error, `{ code: 'unevaluated', message: 'unevaluated property or item' }`, with no `keyword` and no `instancePath`. The generated code answers the verdict for these schemas but the error generator declines them, and the error path then fell into a stub instead of the interpreted engine, which reports them correctly. A wrong type, a missing required property, a bad format or an enum miss under a root `unevaluatedProperties: false` all came back as that one line, so anything mapping errors by keyword and path saw nothing useful. Failing data is now re-validated by the interpreted engine on that path, as it already was without the native addon for other declined shapes. Verdicts were never affected. Found by a user comparing error output on a generated config schema. `tests/test_unevaluated_error_path.js` holds the generated-code path to the interpreter's errors on five shapes, in all three engine modes.","","## 1.16.1 - 2026-09-12","","### Fixed","","- A custom format (`formats: { name: fn }`, or `addFormat` on the compat class) next to a shape the combined code generator declines, such as an `anyOf` sibling, threw `_uf_\u003cname\u003e is not defined` on the first invalid document instead of reporting the format error. The error-path code generator emitted the call to the format checker without binding it; it now takes the checkers as bound parameters like the other two entry points. Verdicts were never affected, only the error path, and only on that combination. Present since custom formats were added; caught by the 1.16.0 clean-install check. `tests/test_user_format_error_path.js` covers it.","","## 1.16.0 - 2026-09-12","","### Added","","- Custom keywords. `new Validator(schema, { keywords: { name: definition } })` registers keywords with a `validate(value, data, parentSchema)` function, a `compile(value, parentSchema)` factory, or a `macro(value, parentSchema)` that returns a schema applied in place. A definition can name the JSON Schema `type` it applies to. A schema that uses a registered keyword runs on the interpreted engine, so `anyOf`, `not`, `$ref` and the other applicators keep their meaning around the custom check; the compiled engines, the tier-0 plan and the native walker are all routed away from such schemas, and `bundleStandalone` refuses them instead of emitting a module that would ignore the keyword. Verdict paths (`isValidObject`, `isValidJSON`) agree with `validate()`. A keyword definition with none of the three forms throws, so a `code`-only definition is never accepted quietly.","- `ata-validator/compat` covers the reference class's surface: `compileAsync`, `removeSchema` (by key, by object, by RegExp, or everything), `validateSchema` against the vendored meta-schemas, `addFormat` in its four forms, `addKeyword` in the `validate`, `compile` and `macro` forms plus the bare-name form, `addVocabulary`, `getKeyword`, `removeKeyword`, `errorsText`, `addMetaSchema`, `ajv.errors` and `ajv.opts`; and the constructor options `allErrors`, `useDefaults` (off by default, as in the reference), `coerceTypes`, `removeAdditional`, `verbose`, `validateFormats`, `validateSchema`, `formats`, `keywords` and `schemas`. `compile` throws `schema is invalid: ...` on a schema the meta-schema rejects, and caches by schema object. A schema with no `$schema` is read as draft-07, which is what `require('ajv')` does.","- The shim reports errors in the reference's shape and order: keywords sorted the way the reference evaluates them rather than in declaration order, the failing branches before an `anyOf` or `oneOf`, each bad property name with its own errors and a `propertyNames` error, items before `contains` and an `if` error after a failed `then`/`else` under `allErrors`, draft-07 `dependencies` named as such, and with `allErrors` off the first failing keyword's whole group. `tests/test_ajv_parity.js` runs 32 scenarios of real consumer call shapes through both implementations and compares the results field by field; the reference is a devDependency and never ships.","","### Changed","","- `ata-validator/compat` refuses what it cannot honour instead of accepting it: `$data: true` throws at construction, a `code`-only keyword throws at `addKeyword`, and the reference's formats plugin throws with a note that its formats are built in.","","## 1.13.1 - 2026-09-06","","### Fixed","","- The native engine stops printing to stderr for patterns outside RE2's subset. A pattern with lookahead or a backreference is an expected input, not a fault: construction is probed, and the JavaScript engines answer for the pattern instead. RE2 logged every such probe to stderr anyway, so a schema carrying zod's email pattern printed two C++ error lines on compile while validating correctly. RE2 is now constructed with logging off; verdicts are unchanged.","","## 1.13.0 - 2026-09-06","","### Changed","","- The default browser bundle stops carrying the AOT emitters. `lib/aot.js` has promised a browser stub via the package.json `browser` field since the fs-free build, but the mapping was never actually in the field, so every browser bundle shipped the emitters and the embedded safe-regex engine source they pull in, along with the native walker's routing table that only matters when the native addon loads. Both now map to stubs. Emitting validators in a browser still works, through the new `ata-validator/aot` entry, and the `Validator.bundle*` statics in a browser bundle throw a message that points there; `Validator.loadBundle` keeps working in the default bundle, since loading a bundle somebody already built is a runtime act. Measured with the schema-benchmarks rolldown pipeline: minified and gzipped 73,491 to 64,812 bytes, 11.8 percent smaller. The browser-imports guard now bans a token from each excluded file so the mapping cannot regress silently.","","### Added","","- `ata-validator/aot`: the standalone emitters (`toStandalone`, `toStandaloneModule`, `bundle`, `bundleStandalone`, `bundleCompact`, `loadBundle`) as an explicit, typed import. In Node it is the same module the statics use; in a browser it is the way to opt back into emission without paying for it on pages that never emit.","","## 1.12.1 - 2026-09-06","","### Fixed","","- One format violation reports one error. The error path turns each failing statement of a format check into an error push, and it kept going after pushing, so a single bad value collected one identical error per statement it failed: twelve for `date-time` on a short string, five for `time`, two for `uuid` and `hostname`. The check now leaves the format block on the first failure. Verdicts are unchanged; only the duplicate copies of the same error are gone. `tests/test_format_single_error.js` holds every built-in format to exactly one error across 25 invalid values.","","## 1.12.0 - 2026-09-06","","### Performance","","- `date-time` stopped asking every character where it sits. The scan tested each of nineteen positions against the separator indices before checking the digit; the separators are now read directly by index and each digit becomes its value in the same read that validates it, so the field numbers cost nothing extra. 40.8 to 19.5 ns on a valid value, medians across separate processes. Same answers as before on every month, day and clock boundary and under 150k random mutations.","","- `uuid` reads the four hyphens by index and the 32 hex digits in five runs with fixed bounds, instead of a case-insensitive regular expression. A digit is one unsigned compare and a letter one more after folding case with a single OR. 48.4 to 35.1 ns; 300k mutated and random strings against the old expression with 0 mismatches.","","- `time` reads fixed positions the same way instead of running a regular expression: 15.6 to 12.1 ns, and 200k mutations against the old pattern with 0 mismatches.","","- `uri` reads the scheme from the front and scans the rest once instead of running two regular expressions: 39.3 to 32.8 ns, interleaved medians. The remaining scan then became two tiers, because the measured answer was not the expected one: a hand-written character loop beat the old `\\s` expression in isolation but lost to the engine's scanner inside a compiled validator, since `\\s` is what forced the Unicode machinery in. The first tier asks whether anything sits outside printable ASCII, a one-byte class the engine scans at its own speed and no ordinary URI ever trips; only a string that trips it pays for the loop that knows the exact reserved set. On a nested schema carrying six URLs, 215.5 to 189.4 ns per document, medians across separate processes. `uri-reference` shares the same scan. Fuzzed over every code point in the BMP in three positions, 0 mismatches.","","- The Standard Schema bridge stopped paying for enrichment it throws away. An issue carries a message and a path and nothing else, but `~standard.validate` read the rich error list, which builds suggestions, ranks and source frames per error. It now takes the raw, schema-ordered list through the same build the rich path uses, and `parsePointerPath` walks the pointer in one pass instead of split, filter, map and a regex per segment. A 16-error rejection went from 17.6 to 4.3 microseconds; messages and order are unchanged, and `tests/test_standard_schema.js` holds issues to exact parity with `validate().errors`. Schemas using `errorMessage` keep their custom messages.","","### Fixed","","- The compiled engine refused a lowercase zone letter in `time` that the interpreter accepted: `00:00:00z` answered differently depending on which engine ran the schema, and `date-time` took either case in both. One implementation now answers for every engine, and it takes both cases, per RFC 3339.","","- The ReDoS integration test measured the first call, which includes compiling the schema and the pattern, against a 50 ms budget. On a loaded CI machine that reads as a failure without anything being wrong: the gate exists to separate linear matching from catastrophic backtracking, which differ by minutes, not by milliseconds. It now warms up first and allows 500 ms.","","## 1.11.0 - 2026-08-31","","### Fixed","","- The verdict methods answer the same question as `validate()` again. With `coerceTypes`, `removeAdditional` or a schema `default` in play, `validate()` ran the preprocess pass and `isValidObject()`, `isValidJSON()` and `validateJSON()` did not, so the same validator answered `true` from one and `false` from another for the same document: `validate({ age: '26' })` accepted where `isValidObject({ age: '26' })` rejected. Every path now runs the same pass. Verdict methods on a validator configured this way rewrite the input in place, as `validate()` already did, and the cost of the correction is 0.5 ns on `isValidObject` and 2.7 ns on `isValidJSON`, measured interleaved; validators without those options are unchanged. `tests/test_verdict_preprocess.js` holds all four methods to the same answers.","","- The native engine's error codes no longer reach callers untranslated. A type failure answered by the addon came back as `code: 3` with no `keyword` and a `docUrl` pointing at a page that does not exist, while the same failure from the JavaScript engines came back as `ATA1001`; both now report the documented code, keyword and link. `tests/test_native_error_codes.js` holds the table against the enum in `include/ata.h`, so the two cannot drift apart silently.","- The error generator declined self-referencing schemas by emitting nothing for the reference, which accepted whatever that reference guarded: `{ properties: { foo: { $ref: \"#\" } }, additionalProperties: false }` accepted `{ foo: { bar: false } }` on that path. It now declines the schema outright and the validator falls back to an engine that answers it correctly. The entry-point agreement test covers the shape.","","- `ipv6` gave two different answers depending on which engine ran it, and neither was right. The compiled path refused an IPv4-mapped address such as `::ffff:192.168.1.1`, the interpreted path accepted `::ffff:1.2.3.4.5`, and both accepted a group of five hex digits like `12345::1`. One implementation now answers for every engine, following RFC 4291, checked against Node's own `net.isIPv6` and the suite's corpus.","","- `date-time` refuses dates that do not exist. The check ran a regular expression for the shape and then handed the string to `Date.parse`, which rolls an out-of-range day into the next month, so `2026-02-30T00:00:00Z`, `2026-02-29T00:00:00Z` and `2026-12-31T24:00:00Z` were all accepted. The month, the day count for that month in that year, the clock and the offset are now checked directly, per RFC 3339. Schemas that relied on the old leniency will see those values rejected.","","- Data that points back at itself no longer exhausts the stack. A document with a cycle, which JSON text cannot express but an in-memory object graph can, threw `RangeError: Maximum call stack size exceeded` on the compiled path while the interpreted engine settled on an answer, so the two engines disagreed. Both now follow the same rule: a value already being checked against a schema is a fixed point and counts as satisfied, and a cycle no longer hides a real violation elsewhere in the document. Validation runs a fast pass that only counts depth and a guarded pass that runs when that depth is exceeded, so ordinary documents pay one integer operation per recursive call. Measured interleaved on a self-referencing schema: a four-node document 22.2 to 30.6 ns, a 200-node document 2077 to 1178 ns, non-recursive schemas unchanged at 3.8 ns. `tests/test_cyclic_input.js` holds all three engines to the same answers.","","### Performance","","- `ipv6` and `hostname` read the string once as well: 54.7 to 29.6 ns and 45.5 to 28.2 ns, interleaved medians. `ipv6` no longer allocates two arrays per check; `hostname` keeps the answers of the expression it replaces, fuzzed over 300k strings with 0 mismatches.","","- `date-time` reads the string once, with no regular expression, no date object and no allocation: 95.0 to 39.4 ns on a valid value with a `Z`, 103.8 to 45.3 ns with a numeric offset, interleaved medians. Fuzzed against a reference that spells out RFC 3339, with 0 mismatches over 300k strings; `tests/test_formats_single_pass.js` keeps both the predicate and the generated form on it.","","- A constructed Validator is roughly three times smaller on the heap until it is used. The public methods and the Standard Schema entry moved from per-instance closures built in the constructor to memoized prototype accessors, and the JSON position cache is only allocated when the JSON text path first needs it. Measured per instance on a 10-key object schema, double-gc deltas over 2000 instances: 1.61 KB to 0.43 KB with a shared schema object, 2.33 KB to 1.12 KB when each instance owns its schema, 3.93 KB to 3.30 KB once compiled and used. Construction alone went from 1504 to 855 ns; construction plus first validate pays about 0.9 microseconds more, once, because the compile step's method assignments now go through a defining setter. The hot validate() path is unchanged, measured interleaved. Detached method references (`const f = v.validate`) still work; `tests/test_lazy_instance.js` pins the shape.","","## 1.10.0 - 2026-08-30","","### Performance","","- The code generator takes shapes it used to decline for no correctness reason: boolean subschemas in `items`, `properties`, `patternProperties`, `dependentSchemas`, `propertyNames`, `allOf`, `anyOf`, `not`, `contains` and `if`/`then`/`else`, recursive `#/$defs/` references as named functions, and `additionalProperties` as a schema alongside composition or `patternProperties`. Each lands in all three generators and the closure path, held to the interpreter by `tests/test_codegen_edge_shapes.js` and the entry-point agreement test over the whole official suite. Every suite group that moved off the interpreter got faster, 31 of 31 on draft 2020-12 and 28 of 28 on draft 7, summed per-group time down 70 percent. The suite-wide figure, measured interleaved against the previous release in one process, did not move outside that measurement's noise; `benchmark/verdict-bench.md` has the numbers and says why.","- `date` and `ipv4` format checks read the string once with no regular expression and no allocation: 45.7 to 14.2 ns and 54.5 to 27.1 ns on a valid value, interleaved medians. Fuzzed against the previous forms with 0 mismatches; `tests/test_formats_single_pass.js` keeps it that way.","","### Fixed","","- A key matched only by the second of two `patternProperties` entries, alongside `additionalProperties: false`, was rejected: the generated key loop returned at the first pattern that missed. Found while rewriting that loop; covered by the edge-shape test.","- A declared property that also matched a `patternProperties` entry skipped the pattern's schema in the generated code when `additionalProperties` was a schema. The suite's own interaction case caught it the moment the shape was allowed to compile.","","## 1.9.0 - 2026-08-28","","### Errors","","- Rendered diagnostics now say where the problem is. Every `renderPretty` and `renderCompact` block carries the JSON path, and a source frame with a caret on the failing token when one can be built faithfully: from the text on the `validateJSON` path, or from the object when the renderer is handed `{ data }`. Object-input frames are reconstructed by re-serializing the value and the output says so once, because the line numbers refer to that reconstruction. No frame is reconstructed under `coerceTypes`, `removeAdditional` or a schema with `default` values, since the object in hand is not what the caller sent; the output names the option instead.","- Headlines state the observation rather than the rule: `expected integer, found string` in place of `must be integer`. Two `additionalProperties` violations no longer render as identical blocks; the property name is in the headline. A composition failure with a `const` discriminator names it, `no variant matches kind \"circle\"`, anchors inside the closest branch, and its branch notes read `minimum: expected ≥0, found -1`.","- A property typed `nmae` where `name` was required renders as one diagnostic with `did you mean \"name\"?` instead of two. The correlation requires that no other missing or extra key in the same object is equally close; on a tie nothing is merged. Both errors stay in the array and point at each other through the new `related` field, and the footer reads `8 schema violations in input, shown as 7 diagnostics` so the count never drifts from `errors.length`.","- Diagnostics are ordered by document position, with cause before effect only as a tie-break within one container. Carets are clamped to the line they sit under; a root-level error used to draw one the width of the whole document.","- Under `richErrors` (the default) errors gain `detail`, `related`, `anchor` and `rank`. Existing fields, array order and array length are unchanged; `richErrors: false` still returns the v0.14 shape. `useDefaults`, on by default, is now documented.","- Measured on a ten-case corpus scored on four questions per diagnostic (says where, states what was found, distinguishable from its neighbours, offers a way forward): 3 of 60 before, 58 of 58 after, and `tests/test_diagnostics_score.js` holds the floor at 95%. Cost on the reject path when `.errors` is read, master against this change on the same machine: a one-error document 330 to 395 ns, a seven-error document with a typo pair 2.45 to 2.95 µs. `validate().valid` is unchanged at 5 ns. Fastify's own suite through fastify-ata stays at 178 of 184.","","## 1.8.2 - 2026-08-28","","### Fixed","","- A `pattern` of the form `^[class]+$`, `^[class]{m,n}$` or `^[class]{n}$` with n above 16 could be violated without `validate()` saying so. The boolean program compiles those patterns to an inline character loop wrapped in an arrow function, and the rewrite that turns the boolean program into the error-reporting one replaced the `return false` and `return true` inside that arrow with `return E(d)` and `return R`. Both are objects, so the arrow started returning a truthy value on mismatch, the enclosing `!(cond \u0026\u0026 obj)` went false, and the error program accepted what the boolean program had rejected.","","  What that looked like from outside depended on the path. Without preprocessing, `validate()` still rejected, because the boolean verdict runs first, but the error it produced was a generic `schema validation failed` with no keyword, no `params.pattern` and no path. With preprocessing, which means any schema carrying a `default` or a validator built with `coerceTypes` or `removeAdditional`, the error program is installed as `validate()` directly and the result was `valid: true`. `Validator.bundleStandalone` and `bundleCompact` embed the same program and had the same silent accept. `ata compile` output is built from the boolean program and was not affected. The rewrite has been wrong since 0.6.0; the official suite never exercised these pattern shapes, so nothing caught it.","","  The rewrite now leaves the body of an arrow function alone, the same way it already left `function` bodies alone. `tests/test_hybrid_agreement.js` compares the rewritten program with the boolean it came from on every affected shape, at the root, in a property, in array items, through `bundleStandalone` and through a compiled module, and checks the two preprocessing cases directly. `tests/test_codegen_entrypoint_agreement.js` now compares the rewritten program as a fifth participant across the whole official suite. `tests/test_ajv_errors.js`, which had been failing on exactly this for as long as the bug existed, is now part of `npm test`.","","### Changed","","- Ranking an error into schema declaration order no longer re-derives the rank on every error of every failing document. It was splitting the schema path with two regular expressions per segment and then scanning `Object.keys(node)` at each level, which was 8.5% of the error path in a profile, for an answer that depends only on the schema and the path. The rank is now cached per path under its root, each node's keys are indexed once, and escape handling is skipped for segments with no tilde. That function drops from 8.5% to 1.4% of the error path, and the error path as a whole gets 3.5% faster, median of eleven interleaved runs. `docs/performance-notes.md` records the larger gap this was measured against; it is not closed by this change.","","## 1.8.1 - 2026-08-27","","### Changed","","- Constructing a validator no longer clones and serializes every schema to find out whether it needed normalizing. It did that on the root and on each registered schema: serialize, deep clone, normalize the clone, serialize again, compare. For a schema with no `nullable` field and no draft-07 keyword the answer is always no, and the work was thrown away. Every question the normalizers ask is whether some key appears anywhere in the tree, so one walk answers all of them, and the clone now happens only for schemas that need it. No registry and ten fields goes from 18.5 to 4.6 µs; fifty registered schemas of fifty fields, which is a small server's worth, from 2570 to 260 µs.","","  The walk descends through every object-valued key rather than the subschema keywords the normalizers recurse through, so it is a superset of what they visit: it can report work where there is none, costing one clone, and cannot miss work there is. Across the 2344 schemas in the official suite it reports work on 335 where normalization changes 334. `tests/test_schema_scan.js` asserts that direction over the whole suite, and asserts the check is load-bearing by breaking the scan deliberately and confirming the broken one is caught.","","  The answer is remembered against the schema object, the way whole compiled validators already are, and so is the schema map built from a registry. Both were being redone once per validator, so a server building one validator per route over a shared registry paid for that registry once per route. Fifty routes over twenty shared schemas boots in 0.046 ms rather than 20.66 ms. Validators share the map, and anything that writes to one, which is `addSchema()` and the meta-schema registration during compilation, takes a private copy first.","","  Nothing about what any schema validates to changes. The comparison that decided the old answer is still there behind the walk, so a schema the walk sends down the slow path gets exactly the result it got before.","","## 1.8.0 - 2026-08-27","","### Added","","- `$vocabulary` is honoured when a schema names a custom meta-schema in `$schema`. A dialect is a set of vocabularies and a vocabulary is a set of keywords, so a keyword whose vocabulary the meta-schema does not declare is not part of that dialect at all: it is an unknown keyword, and an unknown keyword is ignored. A schema written against a meta-schema which declares only the core and applicator vocabularies now has its `minimum`, `type` and the rest of the validation keywords ignored, while `properties` and the other applicators still apply. The keywords belonging to each vocabulary are read from the vendored meta-schemas rather than from a list kept by hand, so they come from the specification. Removing the keyword before compilation means every engine agrees without any of them knowing what a vocabulary is.","","  This closes the last case ata missed. Draft 2020-12 goes from 1298 to **1299 of 1299**, with draft 7 at 927 of 927 and the v1 dialect at 1133 of 1133, the same with code generation blocked. `tests/run_suite.js` has no known failures left.","","  Two things it does not do. It does not refuse a schema whose meta-schema requires, with `true`, a vocabulary ata does not recognise; the specification says an implementation must refuse there, and turning what has always been silently accepted into a hard failure is a separate decision, so such a schema is evaluated as before with every keyword applied. And a separate document reached through `$ref` keeps its own keywords rather than inheriting the referring dialect, so a document which should follow one needs to say so with its own `$schema`.","","### Fixed","","- `bundleStandalone` and `bundleCompact` built the error-reporting function from the schema the caller passed rather than the one the validator compiled. Anything which prepares a schema therefore reached the boolean path and not the error path: with `assertFormat: false` the bundle reported a `format` error the caller had turned off, and only once some other keyword failed first, since the error function runs only after the boolean one says no. `toStandalone` already read the compiled schema; these two now do as well.","","## 1.7.4 - 2026-08-26","","### Fixed","","- `validate()` read past the end of the document the caller handed it. simdjson wants padding after a document so its SIMD loads can run off the end, and the library was claiming that padding on buffers it does not own, on the grounds that a buffer not ending near a page boundary has readable bytes after it. That does not fault, which is why it went unnoticed, but the bytes belong to somebody else: under AddressSanitizer it reports as a heap-buffer-overflow inside simdjson, so anyone fuzzing or sanitizing an application built on ata saw a memory error with no way to tell it was deliberate. Through the Node binding the read landed in V8's heap. The document is now copied into a padded buffer, reused per thread, before it is parsed. The buffer APIs already did this and were never affected. Found by the fuzz targets in `fuzz/`, which were in the repository but had never been run; all three now survive millions of executions clean.","","### Changed","","- Rejecting a document through the buffer APIs no longer costs more than accepting one. The On-Demand plan answers first, and a `false` from it used to be ambiguous: it could mean the document failed a constraint, or that the plan could not decide. The caller had to assume the second, so it re-created the padded view, parsed the whole document again into a DOM, tried the generated plan, and then walked the tree. A rejected document was therefore parsed twice and walked up to three times. The plan now reports whether it stopped because the document failed a constraint or because it could not be read, and only the second falls through. simdjson's `INCORRECT_TYPE` is a constraint failure rather than a read failure, which is the distinction that makes this work: a property holding a string where the schema wants an integer surfaces as a read error from `get\u003cint64\u003e`, not as a type mismatch. On a 62 KB array of a thousand objects with one bad element: 316 µs to 11 µs when the bad element is first, 315 µs to 40 µs when it is last. On that shape rejecting is no longer dearer than accepting, and when the bad element is early it is several times cheaper. It is still dearer on a small document, where there is no bulk of parsing for an early exit to save: on a two-field object, 129 ns to accept and 278 ns to reject. `tests/test_buffer_path_parity.js` holds the buffer path to the same answers as `validate()` across all 3359 suite cases, and still reports zero disagreements.","","## 1.7.3 - 2026-08-26","","### Added","","- A prebuilt native engine for Intel macOS again, `@ata-validator/native-darwin-x64`. The target was dropped in 0.13.4 because GitHub's x64 macOS runners had stopped being reliably available; `macos-15-intel` brought them back, so the matrix is now seven targets: darwin arm64 and x64, linux x64 and arm64 on both glibc and musl, and win32 x64. Intel Macs went to the pure-JS engine in the meantime, which validates identically but leaves the buffer APIs unavailable, so this only changes speed and reach, not answers.","","## 1.7.2 - 2026-08-24","","### Fixed","","- `enum` compared object members by their serialized form, so `{\"b\": 2, \"a\": 1}` was rejected against `enum: [{\"a\": 1, \"b\": 2}]`. JSON Schema compares instances by value: two objects with the same members are equal whatever order their keys were written in. All three code generation paths did this, so they agreed with each other and disagreed with the interpreted engine, which has always compared structurally. `const` was already correct but reached the answer by building a canonical string on every call. Both now use one structural comparison hoisted per compiled function. The official suite does not cover reordered keys for `enum`, and the entry-point agreement test compares the generators against each other, so neither would have caught this; `tests/test_value_equality.js` pins the answer through every engine that can produce one and runs as part of `npm test`.","- A draft-07 document passed through the `schemas` option was rejected with \"Schema in schemas option must have $id\" whenever it carried `$ref` next to `$id`. Draft-07 ignores every keyword sitting beside `$ref`, so normalization drops them and `$id` goes with them, which is the right reading for evaluation: the reference resolves against the URI the document was retrieved from, not the `$id` it declares. It is the wrong reading for registration, where `$id` is the only name the caller gave the document. The identity is now read from what the caller passed when normalization has dropped it, so such a document registers under its `$id` in the array form and is addressable by both its retrieval URI and its `$id` in the map form. A document that declares no `$id` at all is still refused, and a fragment-only `$id` is still an anchor rather than a document name. This is what made all 23 remote-reference cases of the draft-07 suite error out in the Bowtie compliance report; they now answer, and answer correctly.","","### Changed","","- The closure-tree compiler now covers every schema the interpreted engine accepts. It previously declined `unevaluatedProperties`/`unevaluatedItems` and `$dynamicRef` in any schema with more than one resource, which left 192 of the 987 suite schemas walking the generic evaluator; that count is now zero. Annotations flow through the compiled tree: the compiler decides at compile time which nodes anyone reads annotations from, and those nodes carry a record that in-place children write into directly, with a failed child rolled back by truncating the record rather than by allocating a fresh one per child. `$dynamicRef` resolves against the dynamic scope computed at compile time, so multi-resource schemas no longer search it per call. A schema whose compiled graph has no cycle drops the recursion guard and the `(schema, data)` stack entirely. An unresolvable `$ref` compiles into the same runtime rejection the evaluator produces instead of declining the schema.","- Measured on the official suite with prebuilt validators, several runs each on the same machine: draft 2020-12 went from 94 ns to 77-80 ns per case overall, and the cases that route to the interpreted engine from about 240 ns to about 125 ns when they accept and 235 ns to 160 ns when they reject. Draft 7 went from 59 ns to 49 ns overall. The metaschema-validation case, the worst outlier in the suite, went from 5.5 µs to about 1.4 µs. On a longer steady-state loop over the same suite, where construction is not part of what is timed, draft 2020-12 went from 46 ns to 43 ns per case and draft 7 from 33 ns to 29 ns.","- The value-level keywords of a schema node are compiled into closures over their own operands instead of being answered by a generic evaluator that re-reads a dozen presence flags off the plan on every call. The type of the value is computed once per node rather than once per keyword group, and a node whose keywords never need it does not compute it at all.","- `uniqueItems` on arrays whose item type is not known ahead of time no longer builds a canonicalizing closure and a `Set` on every call. The helpers are hoisted once per compiled function; arrays of twelve items or fewer compare pairwise with a structural equality that ignores key order and allocates nothing, and longer arrays keep the `Set`, using canonical strings only once an object actually appears. Over the draft 7 suite the `uniqueItems` cases went from 125 ns to 24 ns each.","- `ARCHITECTURE.md` documents the interpreted engine and the closure-tree compiler, and no longer claims `$dynamicRef` falls back to the native engine, which stopped being true in 1.7.1.","","## 1.7.1 - 2026-08-23","","### Added","","- A closure-tree compiler for the interpreted engine. A schema the code generator declines is compiled into a tree of plain closures, one per schema node, with every keyword branch decided at compile time and `$ref` targets resolved once; no source generation and no `new Function`, so it works under a CSP and on Workers. Scope: schemas without `unevaluatedProperties`/`unevaluatedItems`, and `$dynamicRef` only in single-resource schemas; everything else keeps the generic evaluator. `tests/test_plan_compiler.js` holds the compiled tree to byte-identical verdicts and errors against the evaluator over 2,864 suite cases.","","### Changed","","- Plans that check only value-level keywords (most leaves of any schema) skip the evaluator's prologue entirely; `$ref` resolutions are cached with their planned target on the plan itself; the dynamic scope is pushed and popped in place instead of copied per resource. Rejection results are a small class with the `errors` accessor on the prototype, since defining a getter inside an object literal builds a closure and an accessor property on every rejection, which was the single largest cost on the rejection path.","- The interpreted engine gained a verdict-only mode: `isValidObject()` and the internal fast checks walk the schema without constructing a single error object, message string or scratch array. On an interpreter-routed schema the boolean check dropped from 894 ns to 70 ns.","- Object validation for `$dynamicRef` schemas no longer routes to the native engine. The interpreted engine has scored the same on every `$dynamicRef` case of the suite since the dynamic-scope fix in 1.7.0, needs no addon, and carries the verdict-only mode; the suite's `$dynamicRef` rejects dropped from about 1.7 µs to the interpreter's cost.","- String length bounds decide from the UTF-16 length where possible: a string's code point count always sits between half its length and its length, so `minLength`/`maxLength` only count code points inside the narrow band where the answer is genuinely uncertain. The surrogate test is a single wraparound compare. The code generator already worked this way; the interpreter and the closure path now match it.","- Errors are paid for when read, not when produced. `validate()` answers the verdict from the fastest engine for the schema and materializes `errors` through a cached getter on first access; declaration-order sorting and enrichment (received value, suggestions, source frames) moved with it into one presentation layer. A caller that only reads `.valid`, which is every gateway check, no longer pays for error construction at all. The output of `.errors` is byte-for-byte what it was. Measured on a suite-shaped benchmark of prebuilt validators over 1,052 mixed valid and invalid cases, `validate().valid` went from 778 ns to about 150 ns per call, ahead of every error-capable validator we measured, and a rejection that never has its errors read now costs less than `abortEarly` mode used to. One observable edge: mutating the data between `validate()` and the first read of `.errors` now reflects the mutated data in the errors, and if the mutation makes the data valid the errors fall back to a single generic entry.","","## 1.7.0 - 2026-08-23","","### Fixed","","- The four code generation entry points disagreed with each other on 157 instances of the official suite. Most of it was the closure compiler, the boolean fallback behind `isValidObject()` when the code generator declines a schema: it ignored `unevaluatedProperties` and `unevaluatedItems` outright, treated a self-referencing `$ref: \"#\"` as always true, skipped `additionalProperties` whenever no `properties` map sat next to it, and passed strings in `date-time`, `time`, `uri` and `duration` format without checking them. Each of those accepted input it should have rejected. It now declines those schemas, so they reach an engine that handles them. The remaining disagreements were wrong rejections shared by both boolean paths: `required`, `minProperties` and `maxProperties` applied to non-objects, `multipleOf` had no tolerance for fractional divisors, `const` and `enum` compared objects by key order, and `items` started at index 0 when `prefixItems` was present. `isValidObject()` and `validate()` now agree on every suite instance.","- A `dependentSchemas` branch carrying `additionalProperties: false` had that check hoisted out of its condition to the top level of the compiled function, so the restriction applied whether or not the triggering property was present.","- The error path counted a property matched by `patternProperties` as additional under `additionalProperties: false`. The same path now reports the real pointer (`#/patternProperties/\u003cpattern\u003e/...`) for a failing pattern subschema instead of the synthetic `#/patternProperties`, so source frames resolve for those errors.","- The buffer APIs (`isValid`, `isValidJSON` above the simdjson threshold, `countValid`, `batchIsValid`, `isValidNDJSON`, `isValidParallel`, `isValidPrepadded`) disagreed with `validate()` on 245 of 2222 suite cases, and in 195 of those they accepted a document `validate()` rejects. The native walker behind them does not handle `contains`, `unevaluated*`, `dependencies`, `dependentSchemas`, `dependentRequired`, `propertyNames`, `patternProperties`, tuple-form `items` and `prefixItems`, cross-document `$ref`, embedded `$id`, an empty `enum`, a boolean root schema, Unicode property escapes in `pattern`, or the `hostname`, `date-time`, `time`, `uri-reference` and `duration` formats. For a schema using any of those, every buffer API now parses the bytes and answers through `validate()`; `lib/buffer-gate.js` holds the list. Schemas without them keep the zero-copy path. `tests/test_buffer_path_parity.js` now compares all three dialects, 3359 cases, and holds the disagreement count at zero.","- A value failing a `patternProperties` subschema was reported at runtime as a generic \"value invalid for key\" error on the parent object with the synthetic pointer `#/patternProperties`. The subschema is now generated in place, so the error comes from its own keyword, at the key's path (`/x-flag`), with the real pointer (`#/patternProperties/^x-/type`), and source frames resolve for it. Patterns containing `/` or `'` produce a correctly escaped pointer.","- `tests/test_codegen_entrypoint_agreement.js` drives the whole suite through each entry point directly and fails on any split verdict. It runs as part of `npm test`.","","### Added","","- A `$ref` to a dialect's meta-schema (`https://json-schema.org/draft/2020-12/schema`, `http://json-schema.org/draft-07/schema#`, any http/https or trailing-`#` spelling) resolves from copies vendored in `lib/metaschemas.js`, so \"validate this schema against its dialect\" works with no registry and no network. A copy supplied through `schemas` or `addSchema()` still wins. The 2020-12 meta-schema is eight documents joined by `$dynamicRef`; see the routing change below.","","- `validator.engine()` reports which engine answers `validate()` for the schema: `'codegen'`, `'closure'`, `'native'` or `'interpreter'`. A diagnostic for startup logs and benchmarks. Measured over fourteen request-shaped schemas (body, params, query, shared `$ref`, `oneOf`, `if`/`then`, local `$defs`), thirteen take the generated path; `patternProperties` with `additionalProperties: false` is the one that goes to the interpreter.","- `formatMode: 'inject'` for `toStandaloneModule`, `bundleStandalone`, `bundleCompact` and `build()`. The output carries no custom format source; it exports `setFormats(map)` and looks each format up from that registry at validation time, with a named error if one is missing. This is for formats that cannot be serialized: functions that close over variables, bound functions, or code rewritten by coverage and transpile steps. The default `'embed'` is unchanged in behavior, but it now checks each function's source at build time and throws with the format's name when it would not survive embedding, instead of emitting a module that fails on first use.","","### Changed","","- Draft-07 is now read by its own rules rather than as 2020-12 with renamed keywords. A schema object carrying `$ref` is that reference and nothing else, so sibling keywords, `$id` included, are ignored, as the draft specifies. A fragment-only `$id` (`\"$id\": \"#name\"`) is a plain-name anchor. A document supplied through `schemas` or `addSchema()` that declares no `$schema` of its own is read under the root's draft. JSON Pointers written against array-form `items` still resolve after the keyword is normalized to `prefixItems`. Schemas that declare no `$schema` are unaffected. Draft 7 on the official suite goes from 916 to 927 of 927.","- The code generator now declines, and the interpreted engine answers, whenever a document reachable through a cross-document `$ref` uses `$dynamicRef`, `$dynamicAnchor`, `unevaluatedProperties`, `unevaluatedItems`, or an embedded `$id`. Before, the generator emitted a vacuous check for such a reference and accepted everything behind it: `{ \"$ref\": \"https://json-schema.org/draft/2020-12/schema\" }` accepted `{ \"type\": 1 }`. These checks now live in one function, `sharedCodegenGate`, that every entry point runs first. Draft 2020-12 goes from 1294 to 1298 of 1299 and the v1 dialect from 1131 to 1133 of 1133; the one remaining 2020-12 miss needs `$vocabulary`.","- The interpreted engine extends the dynamic scope whenever evaluation enters a schema resource, not only when it lands on the resource's root. A `$dynamicRef` reached through `first#/$defs/stuff` now sees resource `first` in scope, which closes the last `$dynamicRef` case the interpreter missed. With code generation blocked the figures are the same as with it: 1298 of 1299, 927 of 927, 1133 of 1133.","- The interpreted engine is between 4 and 14 times faster depending on the schema. Each schema node is resolved once into a fixed-shape plan (type bitmask, compiled pattern, looked-up format, one flag per keyword group) and children are linked at plan time, so the walk reads no schema properties and does no map lookups. On a six-field object schema a warm `validate()` went from 3786 ns to 343 ns; a `$ref`-heavy schema from 5354 ns to 366 ns; a recursive `$dynamicRef` tree from 5302 ns to 526 ns. The compiled path is unchanged at about 44 ns on the same schema.","- The linear-time pattern matcher now runs a lazily built DFA over the Thompson NFA, with cached ASCII transitions and a fallback to the NFA walk past 256 states. On typical anchored patterns it is within 1.2 to 3.5 times of V8's backtracking engine (`^[0-9]{5}$` 14 ns against 12 ns, an email pattern 70 ns against 21 ns) while keeping the linear bound: `^(a+)+$` against 100,000 characters takes 1 ms. This matcher backs `pattern`, `patternProperties` and `propertyNames` in every engine and in standalone output, so all of them gain.","","## 1.6.2 - 2026-08-19","","### Fixed","","- The Standard Schema surface carried no output type. `~standard.validate()` returned `{ value: unknown }` and the `types` carrier the specification defines for inference was missing, so every consumer that reads the validated type off `~standard` (Fastify, tRPC, TanStack Form, Drizzle) saw `unknown` and needed a cast. `~standard` is now typed against the validator's own data type, and `types.output` carries it. Type-only: the runtime object is unchanged, and the specification defines `types` as never present at runtime.","- Boolean schemas were rejected by the `Validator` constructor's TypeScript signature. `true` and `false` are schemas anywhere JSON Schema allows one, and both have always worked at runtime; only the types disagreed, which made a schema of unknown shape (`object | boolean`) impossible to pass without a cast. Nested boolean subschemas are still typed as objects, so `{ properties: { a: true } }` needs `defineSchema` or a cast.","- The `t` builder's option bags rejected vendor keywords. `t.object({}, { instanceof: 'Date' })` is what a custom keyword package expects to be given, and the option types only allowed the keywords the builder itself emits, so callers wrote `as never`. Every option bag now accepts unknown keywords alongside the typed ones.","- `tests/test_interop_types.ts` covers all three under `tsc --noEmit`.","","## 1.6.1 - 2026-08-09","","### Fixed","","- A `$ref` into another document whose own root carries a fragment-only `$ref` validated everything. The code generator has three entry points and only one of them, the boolean path, ran the bail that routes a reference it cannot follow to the interpreted engine. The other two emitted no lines for the reference and returned the empty program as always-valid, so every constraint behind it was dropped without an error. `{ \"$ref\": \"other.json\" }` against a document holding its constraints under `#/$defs/...` accepted any input at all. Both paths now run the same two bails the boolean path runs. This is the third silent-accept defect in `$ref` resolution after the two fixed in 1.3.0, and it affects Draft 2020-12 as well as the v1 dialect.","- `tests/test_cross_doc_root_ref.js` states the case directly, including a cross-document reference to a target that holds its constraints inline, which must stay on the compiled path so the bail is not widened into \"any cross-document reference\".","","### Changed","","- The official test suite moved on five months, from the March snapshot to 6 August. Every published figure is remeasured against it. Draft 2020-12 is 1294 of 1299, draft 7 is 916 of 927, and the v1 dialect is 1131 of 1133. With code generation blocked, Draft 2020-12 is 1295 of 1299 and v1 is 1132 of 1133. One case that the fix above corrects is no longer a known failure under v1.","- The buffer path disagrees with `validate()` on 245 of 2222 suite cases rather than 243 of 2208. The two additional disagreements are new suite cases, not a widening: measured against the March snapshot the number is still exactly 243.","","## 1.6.0 - 2026-08-08","","### Added","","- The JSON Schema v1 dialect. A schema declaring `\"$schema\": \"https://json-schema.org/v1\"`, or the dated `https://json-schema.org/v1/2026` the specification repository's meta-schema carries, is now validated under v1 rather than under 2020-12. The difference ata implements is `$dynamicRef`: v1 removes the bookending requirement, so a reference resolves through the dynamic scope whether or not the schema it initially lands on carries a matching `$dynamicAnchor`, and also when it resolves to nothing on its own. The outermost matching anchor still in scope wins, as before. `propertyDependencies`, the other v1 addition, shipped in 1.5.0.","- Against the suite's `v1` directory with nothing excluded, ata scores 1123 of 1127. The four it misses are the same four that fail on 2020-12: one `$dynamicRef` scope corner each engine misses, a definition validated against the meta-schema, and two remote-reference cases. `npm run test:suite` now runs the dialect alongside 2020-12 and draft 7, `tests/test_no_eval.js` runs it with code generation blocked (1124 of 1127 there), and `tests/test_v1_dialect.js` checks the switch itself: the same document must not validate the same way under both dialects.","- Only `$dynamicRef` routing changes. Everything else ata implements is identical under v1 and 2020-12, so a v1 schema that does not use the keyword takes the same compiled path it always did. One that does use it validates on the interpreted engine, since the JS compiler and the native addon both resolve the 2020-12 way. The native engine does not implement bookending at all, which is invisible to the official 2020-12 suite but means it cannot be trusted to answer for either dialect here.","","## 1.5.1 - 2026-08-07","","### Fixed","","- `isValid()` on a buffer disagreed with `validate()` on the parsed value for 294 of 2208 cases in the official suite, in both directions. Two causes: the path returned the code generator's `false` directly, which is ambiguous between \"invalid\" and \"the plan stopped at a composition opcode and the walker should finish\", so every schema using `allOf`, `anyOf`, `oneOf` or `$ref` was rejected outright; and it ended in a second, simpler walker that had drifted from the one `validate()` uses. It now calls the same walker with all errors off, so there is one set of semantics rather than two kept in step by hand. The disagreement drops to 243 cases, the rest being the on-demand plan answering before the walker runs, which is engine work rather than a setting.","- `tests/test_buffer_path_parity.js` records that number so it cannot widen, and the README and the edge runtimes guide now state the gap, since `isValid`, `countValid` and `batchIsValid` are shipped APIs and a caller has no way to know otherwise.","","### Changed","","- `ATA_NO_MIMALLOC` skips the bundled `mimalloc-new-delete.h` include. A toolchain that ships the mimalloc headers along with its own `operator new`/`delete` over the same allocator hits a duplicate symbol at link time; Emscripten with `-sMALLOC=mimalloc` is that case, so the source could not be compiled to WebAssembly at all. The native build does not define it and is unchanged.","","## 1.5.0 - 2026-08-05","","### Added","","- `propertyDependencies`, a JSON Schema v1 [proposal](https://github.com/json-schema-org/json-schema-spec/blob/main/specs/proposals/propertyDependencies.md), selects a subschema by the value of a property rather than by its presence. It replaces the `oneOf` and `if`/`then` patterns normally used to branch on a discriminator field, and reads as `{ \"propertyDependencies\": { \"type\": { \"customer\": { ... }, \"employee\": { ... } } } }`. The proposal defines the keyword as equivalent to an `if`/`then` on `const`, and `tests/test_property_dependencies.js` checks that equivalence case by case rather than asserting a separate expectation, alongside the proposal's own test files from the official suite: 36 of 38, the two remaining being a `$dynamicRef` scope gap the `if`/`then` form of the same schema hits identically.","- The keyword is implemented in the interpreted engine. Both JS compiler paths decline a schema that uses it rather than emitting nothing for a keyword they do not know, which would make the constraint vacuous.","","## 1.4.0 - 2026-08-04","","### Fixed","","- Where `new Function` is unavailable, validation now runs on the interpreted engine instead of degrading quietly. Cloudflare Workers, Deno Deploy and pages under a strict Content-Security-Policy refuse code generation; the closure-based path does not call `new Function` itself, so it survived the refusal and went on to handle schemas it gets wrong. Against the full suite with code generation blocked, ata scored 1188 of 1290 with 30 schemas failing to build. It now scores 1286 of 1290 with none, which is the same as the compiled path within one case. Draft 7 is 910 of 922. `tests/test_no_eval.js` runs the whole suite with `eval` and `new Function` blocked so this is checked rather than assumed.","","## 1.3.0 - 2026-08-02","","### Added","","- `useDefaults` and `assertFormat` validator options, both defaulting to `true` so existing behavior is unchanged. `useDefaults: false` stops missing properties being filled in from their `default` before validation, which matters because a `default` that does not satisfy its own subschema currently makes an otherwise valid instance fail. `assertFormat: false` treats `format` as an annotation rather than an assertion, the Draft 2020-12 reading when the format-assertion vocabulary is not in use. With both off, ata passes every case in the suite's `format` and `default` files.","","### Fixed","","- A `$ref` that could not be resolved validated everything instead of failing. The JS compiler emitted no check at all for an unresolved reference, so a typo in a `$ref`, or a reference into a schema that was never registered, silently turned off every constraint behind it rather than reporting an error. Both compiler paths now decline to compile such a schema and it validates on the interpreted engine, which reports `ATA5001` naming the reference it could not resolve.","- References that resolve relative to an enclosing base URI are no longer compiled by the JS paths, which match registry entries by exact key or path suffix and have no notion of a base. Nested `$id` scopes, relative references, and documents registered under a URI different from the `$id` they declare now route to the interpreted engine, which tracks the base properly. Schemas that reference a flat registry of ids, the common `$ref: 'shared#'` shape, still take the compiled fast path.","- A schema supplied through the `schemas` option as a URI-keyed record was registered only under the `$id` it declared, so references to the URI it was registered under could not resolve. It is now addressable by both.","- Official draft 2020-12 remote-reference suite: 30 of 31 cases, up from 21. Pure-JS configuration on the full suite: 1189 of 1190, up from 1188. The native configuration stays at 1190 of 1190.","","## 1.2.2 - 2026-07-26","","### Fixed","","- The `uri` format was too permissive: it only checked for a scheme prefix, so a string like `https: not a url` passed. It now also rejects any whitespace or control character, so values that carry a scheme but are not URIs are caught. Real URIs, including `mailto:` and `urn:` forms and hyphenated hosts, still pass. `uri-reference` now rejects the same characters and accepts the empty string (a valid same-document reference), which the codegen path had wrongly rejected.","- `date-time` now accepts lowercase `t` and `z` separators per RFC 3339, matching the interpreted engine. `duration` now rejects a trailing `T` with no time component (`PT`, `P1DT`), which are not valid ISO 8601 durations.","- These format checks are emitted in two places, the JS compiler and the interpreted engine, and had drifted apart on the cases above. A new differential test (`tests/test_format_engine_parity.js`) runs every built-in format through both engines over a shared corpus and fails on any disagreement, so the two stay in lockstep.","","## 1.2.1 - 2026-07-18","","### Fixed","","- Schemas the JS compiler cannot represent now validate on the engine that gets them right, instead of always preferring the native addon when it is installed. The native resolver mishandles several `$id` base-URI corners (URN bases, absolute-path references, empty JSON-pointer tokens, nested `$id` scopes) and silently skips regex patterns its engine cannot parse; all of these now route to the interpreted engine. Pure dynamic-ref schemas stay on the native path, which tracks `$dynamicRef` scopes more completely. Buffer and parallel APIs are unchanged.","- The JS compiler no longer compiles two shapes it got wrong: `unevaluatedItems` with `contains` in scope (contains-matched items were never credited as evaluated, rejecting valid arrays) and plain-anchor schemas that open nested `$id` scopes (same-named anchors in different base-URI scopes resolved to the wrong target). Both now go to the interpreted engine.","- Official draft 2020-12 suite: 1190 of 1190 applicable cases with the native accelerator (up from 1175), 1188 of 1190 (99.8%) pure-JS (up from 1184). Draft 7 suite gains four `ref.json` cases.","","## 1.2.0 - 2026-07-18","","### Added","","- An interpreted engine (`lib/interpreter.js`) now backs schemas the JS compiler cannot represent when the native addon is absent (browser, edge workers, `ATA_NO_NATIVE=1`). These schemas validated only with the native engine before, and 1.1.0 made them throw a clear error in native-less environments; they now just validate. Full draft 2020-12 semantics: `$id`/`$anchor` resolution, `$dynamicRef` dynamic scoping, annotation tracking for `unevaluatedProperties`/`unevaluatedItems`. The pure-JS configuration now passes 1184 of 1190 applicable cases (99.5%) in the official test suite, up from 974, and the six remaining failures are shared with the native engine. Error results on the native-less path also carry full per-keyword detail now instead of a single generic message.","","### Changed","","- Validation errors now follow the schema's keyword declaration order instead of a fixed required-first order: a schema declaring `properties` before `required` reports the property errors first, matching what schema authors read top to bottom and what the previous default validator emitted. Order within one keyword is unchanged (`required` errors still follow the array). Single-error and `abortEarly` results are untouched. With this change ata passes every applicable test in Fastify's validation suite (181 of 187; the remaining 6 test the incumbent validator's own extension API rather than validation behavior).","","## 1.1.0 - 2026-07-18","","### Added","","- TypeBox-style modifier combinators on `ata-validator/t`: `t.pick`, `t.omit`, `t.partial`, `t.required`, `t.composite`, and `t.recursive`. All six emit plain JSON Schema, so `Infer`, the runtime validator, and the AOT pipeline consume them with no adapter. This closes the authoring-parity gap for TypeBox migrations. Note: `t.recursive` schemas validate through the interpreted engine and are not AOT-precompilable; the other five combinators AOT-compile like any schema.","","### Changed","","- The `ata-validator` package is now pure JavaScript: no bundled binaries, no vendored C++ sources, no install script. The native engine moved to per-platform `@ata-validator/native-*` packages, installed automatically as optional dependencies (the same pattern Vite uses for esbuild). The tarball shrinks from ~5.3 MB to under 300 KB. `npm install --omit=optional` or `ATA_NO_NATIVE=1` gives a guaranteed zero-binary setup; validation behavior is identical for every schema shape the JS engine compiles, and the few shapes that still need the native engine now throw a clear error instead (see Fixed below).","","### Fixed","","- Schemas the JS engine cannot compile (some `$dynamicRef`, cyclic `$ref`, and unusual keyword interactions) crashed with `Maximum call stack size exceeded` in environments without the native addon: the lazy `validate` stub and the rich-error wrapper dispatched to each other forever. These schemas now throw a clear \"not supported by the pure-JS engine\" error on first use. The same cycle could hit `isValidObject` even with the native addon present when it was the first method called; it now falls through to the full compile and validates correctly.","","## 1.0.2 - 2026-07-17","","### Fixed","","- Cross-schema `$ref` pointers into `#/definitions/...` resolved to nothing after draft-07 normalization renamed the target to `$defs`, and the generated validator silently accepted invalid data. The pointer walk now treats `definitions` and `$defs` as aliases.","- Schemas passed by the caller (the `schemas` option, `addSchema()`, and the root schema) were normalized in place, mutating objects the caller still owns. Anyone reusing those objects afterwards, such as Fastify handing the same shared schema to its serializer, saw corrupted keys. Normalization now works on a copy; caller objects are never touched.","- The new copy preserves symbol-keyed markers, so `t.refine` refinements survive normalization and `validateAsync` keeps enforcing them.","","## 1.0.1 - 2026-07-16","","### Fixed","","- `version()` reported 0.10.4 on platforms with a native prebuild: the `ATA_VERSION` constant in `include/ata.h` had not been bumped since 0.10.4 and the native answer takes precedence over `lib/version.js`. The header now carries the real version and the version-sync test checks it, so it cannot drift again.","","## 1.0.0 - 2026-07-15","","1.0 is a stability commitment, not a feature release. The API surface, the error result shape, and the error code registry are now covered by the semver guarantees in [docs/STABILITY.md](docs/STABILITY.md).","","### Removed","","- `Validator.prototype.toStandalone()` and `Validator.prototype.toStandaloneModule()`, deprecated in 0.22.0. Use `toStandaloneModule()`/`bundleStandalone()`/`bundleCompact()` from `ata-validator/build`. See [docs/migration-to-1.0.md](docs/migration-to-1.0.md).","","### Changed","","- Node.js 20 or newer is required. Node 18 reached end of life in April 2025.","","### Added","","- [docs/STABILITY.md](docs/STABILITY.md): semver, deprecation, and error-code guarantees.","- README \"Known limitations\" section documenting the deliberate 1.x scope edges.","","## 0.22.0 - 2026-07-14","","### Deprecated","","- `Validator.prototype.toStandalone()` and `Validator.prototype.toStandaloneModule()` now emit a one-time DeprecationWarning. Both will be removed in 1.0. The replacements have been stable since 0.19: `toStandaloneModule()`/`bundleStandalone()`/`bundleCompact()` from `ata-validator/build`, and the `Validator.bundle*()` statics.","","## 0.21.0 - 2026-06-01","","### Added","","- `errorMessage` keyword for custom error messages. A string on a subschema replaces the message for any failing keyword there; an object overrides per keyword, with `required` keyed by missing property name and `_` as fallback. `code`, `keyword`, and `path` fields are untouched. Schemas without `errorMessage` pay nothing; the override pass is only installed when one is present.","- Async refinement: `t.refine(schema, fn, { message, path })` attaches an async (or sync) check that runs through `validateAsync`/`parseAsync` after structural validation passes. `new Validator(schema)` ignores the refinement marker, so plain structural validation is unchanged. Failing refinements surface as errors with `keyword: 'refine'`.","","## 0.20.1 - 2026-05-27","","### Fixed","","- `JSONSchema.items` now accepts `boolean` so the typed `t.tuple([...])` output (which sets `items: false` to close the tail) type-checks against `JSONSchema` without a constraint error. `items: false` is valid JSON Schema and the runtime already honoured it; the type definition just had not been widened. Anyone consuming `t.tuple` from outside a project with `skipLibCheck` ran into a `TTuple incorrectly extends JSONSchema` error.","","## 0.20.0 - 2026-05-27","","### Added","","- New chainable schema builder at `ata-validator/t`. Each `t.X(...)` returns a plain JSON Schema literal, so the output drops straight into `new Validator(...)`, `defineSchema`, `Infer\u003cS\u003e`, and the AOT pipeline with no adapter. The migration target is TypeBox: rename `import { Type } from '@sinclair/typebox'` to `import { t } from 'ata-validator/t'` and keep the same authoring shape while picking up ata's runtime and AOT precompile.","","  ```ts","  import { t } from 'ata-validator/t'","  import { Validator, type Infer } from 'ata-validator'","","  const User = t.object({","    id: t.integer(),","    name: t.string({ minLength: 1 }),","    email: t.optional(t.string({ format: 'email' })),","    role: t.union([t.literal('admin'), t.literal('user')]),","  })","  type User = Infer\u003ctypeof User\u003e","  const v = new Validator(User)","  ```","","  Covered: primitives (`string`, `number`, `integer`, `boolean`, `null`), composites (`object` with `optional` keys, `array`, `tuple`, `record`, `union`, `intersect`, `literal`, `const`, `enum`), and refs (`ref`). Optionality is carried by a Symbol-keyed marker that the emitted JSON Schema, `Object.keys`, `JSON.stringify`, and ata's codegen never see; the parent `t.object` reads it to compute `required`.","","### Changed","","- `Infer\u003cS\u003e` now resolves object schemas without `properties` but with a schema-valued `additionalProperties` to `Record\u003cstring, V\u003e` instead of `Record\u003cstring, unknown\u003e`. Closes the last common JSON Schema shape that was not inferred.","","## 0.19.0 - 2026-05-27","","### Added","","- `ata-validator/build` now exports the AOT primitives `bundleStandalone`, `bundleCompact`, and `toStandaloneModule` as named functions, so callers that want the build surface in one place (bundler plugins, build scripts) no longer have to go through the `Validator` class. Same code paths as the Validator-bound forms, no behaviour difference.","- New top-level `ARCHITECTURE.md` reference document covering design principles, runtime dispatch, AOT pipeline, error enrichment, the two TypeScript paths, and the native layer.","","### Changed","","- Internal refactor: AOT (`toStandalone`, `toStandaloneModule`, `bundle`, `bundleStandalone`, `bundleCompact`, `loadBundle`) lives in `lib/aot.js`, the native addon loader in `lib/native-load.js`, the version string in `lib/version.js`. `index.js` lazy-requires the AOT module so a plain import never pays for code it does not call. The browser bundle drops `pkg-prebuilds`, `__dirname`, and `package.json` (with its dependency strings) entirely; it is roughly 15 KB smaller and contains no Node-only identifiers outside comments.","- The safe-regex engine is now embedded into standalone output from a baked string (`lib/safe-regex-source.js`, generated from `lib/safe-regex.js`) instead of a runtime `fs.readFileSync`. Browser AOT calls (`Validator.bundle`, `toStandaloneModule`, …) work in any bundler without an fs polyfill. A structural test (`tests/test_browser_imports_guard.js`) bundles both entries with esbuild and asserts no `readFileSync`, `pkg-prebuilds`, or `__dirname` survives outside comments; sync tests catch drift between the bundled strings and their sources.","","## 0.18.2 - 2026-05-26","","### Fixed","","- The browser and edge build no longer touches the filesystem at import. The safe-regex engine source was embedded into standalone output through a `fs.readFileSync` that ran at module load, which crashed bundlers that stub `fs`/`path` for the browser (a regression from 0.17.3). The read is deferred to the first standalone compile that actually embeds the engine, so importing ata, validating, generating types, and compiling pattern-free schemas now run with no filesystem access in browsers and Cloudflare Workers. Added a regression test that bundles the browser entry and runs it with `fs`/`path` stubbed.","","## 0.18.1 - 2026-05-26","","### Added","","- The browser entry (`index.browser.mjs`) re-exports `toTypeScript`, so the inferred TypeScript type for a schema can be generated client-side (for example in a web playground) alongside `Validator.toStandaloneModule()`. Pure re-export, no runtime change.","","## 0.18.0 - 2026-05-25","","### Added","","- `Infer\u003cS\u003e` resolves the shapes 0.17.0 left as `unknown`. `anyOf` and `oneOf` map to unions, `allOf` to an intersection, `prefixItems` to a tuple, and a `$ref` to a local `#/$defs/...` or `#/definitions/...` entry resolves to the referenced type, including recursive references. An external or otherwise unresolvable `$ref` still resolves to `unknown` rather than erroring. `new Validator(schema)` carries the wider inference, so handlers narrow `result.data` for these schemas with no manual annotation, and the same applies to the Fastify type provider that builds on `Infer`. Pure `.d.ts` change, no runtime impact.","","## 0.17.5 - 2026-05-25","","### Fixed","","- Compiled validators resolve draft-07 plain-name anchors. A `$defs`/`definitions` entry that declares an anchor with `$id: \"#name\"` and is referenced by `$ref: \"#name\"` now compiles through the codegen on every path (boolean, error, combined) instead of bailing. The bail forced a fallback that could not resolve sibling cross-schema refs, which surfaced as `cannot resolve $ref`. This is how shared schemas are referenced under Fastify.","","## 0.17.4 - 2026-05-25","","### Fixed","","- Standalone output now embeds user-supplied format functions. `toStandaloneModule` and `bundleCompact` referenced the `_uf_\u003cname\u003e` format helpers without declaring them, so the generated module threw `_uf_\u003cname\u003e is not defined` on the first validation, and their error path skipped the custom format entirely (so `validate` disagreed with `isValid`). Both now serialize the format functions via `Function#toString` and run them on the error path too, matching `bundleStandalone`.","- Compiled validators report per-property errors for schema-valued `additionalProperties`. The AOT error path previously emitted a single generic `validation failed`; it now validates each undeclared property against the subschema and reports the precise `/\u003ckey\u003e` error, matching the runtime validator.","- `ata --version` (and `-V`) prints the CLI version instead of failing with `unknown command`.","","## 0.17.3 - 2026-05-25","","### Security","","- User-supplied `pattern`, `patternProperties`, and `propertyNames` regexes now run through a linear-time matching engine, so a crafted schema or input can no longer trigger catastrophic backtracking (ReDoS). Patterns the engine cannot represent, such as those using backreferences, fall back to the native `RegExp`. The built-in `format` checks (`email`, `uri`, `uri-reference`, `hostname`, `ipv4`, `ipv6`, `date`, `date-time`, `time`, `duration`, `uuid`) were routed through the same engine and stay linear on adversarial input.","","## 0.17.2 - 2026-05-24","","### Fixed","","- `validate()` now returns the typed `data` on success, the validated input after any in-place coercion or defaults. The `ValidationResult\u003cT\u003e` type has carried `data: T` since 0.17.0, but the runtime never populated it, so `result.data` was `undefined`. `isValidObject()` and `abortEarly` stay allocation-free for callers that only need a boolean.","","## 0.17.1 - 2026-05-24","","### Fixed","","- Standalone output for schemas with `anyOf` or `oneOf` no longer references undefined branch helpers. `toStandaloneModule` and `bundleCompact` now emit the hoisted branch functions, so the generated module runs instead of throwing on the first validation. `bundleStandalone` already emitted them.","","## 0.17.0 - 2026-05-23","","### Added","","- Static type inference from JSON Schema literals. The new exported `Infer\u003cS\u003e` type maps a schema literal to its data type, and `new Validator(defineSchema({...}))` now returns `Validator\u003cInfer\u003cS\u003e\u003e`, so `validate()` narrows `result.data` with no manual type annotation. Write plain JSON Schema, get the type for free, no builder DSL. Covers primitives, type-array unions, `const`, `enum`, objects (required vs optional keys), and arrays; `$ref`, tuples, and `anyOf`/`oneOf` infer `unknown` for now. Pure `.d.ts` change, no runtime impact.","","### Fixed","","- `validateAndParse()` is now implemented in JavaScript (`JSON.parse` then validate) and returns `{ valid, value, errors }`. It previously called a native method that does not exist and threw on every call. It now works with or without the native addon and in the browser; malformed JSON returns `valid: false` with an `ATA9001` error instead of throwing.","","## 0.16.0 - 2026-05-23","","### Added","","- `defineSchema` helper and the exported `JSONSchema` type. Wrap a plain schema object in `defineSchema(...)` to author it inline in TypeScript with keyword autocomplete and value checking, no `as const` needed. It is an identity function at runtime, so the returned object drops straight into `Validator`, `toStandaloneModule`, and the rest of the API. Requires TypeScript \u003e= 5.0 for the `const` type parameter.","- OpenAPI `nullable` keyword. `{ type: 'string', nullable: true }` accepts `null` alongside the declared type, matching OpenAPI 3.0 schemas.","","### Fixed","","- `coerceTypes` with `type: 'array'` wraps a scalar into a single-element array instead of leaving it unchanged.","- Codegen resolves a `$defs` entry that carries a fragment `$id` and is reached through a pointer `$ref`.","- Preprocessing (defaults, coercion, `removeAdditional`) guards against `null` and non-object data instead of throwing.","","## 0.15.1 - 2026-05-23","","### Fixed","","- Coercion, defaults, and `removeAdditional` now follow a cross-schema `$ref` to the referenced shape. A whole-schema reference like `{ $ref: 'shared#' }` (used for shared route schemas) or a property reference like `{ id: { $ref: 'shared#/properties/id' } }` is preprocessed instead of skipped.","- The compile cache now keys on referenced schema content, not just the `$id`. Two validators that share a root schema string and an `$id` pointing at different schemas no longer reuse the wrong compiled function.","","## 0.15.0 - 2026-05-18","","### Added","","- **Compiler-grade error output.** Every validation error now carries a stable `code` (`ATA####`), an `expected`/`received` pair, a `docUrl`, and, when the input came in as a JSON string or Buffer, a `dataFrame` pointing at the offending bytes. The full registry of 46 codes lives at [`docs/error-codes.md`](docs/error-codes.md) with permalinks at `https://ata-validator.com/e/\u003cCODE\u003e`.","- **Renderer API.** `renderPretty`, `renderCompact`, and `renderJSON` are exported from `ata-validator`. Pretty output mirrors rustc-style code frames with carets, help, and note lines; compact collapses to one line per error; JSON is structured for tooling.","- **`ata validate` subcommand.** `ata validate \u003cschema\u003e \u003cdata\u003e` runs a schema against a JSON data file and prints renderer output. TTY auto-renders pretty; pipes default to compact; `--format=json` returns structured output. `--pretty`, `--compact`, `--max-errors`, `--color`, `--no-color` cover the rest of the surface.","- **Runtime source maps.** `new Validator(schema, { source: { path, content } })` attaches per-error `schemaSource` (file, line, col, text) by re-parsing the schema with a position-aware scanner.","- **AOT source maps.** AOT-compiled validators carry the structured error fields (`code`, `docUrl`) and embed per-error `schemaSource` when built with the source map enabled. On by default in development, off when `NODE_ENV=production` or `--no-source` is passed.","- **`ata compile` / `ata build` flags.** New `--source` / `--no-source` flags. `ata build --dual` emits both a source-mapped artifact (`*.compiled.mjs`) and a stripped one (`*.compiled.min.mjs`) in a single run.","- **Size budget gate.** `npm run bench:size` enforces a gzipped-byte budget over the AOT codegen output to catch silent bundle bloat. Baseline at `benchmark/baselines/aot-size.json`, gates derive from the baseline with 1.5x headroom.","- **`oneOf` / `anyOf` collapse.** Branching failures collapse to a single best-branch error (`ATA4001` / `ATA4002` / `ATA4003`) instead of the full branch-tree. The closest matching variant's errors are still available under `branchErrors`. `allOf` errors continue to surface every failing branch.","- **Suggestions.** A new `suggestion` field nudges users when ata is confident: typo against enum, missing-required typo, format-violation hint, type-coercion nudge. Runtime validators populate automatically; AOT validators expose `attachSuggestions(errors, data)` to keep AOT bundles small.","- **`richErrors: false` opt-out.** `new Validator(schema, { richErrors: false })` preserves the v0.14 error shape byte-for-byte. `abortEarly: true` continues to short-circuit; the returned error carries `code: 'ATA9000'` and no enrichment.","- **`release:check` npm script.** Runs the prebuilds, doc-coverage, and error-code lockfile checks in strict mode before a publish.","","### Changed","","- `prepublishOnly` now chains `check-prebuilds`, `check-doc-coverage` (lenient until per-code prose lands), and the error-code lockfile test.","- `ata compile` and `ata build` failures route through the renderer with code `ATA9002`, so command-line schema errors look the same as runtime ones.","","### Notes","","- **Log scrapers**: errors now carry `code`, `dataFrame`, `suggestion`, and `docUrl` fields. If you serialize `result.errors` directly into logs, line size will grow. Pass `richErrors: false` for the v0.14 shape, or pipe through `renderCompact` for a stable one-line format.","- **AOT bundle size**: source-mapped variants (`.compiled.mjs`) add up to 200 bytes gzipped for a 10-field schema. Production builds (`NODE_ENV=production` or `--no-source`) emit the no-source variant. Use `ata build --dual` to emit both.","- **Fastify**: a companion `fastify-ata` release wires the new format into route error responses.","","## 0.14.0 - 2026-05-16","","### Added","","- Generic `Validator\u003cT\u003e` with type predicate `isValidObject(data): data is T`. Pairs naturally with TypeBox, Zod-from-JSON-Schema, Valibot, or hand-written types over JSON Schema literals.","- `ValidationResult\u003cT\u003e` and `ValidateAndParseResult\u003cT\u003e` are discriminated unions. On the `valid: true` branch the parsed data is typed; on `valid: false` the `errors` array carries the diagnostic information.","","### Changed","","- Type-level only: accessing `result.data` (or `result.value` on `validateAndParse`) without first checking `result.valid` is now a TypeScript compile error. Runtime behavior is unchanged. The previous shape returned `undefined` in that position, so this surfaces an existing latent bug at compile time.","","### Notes","","- Pure `.d.ts` change. No JS, C++, AOT, or CLI behavior is affected. Bundle size unchanged. Runtime performance unchanged.","","## 0.13.4 — 2026-05-14","","### Fixed","","- **macOS arm64 prebuild shipped with an invalid code signature.** The release workflow runs `pkg-prebuilds-copy --strip`, which on macOS runs `strip -Sx` on the addon. `strip` rewrites the Mach-O and invalidates the ad-hoc signature the linker applied, and it does not re-sign. arm64 macOS refuses to load unsigned code, so `require('ata-validator')` was killed with `SIGKILL (Code Signature Invalid)` the moment the binding loader called into the addon. Only `0.12.6` reached users this way because it was the one release published through CI rather than locally. The workflow now re-signs and verifies the macOS prebuild after `strip`, and `codesign --verify` gates the job so a broken signature cannot ship. Fixes #23.","- **macOS x64 prebuild was never produced.** The prebuild matrix used `macos-14` for the x64 leg, but `macos-14` runners are Apple Silicon only, so that leg built an arm64 binary mislabeled as x64 and no `darwin-x64` prebuild ever ended up in the tarball.","","### Removed","","- **macOS x64 prebuild.** `macos-13` GitHub runners, the only ones that build x64 natively, are no longer reliably available. Since no published version ever shipped a working `darwin-x64` prebuild, this is not a regression. Intel Mac users fall back to the JS engine, which still works, only the buffer APIs are slower.","","### Changed","","- **`prepublishOnly` now blocks tarballs missing platform prebuilds.** A local `npm publish` only carries the publisher's own platform, silently dropping every other prebuild. Publishing now fails unless all seven platform prebuilds are present, and when run on a Mac it also verifies the darwin code signatures.","","## 0.13.3 — 2026-05-13","","### Fixed","","- **`Validator.bundleStandalone` dropped hoisted anyOf/oneOf branch helpers from the bundle output.** Schemas whose codegen hoists branch functions like `_af1_b0` to the per-schema preamble (e.g. allOf wrapping an anyOf, or schemas pulled into a cross-`$ref` bundle) emitted JS that referenced these helpers without defining them, so loading the bundle threw `ReferenceError: _af1_b0 is not defined` on first validation. The standalone preamble now propagates through to the bundle alongside the format-closure serialization that was already there. `toStandalone` (single-schema) was unaffected. Fixes #24.","","## 0.13.2 — 2026-05-09","","### Fixed","","- **Invalid validation crashed in environments without the native addon** (Cloudflare Workers, browsers, Bun without N-API). When the JS error-codegen probe couldn't produce a safe error function, `errFn` fell through to `this._compiled.validate(d)`. With no native addon `_compiled` stays `null`, so the call threw `TypeError: Cannot read properties of null (reading 'validate')`. Valid inputs were unaffected because they short-circuited before reaching `errFn`. The fallback now stays on a JS-only path when `native` isn't present, returning the boolean result with a generic detail-not-available error so callers see `{ valid: false, errors: [...] }` instead of a crash. Added `tests/test_no_native.js` (Workers-style sandbox) to lock the behavior. Fixes #22.","","## 0.13.1 — 2026-05-09","","### Fixed","","- **Custom format checkers in `validate()`** are now actually applied. The combined codegen path (used by `Validator#validate` and one-shot `validate()`) silently dropped the `userFormats` argument, so schemas with `format: \u003cuser-defined\u003e` returned `{ valid: true }` regardless of the checker function's return value. The boolean (`isValidObject`) and error-only paths were already wired correctly. Fixes RJSF integration where custom formats are routed through `customFormats` (rjsf-team/react-jsonschema-form#5052).","- **Glob patterns with backslash separators on Windows** now resolve correctly in `ata build`. The Node 18 fallback regex only recognized forward slashes, so `path.join(dir, '*.json')` produced patterns the matcher couldn't parse on `windows-latest` runners.","","## 0.13.0 — 2026-05-09","","### Added","","- **`ata build \u003cglob\u003e`** subcommand for project-wide AOT compilation. Compiles each matched schema to a per-file `.compiled.mjs` ESM module with a sibling `.d.mts` TypeScript declaration. Production bundles can drop the runtime ata-validator dependency entirely and import compiled validators as plain ESM modules.","- **`ata-validator/build` programmatic subpath export.** `import { build, watch } from 'ata-validator/build'` exposes the same engine the CLI uses, so build pipelines and bundler plugins can integrate without going through the CLI.","- **CLI flags for `ata build`:** `--out-dir`, `--suffix`, `--format esm|cjs`, `--abort-early`, `--no-types`, `--cache-file`, `--check`, `--watch`, `--max-size`, `--strict`.","- **Incremental cache** via content-hashed `--cache-file`. Second run on unchanged inputs skips compilation.","- **YAML schema support** when the `yaml` peer dependency is installed (optional). `.yaml` and `.yml` inputs parse the same as `.json`.","- **AOT vs AJV-runtime benchmark** at `benchmark/bench_aot_vs_ajv.mjs`. On the included fixtures, ata-AOT outputs are 25-56x smaller gzipped than the AJV runtime, cold start is ~2x faster, throughput is 2-4.5x faster, and compile time is 71-246x shorter.","","### Fixed","","- **Standalone modules now correctly serialize closure-bound helpers** (RegExp, Set, sub-validator functions, branch-property arrays) into the emitted `.mjs`. Previously, schemas using `patternProperties`, `propertyNames` with regex, or `unevaluatedProperties` with `anyOf`/`oneOf` produced standalone output that referenced undefined variables (`_ppf0_0`, `_re*`, `_es*`, `_bk*`) and threw `ReferenceError` at runtime. The runtime validation path was unaffected.","","### Notes","","- The runtime `Validator` API and the `ata-validator/compat` AJV-shim remain unchanged. Existing dynamic-schema users have no migration to do.","- Bundler plugins (ata-vite v0.2.0, ata-webpack, ata-codemod-ajv) are out of scope for this release and will land in 0.14.0+."],"stylingDirectives":[[[0,11,"pl-mh"],[2,11,"pl-en"]],[],[[77,78,"pl-s"],[94,95,"pl-s"],[95,96,"pl-s"],[96,123,"pl-corl"],[123,124,"pl-s"]],[],[[0,13,"pl-mh"],[3,13,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[[0,1,"pl-v"],[90,91,"pl-s"],[91,110,"pl-c1"],[110,111,"pl-s"],[340,341,"pl-s"],[341,346,"pl-c1"],[346,347,"pl-s"],[352,353,"pl-s"],[353,362,"pl-c1"],[362,363,"pl-s"],[477,478,"pl-s"],[478,491,"pl-c1"],[491,492,"pl-s"],[514,515,"pl-s"],[515,520,"pl-c1"],[520,521,"pl-s"]],[[0,1,"pl-v"],[5,6,"pl-s"],[6,10,"pl-c1"],[10,11,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[57,58,"pl-s"],[58,71,"pl-c1"],[71,72,"pl-s"],[155,156,"pl-s"],[156,172,"pl-c1"],[172,173,"pl-s"],[257,258,"pl-s"],[258,268,"pl-c1"],[268,269,"pl-s"],[350,351,"pl-s"],[351,369,"pl-c1"],[369,370,"pl-s"],[527,528,"pl-s"],[528,537,"pl-c1"],[537,538,"pl-s"],[543,544,"pl-s"],[544,553,"pl-c1"],[553,554,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[[0,1,"pl-v"],[36,37,"pl-s"],[37,47,"pl-c1"],[47,48,"pl-s"],[84,85,"pl-s"],[85,87,"pl-c1"],[87,88,"pl-s"],[277,278,"pl-s"],[278,307,"pl-c1"],[307,308,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[287,288,"pl-s"],[288,297,"pl-c1"],[297,298,"pl-s"]],[],[[95,96,"pl-s"],[96,103,"pl-c1"],[103,104,"pl-s"],[203,204,"pl-s"],[204,213,"pl-c1"],[213,214,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[41,42,"pl-s"],[42,51,"pl-c1"],[51,52,"pl-s"],[300,301,"pl-s"],[301,308,"pl-c1"],[308,309,"pl-s"]],[[0,1,"pl-v"],[17,18,"pl-s"],[18,32,"pl-c1"],[32,33,"pl-s"],[40,41,"pl-s"],[41,45,"pl-c1"],[45,46,"pl-s"],[102,103,"pl-s"],[103,121,"pl-c1"],[121,122,"pl-s"],[127,128,"pl-s"],[128,145,"pl-c1"],[145,146,"pl-s"],[176,177,"pl-s"],[177,202,"pl-c1"],[202,203,"pl-s"],[238,239,"pl-s"],[239,265,"pl-c1"],[265,266,"pl-s"],[303,304,"pl-s"],[304,316,"pl-c1"],[316,317,"pl-s"]],[[0,1,"pl-v"],[121,122,"pl-s"],[122,141,"pl-c1"],[141,142,"pl-s"],[160,161,"pl-s"],[161,165,"pl-c1"],[165,166,"pl-s"],[171,172,"pl-s"],[172,184,"pl-c1"],[184,185,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[20,21,"pl-s"],[21,55,"pl-c1"],[55,56,"pl-s"],[260,261,"pl-s"],[261,285,"pl-c1"],[285,286,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[77,78,"pl-s"],[78,87,"pl-c1"],[87,88,"pl-s"],[92,93,"pl-s"],[93,99,"pl-c1"],[99,100,"pl-s"]],[[0,1,"pl-v"],[453,454,"pl-s"],[454,464,"pl-c1"],[464,465,"pl-s"],[618,619,"pl-s"],[619,629,"pl-c1"],[629,630,"pl-s"],[675,676,"pl-s"],[676,690,"pl-c1"],[690,691,"pl-s"],[729,730,"pl-s"],[730,740,"pl-c1"],[740,741,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,45,"pl-c1"],[45,46,"pl-s"],[51,52,"pl-s"],[52,66,"pl-c1"],[66,67,"pl-s"],[597,598,"pl-s"],[598,630,"pl-c1"],[630,631,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[26,27,"pl-s"],[27,45,"pl-c1"],[45,46,"pl-s"],[83,84,"pl-s"],[84,87,"pl-c1"],[87,88,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[],[],[],[[0,1,"pl-v"],[80,81,"pl-s"],[81,97,"pl-c1"],[97,98,"pl-s"]],[[0,1,"pl-v"],[64,65,"pl-s"],[65,72,"pl-c1"],[72,73,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[15,16,"pl-s"],[16,25,"pl-c1"],[25,26,"pl-s"],[35,36,"pl-s"],[36,46,"pl-c1"],[46,47,"pl-s"]],[],[[108,109,"pl-s"],[109,118,"pl-c1"],[118,119,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[0,1,"pl-v"],[49,50,"pl-s"],[50,60,"pl-c1"],[60,61,"pl-s"],[258,259,"pl-s"],[259,279,"pl-c1"],[279,280,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[90,91,"pl-s"],[91,108,"pl-c1"],[108,109,"pl-s"],[130,131,"pl-s"],[131,143,"pl-c1"],[143,144,"pl-s"],[228,229,"pl-s"],[229,239,"pl-c1"],[239,240,"pl-s"],[475,476,"pl-s"],[476,497,"pl-c1"],[497,498,"pl-s"]],[[0,1,"pl-v"],[66,67,"pl-s"],[67,92,"pl-c1"],[92,93,"pl-s"]],[[0,1,"pl-v"],[34,35,"pl-s"],[35,52,"pl-c1"],[52,53,"pl-s"],[116,117,"pl-s"],[117,123,"pl-c1"],[123,124,"pl-s"],[401,402,"pl-s"],[402,423,"pl-c1"],[423,424,"pl-s"],[529,530,"pl-s"],[530,556,"pl-c1"],[556,557,"pl-s"],[641,642,"pl-s"],[642,673,"pl-c1"],[673,674,"pl-s"]],[[0,1,"pl-v"],[160,161,"pl-s"],[161,187,"pl-c1"],[187,188,"pl-s"]],[[0,1,"pl-v"],[62,63,"pl-s"],[63,81,"pl-c1"],[81,82,"pl-s"],[88,89,"pl-s"],[89,114,"pl-c1"],[114,115,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,53,"pl-c1"],[53,54,"pl-s"],[85,86,"pl-s"],[86,103,"pl-c1"],[103,104,"pl-s"],[154,155,"pl-s"],[155,161,"pl-c1"],[161,162,"pl-s"],[168,169,"pl-s"],[169,176,"pl-c1"],[176,177,"pl-s"]],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[43,44,"pl-s"],[44,54,"pl-c1"],[54,55,"pl-s"],[168,169,"pl-s"],[169,190,"pl-c1"],[190,191,"pl-s"],[195,196,"pl-s"],[196,212,"pl-c1"],[212,213,"pl-s"],[227,228,"pl-s"],[228,248,"pl-c1"],[248,249,"pl-s"],[263,264,"pl-s"],[264,269,"pl-c1"],[269,270,"pl-s"],[275,276,"pl-s"],[276,281,"pl-c1"],[281,282,"pl-s"],[427,428,"pl-s"],[428,516,"pl-c1"],[516,517,"pl-s"],[527,528,"pl-s"],[528,541,"pl-c1"],[541,542,"pl-s"],[551,552,"pl-s"],[552,562,"pl-c1"],[562,563,"pl-s"],[607,608,"pl-s"],[608,623,"pl-c1"],[623,624,"pl-s"],[830,831,"pl-s"],[831,875,"pl-c1"],[875,876,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[115,116,"pl-s"],[116,126,"pl-c1"],[126,127,"pl-s"],[259,260,"pl-s"],[260,281,"pl-c1"],[281,282,"pl-s"],[287,288,"pl-s"],[288,304,"pl-c1"],[304,305,"pl-s"],[467,468,"pl-s"],[468,479,"pl-c1"],[479,480,"pl-s"],[508,509,"pl-s"],[509,513,"pl-c1"],[513,514,"pl-s"]],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"]],[[0,1,"pl-v"]],[],[],[],[[135,136,"pl-s"],[136,145,"pl-c1"],[145,146,"pl-s"],[205,206,"pl-s"],[206,215,"pl-c1"],[215,216,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[67,68,"pl-s"],[68,88,"pl-c1"],[88,89,"pl-s"],[132,133,"pl-s"],[133,145,"pl-c1"],[145,146,"pl-s"],[196,197,"pl-s"],[197,202,"pl-c1"],[202,203,"pl-s"],[231,232,"pl-s"],[232,236,"pl-c1"],[236,237,"pl-s"],[243,244,"pl-s"],[244,254,"pl-c1"],[254,255,"pl-s"],[257,258,"pl-s"],[258,270,"pl-c1"],[270,271,"pl-s"],[273,274,"pl-s"],[274,282,"pl-c1"],[282,283,"pl-s"],[288,289,"pl-s"],[289,304,"pl-c1"],[304,305,"pl-s"],[336,337,"pl-s"],[337,344,"pl-c1"],[344,345,"pl-s"],[396,397,"pl-s"],[397,409,"pl-c1"],[409,410,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[[2,3,"pl-v"],[63,64,"pl-s"],[64,122,"pl-c1"],[122,123,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,53,"pl-c1"],[53,54,"pl-s"],[161,162,"pl-s"],[162,167,"pl-c1"],[167,168,"pl-s"],[173,174,"pl-s"],[174,179,"pl-c1"],[179,180,"pl-s"],[434,435,"pl-s"],[435,440,"pl-c1"],[440,441,"pl-s"],[541,542,"pl-s"],[542,557,"pl-c1"],[557,558,"pl-s"],[766,767,"pl-s"],[767,777,"pl-c1"],[777,778,"pl-s"],[883,884,"pl-s"],[884,919,"pl-c1"],[919,920,"pl-s"]],[[0,1,"pl-v"],[75,76,"pl-s"],[76,109,"pl-c1"],[109,110,"pl-s"],[128,129,"pl-s"],[129,157,"pl-c1"],[157,158,"pl-s"]],[],[[0,1,"pl-v"],[581,582,"pl-s"],[582,596,"pl-c1"],[596,597,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[68,69,"pl-s"],[69,86,"pl-c1"],[86,87,"pl-s"],[654,655,"pl-s"],[655,665,"pl-c1"],[665,666,"pl-s"]],[[0,1,"pl-v"],[175,176,"pl-s"],[176,199,"pl-c1"],[199,200,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[11,12,"pl-s"],[12,33,"pl-c1"],[33,34,"pl-s"],[213,214,"pl-s"],[214,231,"pl-c1"],[231,232,"pl-s"],[547,548,"pl-s"],[548,569,"pl-c1"],[569,570,"pl-s"],[679,680,"pl-s"],[680,712,"pl-c1"],[712,713,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[16,17,"pl-s"],[17,28,"pl-c1"],[28,29,"pl-s"],[33,34,"pl-s"],[34,48,"pl-c1"],[48,49,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,36,"pl-c1"],[36,37,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[40,41,"pl-s"],[41,50,"pl-c1"],[50,51,"pl-s"],[144,145,"pl-s"],[145,154,"pl-c1"],[154,155,"pl-s"],[160,161,"pl-s"],[161,179,"pl-c1"],[179,180,"pl-s"],[598,599,"pl-s"],[599,632,"pl-c1"],[632,633,"pl-s"]],[[0,1,"pl-v"],[287,288,"pl-s"],[288,299,"pl-c1"],[299,300,"pl-s"]],[[0,1,"pl-v"],[11,12,"pl-s"],[12,28,"pl-c1"],[28,29,"pl-s"],[101,102,"pl-s"],[102,110,"pl-c1"],[110,111,"pl-s"],[283,284,"pl-s"],[284,292,"pl-c1"],[292,293,"pl-s"],[303,304,"pl-s"],[304,309,"pl-c1"],[309,310,"pl-s"],[321,322,"pl-s"],[322,338,"pl-c1"],[338,339,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[235,236,"pl-s"],[236,256,"pl-c1"],[256,257,"pl-s"],[268,269,"pl-s"],[269,273,"pl-c1"],[273,274,"pl-s"],[383,384,"pl-s"],[384,394,"pl-c1"],[394,395,"pl-s"]],[[0,1,"pl-v"],[63,64,"pl-s"],[64,91,"pl-c1"],[91,92,"pl-s"]],[[0,1,"pl-v"],[13,14,"pl-s"],[14,21,"pl-c1"],[21,22,"pl-s"],[73,74,"pl-s"],[74,84,"pl-c1"],[84,85,"pl-s"],[124,125,"pl-s"],[125,131,"pl-c1"],[131,132,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[115,116,"pl-s"],[116,127,"pl-c1"],[127,128,"pl-s"],[171,172,"pl-s"],[172,190,"pl-c1"],[190,191,"pl-s"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[],[],[[2,3,"pl-v"],[4,5,"pl-s"],[5,9,"pl-c1"],[9,10,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"]],[[2,3,"pl-v"],[8,9,"pl-s"],[9,12,"pl-c1"],[12,13,"pl-s"]],[[2,3,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"]],[[0,1,"pl-v"],[537,538,"pl-s"],[538,555,"pl-c1"],[555,556,"pl-s"]],[[0,1,"pl-v"],[45,46,"pl-s"],[46,50,"pl-c1"],[50,51,"pl-s"],[53,54,"pl-s"],[54,59,"pl-c1"],[59,60,"pl-s"],[65,66,"pl-s"],[66,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[147,148,"pl-s"],[148,157,"pl-c1"],[157,158,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[24,25,"pl-s"],[25,42,"pl-c1"],[42,43,"pl-s"],[133,134,"pl-s"],[134,144,"pl-c1"],[144,145,"pl-s"]],[[0,1,"pl-v"],[85,86,"pl-s"],[86,87,"pl-c1"],[87,88,"pl-s"],[114,115,"pl-s"],[115,116,"pl-c1"],[116,117,"pl-s"],[133,134,"pl-s"],[134,138,"pl-c1"],[138,139,"pl-s"],[153,154,"pl-s"],[154,157,"pl-c1"],[157,158,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"]],[],[[2,3,"pl-ml"],[4,5,"pl-ml"],[13,14,"pl-ml"],[22,23,"pl-ml"]],[[2,3,"pl-ml"],[6,7,"pl-ml"],[10,11,"pl-ml"],[14,15,"pl-ml"]],[[2,3,"pl-ml"],[36,37,"pl-ml"],[43,44,"pl-ml"],[50,51,"pl-ml"]],[[2,3,"pl-ml"],[33,34,"pl-ml"],[40,41,"pl-ml"],[47,48,"pl-ml"]],[[2,3,"pl-ml"],[46,47,"pl-ml"],[53,54,"pl-ml"],[60,61,"pl-ml"]],[[2,3,"pl-ml"],[27,28,"pl-s"],[28,42,"pl-c1"],[42,43,"pl-s"],[51,52,"pl-ml"],[58,59,"pl-ml"],[65,66,"pl-ml"]],[[2,3,"pl-ml"],[27,28,"pl-s"],[28,42,"pl-c1"],[42,43,"pl-s"],[66,67,"pl-ml"],[74,75,"pl-ml"],[81,82,"pl-ml"]],[],[],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"],[121,122,"pl-s"],[122,129,"pl-c1"],[129,130,"pl-s"]],[[2,3,"pl-v"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,19,"pl-c1"],[19,20,"pl-s"]],[[0,1,"pl-v"],[38,39,"pl-s"],[39,52,"pl-c1"],[52,53,"pl-s"],[124,125,"pl-s"],[125,129,"pl-c1"],[129,130,"pl-s"],[159,160,"pl-s"],[160,176,"pl-c1"],[176,177,"pl-s"],[194,195,"pl-s"],[195,206,"pl-c1"],[206,207,"pl-s"],[212,213,"pl-s"],[213,222,"pl-c1"],[222,223,"pl-s"]],[[0,1,"pl-v"],[236,237,"pl-s"],[237,254,"pl-c1"],[254,255,"pl-s"],[327,328,"pl-s"],[328,333,"pl-c1"],[333,334,"pl-s"],[338,339,"pl-s"],[339,344,"pl-c1"],[344,345,"pl-s"]],[[0,1,"pl-v"],[183,184,"pl-s"],[184,193,"pl-c1"],[193,194,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[12,13,"pl-s"],[13,18,"pl-c1"],[18,19,"pl-s"],[24,25,"pl-s"],[25,36,"pl-c1"],[36,37,"pl-s"],[97,98,"pl-s"],[98,113,"pl-c1"],[113,114,"pl-s"],[118,119,"pl-s"],[119,126,"pl-c1"],[126,127,"pl-s"]],[[0,1,"pl-v"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[276,277,"pl-s"],[277,294,"pl-c1"],[294,295,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"],[16,17,"pl-s"],[17,22,"pl-c1"],[22,23,"pl-s"],[142,143,"pl-s"],[143,148,"pl-c1"],[148,149,"pl-s"],[193,194,"pl-s"],[194,201,"pl-c1"],[201,202,"pl-s"]],[[2,3,"pl-v"],[10,11,"pl-s"],[11,32,"pl-c1"],[32,33,"pl-s"],[93,94,"pl-s"],[94,99,"pl-c1"],[99,100,"pl-s"],[105,106,"pl-s"],[106,111,"pl-c1"],[111,112,"pl-s"]],[[0,1,"pl-v"]],[[2,3,"pl-v"],[31,32,"pl-s"],[32,41,"pl-c1"],[41,42,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,21,"pl-c1"],[21,22,"pl-s"]],[[2,3,"pl-v"],[6,7,"pl-s"],[7,11,"pl-c1"],[11,12,"pl-s"],[52,53,"pl-s"],[53,90,"pl-c1"],[90,91,"pl-s"]],[[2,3,"pl-v"],[51,52,"pl-s"],[52,57,"pl-c1"],[57,58,"pl-s"]],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[26,27,"pl-s"],[27,41,"pl-c1"],[41,42,"pl-s"],[47,48,"pl-s"],[48,61,"pl-c1"],[61,62,"pl-s"],[143,144,"pl-s"],[144,155,"pl-c1"],[155,156,"pl-s"],[193,194,"pl-s"],[194,201,"pl-c1"],[201,202,"pl-s"],[281,282,"pl-s"],[282,296,"pl-c1"],[296,297,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[45,46,"pl-s"],[46,50,"pl-c1"],[50,51,"pl-s"],[139,140,"pl-s"],[140,145,"pl-c1"],[145,146,"pl-s"],[167,168,"pl-s"],[168,175,"pl-c1"],[175,176,"pl-s"],[253,254,"pl-s"],[254,263,"pl-c1"],[263,264,"pl-s"]],[[0,1,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[],[[93,94,"pl-s"],[94,103,"pl-c1"],[103,104,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[285,286,"pl-s"],[286,303,"pl-c1"],[303,304,"pl-s"]],[[2,3,"pl-v"],[46,47,"pl-s"],[47,57,"pl-c1"],[57,58,"pl-s"],[64,65,"pl-s"],[65,82,"pl-c1"],[82,83,"pl-s"],[127,128,"pl-s"],[128,144,"pl-c1"],[144,145,"pl-s"],[305,306,"pl-s"],[306,312,"pl-c1"],[312,313,"pl-s"]],[[2,3,"pl-v"],[26,27,"pl-s"],[27,37,"pl-c1"],[37,38,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"],[16,17,"pl-s"],[17,22,"pl-c1"],[22,23,"pl-s"],[44,45,"pl-s"],[45,52,"pl-c1"],[52,53,"pl-s"],[57,58,"pl-s"],[58,65,"pl-c1"],[65,66,"pl-s"],[75,76,"pl-s"],[76,96,"pl-c1"],[96,97,"pl-s"],[115,116,"pl-s"],[116,137,"pl-c1"],[137,138,"pl-s"]],[[2,3,"pl-v"],[6,7,"pl-s"],[7,18,"pl-c1"],[18,19,"pl-s"],[39,40,"pl-s"],[40,45,"pl-c1"],[45,46,"pl-s"],[50,51,"pl-s"],[51,56,"pl-c1"],[56,57,"pl-s"],[71,72,"pl-s"],[72,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[78,79,"pl-s"],[79,83,"pl-c1"],[83,84,"pl-s"],[170,171,"pl-s"],[171,174,"pl-c1"],[174,175,"pl-s"],[283,284,"pl-s"],[284,305,"pl-c1"],[305,306,"pl-s"]],[[0,1,"pl-v"],[188,189,"pl-s"],[189,198,"pl-c1"],[198,199,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[35,36,"pl-s"],[36,41,"pl-c1"],[41,42,"pl-s"],[136,137,"pl-s"],[137,145,"pl-c1"],[145,146,"pl-s"],[173,174,"pl-s"],[174,182,"pl-c1"],[182,183,"pl-s"],[202,203,"pl-s"],[203,221,"pl-c1"],[221,222,"pl-s"],[254,255,"pl-s"],[255,268,"pl-c1"],[268,269,"pl-s"],[300,301,"pl-s"],[301,323,"pl-c1"],[323,324,"pl-s"],[538,539,"pl-s"],[539,549,"pl-c1"],[549,550,"pl-s"],[552,553,"pl-s"],[553,568,"pl-c1"],[568,569,"pl-s"],[574,575,"pl-s"],[575,588,"pl-c1"],[588,589,"pl-s"],[609,610,"pl-s"],[610,649,"pl-c1"],[649,650,"pl-s"]],[[0,1,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[187,188,"pl-s"],[188,204,"pl-c1"],[204,205,"pl-s"]],[[0,1,"pl-v"],[238,239,"pl-s"],[239,246,"pl-c1"],[246,247,"pl-s"],[252,253,"pl-s"],[253,256,"pl-c1"],[256,257,"pl-s"],[266,267,"pl-s"],[267,282,"pl-c1"],[282,283,"pl-s"],[285,286,"pl-s"],[286,291,"pl-c1"],[291,292,"pl-s"],[297,298,"pl-s"],[298,300,"pl-c1"],[300,301,"pl-s"],[306,307,"pl-s"],[307,311,"pl-c1"],[311,312,"pl-s"],[321,322,"pl-s"],[322,336,"pl-c1"],[336,337,"pl-s"],[352,353,"pl-s"],[353,358,"pl-c1"],[358,359,"pl-s"],[363,364,"pl-s"],[364,369,"pl-c1"],[369,370,"pl-s"],[414,415,"pl-s"],[415,419,"pl-c1"],[419,420,"pl-s"]],[[0,1,"pl-v"],[5,6,"pl-s"],[6,19,"pl-c1"],[19,20,"pl-s"],[68,69,"pl-s"],[69,98,"pl-c1"],[98,99,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[57,58,"pl-s"],[58,62,"pl-c1"],[62,63,"pl-s"],[70,71,"pl-s"],[71,78,"pl-c1"],[78,79,"pl-s"],[83,84,"pl-s"],[84,93,"pl-c1"],[93,94,"pl-s"]],[[0,1,"pl-v"],[20,21,"pl-s"],[21,25,"pl-c1"],[25,26,"pl-s"],[96,97,"pl-s"],[97,124,"pl-c1"],[124,125,"pl-s"],[181,182,"pl-s"],[182,193,"pl-c1"],[193,194,"pl-s"]],[[0,1,"pl-v"],[122,123,"pl-s"],[123,135,"pl-c1"],[135,136,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[39,40,"pl-s"],[40,55,"pl-c1"],[55,56,"pl-s"]],[[2,3,"pl-v"]],[[2,3,"pl-v"],[40,41,"pl-s"],[41,54,"pl-c1"],[54,55,"pl-s"],[62,63,"pl-s"],[63,72,"pl-c1"],[72,73,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,14,"pl-c1"],[14,15,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,15,"pl-c1"],[15,16,"pl-s"],[32,33,"pl-s"],[33,43,"pl-c1"],[43,44,"pl-s"]],[],[[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"],[68,69,"pl-s"],[69,79,"pl-c1"],[79,80,"pl-s"]],[[0,1,"pl-v"],[16,17,"pl-s"],[17,26,"pl-c1"],[26,27,"pl-s"],[64,65,"pl-s"],[65,73,"pl-c1"],[73,74,"pl-s"],[129,130,"pl-s"],[130,139,"pl-c1"],[139,140,"pl-s"],[172,173,"pl-s"],[173,174,"pl-c1"],[174,175,"pl-s"],[179,180,"pl-s"],[180,188,"pl-c1"],[188,189,"pl-s"],[194,195,"pl-s"],[195,199,"pl-c1"],[199,200,"pl-s"],[204,205,"pl-s"],[205,209,"pl-c1"],[209,210,"pl-s"]],[[0,1,"pl-v"],[20,21,"pl-s"],[21,30,"pl-c1"],[30,31,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[],[],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[18,19,"pl-s"],[19,32,"pl-c1"],[32,33,"pl-s"],[38,39,"pl-s"],[39,49,"pl-c1"],[49,50,"pl-s"],[98,99,"pl-s"],[99,106,"pl-c1"],[106,107,"pl-s"],[206,207,"pl-s"],[207,214,"pl-c1"],[214,215,"pl-s"],[291,292,"pl-s"],[292,328,"pl-c1"],[328,329,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[43,44,"pl-s"],[44,85,"pl-c1"],[85,86,"pl-s"],[149,150,"pl-s"],[150,165,"pl-c1"],[165,166,"pl-s"],[171,172,"pl-s"],[172,185,"pl-c1"],[185,186,"pl-s"],[201,202,"pl-s"],[202,211,"pl-c1"],[211,212,"pl-s"],[284,285,"pl-s"],[285,306,"pl-c1"],[306,307,"pl-s"],[328,329,"pl-s"],[329,350,"pl-c1"],[350,351,"pl-s"],[414,415,"pl-s"],[415,430,"pl-c1"],[430,431,"pl-s"],[546,547,"pl-s"],[547,568,"pl-c1"],[568,569,"pl-s"],[644,645,"pl-s"],[645,658,"pl-c1"],[658,659,"pl-s"],[816,817,"pl-s"],[817,846,"pl-c1"],[846,847,"pl-s"],[885,886,"pl-s"],[886,898,"pl-c1"],[898,899,"pl-s"]],[],[[0,1,"pl-v"],[80,81,"pl-s"],[81,94,"pl-c1"],[94,95,"pl-s"],[104,105,"pl-s"],[105,117,"pl-c1"],[117,118,"pl-s"],[124,125,"pl-s"],[125,146,"pl-c1"],[146,147,"pl-s"],[158,159,"pl-s"],[159,169,"pl-c1"],[169,170,"pl-s"],[175,176,"pl-s"],[176,182,"pl-c1"],[182,183,"pl-s"],[271,272,"pl-s"],[272,282,"pl-c1"],[282,283,"pl-s"],[405,406,"pl-s"],[406,437,"pl-c1"],[437,438,"pl-s"],[460,461,"pl-s"],[461,493,"pl-c1"],[493,494,"pl-s"],[496,497,"pl-s"],[497,536,"pl-c1"],[536,537,"pl-s"],[788,789,"pl-s"],[789,799,"pl-c1"],[799,800,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[83,84,"pl-s"],[84,106,"pl-c1"],[106,107,"pl-s"],[216,217,"pl-s"],[217,230,"pl-c1"],[230,231,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"]],[[2,3,"pl-v"],[12,13,"pl-s"],[13,19,"pl-c1"],[19,20,"pl-s"],[45,46,"pl-s"],[46,56,"pl-c1"],[56,57,"pl-s"]],[[2,3,"pl-v"],[72,73,"pl-s"],[73,90,"pl-c1"],[90,91,"pl-s"],[133,134,"pl-s"],[134,138,"pl-c1"],[138,139,"pl-s"],[144,145,"pl-s"],[145,151,"pl-c1"],[151,152,"pl-s"],[268,269,"pl-s"],[269,273,"pl-c1"],[273,274,"pl-s"],[279,280,"pl-s"],[280,286,"pl-c1"],[286,287,"pl-s"],[344,345,"pl-s"],[345,355,"pl-c1"],[355,356,"pl-s"]],[[2,3,"pl-v"]],[],[[275,276,"pl-s"],[276,280,"pl-c1"],[280,281,"pl-s"],[561,562,"pl-s"],[562,568,"pl-c1"],[568,569,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[33,34,"pl-s"],[34,42,"pl-c1"],[42,43,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[76,77,"pl-s"],[77,89,"pl-c1"],[89,90,"pl-s"],[92,93,"pl-s"],[93,99,"pl-c1"],[99,100,"pl-s"],[105,106,"pl-s"],[106,110,"pl-c1"],[110,111,"pl-s"],[216,217,"pl-s"],[217,238,"pl-c1"],[238,239,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[133,134,"pl-s"],[134,135,"pl-c1"],[135,136,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[25,26,"pl-s"],[26,58,"pl-c1"],[58,59,"pl-s"],[125,126,"pl-s"],[126,137,"pl-c1"],[137,138,"pl-s"],[159,160,"pl-s"],[160,172,"pl-c1"],[172,173,"pl-s"],[183,184,"pl-s"],[184,205,"pl-c1"],[205,206,"pl-s"],[393,394,"pl-s"],[394,400,"pl-c1"],[400,401,"pl-s"],[598,599,"pl-s"],[599,614,"pl-c1"],[614,615,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[135,136,"pl-s"],[136,146,"pl-c1"],[146,147,"pl-s"],[149,150,"pl-s"],[150,165,"pl-c1"],[165,166,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,33,"pl-c1"],[33,34,"pl-s"],[46,47,"pl-s"],[47,49,"pl-c1"],[49,50,"pl-s"],[59,60,"pl-s"],[60,64,"pl-c1"],[64,65,"pl-s"],[69,70,"pl-s"],[70,74,"pl-c1"],[74,75,"pl-s"],[101,102,"pl-s"],[102,177,"pl-c1"],[177,178,"pl-s"],[188,189,"pl-s"],[189,199,"pl-c1"],[199,200,"pl-s"],[320,321,"pl-s"],[321,326,"pl-c1"],[326,327,"pl-s"],[331,332,"pl-s"],[332,337,"pl-c1"],[337,338,"pl-s"],[340,341,"pl-s"],[341,357,"pl-c1"],[357,358,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"],[20,21,"pl-s"],[21,48,"pl-c1"],[48,49,"pl-s"],[118,119,"pl-s"],[119,140,"pl-c1"],[140,141,"pl-s"],[161,162,"pl-s"],[162,167,"pl-c1"],[167,168,"pl-s"],[186,187,"pl-s"],[187,269,"pl-c1"],[269,270,"pl-s"],[280,281,"pl-s"],[281,283,"pl-c1"],[283,284,"pl-s"]],[[2,3,"pl-v"],[10,11,"pl-s"],[11,38,"pl-c1"],[38,39,"pl-s"],[207,208,"pl-s"],[208,279,"pl-c1"],[279,280,"pl-s"],[290,291,"pl-s"],[291,299,"pl-c1"],[299,300,"pl-s"]],[],[[175,176,"pl-s"],[176,214,"pl-c1"],[214,215,"pl-s"],[343,344,"pl-s"],[344,354,"pl-c1"],[354,355,"pl-s"],[357,358,"pl-s"],[358,373,"pl-c1"],[373,374,"pl-s"]],[],[[0,1,"pl-v"],[33,34,"pl-s"],[34,38,"pl-c1"],[38,39,"pl-s"],[44,45,"pl-s"],[45,50,"pl-c1"],[50,51,"pl-s"],[134,135,"pl-s"],[135,170,"pl-c1"],[170,171,"pl-s"],[186,187,"pl-s"],[187,191,"pl-c1"],[191,192,"pl-s"],[197,198,"pl-s"],[198,201,"pl-c1"],[201,202,"pl-s"],[263,264,"pl-s"],[264,268,"pl-c1"],[268,269,"pl-s"],[274,275,"pl-s"],[275,279,"pl-c1"],[279,280,"pl-s"],[367,368,"pl-s"],[368,372,"pl-c1"],[372,373,"pl-s"],[382,383,"pl-s"],[383,387,"pl-c1"],[387,388,"pl-s"],[393,394,"pl-s"],[394,399,"pl-c1"],[399,400,"pl-s"]],[],[[0,1,"pl-v"],[73,74,"pl-s"],[74,79,"pl-c1"],[79,80,"pl-s"],[81,82,"pl-s"],[82,87,"pl-c1"],[87,88,"pl-s"],[97,98,"pl-s"],[98,110,"pl-c1"],[110,111,"pl-s"],[196,197,"pl-s"],[197,199,"pl-c1"],[199,200,"pl-s"],[206,207,"pl-s"],[207,211,"pl-c1"],[211,212,"pl-s"],[213,214,"pl-s"],[214,220,"pl-c1"],[220,221,"pl-s"],[459,460,"pl-s"],[460,477,"pl-c1"],[477,478,"pl-s"],[534,535,"pl-s"],[535,539,"pl-c1"],[539,540,"pl-s"],[545,546,"pl-s"],[546,552,"pl-c1"],[552,553,"pl-s"],[689,690,"pl-s"],[690,727,"pl-c1"],[727,728,"pl-s"],[757,758,"pl-s"],[758,763,"pl-c1"],[763,764,"pl-s"],[766,767,"pl-s"],[767,772,"pl-c1"],[772,773,"pl-s"],[775,776,"pl-s"],[776,780,"pl-c1"],[780,781,"pl-s"]],[[0,1,"pl-v"],[4,5,"pl-s"],[5,9,"pl-c1"],[9,10,"pl-s"],[102,103,"pl-s"],[103,108,"pl-c1"],[108,109,"pl-s"],[191,192,"pl-s"],[192,202,"pl-c1"],[202,203,"pl-s"],[212,213,"pl-s"],[213,223,"pl-c1"],[223,224,"pl-s"],[279,280,"pl-s"],[280,293,"pl-c1"],[293,294,"pl-s"],[511,512,"pl-s"],[512,522,"pl-c1"],[522,523,"pl-s"],[525,526,"pl-s"],[526,531,"pl-c1"],[531,532,"pl-s"]],[[0,1,"pl-v"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[70,71,"pl-s"],[71,76,"pl-c1"],[76,77,"pl-s"],[82,83,"pl-s"],[83,88,"pl-c1"],[88,89,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"]],[[2,3,"pl-v"],[109,110,"pl-s"],[110,115,"pl-c1"],[115,116,"pl-s"],[181,182,"pl-s"],[182,187,"pl-c1"],[187,188,"pl-s"]],[[2,3,"pl-v"],[9,10,"pl-s"],[10,15,"pl-c1"],[15,16,"pl-s"]],[],[],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[],[],[[0,1,"pl-v"],[26,27,"pl-s"],[27,36,"pl-c1"],[36,37,"pl-s"],[42,43,"pl-s"],[43,61,"pl-c1"],[61,62,"pl-s"]],[[0,1,"pl-v"],[227,228,"pl-s"],[228,235,"pl-c1"],[235,236,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[80,81,"pl-s"],[81,94,"pl-c1"],[94,95,"pl-s"],[184,185,"pl-s"],[185,195,"pl-c1"],[195,196,"pl-s"],[295,296,"pl-s"],[296,306,"pl-c1"],[306,307,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[34,35,"pl-s"],[35,43,"pl-c1"],[43,44,"pl-s"],[127,128,"pl-s"],[128,149,"pl-c1"],[149,150,"pl-s"],[255,256,"pl-s"],[256,282,"pl-c1"],[282,283,"pl-s"],[292,293,"pl-s"],[293,301,"pl-c1"],[301,302,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[19,20,"pl-s"],[20,35,"pl-c1"],[35,36,"pl-s"],[38,39,"pl-s"],[39,55,"pl-c1"],[55,56,"pl-s"],[58,59,"pl-s"],[59,72,"pl-c1"],[72,73,"pl-s"],[75,76,"pl-s"],[76,91,"pl-c1"],[91,92,"pl-s"],[97,98,"pl-s"],[98,108,"pl-c1"],[108,109,"pl-s"],[162,163,"pl-s"],[163,173,"pl-c1"],[173,174,"pl-s"],[393,394,"pl-s"],[394,407,"pl-c1"],[407,408,"pl-s"],[800,801,"pl-s"],[801,807,"pl-c1"],[807,808,"pl-s"]],[[0,1,"pl-v"],[89,90,"pl-s"],[90,96,"pl-c1"],[96,97,"pl-s"],[237,238,"pl-s"],[238,239,"pl-c1"],[239,240,"pl-s"],[851,852,"pl-s"],[852,858,"pl-c1"],[858,859,"pl-s"],[863,864,"pl-s"],[864,870,"pl-c1"],[870,871,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[17,18,"pl-s"],[18,20,"pl-c1"],[20,21,"pl-s"],[23,24,"pl-s"],[24,26,"pl-c1"],[26,27,"pl-s"],[31,32,"pl-s"],[32,33,"pl-c1"],[33,34,"pl-s"],[120,121,"pl-s"],[121,123,"pl-c1"],[123,124,"pl-s"],[226,227,"pl-s"],[227,228,"pl-c1"],[228,229,"pl-s"],[325,326,"pl-s"],[326,328,"pl-c1"],[328,329,"pl-s"],[348,349,"pl-s"],[349,350,"pl-c1"],[350,351,"pl-s"],[391,392,"pl-s"],[392,397,"pl-c1"],[397,398,"pl-s"],[408,409,"pl-s"],[409,419,"pl-c1"],[419,420,"pl-s"],[425,426,"pl-s"],[426,430,"pl-c1"],[430,431,"pl-s"],[441,442,"pl-s"],[442,448,"pl-c1"],[448,449,"pl-s"],[675,676,"pl-s"],[676,678,"pl-c1"],[678,679,"pl-s"],[681,682,"pl-s"],[682,684,"pl-c1"],[684,685,"pl-s"],[702,703,"pl-s"],[703,704,"pl-c1"],[704,705,"pl-s"],[801,802,"pl-s"],[802,808,"pl-c1"],[808,809,"pl-s"],[884,885,"pl-s"],[885,895,"pl-c1"],[895,896,"pl-s"],[939,940,"pl-s"],[940,952,"pl-c1"],[952,953,"pl-s"],[954,955,"pl-s"],[955,966,"pl-c1"],[966,967,"pl-s"],[977,978,"pl-s"],[978,993,"pl-c1"],[993,994,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[24,25,"pl-s"],[25,76,"pl-c1"],[76,77,"pl-s"],[82,83,"pl-s"],[83,92,"pl-c1"],[92,93,"pl-s"],[198,199,"pl-s"],[199,208,"pl-c1"],[208,209,"pl-s"],[254,255,"pl-s"],[255,283,"pl-c1"],[283,284,"pl-s"],[293,294,"pl-s"],[294,315,"pl-c1"],[315,316,"pl-s"],[336,337,"pl-s"],[337,348,"pl-c1"],[348,349,"pl-s"],[353,354,"pl-s"],[354,366,"pl-c1"],[366,367,"pl-s"],[384,385,"pl-s"],[385,395,"pl-c1"],[395,396,"pl-s"],[577,578,"pl-s"],[578,585,"pl-c1"],[585,586,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,52,"pl-c1"],[52,53,"pl-s"],[95,96,"pl-s"],[96,141,"pl-c1"],[141,142,"pl-s"],[198,199,"pl-s"],[199,208,"pl-c1"],[208,209,"pl-s"],[240,241,"pl-s"],[241,256,"pl-c1"],[256,257,"pl-s"],[263,264,"pl-s"],[264,283,"pl-c1"],[283,284,"pl-s"],[431,432,"pl-s"],[432,441,"pl-c1"],[441,442,"pl-s"],[488,489,"pl-s"],[489,511,"pl-c1"],[511,512,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[86,87,"pl-s"],[87,108,"pl-c1"],[108,109,"pl-s"],[206,207,"pl-s"],[207,239,"pl-c1"],[239,240,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[224,225,"pl-s"],[225,256,"pl-c1"],[256,257,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,28,"pl-c1"],[28,29,"pl-s"],[33,34,"pl-s"],[34,53,"pl-c1"],[53,54,"pl-s"],[88,89,"pl-s"],[89,98,"pl-c1"],[98,99,"pl-s"],[113,114,"pl-s"],[114,128,"pl-c1"],[128,129,"pl-s"]],[[0,1,"pl-v"],[4,5,"pl-s"],[5,12,"pl-c1"],[12,13,"pl-s"],[85,86,"pl-s"],[86,90,"pl-c1"],[90,91,"pl-s"],[129,130,"pl-s"],[130,133,"pl-c1"],[133,134,"pl-s"],[167,168,"pl-s"],[168,171,"pl-c1"],[171,172,"pl-s"],[187,188,"pl-s"],[188,192,"pl-c1"],[192,193,"pl-s"],[273,274,"pl-s"],[274,291,"pl-c1"],[291,292,"pl-s"],[298,299,"pl-s"],[299,311,"pl-c1"],[311,312,"pl-s"],[668,669,"pl-s"],[669,673,"pl-c1"],[673,674,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,38,"pl-c1"],[38,39,"pl-s"],[270,271,"pl-s"],[271,285,"pl-c1"],[285,286,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[26,27,"pl-s"],[27,44,"pl-c1"],[44,45,"pl-s"],[47,48,"pl-s"],[48,65,"pl-c1"],[65,66,"pl-s"],[68,69,"pl-s"],[69,85,"pl-c1"],[85,86,"pl-s"],[91,92,"pl-s"],[92,104,"pl-c1"],[104,105,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[99,100,"pl-s"],[100,126,"pl-c1"],[126,127,"pl-s"],[307,308,"pl-s"],[308,390,"pl-c1"],[390,391,"pl-s"],[401,402,"pl-s"],[402,417,"pl-c1"],[417,418,"pl-s"],[530,531,"pl-s"],[531,548,"pl-c1"],[548,549,"pl-s"],[558,559,"pl-s"],[559,572,"pl-c1"],[572,573,"pl-s"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[4,5,"pl-s"],[5,12,"pl-c1"],[12,13,"pl-s"],[91,92,"pl-s"],[92,103,"pl-c1"],[103,104,"pl-s"],[121,122,"pl-s"],[122,132,"pl-c1"],[132,133,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[21,22,"pl-s"],[22,62,"pl-c1"],[62,63,"pl-s"],[148,149,"pl-s"],[149,272,"pl-c1"],[272,273,"pl-s"]],[[0,1,"pl-v"],[18,19,"pl-s"],[19,23,"pl-c1"],[23,24,"pl-s"],[86,87,"pl-s"],[87,97,"pl-c1"],[97,98,"pl-s"],[116,117,"pl-s"],[117,121,"pl-c1"],[121,122,"pl-s"],[213,214,"pl-s"],[214,218,"pl-c1"],[218,219,"pl-s"],[265,266,"pl-s"],[266,286,"pl-c1"],[286,287,"pl-s"],[491,492,"pl-s"],[492,506,"pl-c1"],[506,507,"pl-s"],[587,588,"pl-s"],[588,598,"pl-c1"],[598,599,"pl-s"],[607,608,"pl-s"],[608,616,"pl-c1"],[616,617,"pl-s"]],[[0,1,"pl-v"],[18,19,"pl-s"],[19,74,"pl-c1"],[74,75,"pl-s"],[104,105,"pl-s"],[105,115,"pl-c1"],[115,116,"pl-s"],[118,119,"pl-s"],[119,128,"pl-c1"],[128,129,"pl-s"],[175,176,"pl-s"],[176,186,"pl-c1"],[186,187,"pl-s"],[204,205,"pl-s"],[205,222,"pl-c1"],[222,223,"pl-s"],[227,228,"pl-s"],[228,244,"pl-c1"],[244,245,"pl-s"]],[[0,1,"pl-v"],[21,22,"pl-s"],[22,39,"pl-c1"],[39,40,"pl-s"],[121,122,"pl-s"],[122,132,"pl-c1"],[132,133,"pl-s"],[135,136,"pl-s"],[136,140,"pl-c1"],[140,141,"pl-s"],[146,147,"pl-s"],[147,152,"pl-c1"],[152,153,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[363,364,"pl-s"],[364,366,"pl-c1"],[366,367,"pl-s"],[379,380,"pl-s"],[380,384,"pl-c1"],[384,385,"pl-s"],[386,387,"pl-s"],[387,392,"pl-c1"],[392,393,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,44,"pl-c1"],[44,45,"pl-s"],[316,317,"pl-s"],[317,331,"pl-c1"],[331,332,"pl-s"],[346,347,"pl-s"],[347,358,"pl-c1"],[358,359,"pl-s"],[410,411,"pl-s"],[411,418,"pl-c1"],[418,419,"pl-s"],[472,473,"pl-s"],[473,482,"pl-c1"],[482,483,"pl-s"],[632,633,"pl-s"],[633,642,"pl-c1"],[642,643,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[57,58,"pl-s"],[58,65,"pl-c1"],[65,66,"pl-s"],[79,80,"pl-s"],[80,94,"pl-c1"],[94,95,"pl-s"],[225,226,"pl-s"],[226,247,"pl-c1"],[247,248,"pl-s"],[839,840,"pl-s"],[840,844,"pl-c1"],[844,845,"pl-s"]],[[0,1,"pl-v"],[143,144,"pl-s"],[144,149,"pl-c1"],[149,150,"pl-s"],[367,368,"pl-s"],[368,373,"pl-c1"],[373,374,"pl-s"],[378,379,"pl-s"],[379,384,"pl-c1"],[384,385,"pl-s"]],[[0,1,"pl-v"],[4,5,"pl-s"],[5,9,"pl-c1"],[9,10,"pl-s"],[52,53,"pl-s"],[53,64,"pl-c1"],[64,65,"pl-s"],[67,68,"pl-s"],[68,73,"pl-c1"],[73,74,"pl-s"],[76,77,"pl-s"],[77,84,"pl-c1"],[84,85,"pl-s"],[87,88,"pl-s"],[88,96,"pl-c1"],[96,97,"pl-s"],[99,100,"pl-s"],[100,110,"pl-c1"],[110,111,"pl-s"],[118,119,"pl-s"],[119,121,"pl-c1"],[121,122,"pl-s"],[159,160,"pl-s"],[160,164,"pl-c1"],[164,165,"pl-s"],[306,307,"pl-s"],[307,311,"pl-c1"],[311,312,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,30,"pl-c1"],[30,31,"pl-s"],[53,54,"pl-s"],[54,64,"pl-c1"],[64,65,"pl-s"],[72,73,"pl-s"],[73,90,"pl-c1"],[90,91,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[18,19,"pl-s"],[19,63,"pl-c1"],[63,64,"pl-s"],[93,94,"pl-s"],[94,101,"pl-c1"],[101,102,"pl-s"],[104,105,"pl-s"],[105,114,"pl-c1"],[114,115,"pl-s"],[117,118,"pl-s"],[118,126,"pl-c1"],[126,127,"pl-s"],[129,130,"pl-s"],[130,144,"pl-c1"],[144,145,"pl-s"],[150,151,"pl-s"],[151,165,"pl-c1"],[165,166,"pl-s"],[184,185,"pl-s"],[185,195,"pl-c1"],[195,196,"pl-s"],[290,291,"pl-s"],[291,303,"pl-c1"],[303,304,"pl-s"]],[[0,1,"pl-v"],[13,14,"pl-s"],[14,31,"pl-c1"],[31,32,"pl-s"],[71,72,"pl-s"],[72,80,"pl-c1"],[80,81,"pl-s"],[100,101,"pl-s"],[101,108,"pl-c1"],[108,109,"pl-s"],[158,159,"pl-s"],[159,166,"pl-c1"],[166,167,"pl-s"],[256,257,"pl-s"],[257,264,"pl-c1"],[264,265,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[79,80,"pl-s"],[80,90,"pl-c1"],[90,91,"pl-s"],[353,354,"pl-s"],[354,359,"pl-c1"],[359,360,"pl-s"],[370,371,"pl-s"],[371,375,"pl-c1"],[375,376,"pl-s"],[396,397,"pl-s"],[397,418,"pl-c1"],[418,419,"pl-s"],[421,422,"pl-s"],[422,439,"pl-c1"],[439,440,"pl-s"],[442,443,"pl-s"],[443,460,"pl-c1"],[460,461,"pl-s"],[463,464,"pl-s"],[464,480,"pl-c1"],[480,481,"pl-s"],[483,484,"pl-s"],[484,497,"pl-c1"],[497,498,"pl-s"],[500,501,"pl-s"],[501,505,"pl-c1"],[505,506,"pl-s"],[741,742,"pl-s"],[742,752,"pl-c1"],[752,753,"pl-s"],[873,874,"pl-s"],[874,903,"pl-c1"],[903,904,"pl-s"],[911,912,"pl-s"],[912,922,"pl-c1"],[922,923,"pl-s"],[929,930,"pl-s"],[930,948,"pl-c1"],[948,949,"pl-s"]],[[0,1,"pl-v"],[7,8,"pl-s"],[8,29,"pl-c1"],[29,30,"pl-s"],[32,33,"pl-s"],[33,47,"pl-c1"],[47,48,"pl-s"],[53,54,"pl-s"],[54,67,"pl-c1"],[67,68,"pl-s"],[139,140,"pl-s"],[140,156,"pl-c1"],[156,157,"pl-s"],[191,192,"pl-s"],[192,202,"pl-c1"],[202,203,"pl-s"],[263,264,"pl-s"],[264,337,"pl-c1"],[337,338,"pl-s"],[349,350,"pl-s"],[350,354,"pl-c1"],[354,355,"pl-s"],[455,456,"pl-s"],[456,477,"pl-c1"],[477,478,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[33,34,"pl-s"],[34,42,"pl-c1"],[42,43,"pl-s"],[130,131,"pl-s"],[131,137,"pl-c1"],[137,138,"pl-s"],[222,223,"pl-s"],[223,231,"pl-c1"],[231,232,"pl-s"],[274,275,"pl-s"],[275,285,"pl-c1"],[285,286,"pl-s"]],[[0,1,"pl-v"],[207,208,"pl-s"],[208,224,"pl-c1"],[224,225,"pl-s"],[258,259,"pl-s"],[259,291,"pl-c1"],[291,292,"pl-s"],[312,313,"pl-s"],[313,327,"pl-c1"],[327,328,"pl-s"],[487,488,"pl-s"],[488,515,"pl-c1"],[515,516,"pl-s"],[537,538,"pl-s"],[538,547,"pl-c1"],[547,548,"pl-s"]],[[0,1,"pl-v"],[64,65,"pl-s"],[65,72,"pl-c1"],[72,73,"pl-s"],[83,84,"pl-s"],[84,93,"pl-c1"],[93,94,"pl-s"],[151,152,"pl-s"],[152,173,"pl-c1"],[173,174,"pl-s"],[204,205,"pl-s"],[205,211,"pl-c1"],[211,212,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[57,58,"pl-s"],[58,65,"pl-c1"],[65,66,"pl-s"],[79,80,"pl-s"],[80,90,"pl-c1"],[90,91,"pl-s"],[98,99,"pl-s"],[99,120,"pl-c1"],[120,121,"pl-s"],[154,155,"pl-s"],[155,169,"pl-c1"],[169,170,"pl-s"]],[[0,1,"pl-v"],[52,53,"pl-s"],[53,68,"pl-c1"],[68,69,"pl-s"],[98,99,"pl-s"],[99,108,"pl-c1"],[108,109,"pl-s"],[133,134,"pl-s"],[134,152,"pl-c1"],[152,153,"pl-s"],[155,156,"pl-s"],[156,173,"pl-c1"],[173,174,"pl-s"],[179,180,"pl-s"],[180,195,"pl-c1"],[195,196,"pl-s"],[309,310,"pl-s"],[310,312,"pl-c1"],[312,313,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,39,"pl-c1"],[39,40,"pl-s"],[56,57,"pl-s"],[57,109,"pl-c1"],[109,110,"pl-s"],[117,118,"pl-s"],[118,139,"pl-c1"],[139,140,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[55,56,"pl-s"],[56,70,"pl-c1"],[70,71,"pl-s"],[75,76,"pl-s"],[76,89,"pl-c1"],[89,90,"pl-s"],[123,124,"pl-s"],[124,135,"pl-c1"],[135,136,"pl-s"],[140,141,"pl-s"],[141,150,"pl-c1"],[150,151,"pl-s"],[470,471,"pl-s"],[471,478,"pl-c1"],[478,479,"pl-s"],[678,679,"pl-s"],[679,695,"pl-c1"],[695,696,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[35,36,"pl-s"],[36,46,"pl-c1"],[46,47,"pl-s"],[67,68,"pl-s"],[68,78,"pl-c1"],[78,79,"pl-s"]],[[0,1,"pl-v"],[32,33,"pl-s"],[33,57,"pl-c1"],[57,58,"pl-s"]],[[0,1,"pl-v"],[48,49,"pl-s"],[49,57,"pl-c1"],[57,58,"pl-s"],[64,65,"pl-s"],[65,100,"pl-c1"],[100,101,"pl-s"],[106,107,"pl-s"],[107,136,"pl-c1"],[136,137,"pl-s"],[164,165,"pl-s"],[165,202,"pl-c1"],[202,203,"pl-s"],[208,209,"pl-s"],[209,251,"pl-c1"],[251,252,"pl-s"],[365,366,"pl-s"],[366,377,"pl-c1"],[377,378,"pl-s"],[421,422,"pl-s"],[422,445,"pl-c1"],[445,446,"pl-s"]],[[0,1,"pl-v"],[229,230,"pl-s"],[230,253,"pl-c1"],[253,254,"pl-s"]],[],[[123,124,"pl-s"],[124,153,"pl-c1"],[153,154,"pl-s"],[271,272,"pl-s"],[272,284,"pl-c1"],[284,285,"pl-s"],[535,536,"pl-s"],[536,548,"pl-c1"],[548,549,"pl-s"],[554,555,"pl-s"],[555,565,"pl-c1"],[565,566,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[46,47,"pl-s"],[47,50,"pl-c1"],[50,51,"pl-s"],[60,61,"pl-s"],[61,118,"pl-c1"],[118,119,"pl-s"],[167,168,"pl-s"],[168,179,"pl-c1"],[179,180,"pl-s"],[246,247,"pl-s"],[247,259,"pl-c1"],[259,260,"pl-s"],[262,263,"pl-s"],[263,269,"pl-c1"],[269,270,"pl-s"],[275,276,"pl-s"],[276,280,"pl-c1"],[280,281,"pl-s"],[315,316,"pl-s"],[316,365,"pl-c1"],[365,366,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[28,29,"pl-s"],[29,33,"pl-c1"],[33,34,"pl-s"],[154,155,"pl-s"],[155,190,"pl-c1"],[190,191,"pl-s"],[201,202,"pl-s"],[202,223,"pl-c1"],[223,224,"pl-s"],[230,231,"pl-s"],[231,242,"pl-c1"],[242,243,"pl-s"],[247,248,"pl-s"],[248,267,"pl-c1"],[267,268,"pl-s"],[292,293,"pl-s"],[293,308,"pl-c1"],[308,309,"pl-s"],[315,316,"pl-s"],[316,327,"pl-c1"],[327,328,"pl-s"],[332,333,"pl-s"],[333,342,"pl-c1"],[342,343,"pl-s"],[352,353,"pl-s"],[353,357,"pl-c1"],[357,358,"pl-s"],[488,489,"pl-s"],[489,510,"pl-c1"],[510,511,"pl-s"]],[],[[103,104,"pl-s"],[104,113,"pl-c1"],[113,114,"pl-s"],[116,117,"pl-s"],[117,127,"pl-c1"],[127,128,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[15,16,"pl-s"],[16,38,"pl-c1"],[38,39,"pl-s"],[195,196,"pl-s"],[196,200,"pl-c1"],[200,201,"pl-s"],[214,215,"pl-s"],[215,227,"pl-c1"],[227,228,"pl-s"],[233,234,"pl-s"],[234,241,"pl-c1"],[241,242,"pl-s"],[271,272,"pl-s"],[272,276,"pl-c1"],[276,277,"pl-s"],[337,338,"pl-s"],[338,347,"pl-c1"],[347,348,"pl-s"],[450,451,"pl-s"],[451,460,"pl-c1"],[460,461,"pl-s"],[514,515,"pl-s"],[515,551,"pl-c1"],[551,552,"pl-s"],[785,786,"pl-s"],[786,790,"pl-c1"],[790,791,"pl-s"],[795,798,"pl-s"],[796,798,"pl-corl"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[57,58,"pl-s"],[58,73,"pl-c1"],[73,74,"pl-s"],[79,80,"pl-s"],[80,92,"pl-c1"],[92,93,"pl-s"],[129,130,"pl-s"],[130,142,"pl-c1"],[142,143,"pl-s"],[152,153,"pl-s"],[153,158,"pl-c1"],[158,159,"pl-s"],[174,175,"pl-s"],[175,179,"pl-c1"],[179,180,"pl-s"],[188,189,"pl-s"],[189,198,"pl-c1"],[198,199,"pl-s"],[262,263,"pl-s"],[263,288,"pl-c1"],[288,289,"pl-s"],[472,475,"pl-s"],[473,475,"pl-corl"]],[],[[57,58,"pl-s"],[58,68,"pl-c1"],[68,69,"pl-s"],[255,258,"pl-s"],[256,258,"pl-corl"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[66,67,"pl-s"],[67,79,"pl-c1"],[79,80,"pl-s"],[86,107,"pl-s"],[87,107,"pl-corl"],[132,133,"pl-s"],[133,142,"pl-c1"],[142,143,"pl-s"],[231,232,"pl-s"],[232,250,"pl-c1"],[250,251,"pl-s"],[381,382,"pl-s"],[382,389,"pl-c1"],[389,390,"pl-s"],[491,492,"pl-s"],[492,502,"pl-c1"],[502,503,"pl-s"],[550,551,"pl-s"],[551,555,"pl-c1"],[555,556,"pl-s"],[645,646,"pl-s"],[646,650,"pl-c1"],[650,651,"pl-s"],[657,658,"pl-s"],[658,660,"pl-c1"],[660,661,"pl-s"],[702,703,"pl-s"],[703,711,"pl-c1"],[711,712,"pl-s"],[847,848,"pl-s"],[848,855,"pl-c1"],[855,856,"pl-s"]],[],[[99,100,"pl-s"],[100,107,"pl-c1"],[107,108,"pl-s"],[172,173,"pl-s"],[173,183,"pl-c1"],[183,184,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[281,282,"pl-s"],[282,298,"pl-c1"],[298,299,"pl-s"],[310,311,"pl-s"],[311,313,"pl-c1"],[313,314,"pl-s"],[412,413,"pl-s"],[413,427,"pl-c1"],[427,428,"pl-s"],[525,541,"pl-s"],[526,541,"pl-corl"],[576,577,"pl-s"],[577,616,"pl-c1"],[616,617,"pl-s"]],[[0,1,"pl-v"],[7,8,"pl-s"],[8,15,"pl-c1"],[15,16,"pl-s"],[76,77,"pl-s"],[77,88,"pl-c1"],[88,89,"pl-s"],[91,92,"pl-s"],[92,115,"pl-c1"],[115,116,"pl-s"],[176,177,"pl-s"],[177,189,"pl-c1"],[189,190,"pl-s"],[196,217,"pl-s"],[197,217,"pl-corl"],[278,279,"pl-s"],[279,297,"pl-c1"],[297,298,"pl-s"],[337,338,"pl-s"],[338,345,"pl-c1"],[345,346,"pl-s"],[404,405,"pl-s"],[405,415,"pl-c1"],[415,416,"pl-s"]],[],[],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[152,153,"pl-s"],[153,168,"pl-c1"],[168,169,"pl-s"],[178,179,"pl-s"],[179,233,"pl-c1"],[233,234,"pl-s"],[260,261,"pl-s"],[261,265,"pl-c1"],[265,266,"pl-s"],[283,284,"pl-s"],[284,288,"pl-c1"],[288,289,"pl-s"],[318,319,"pl-s"],[319,326,"pl-c1"],[326,327,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[134,135,"pl-s"],[135,148,"pl-c1"],[148,149,"pl-s"]],[[0,1,"pl-v"],[238,239,"pl-s"],[239,260,"pl-c1"],[260,261,"pl-s"],[263,264,"pl-s"],[264,281,"pl-c1"],[281,282,"pl-s"],[284,285,"pl-s"],[285,289,"pl-c1"],[289,290,"pl-s"],[597,598,"pl-s"],[598,611,"pl-c1"],[611,612,"pl-s"],[636,637,"pl-s"],[637,644,"pl-c1"],[644,645,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[49,50,"pl-s"],[50,55,"pl-c1"],[55,56,"pl-s"],[60,61,"pl-s"],[61,66,"pl-c1"],[66,67,"pl-s"],[99,100,"pl-s"],[100,113,"pl-c1"],[113,114,"pl-s"]],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[60,61,"pl-s"],[61,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[49,50,"pl-s"],[50,54,"pl-c1"],[54,55,"pl-s"],[61,62,"pl-s"],[62,67,"pl-c1"],[67,68,"pl-s"],[93,94,"pl-s"],[94,98,"pl-c1"],[98,99,"pl-s"],[109,110,"pl-s"],[110,134,"pl-c1"],[134,135,"pl-s"]],[],[[109,110,"pl-s"],[110,120,"pl-c1"],[120,121,"pl-s"],[123,124,"pl-s"],[124,138,"pl-c1"],[138,139,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[[0,1,"pl-v"]],[],[[83,84,"pl-s"],[84,94,"pl-c1"],[94,95,"pl-s"],[97,98,"pl-s"],[98,112,"pl-c1"],[112,113,"pl-s"],[161,162,"pl-s"],[162,172,"pl-c1"],[172,173,"pl-s"],[179,180,"pl-s"],[180,191,"pl-c1"],[191,192,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[42,43,"pl-s"],[43,52,"pl-c1"],[52,53,"pl-s"],[143,144,"pl-s"],[144,160,"pl-c1"],[160,161,"pl-s"],[178,179,"pl-s"],[179,181,"pl-c1"],[181,182,"pl-s"],[241,242,"pl-s"],[242,268,"pl-c1"],[268,269,"pl-s"],[361,362,"pl-s"],[362,376,"pl-c1"],[376,377,"pl-s"],[532,533,"pl-s"],[533,554,"pl-c1"],[554,555,"pl-s"],[637,638,"pl-s"],[638,651,"pl-c1"],[651,652,"pl-s"]],[[0,1,"pl-v"],[44,45,"pl-s"],[45,72,"pl-c1"],[72,73,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[37,38,"pl-s"],[38,56,"pl-c1"],[56,57,"pl-s"],[74,75,"pl-s"],[75,111,"pl-c1"],[111,112,"pl-s"],[359,360,"pl-s"],[360,371,"pl-c1"],[371,372,"pl-s"],[420,421,"pl-s"],[421,430,"pl-c1"],[430,431,"pl-s"],[502,503,"pl-s"],[503,509,"pl-c1"],[509,510,"pl-s"],[518,519,"pl-s"],[519,532,"pl-c1"],[532,533,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,14,"pl-c1"],[14,15,"pl-s"],[157,158,"pl-s"],[158,171,"pl-c1"],[171,172,"pl-s"]],[[0,1,"pl-v"],[30,31,"pl-s"],[31,46,"pl-c1"],[46,47,"pl-s"],[51,52,"pl-s"],[52,69,"pl-c1"],[69,70,"pl-s"],[124,125,"pl-s"],[125,140,"pl-c1"],[140,141,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[38,39,"pl-s"],[39,55,"pl-c1"],[55,56,"pl-s"],[121,122,"pl-s"],[122,247,"pl-c1"],[247,248,"pl-s"],[250,251,"pl-s"],[251,263,"pl-c1"],[263,264,"pl-s"],[279,280,"pl-s"],[280,281,"pl-c1"],[281,282,"pl-s"]],[[0,1,"pl-v"],[7,8,"pl-s"],[8,24,"pl-c1"],[24,25,"pl-s"],[39,40,"pl-s"],[40,54,"pl-c1"],[54,55,"pl-s"],[60,61,"pl-s"],[61,88,"pl-c1"],[88,89,"pl-s"]],[[0,1,"pl-v"],[84,85,"pl-s"],[85,93,"pl-c1"],[93,94,"pl-s"],[96,97,"pl-s"],[97,112,"pl-c1"],[112,113,"pl-s"],[188,189,"pl-s"],[189,199,"pl-c1"],[199,200,"pl-s"],[207,208,"pl-s"],[208,219,"pl-c1"],[219,220,"pl-s"],[222,223,"pl-s"],[223,233,"pl-c1"],[233,234,"pl-s"],[243,244,"pl-s"],[244,270,"pl-c1"],[270,271,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[10,11,"pl-s"],[11,18,"pl-c1"],[18,19,"pl-s"],[360,361,"pl-s"],[361,372,"pl-c1"],[372,373,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[469,470,"pl-s"],[470,483,"pl-c1"],[483,484,"pl-s"],[496,497,"pl-s"],[497,502,"pl-c1"],[502,503,"pl-s"],[510,511,"pl-s"],[511,516,"pl-c1"],[516,517,"pl-s"],[742,743,"pl-s"],[743,752,"pl-c1"],[752,753,"pl-s"]],[[0,1,"pl-v"],[12,13,"pl-s"],[13,31,"pl-c1"],[31,32,"pl-s"],[307,308,"pl-s"],[308,317,"pl-c1"],[317,318,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"],[119,120,"pl-s"],[120,130,"pl-c1"],[130,131,"pl-s"],[133,134,"pl-s"],[134,203,"pl-c1"],[203,204,"pl-s"],[239,240,"pl-s"],[240,253,"pl-c1"],[253,254,"pl-s"],[567,568,"pl-s"],[568,579,"pl-c1"],[579,580,"pl-s"]],[],[[0,1,"pl-v"],[96,97,"pl-s"],[97,101,"pl-c1"],[101,102,"pl-s"],[119,120,"pl-s"],[120,143,"pl-c1"],[143,144,"pl-s"],[150,151,"pl-s"],[151,163,"pl-c1"],[163,164,"pl-s"]],[[0,1,"pl-v"],[9,10,"pl-s"],[10,15,"pl-c1"],[15,16,"pl-s"],[45,46,"pl-s"],[46,58,"pl-c1"],[58,59,"pl-s"],[134,135,"pl-s"],[135,138,"pl-c1"],[138,139,"pl-s"],[160,161,"pl-s"],[161,164,"pl-c1"],[164,165,"pl-s"],[182,183,"pl-s"],[183,203,"pl-c1"],[203,204,"pl-s"],[214,215,"pl-s"],[215,227,"pl-c1"],[227,228,"pl-s"]],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[27,28,"pl-s"],[28,45,"pl-c1"],[45,46,"pl-s"],[53,54,"pl-s"],[54,94,"pl-c1"],[94,95,"pl-s"],[101,102,"pl-s"],[102,109,"pl-c1"],[109,110,"pl-s"],[120,121,"pl-s"],[121,133,"pl-c1"],[133,134,"pl-s"],[196,197,"pl-s"],[197,200,"pl-c1"],[200,201,"pl-s"],[203,204,"pl-s"],[204,206,"pl-c1"],[206,207,"pl-s"],[212,213,"pl-s"],[213,221,"pl-c1"],[221,222,"pl-s"],[299,300,"pl-s"],[300,309,"pl-c1"],[309,310,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"],[537,538,"pl-s"],[538,549,"pl-c1"],[549,550,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[142,143,"pl-s"],[143,157,"pl-c1"],[157,158,"pl-s"]],[[0,1,"pl-v"],[79,80,"pl-s"],[80,85,"pl-c1"],[85,86,"pl-s"],[322,323,"pl-s"],[323,328,"pl-c1"],[328,329,"pl-s"],[409,410,"pl-s"],[410,417,"pl-c1"],[417,418,"pl-s"]],[[0,1,"pl-v"],[55,56,"pl-s"],[56,59,"pl-c1"],[59,60,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"],[99,100,"pl-s"],[100,125,"pl-c1"],[125,126,"pl-s"],[151,152,"pl-s"],[152,159,"pl-c1"],[159,160,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"],[40,41,"pl-s"],[41,54,"pl-c1"],[54,55,"pl-s"],[92,93,"pl-s"],[93,101,"pl-c1"],[101,102,"pl-s"]],[[0,1,"pl-v"],[87,88,"pl-s"],[88,109,"pl-c1"],[109,110,"pl-s"],[118,119,"pl-s"],[119,141,"pl-c1"],[141,142,"pl-s"],[284,285,"pl-s"],[285,296,"pl-c1"],[296,297,"pl-s"],[313,314,"pl-s"],[314,324,"pl-c1"],[324,325,"pl-s"],[568,569,"pl-s"],[569,587,"pl-c1"],[587,588,"pl-s"]],[],[[127,128,"pl-s"],[128,149,"pl-c1"],[149,150,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[216,217,"pl-s"],[217,246,"pl-c1"],[246,247,"pl-s"],[255,256,"pl-s"],[256,265,"pl-c1"],[265,266,"pl-s"],[689,690,"pl-s"],[690,697,"pl-c1"],[697,698,"pl-s"],[700,701,"pl-s"],[701,713,"pl-c1"],[713,714,"pl-s"],[719,720,"pl-s"],[720,730,"pl-c1"],[730,731,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[10,11,"pl-s"],[11,18,"pl-c1"],[18,19,"pl-s"],[28,29,"pl-s"],[29,38,"pl-c1"],[38,39,"pl-s"],[55,56,"pl-s"],[56,68,"pl-c1"],[68,69,"pl-s"],[71,72,"pl-s"],[72,177,"pl-c1"],[177,178,"pl-s"],[186,187,"pl-s"],[187,220,"pl-c1"],[220,221,"pl-s"],[268,269,"pl-s"],[269,271,"pl-c1"],[271,272,"pl-s"],[330,331,"pl-s"],[331,339,"pl-c1"],[339,340,"pl-s"],[862,863,"pl-s"],[863,870,"pl-c1"],[870,871,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[70,71,"pl-s"],[71,82,"pl-c1"],[82,83,"pl-s"],[302,303,"pl-s"],[303,312,"pl-c1"],[312,313,"pl-s"],[691,692,"pl-s"],[692,702,"pl-c1"],[702,703,"pl-s"]],[[0,1,"pl-v"]],[],[[0,1,"pl-v"],[6,7,"pl-s"],[7,12,"pl-c1"],[12,13,"pl-s"],[75,76,"pl-s"],[76,77,"pl-c1"],[77,78,"pl-s"],[256,257,"pl-s"],[257,268,"pl-c1"],[268,269,"pl-s"],[349,350,"pl-s"],[350,363,"pl-c1"],[363,364,"pl-s"],[497,498,"pl-s"],[498,507,"pl-c1"],[507,508,"pl-s"],[541,542,"pl-s"],[542,551,"pl-c1"],[551,552,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[66,67,"pl-s"],[67,74,"pl-c1"],[74,75,"pl-s"],[85,86,"pl-s"],[86,100,"pl-c1"],[100,101,"pl-s"],[127,128,"pl-s"],[128,134,"pl-c1"],[134,135,"pl-s"],[243,244,"pl-s"],[244,261,"pl-c1"],[261,262,"pl-s"],[400,401,"pl-s"],[401,409,"pl-c1"],[409,410,"pl-s"],[444,445,"pl-s"],[445,457,"pl-c1"],[457,458,"pl-s"],[534,535,"pl-s"],[535,547,"pl-c1"],[547,548,"pl-s"],[712,713,"pl-s"],[713,729,"pl-c1"],[729,730,"pl-s"],[745,746,"pl-s"],[746,752,"pl-c1"],[752,753,"pl-s"]],[[0,1,"pl-v"],[51,52,"pl-s"],[52,62,"pl-c1"],[62,63,"pl-s"],[77,78,"pl-s"],[78,88,"pl-c1"],[88,89,"pl-s"],[121,122,"pl-s"],[122,127,"pl-c1"],[127,128,"pl-s"]],[[0,1,"pl-v"],[34,35,"pl-s"],[35,47,"pl-c1"],[47,48,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"],[95,96,"pl-s"],[96,108,"pl-c1"],[108,109,"pl-s"],[177,178,"pl-s"],[178,188,"pl-c1"],[188,189,"pl-s"],[191,192,"pl-s"],[192,207,"pl-c1"],[207,208,"pl-s"],[213,214,"pl-s"],[214,228,"pl-c1"],[228,229,"pl-s"],[480,481,"pl-s"],[481,495,"pl-c1"],[495,496,"pl-s"],[505,506,"pl-s"],[506,514,"pl-c1"],[514,515,"pl-s"],[524,525,"pl-s"],[525,538,"pl-c1"],[538,539,"pl-s"],[583,584,"pl-s"],[584,590,"pl-c1"],[590,591,"pl-s"],[595,596,"pl-s"],[596,609,"pl-c1"],[609,610,"pl-s"],[674,675,"pl-s"],[675,702,"pl-c1"],[702,703,"pl-s"],[761,762,"pl-s"],[762,770,"pl-c1"],[770,771,"pl-s"],[891,902,"pl-s"],[892,902,"pl-corl"],[906,909,"pl-s"],[907,909,"pl-corl"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[81,82,"pl-s"],[82,93,"pl-c1"],[93,94,"pl-s"],[176,177,"pl-s"],[177,188,"pl-c1"],[188,189,"pl-s"],[232,233,"pl-s"],[233,242,"pl-c1"],[242,243,"pl-s"],[272,273,"pl-s"],[273,289,"pl-c1"],[289,290,"pl-s"],[331,332,"pl-s"],[332,346,"pl-c1"],[346,347,"pl-s"],[376,377,"pl-s"],[377,390,"pl-c1"],[390,391,"pl-s"],[393,394,"pl-s"],[394,425,"pl-c1"],[425,426,"pl-s"],[477,488,"pl-s"],[478,488,"pl-corl"],[492,495,"pl-s"],[493,495,"pl-corl"]],[],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[49,50,"pl-s"],[50,70,"pl-c1"],[70,71,"pl-s"],[99,100,"pl-s"],[100,108,"pl-c1"],[108,109,"pl-s"],[178,179,"pl-s"],[179,189,"pl-c1"],[189,190,"pl-s"],[498,499,"pl-s"],[499,510,"pl-c1"],[510,511,"pl-s"],[541,542,"pl-s"],[542,549,"pl-c1"],[549,550,"pl-s"],[573,574,"pl-s"],[574,589,"pl-c1"],[589,590,"pl-s"],[616,617,"pl-s"],[617,643,"pl-c1"],[643,644,"pl-s"],[824,825,"pl-s"],[825,842,"pl-c1"],[842,843,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[46,47,"pl-s"],[47,55,"pl-c1"],[55,56,"pl-s"],[92,93,"pl-s"],[93,107,"pl-c1"],[107,108,"pl-s"],[112,113,"pl-s"],[113,120,"pl-c1"],[120,121,"pl-s"],[231,232,"pl-s"],[232,239,"pl-c1"],[239,240,"pl-s"],[272,273,"pl-s"],[273,277,"pl-c1"],[277,278,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[84,85,"pl-s"],[85,102,"pl-c1"],[102,103,"pl-s"],[178,179,"pl-s"],[179,199,"pl-c1"],[199,200,"pl-s"],[296,297,"pl-s"],[297,354,"pl-c1"],[354,355,"pl-s"],[380,381,"pl-s"],[381,398,"pl-c1"],[398,399,"pl-s"],[409,410,"pl-s"],[410,427,"pl-c1"],[427,428,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,46,"pl-c1"],[46,47,"pl-s"],[71,72,"pl-s"],[72,76,"pl-c1"],[76,77,"pl-s"],[145,146,"pl-s"],[146,151,"pl-c1"],[151,152,"pl-s"],[224,225,"pl-s"],[225,232,"pl-c1"],[232,233,"pl-s"],[265,266,"pl-s"],[266,270,"pl-c1"],[270,271,"pl-s"],[469,470,"pl-s"],[470,477,"pl-c1"],[477,478,"pl-s"],[499,500,"pl-s"],[500,504,"pl-c1"],[504,505,"pl-s"],[515,516,"pl-s"],[516,523,"pl-c1"],[523,524,"pl-s"],[584,585,"pl-s"],[585,595,"pl-c1"],[595,596,"pl-s"],[602,603,"pl-s"],[603,614,"pl-c1"],[614,615,"pl-s"],[640,641,"pl-s"],[641,648,"pl-c1"],[648,649,"pl-s"],[681,682,"pl-s"],[682,692,"pl-c1"],[692,693,"pl-s"],[712,713,"pl-s"],[713,720,"pl-c1"],[720,721,"pl-s"],[752,753,"pl-s"],[753,768,"pl-c1"],[768,769,"pl-s"]],[[0,1,"pl-v"],[7,8,"pl-s"],[8,19,"pl-c1"],[19,20,"pl-s"],[93,94,"pl-s"],[94,103,"pl-c1"],[103,104,"pl-s"],[191,192,"pl-s"],[192,197,"pl-c1"],[197,198,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[29,30,"pl-s"],[30,47,"pl-c1"],[47,48,"pl-s"],[63,64,"pl-s"],[64,84,"pl-c1"],[84,85,"pl-s"],[109,110,"pl-s"],[110,122,"pl-c1"],[122,123,"pl-s"],[237,238,"pl-s"],[238,252,"pl-c1"],[252,253,"pl-s"],[389,397,"pl-s"],[390,397,"pl-corl"],[401,404,"pl-s"],[402,404,"pl-corl"]],[[0,1,"pl-v"],[80,81,"pl-s"],[81,91,"pl-c1"],[91,92,"pl-s"],[158,159,"pl-s"],[159,165,"pl-c1"],[165,166,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[151,152,"pl-s"],[152,181,"pl-c1"],[181,182,"pl-s"],[442,443,"pl-s"],[443,450,"pl-c1"],[450,451,"pl-s"],[617,618,"pl-s"],[618,630,"pl-c1"],[630,631,"pl-s"],[633,634,"pl-s"],[634,652,"pl-c1"],[652,653,"pl-s"],[655,656,"pl-s"],[656,672,"pl-c1"],[672,673,"pl-s"],[675,676,"pl-s"],[676,689,"pl-c1"],[689,690,"pl-s"],[769,770,"pl-s"],[770,783,"pl-c1"],[783,784,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,50,"pl-c1"],[50,51,"pl-s"],[65,66,"pl-s"],[66,84,"pl-c1"],[84,85,"pl-s"],[128,129,"pl-s"],[129,138,"pl-c1"],[138,139,"pl-s"],[141,142,"pl-s"],[142,152,"pl-c1"],[152,153,"pl-s"],[155,156,"pl-s"],[156,162,"pl-c1"],[162,163,"pl-s"],[165,166,"pl-s"],[166,170,"pl-c1"],[170,171,"pl-s"],[173,174,"pl-s"],[174,177,"pl-c1"],[177,178,"pl-s"],[180,181,"pl-s"],[181,185,"pl-c1"],[185,186,"pl-s"],[263,264,"pl-s"],[264,276,"pl-c1"],[276,277,"pl-s"],[516,517,"pl-s"],[517,537,"pl-c1"],[537,538,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,46,"pl-c1"],[46,47,"pl-s"],[50,51,"pl-s"],[51,62,"pl-c1"],[62,63,"pl-s"],[83,84,"pl-s"],[84,91,"pl-c1"],[91,92,"pl-s"],[239,240,"pl-s"],[240,252,"pl-c1"],[252,253,"pl-s"],[386,387,"pl-s"],[387,397,"pl-c1"],[397,398,"pl-s"],[425,426,"pl-s"],[426,428,"pl-c1"],[428,429,"pl-s"],[430,431,"pl-s"],[431,435,"pl-c1"],[435,436,"pl-s"],[437,438,"pl-s"],[438,442,"pl-c1"],[442,443,"pl-s"],[475,476,"pl-s"],[476,504,"pl-c1"],[504,505,"pl-s"],[518,519,"pl-s"],[519,524,"pl-c1"],[524,525,"pl-s"],[662,663,"pl-s"],[663,668,"pl-c1"],[668,669,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,42,"pl-c1"],[42,43,"pl-s"],[263,264,"pl-s"],[264,282,"pl-c1"],[282,283,"pl-s"],[289,290,"pl-s"],[290,309,"pl-c1"],[309,310,"pl-s"]],[[0,1,"pl-v"],[86,87,"pl-s"],[87,104,"pl-c1"],[104,105,"pl-s"]],[[0,1,"pl-v"],[26,27,"pl-s"],[27,57,"pl-c1"],[57,58,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[2,3,"pl-v"],[63,64,"pl-s"],[64,74,"pl-c1"],[74,75,"pl-s"]],[[2,3,"pl-v"],[211,212,"pl-s"],[212,222,"pl-c1"],[222,223,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"]],[[0,1,"pl-v"],[47,50,"pl-s"],[48,50,"pl-corl"],[118,119,"pl-s"],[119,123,"pl-c1"],[123,124,"pl-s"],[151,152,"pl-s"],[152,156,"pl-c1"],[156,157,"pl-s"],[171,172,"pl-s"],[172,179,"pl-c1"],[179,180,"pl-s"],[214,215,"pl-s"],[215,223,"pl-c1"],[223,224,"pl-s"],[252,253,"pl-s"],[253,280,"pl-c1"],[280,281,"pl-s"],[308,309,"pl-s"],[309,319,"pl-c1"],[319,320,"pl-s"],[323,324,"pl-s"],[324,351,"pl-c1"],[351,352,"pl-s"],[357,358,"pl-s"],[358,387,"pl-c1"],[387,388,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[56,57,"pl-s"],[57,75,"pl-c1"],[75,76,"pl-s"],[186,187,"pl-s"],[187,199,"pl-c1"],[199,200,"pl-s"],[532,533,"pl-s"],[533,542,"pl-c1"],[542,543,"pl-s"],[613,614,"pl-s"],[614,623,"pl-c1"],[623,624,"pl-s"],[672,673,"pl-s"],[673,681,"pl-c1"],[681,682,"pl-s"],[695,696,"pl-s"],[696,703,"pl-c1"],[703,704,"pl-s"],[736,737,"pl-s"],[737,748,"pl-c1"],[748,749,"pl-s"],[777,778,"pl-s"],[778,786,"pl-c1"],[786,787,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[446,447,"pl-s"],[447,457,"pl-c1"],[457,458,"pl-s"],[727,728,"pl-s"],[728,737,"pl-c1"],[737,738,"pl-s"],[765,766,"pl-s"],[766,770,"pl-c1"],[770,771,"pl-s"],[836,837,"pl-s"],[837,870,"pl-c1"],[870,871,"pl-s"]],[[0,1,"pl-v"],[13,14,"pl-s"],[14,35,"pl-c1"],[35,36,"pl-s"],[133,134,"pl-s"],[134,139,"pl-c1"],[139,140,"pl-s"],[149,150,"pl-s"],[150,157,"pl-c1"],[157,158,"pl-s"],[244,245,"pl-s"],[245,265,"pl-c1"],[265,266,"pl-s"],[535,536,"pl-s"],[536,556,"pl-c1"],[556,557,"pl-s"],[686,687,"pl-s"],[687,699,"pl-c1"],[699,700,"pl-s"]],[[0,1,"pl-v"],[317,318,"pl-s"],[318,320,"pl-c1"],[320,321,"pl-s"],[393,394,"pl-s"],[394,414,"pl-c1"],[414,415,"pl-s"],[421,422,"pl-s"],[422,431,"pl-c1"],[431,432,"pl-s"],[480,481,"pl-s"],[481,499,"pl-c1"],[499,500,"pl-s"],[558,559,"pl-s"],[559,570,"pl-c1"],[570,571,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[21,22,"pl-s"],[22,29,"pl-c1"],[29,30,"pl-s"],[45,46,"pl-s"],[46,58,"pl-c1"],[58,59,"pl-s"],[73,74,"pl-s"],[74,86,"pl-c1"],[86,87,"pl-s"],[89,90,"pl-s"],[90,96,"pl-c1"],[96,97,"pl-s"],[102,103,"pl-s"],[103,107,"pl-c1"],[107,108,"pl-s"],[150,151,"pl-s"],[151,157,"pl-c1"],[157,158,"pl-s"],[252,253,"pl-s"],[253,280,"pl-c1"],[280,281,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[75,76,"pl-s"],[76,93,"pl-c1"],[93,94,"pl-s"],[361,362,"pl-s"],[362,366,"pl-c1"],[366,367,"pl-s"],[433,434,"pl-s"],[434,438,"pl-c1"],[438,439,"pl-s"],[611,612,"pl-s"],[612,638,"pl-c1"],[638,639,"pl-s"]],[[2,3,"pl-v"],[116,117,"pl-s"],[117,157,"pl-c1"],[157,158,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,28,"pl-c1"],[28,29,"pl-s"],[107,108,"pl-s"],[108,122,"pl-c1"],[122,123,"pl-s"],[214,215,"pl-s"],[215,225,"pl-c1"],[225,226,"pl-s"],[248,249,"pl-s"],[249,259,"pl-c1"],[259,260,"pl-s"],[305,306,"pl-s"],[306,320,"pl-c1"],[320,321,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"],[115,116,"pl-s"],[116,130,"pl-c1"],[130,131,"pl-s"],[139,140,"pl-s"],[140,146,"pl-c1"],[146,147,"pl-s"],[156,157,"pl-s"],[157,169,"pl-c1"],[169,170,"pl-s"],[317,318,"pl-s"],[318,344,"pl-c1"],[344,345,"pl-s"],[402,403,"pl-s"],[403,424,"pl-c1"],[424,425,"pl-s"],[446,447,"pl-s"],[447,473,"pl-c1"],[473,474,"pl-s"],[510,511,"pl-s"],[511,534,"pl-c1"],[534,535,"pl-s"],[601,602,"pl-s"],[602,614,"pl-c1"],[614,615,"pl-s"],[690,691,"pl-s"],[691,728,"pl-c1"],[728,729,"pl-s"],[784,785,"pl-s"],[785,815,"pl-c1"],[815,816,"pl-s"],[825,826,"pl-s"],[826,846,"pl-c1"],[846,847,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"],[32,33,"pl-s"],[33,45,"pl-c1"],[45,46,"pl-s"],[69,70,"pl-s"],[70,74,"pl-c1"],[74,75,"pl-s"],[112,113,"pl-s"],[113,119,"pl-c1"],[119,120,"pl-s"],[219,220,"pl-s"],[220,224,"pl-c1"],[224,225,"pl-s"],[359,360,"pl-s"],[360,367,"pl-c1"],[367,368,"pl-s"],[400,401,"pl-s"],[401,421,"pl-c1"],[421,422,"pl-s"],[442,443,"pl-s"],[443,445,"pl-c1"],[445,446,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,30,"pl-c1"],[30,31,"pl-s"]],[[2,3,"pl-v"]],[[2,3,"pl-v"],[28,29,"pl-s"],[29,37,"pl-c1"],[37,38,"pl-s"],[89,90,"pl-s"],[90,101,"pl-c1"],[101,102,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,48,"pl-c1"],[48,49,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[31,32,"pl-s"],[32,47,"pl-c1"],[47,48,"pl-s"],[582,583,"pl-s"],[583,616,"pl-c1"],[616,617,"pl-s"]],[[2,3,"pl-v"],[100,101,"pl-s"],[101,121,"pl-c1"],[121,122,"pl-s"],[220,221,"pl-s"],[221,236,"pl-c1"],[236,237,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,13,"pl-c1"],[13,14,"pl-s"],[24,25,"pl-s"],[25,32,"pl-c1"],[32,33,"pl-s"],[125,126,"pl-s"],[126,133,"pl-c1"],[133,134,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[292,293,"pl-s"],[293,303,"pl-c1"],[303,304,"pl-s"],[444,445,"pl-s"],[445,466,"pl-c1"],[466,467,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"],[304,305,"pl-s"],[305,308,"pl-c1"],[308,309,"pl-s"],[431,432,"pl-s"],[432,433,"pl-c1"],[433,434,"pl-s"],[583,584,"pl-s"],[584,589,"pl-c1"],[589,590,"pl-s"],[615,616,"pl-s"],[616,627,"pl-c1"],[627,628,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[145,146,"pl-s"],[146,156,"pl-c1"],[156,157,"pl-s"]],[[2,3,"pl-v"],[34,35,"pl-s"],[35,38,"pl-c1"],[38,39,"pl-s"]],[[2,3,"pl-v"],[183,184,"pl-s"],[184,189,"pl-c1"],[189,190,"pl-s"],[204,205,"pl-s"],[205,236,"pl-c1"],[236,237,"pl-s"]],[],[[0,1,"pl-v"],[94,95,"pl-s"],[95,103,"pl-c1"],[103,104,"pl-s"],[238,239,"pl-s"],[239,247,"pl-c1"],[247,248,"pl-s"],[281,282,"pl-s"],[282,296,"pl-c1"],[296,297,"pl-s"],[595,596,"pl-s"],[596,606,"pl-c1"],[606,607,"pl-s"],[635,636,"pl-s"],[636,643,"pl-c1"],[643,644,"pl-s"],[745,746,"pl-s"],[746,761,"pl-c1"],[761,762,"pl-s"]],[[0,1,"pl-v"],[81,82,"pl-s"],[82,98,"pl-c1"],[98,99,"pl-s"],[121,122,"pl-s"],[122,138,"pl-c1"],[138,139,"pl-s"],[308,309,"pl-s"],[309,315,"pl-c1"],[315,316,"pl-s"]],[[0,1,"pl-v"],[77,78,"pl-s"],[78,86,"pl-c1"],[86,87,"pl-s"],[121,122,"pl-s"],[122,140,"pl-c1"],[140,141,"pl-s"],[239,240,"pl-s"],[240,254,"pl-c1"],[254,255,"pl-s"],[259,260,"pl-s"],[260,274,"pl-c1"],[274,275,"pl-s"]],[[0,1,"pl-v"],[4,5,"pl-s"],[5,13,"pl-c1"],[13,14,"pl-s"],[143,144,"pl-s"],[144,159,"pl-c1"],[159,160,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,32,"pl-c1"],[32,33,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"],[92,93,"pl-s"],[93,101,"pl-c1"],[101,102,"pl-s"],[104,105,"pl-s"],[105,111,"pl-c1"],[111,112,"pl-s"],[127,128,"pl-s"],[128,147,"pl-c1"],[147,148,"pl-s"],[416,417,"pl-s"],[417,438,"pl-c1"],[438,439,"pl-s"],[636,637,"pl-s"],[637,645,"pl-c1"],[645,646,"pl-s"],[648,649,"pl-s"],[649,661,"pl-c1"],[661,662,"pl-s"],[667,668,"pl-s"],[668,674,"pl-c1"],[674,675,"pl-s"],[702,703,"pl-s"],[703,735,"pl-c1"],[735,736,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[40,41,"pl-s"],[41,51,"pl-c1"],[51,52,"pl-s"],[231,232,"pl-s"],[232,246,"pl-c1"],[246,247,"pl-s"]],[[0,1,"pl-v"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[66,67,"pl-s"],[67,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[59,60,"pl-s"],[60,85,"pl-c1"],[85,86,"pl-s"],[181,182,"pl-s"],[182,199,"pl-c1"],[199,200,"pl-s"],[204,205,"pl-s"],[205,216,"pl-c1"],[216,217,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[357,358,"pl-s"],[358,360,"pl-c1"],[360,361,"pl-s"],[663,664,"pl-s"],[664,683,"pl-c1"],[683,684,"pl-s"],[686,687,"pl-s"],[687,720,"pl-c1"],[720,721,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[16,17,"pl-s"],[17,38,"pl-c1"],[38,39,"pl-s"],[43,44,"pl-s"],[44,60,"pl-c1"],[60,61,"pl-s"],[111,112,"pl-s"],[112,176,"pl-c1"],[176,177,"pl-s"],[187,188,"pl-s"],[188,195,"pl-c1"],[195,196,"pl-s"],[204,205,"pl-s"],[205,217,"pl-c1"],[217,218,"pl-s"],[507,508,"pl-s"],[508,536,"pl-c1"],[536,537,"pl-s"],[879,880,"pl-s"],[880,916,"pl-c1"],[916,917,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[19,20,"pl-s"],[20,41,"pl-c1"],[41,42,"pl-s"],[47,48,"pl-s"],[48,57,"pl-c1"],[57,58,"pl-s"],[145,146,"pl-s"],[146,151,"pl-c1"],[151,152,"pl-s"],[168,169,"pl-s"],[169,194,"pl-c1"],[194,195,"pl-s"],[597,598,"pl-s"],[598,634,"pl-c1"],[634,635,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[19,20,"pl-s"],[20,77,"pl-c1"],[77,78,"pl-s"],[105,106,"pl-s"],[106,141,"pl-c1"],[141,142,"pl-s"],[155,156,"pl-s"],[156,184,"pl-c1"],[184,185,"pl-s"],[200,201,"pl-s"],[201,227,"pl-c1"],[227,228,"pl-s"],[307,308,"pl-s"],[308,312,"pl-c1"],[312,313,"pl-s"],[404,405,"pl-s"],[405,410,"pl-c1"],[410,411,"pl-s"],[413,414,"pl-s"],[414,417,"pl-c1"],[417,418,"pl-s"],[420,421,"pl-s"],[421,425,"pl-c1"],[425,426,"pl-s"],[600,601,"pl-s"],[601,617,"pl-c1"],[617,618,"pl-s"],[707,708,"pl-s"],[708,721,"pl-c1"],[721,722,"pl-s"],[724,725,"pl-s"],[725,736,"pl-c1"],[736,737,"pl-s"],[750,751,"pl-s"],[751,761,"pl-c1"],[761,762,"pl-s"],[827,828,"pl-s"],[828,832,"pl-c1"],[832,833,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[63,64,"pl-s"],[64,76,"pl-c1"],[76,77,"pl-s"],[79,80,"pl-s"],[80,92,"pl-c1"],[92,93,"pl-s"],[141,142,"pl-s"],[142,156,"pl-c1"],[156,157,"pl-s"],[193,194,"pl-s"],[194,203,"pl-c1"],[203,204,"pl-s"],[224,225,"pl-s"],[225,235,"pl-c1"],[235,236,"pl-s"],[244,245,"pl-s"],[245,253,"pl-c1"],[253,254,"pl-s"],[256,257,"pl-s"],[257,264,"pl-c1"],[264,265,"pl-s"],[270,271,"pl-s"],[271,276,"pl-c1"],[276,277,"pl-s"],[309,310,"pl-s"],[310,323,"pl-c1"],[323,324,"pl-s"],[326,327,"pl-s"],[327,337,"pl-c1"],[337,338,"pl-s"],[340,341,"pl-s"],[341,354,"pl-c1"],[354,355,"pl-s"],[357,358,"pl-s"],[358,368,"pl-c1"],[368,369,"pl-s"],[371,372,"pl-s"],[372,385,"pl-c1"],[385,386,"pl-s"],[388,389,"pl-s"],[389,399,"pl-c1"],[399,400,"pl-s"],[405,406,"pl-s"],[406,414,"pl-c1"],[414,415,"pl-s"],[445,446,"pl-s"],[446,455,"pl-c1"],[455,456,"pl-s"],[458,459,"pl-s"],[459,470,"pl-c1"],[470,471,"pl-s"],[511,512,"pl-s"],[512,523,"pl-c1"],[523,524,"pl-s"],[526,527,"pl-s"],[527,543,"pl-c1"],[543,544,"pl-s"],[546,547,"pl-s"],[547,554,"pl-c1"],[554,555,"pl-s"],[557,558,"pl-s"],[558,573,"pl-c1"],[573,574,"pl-s"],[576,577,"pl-s"],[577,591,"pl-c1"],[591,592,"pl-s"],[594,595,"pl-s"],[595,602,"pl-c1"],[602,603,"pl-s"],[605,606,"pl-s"],[606,614,"pl-c1"],[614,615,"pl-s"],[620,621,"pl-s"],[621,628,"pl-c1"],[628,629,"pl-s"],[631,632,"pl-s"],[632,639,"pl-c1"],[639,640,"pl-s"],[648,649,"pl-s"],[649,671,"pl-c1"],[671,672,"pl-s"],[756,757,"pl-s"],[757,764,"pl-c1"],[764,765,"pl-s"],[801,802,"pl-s"],[802,816,"pl-c1"],[816,817,"pl-s"]],[[0,1,"pl-v"],[180,181,"pl-s"],[181,186,"pl-c1"],[186,187,"pl-s"],[191,192,"pl-s"],[192,197,"pl-c1"],[197,198,"pl-s"],[249,250,"pl-s"],[250,263,"pl-c1"],[263,264,"pl-s"],[285,286,"pl-s"],[286,294,"pl-c1"],[294,295,"pl-s"],[303,304,"pl-s"],[304,306,"pl-c1"],[306,307,"pl-s"],[329,330,"pl-s"],[330,334,"pl-c1"],[334,335,"pl-s"],[336,337,"pl-s"],[337,341,"pl-c1"],[341,342,"pl-s"],[349,350,"pl-s"],[350,359,"pl-c1"],[359,360,"pl-s"],[371,372,"pl-s"],[372,384,"pl-c1"],[384,385,"pl-s"],[410,411,"pl-s"],[411,420,"pl-c1"],[420,421,"pl-s"],[467,468,"pl-s"],[468,492,"pl-c1"],[492,493,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[80,81,"pl-s"],[81,92,"pl-c1"],[92,93,"pl-s"],[120,121,"pl-s"],[121,125,"pl-c1"],[125,126,"pl-s"],[150,151,"pl-s"],[151,161,"pl-c1"],[161,162,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[62,63,"pl-s"],[63,73,"pl-c1"],[73,74,"pl-s"],[124,125,"pl-s"],[125,132,"pl-c1"],[132,133,"pl-s"],[492,493,"pl-s"],[493,510,"pl-c1"],[510,511,"pl-s"],[527,528,"pl-s"],[528,545,"pl-c1"],[545,546,"pl-s"],[610,611,"pl-s"],[611,631,"pl-c1"],[631,632,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[48,49,"pl-s"],[49,61,"pl-c1"],[61,62,"pl-s"],[64,65,"pl-s"],[65,83,"pl-c1"],[83,84,"pl-s"],[86,87,"pl-s"],[87,93,"pl-c1"],[93,94,"pl-s"],[96,97,"pl-s"],[97,113,"pl-c1"],[113,114,"pl-s"],[116,117,"pl-s"],[117,130,"pl-c1"],[130,131,"pl-s"],[133,134,"pl-s"],[134,144,"pl-c1"],[144,145,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[245,246,"pl-s"],[246,255,"pl-c1"],[255,256,"pl-s"],[285,286,"pl-s"],[286,290,"pl-c1"],[290,291,"pl-s"],[301,302,"pl-s"],[302,306,"pl-c1"],[306,307,"pl-s"],[312,313,"pl-s"],[313,321,"pl-c1"],[321,322,"pl-s"],[462,463,"pl-s"],[463,496,"pl-c1"],[496,497,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"],[285,286,"pl-s"],[286,288,"pl-c1"],[288,289,"pl-s"],[382,383,"pl-s"],[383,385,"pl-c1"],[385,386,"pl-s"],[764,765,"pl-s"],[765,778,"pl-c1"],[778,779,"pl-s"]],[],[[0,1,"pl-v"],[135,136,"pl-s"],[136,154,"pl-c1"],[154,155,"pl-s"],[332,333,"pl-s"],[333,349,"pl-c1"],[349,350,"pl-s"],[531,532,"pl-s"],[532,561,"pl-c1"],[561,562,"pl-s"],[597,598,"pl-s"],[598,615,"pl-c1"],[615,616,"pl-s"],[632,633,"pl-s"],[633,645,"pl-c1"],[645,646,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[57,58,"pl-s"],[58,62,"pl-c1"],[62,63,"pl-s"],[95,96,"pl-s"],[96,105,"pl-c1"],[105,106,"pl-s"],[174,175,"pl-s"],[175,184,"pl-c1"],[184,185,"pl-s"]],[],[[0,1,"pl-v"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[50,51,"pl-s"],[51,61,"pl-c1"],[61,62,"pl-s"],[75,76,"pl-s"],[76,87,"pl-c1"],[87,88,"pl-s"],[90,91,"pl-s"],[91,107,"pl-c1"],[107,108,"pl-s"],[121,122,"pl-s"],[122,129,"pl-c1"],[129,130,"pl-s"],[140,141,"pl-s"],[141,151,"pl-c1"],[151,152,"pl-s"],[181,182,"pl-s"],[182,197,"pl-c1"],[197,198,"pl-s"],[200,201,"pl-s"],[201,214,"pl-c1"],[214,215,"pl-s"],[220,221,"pl-s"],[221,235,"pl-c1"],[235,236,"pl-s"],[277,278,"pl-s"],[278,282,"pl-c1"],[282,283,"pl-s"],[297,298,"pl-s"],[298,303,"pl-c1"],[303,304,"pl-s"],[341,342,"pl-s"],[342,365,"pl-c1"],[365,366,"pl-s"],[382,383,"pl-s"],[383,411,"pl-c1"],[411,412,"pl-s"],[540,541,"pl-s"],[541,551,"pl-c1"],[551,552,"pl-s"],[610,611,"pl-s"],[611,624,"pl-c1"],[624,625,"pl-s"],[640,641,"pl-s"],[641,652,"pl-c1"],[652,653,"pl-s"],[725,726,"pl-s"],[726,758,"pl-c1"],[758,759,"pl-s"]],[],[[0,1,"pl-v"],[122,123,"pl-s"],[123,130,"pl-c1"],[130,131,"pl-s"],[140,141,"pl-s"],[141,148,"pl-c1"],[148,149,"pl-s"],[156,157,"pl-s"],[157,163,"pl-c1"],[163,164,"pl-s"],[269,270,"pl-s"],[270,277,"pl-c1"],[277,278,"pl-s"],[335,336,"pl-s"],[336,368,"pl-c1"],[368,369,"pl-s"],[406,407,"pl-s"],[407,420,"pl-c1"],[420,421,"pl-s"]],[[0,1,"pl-v"],[143,144,"pl-s"],[144,211,"pl-c1"],[211,212,"pl-s"],[222,223,"pl-s"],[223,246,"pl-c1"],[246,247,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"],[150,151,"pl-s"],[151,169,"pl-c1"],[169,170,"pl-s"],[202,203,"pl-s"],[203,219,"pl-c1"],[219,220,"pl-s"],[272,273,"pl-s"],[273,281,"pl-c1"],[281,282,"pl-s"],[380,381,"pl-s"],[381,391,"pl-c1"],[391,392,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[126,127,"pl-s"],[127,137,"pl-c1"],[137,138,"pl-s"],[196,197,"pl-s"],[197,217,"pl-c1"],[217,218,"pl-s"],[220,221,"pl-s"],[221,241,"pl-c1"],[241,242,"pl-s"],[247,248,"pl-s"],[248,268,"pl-c1"],[268,269,"pl-s"]],[],[[0,1,"pl-v"],[161,162,"pl-s"],[162,206,"pl-c1"],[206,207,"pl-s"],[848,849,"pl-s"],[849,875,"pl-c1"],[875,876,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"],[13,14,"pl-s"],[14,22,"pl-c1"],[22,23,"pl-s"],[112,113,"pl-s"],[113,117,"pl-c1"],[117,118,"pl-s"],[161,162,"pl-s"],[162,170,"pl-c1"],[170,171,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[139,140,"pl-s"],[140,141,"pl-c1"],[141,142,"pl-s"],[295,296,"pl-s"],[296,329,"pl-c1"],[329,330,"pl-s"]],[],[[0,1,"pl-v"],[832,833,"pl-s"],[833,853,"pl-c1"],[853,854,"pl-s"],[868,869,"pl-s"],[869,896,"pl-c1"],[896,897,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,1,"pl-v"],[102,103,"pl-s"],[103,108,"pl-c1"],[108,109,"pl-s"],[111,112,"pl-s"],[112,122,"pl-c1"],[122,123,"pl-s"],[125,126,"pl-s"],[126,143,"pl-c1"],[143,144,"pl-s"],[146,147,"pl-s"],[147,163,"pl-c1"],[163,164,"pl-s"],[166,167,"pl-s"],[167,180,"pl-c1"],[180,181,"pl-s"],[183,184,"pl-s"],[184,189,"pl-c1"],[189,190,"pl-s"],[192,193,"pl-s"],[193,198,"pl-c1"],[198,199,"pl-s"],[201,202,"pl-s"],[202,205,"pl-c1"],[205,206,"pl-s"],[208,209,"pl-s"],[209,217,"pl-c1"],[217,218,"pl-s"],[223,224,"pl-s"],[224,226,"pl-c1"],[226,227,"pl-s"],[228,229,"pl-s"],[229,233,"pl-c1"],[233,234,"pl-s"],[235,236,"pl-s"],[236,240,"pl-c1"],[240,241,"pl-s"],[253,254,"pl-s"],[254,262,"pl-c1"],[262,263,"pl-s"],[299,300,"pl-s"],[300,320,"pl-c1"],[320,321,"pl-s"],[359,360,"pl-s"],[360,377,"pl-c1"],[377,378,"pl-s"],[464,465,"pl-s"],[465,498,"pl-c1"],[498,499,"pl-s"],[853,854,"pl-s"],[854,880,"pl-c1"],[880,881,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"],[13,14,"pl-s"],[14,18,"pl-c1"],[18,19,"pl-s"],[229,230,"pl-s"],[230,263,"pl-c1"],[263,264,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[42,43,"pl-s"],[43,60,"pl-c1"],[60,61,"pl-s"],[81,82,"pl-s"],[82,109,"pl-c1"],[109,110,"pl-s"]],[[0,1,"pl-v"],[42,43,"pl-s"],[43,60,"pl-c1"],[60,61,"pl-s"],[124,125,"pl-s"],[125,145,"pl-c1"],[145,146,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[[0,1,"pl-v"],[59,60,"pl-s"],[60,72,"pl-c1"],[72,73,"pl-s"],[78,79,"pl-s"],[79,92,"pl-c1"],[92,93,"pl-s"],[231,232,"pl-s"],[232,244,"pl-c1"],[244,245,"pl-s"],[299,300,"pl-s"],[300,308,"pl-c1"],[308,309,"pl-s"],[493,494,"pl-s"],[494,505,"pl-c1"],[505,506,"pl-s"],[508,509,"pl-s"],[509,525,"pl-c1"],[525,526,"pl-s"],[544,545,"pl-s"],[545,552,"pl-c1"],[552,553,"pl-s"]],[[0,1,"pl-v"],[56,57,"pl-s"],[57,87,"pl-c1"],[87,88,"pl-s"],[101,102,"pl-s"],[102,117,"pl-c1"],[117,118,"pl-s"],[124,125,"pl-s"],[125,145,"pl-c1"],[145,146,"pl-s"],[263,264,"pl-s"],[264,269,"pl-c1"],[269,270,"pl-s"],[295,296,"pl-s"],[296,328,"pl-c1"],[328,329,"pl-s"],[392,393,"pl-s"],[393,423,"pl-c1"],[423,424,"pl-s"]],[[0,1,"pl-v"],[19,20,"pl-s"],[20,24,"pl-c1"],[24,25,"pl-s"],[32,33,"pl-s"],[33,37,"pl-c1"],[37,38,"pl-s"],[83,84,"pl-s"],[84,104,"pl-c1"],[104,105,"pl-s"],[317,318,"pl-s"],[318,325,"pl-c1"],[325,326,"pl-s"],[355,356,"pl-s"],[356,408,"pl-c1"],[408,409,"pl-s"],[441,442,"pl-s"],[442,455,"pl-c1"],[455,456,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,19,"pl-c1"],[19,20,"pl-s"],[47,48,"pl-s"],[48,54,"pl-c1"],[54,55,"pl-s"],[57,58,"pl-s"],[58,65,"pl-c1"],[65,66,"pl-s"],[68,69,"pl-s"],[69,75,"pl-c1"],[75,76,"pl-s"],[81,82,"pl-s"],[82,86,"pl-c1"],[86,87,"pl-s"],[150,151,"pl-s"],[151,168,"pl-c1"],[168,169,"pl-s"],[201,202,"pl-s"],[202,213,"pl-c1"],[213,214,"pl-s"]],[[0,1,"pl-v"],[204,205,"pl-s"],[205,236,"pl-c1"],[236,237,"pl-s"],[291,292,"pl-s"],[292,299,"pl-c1"],[299,300,"pl-s"],[451,452,"pl-s"],[452,468,"pl-c1"],[468,469,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[4,5,"pl-s"],[5,12,"pl-c1"],[12,13,"pl-s"],[26,27,"pl-s"],[27,37,"pl-c1"],[37,38,"pl-s"],[40,41,"pl-s"],[41,55,"pl-c1"],[55,56,"pl-s"],[60,61,"pl-s"],[61,73,"pl-c1"],[73,74,"pl-s"],[117,118,"pl-s"],[118,128,"pl-c1"],[128,129,"pl-s"],[332,333,"pl-s"],[333,345,"pl-c1"],[345,346,"pl-s"],[351,352,"pl-s"],[352,363,"pl-c1"],[363,364,"pl-s"],[388,389,"pl-s"],[389,400,"pl-c1"],[400,401,"pl-s"],[406,407,"pl-s"],[407,415,"pl-c1"],[415,416,"pl-s"],[509,510,"pl-s"],[510,524,"pl-c1"],[524,525,"pl-s"]],[],[[82,83,"pl-s"],[83,93,"pl-c1"],[93,94,"pl-s"],[191,192,"pl-s"],[192,216,"pl-c1"],[216,217,"pl-s"],[238,239,"pl-s"],[239,253,"pl-c1"],[253,254,"pl-s"],[322,323,"pl-s"],[323,330,"pl-c1"],[330,331,"pl-s"],[358,359,"pl-s"],[359,370,"pl-c1"],[370,371,"pl-s"],[375,376,"pl-s"],[376,392,"pl-c1"],[392,393,"pl-s"],[429,430,"pl-s"],[430,440,"pl-c1"],[440,441,"pl-s"],[470,471,"pl-s"],[471,482,"pl-c1"],[482,483,"pl-s"],[485,486,"pl-s"],[486,512,"pl-c1"],[512,513,"pl-s"],[518,519,"pl-s"],[519,532,"pl-c1"],[532,533,"pl-s"],[589,590,"pl-s"],[590,601,"pl-c1"],[601,602,"pl-s"]],[],[[91,92,"pl-s"],[92,100,"pl-c1"],[100,101,"pl-s"],[116,117,"pl-s"],[117,147,"pl-c1"],[147,148,"pl-s"],[287,288,"pl-s"],[288,304,"pl-c1"],[304,305,"pl-s"],[386,387,"pl-s"],[387,429,"pl-c1"],[429,430,"pl-s"],[522,523,"pl-s"],[523,547,"pl-c1"],[547,548,"pl-s"],[636,637,"pl-s"],[637,645,"pl-c1"],[645,646,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[213,214,"pl-s"],[214,231,"pl-c1"],[231,232,"pl-s"],[637,638,"pl-s"],[638,663,"pl-c1"],[663,664,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[261,262,"pl-s"],[262,270,"pl-c1"],[270,271,"pl-s"]],[],[[352,353,"pl-s"],[353,378,"pl-c1"],[378,379,"pl-s"]],[],[[447,448,"pl-s"],[448,459,"pl-c1"],[459,460,"pl-s"]],[],[],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[72,73,"pl-s"],[73,80,"pl-c1"],[80,81,"pl-s"],[425,426,"pl-s"],[426,433,"pl-c1"],[433,434,"pl-s"],[436,437,"pl-s"],[437,441,"pl-c1"],[441,442,"pl-s"],[498,499,"pl-s"],[499,509,"pl-c1"],[509,510,"pl-s"]],[],[[72,74,"pl-s"],[86,88,"pl-s"],[192,193,"pl-s"],[193,211,"pl-c1"],[211,212,"pl-s"]],[],[[90,91,"pl-s"],[91,95,"pl-c1"],[95,96,"pl-s"],[398,399,"pl-s"],[399,403,"pl-c1"],[403,404,"pl-s"],[541,542,"pl-s"],[542,549,"pl-c1"],[549,550,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[25,26,"pl-s"],[26,39,"pl-c1"],[39,40,"pl-s"],[251,252,"pl-s"],[252,271,"pl-c1"],[271,272,"pl-s"],[295,296,"pl-s"],[296,302,"pl-c1"],[302,303,"pl-s"],[450,451,"pl-s"],[451,463,"pl-c1"],[463,464,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[828,829,"pl-s"],[829,834,"pl-c1"],[834,835,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[50,51,"pl-s"],[51,83,"pl-c1"],[83,84,"pl-s"],[192,193,"pl-s"],[193,207,"pl-c1"],[207,208,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,7,"pl-c1"],[7,8,"pl-s"],[62,63,"pl-s"],[63,79,"pl-c1"],[79,80,"pl-s"],[102,103,"pl-s"],[103,127,"pl-c1"],[127,128,"pl-s"],[414,415,"pl-s"],[415,420,"pl-c1"],[420,421,"pl-s"],[634,635,"pl-s"],[635,639,"pl-c1"],[639,640,"pl-s"],[756,757,"pl-s"],[757,785,"pl-c1"],[785,786,"pl-s"],[865,866,"pl-s"],[866,874,"pl-c1"],[874,875,"pl-s"]],[[0,1,"pl-v"],[41,42,"pl-s"],[42,49,"pl-c1"],[49,50,"pl-s"],[137,138,"pl-s"],[138,142,"pl-c1"],[142,143,"pl-s"],[152,153,"pl-s"],[153,156,"pl-c1"],[156,157,"pl-s"],[205,206,"pl-s"],[206,210,"pl-c1"],[210,211,"pl-s"],[245,246,"pl-s"],[246,249,"pl-c1"],[249,250,"pl-s"],[390,391,"pl-s"],[391,394,"pl-c1"],[394,395,"pl-s"],[457,458,"pl-s"],[458,461,"pl-c1"],[461,462,"pl-s"],[637,638,"pl-s"],[638,641,"pl-c1"],[641,642,"pl-s"],[714,715,"pl-s"],[715,718,"pl-c1"],[718,719,"pl-s"],[765,766,"pl-s"],[766,769,"pl-c1"],[769,770,"pl-s"],[816,817,"pl-s"],[817,820,"pl-c1"],[820,821,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[107,108,"pl-s"],[108,129,"pl-c1"],[129,130,"pl-s"],[131,132,"pl-s"],[132,148,"pl-c1"],[148,149,"pl-s"],[154,155,"pl-s"],[155,166,"pl-c1"],[166,167,"pl-s"],[611,612,"pl-s"],[612,623,"pl-c1"],[623,624,"pl-s"],[819,820,"pl-s"],[820,834,"pl-c1"],[834,835,"pl-s"],[868,869,"pl-s"],[869,873,"pl-c1"],[873,874,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[117,118,"pl-s"],[118,121,"pl-c1"],[121,122,"pl-s"],[339,340,"pl-s"],[340,343,"pl-c1"],[343,344,"pl-s"],[435,436,"pl-s"],[436,447,"pl-c1"],[447,448,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,18,"pl-c1"],[18,19,"pl-s"],[105,106,"pl-s"],[106,117,"pl-c1"],[117,118,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[209,210,"pl-s"],[210,214,"pl-c1"],[214,215,"pl-s"],[267,268,"pl-s"],[268,280,"pl-c1"],[280,281,"pl-s"],[346,347,"pl-s"],[347,368,"pl-c1"],[368,369,"pl-s"],[370,371,"pl-s"],[371,387,"pl-c1"],[387,388,"pl-s"],[394,395,"pl-s"],[395,406,"pl-c1"],[406,407,"pl-s"],[486,487,"pl-s"],[487,514,"pl-c1"],[514,515,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[113,114,"pl-s"],[114,118,"pl-c1"],[118,119,"pl-s"],[314,315,"pl-s"],[315,321,"pl-c1"],[321,322,"pl-s"]],[[0,1,"pl-v"],[53,54,"pl-s"],[54,69,"pl-c1"],[69,70,"pl-s"]],[[0,1,"pl-v"],[24,25,"pl-s"],[25,36,"pl-c1"],[36,37,"pl-s"],[137,138,"pl-s"],[138,149,"pl-c1"],[149,150,"pl-s"],[270,271,"pl-s"],[271,282,"pl-c1"],[282,283,"pl-s"]],[[0,1,"pl-v"],[152,153,"pl-s"],[153,162,"pl-c1"],[162,163,"pl-s"],[164,165,"pl-s"],[165,174,"pl-c1"],[174,175,"pl-s"]],[[0,1,"pl-v"],[52,53,"pl-s"],[53,63,"pl-c1"],[63,64,"pl-s"],[141,142,"pl-s"],[142,148,"pl-c1"],[148,149,"pl-s"],[345,346,"pl-s"],[346,352,"pl-c1"],[352,353,"pl-s"],[445,446,"pl-s"],[446,453,"pl-c1"],[453,454,"pl-s"],[587,588,"pl-s"],[588,604,"pl-c1"],[604,605,"pl-s"],[768,769,"pl-s"],[769,779,"pl-c1"],[779,780,"pl-s"],[842,843,"pl-s"],[843,853,"pl-c1"],[853,854,"pl-s"],[877,878,"pl-s"],[878,885,"pl-c1"],[885,886,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[],[[0,1,"pl-v"],[4,5,"pl-s"],[5,21,"pl-c1"],[21,22,"pl-s"],[39,40,"pl-s"],[40,67,"pl-c1"],[67,68,"pl-s"]],[[0,1,"pl-v"],[47,48,"pl-s"],[48,65,"pl-c1"],[65,66,"pl-s"],[87,88,"pl-s"],[88,115,"pl-c1"],[115,116,"pl-s"],[162,163,"pl-s"],[163,196,"pl-c1"],[196,197,"pl-s"],[256,257,"pl-s"],[257,276,"pl-c1"],[276,277,"pl-s"]],[[0,1,"pl-v"],[19,20,"pl-s"],[20,27,"pl-c1"],[27,28,"pl-s"],[30,31,"pl-s"],[31,42,"pl-c1"],[42,43,"pl-s"],[74,75,"pl-s"],[75,85,"pl-c1"],[85,86,"pl-s"],[88,89,"pl-s"],[89,101,"pl-c1"],[101,102,"pl-s"],[104,105,"pl-s"],[105,118,"pl-c1"],[118,119,"pl-s"],[121,122,"pl-s"],[122,137,"pl-c1"],[137,138,"pl-s"],[140,141,"pl-s"],[141,157,"pl-c1"],[157,158,"pl-s"],[175,176,"pl-s"],[176,186,"pl-c1"],[186,187,"pl-s"],[261,262,"pl-s"],[262,272,"pl-c1"],[272,273,"pl-s"],[329,330,"pl-s"],[330,338,"pl-c1"],[338,339,"pl-s"],[341,342,"pl-s"],[342,354,"pl-c1"],[354,355,"pl-s"],[357,358,"pl-s"],[358,370,"pl-c1"],[370,371,"pl-s"],[373,374,"pl-s"],[374,390,"pl-c1"],[390,391,"pl-s"],[393,394,"pl-s"],[394,411,"pl-c1"],[411,412,"pl-s"],[414,415,"pl-s"],[415,428,"pl-c1"],[428,429,"pl-s"],[431,432,"pl-s"],[432,449,"pl-c1"],[449,450,"pl-s"],[463,464,"pl-s"],[464,469,"pl-c1"],[469,470,"pl-s"],[475,476,"pl-s"],[476,487,"pl-c1"],[487,488,"pl-s"],[505,506,"pl-s"],[506,510,"pl-c1"],[510,511,"pl-s"],[522,523,"pl-s"],[523,526,"pl-c1"],[526,527,"pl-s"],[538,539,"pl-s"],[539,543,"pl-c1"],[543,544,"pl-s"],[597,598,"pl-s"],[598,605,"pl-c1"],[605,606,"pl-s"],[615,616,"pl-s"],[616,624,"pl-c1"],[624,625,"pl-s"],[627,628,"pl-s"],[628,637,"pl-c1"],[637,638,"pl-s"],[640,641,"pl-s"],[641,645,"pl-c1"],[645,646,"pl-s"],[648,649,"pl-s"],[649,662,"pl-c1"],[662,663,"pl-s"],[668,669,"pl-s"],[669,677,"pl-c1"],[677,678,"pl-s"],[779,780,"pl-s"],[780,790,"pl-c1"],[790,791,"pl-s"],[793,794,"pl-s"],[794,812,"pl-c1"],[812,813,"pl-s"],[876,877,"pl-s"],[877,909,"pl-c1"],[909,910,"pl-s"]],[[0,1,"pl-v"],[20,21,"pl-s"],[21,38,"pl-c1"],[38,39,"pl-s"],[165,166,"pl-s"],[166,185,"pl-c1"],[185,186,"pl-s"],[289,290,"pl-s"],[290,297,"pl-c1"],[297,298,"pl-s"],[324,325,"pl-s"],[325,353,"pl-c1"],[353,354,"pl-s"],[411,412,"pl-s"],[412,413,"pl-c1"],[413,414,"pl-s"],[418,419,"pl-s"],[419,420,"pl-c1"],[420,421,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,45,"pl-c1"],[45,46,"pl-s"],[155,156,"pl-s"],[156,164,"pl-c1"],[164,165,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[4,5,"pl-s"],[5,9,"pl-c1"],[9,10,"pl-s"],[39,40,"pl-s"],[40,84,"pl-c1"],[84,85,"pl-s"],[87,88,"pl-s"],[88,127,"pl-c1"],[127,128,"pl-s"],[157,158,"pl-s"],[158,159,"pl-c1"],[159,160,"pl-s"],[204,205,"pl-s"],[205,223,"pl-c1"],[223,224,"pl-s"],[335,336,"pl-s"],[336,343,"pl-c1"],[343,344,"pl-s"],[348,349,"pl-s"],[349,360,"pl-c1"],[360,361,"pl-s"],[427,428,"pl-s"],[428,439,"pl-c1"],[439,440,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[52,53,"pl-s"],[53,63,"pl-c1"],[63,64,"pl-s"],[81,82,"pl-s"],[82,91,"pl-c1"],[91,92,"pl-s"],[94,95,"pl-s"],[95,104,"pl-c1"],[104,105,"pl-s"],[107,108,"pl-s"],[108,116,"pl-c1"],[116,117,"pl-s"],[121,122,"pl-s"],[122,135,"pl-c1"],[135,136,"pl-s"],[259,260,"pl-s"],[260,264,"pl-c1"],[264,265,"pl-s"],[267,268,"pl-s"],[268,273,"pl-c1"],[273,274,"pl-s"],[276,277,"pl-s"],[277,279,"pl-c1"],[279,280,"pl-s"],[281,282,"pl-s"],[282,286,"pl-c1"],[286,287,"pl-s"],[295,296,"pl-s"],[296,301,"pl-c1"],[301,302,"pl-s"],[339,340,"pl-s"],[340,357,"pl-c1"],[357,358,"pl-s"],[364,365,"pl-s"],[365,392,"pl-c1"],[392,393,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[29,30,"pl-s"],[30,48,"pl-c1"],[48,49,"pl-s"],[51,52,"pl-s"],[52,68,"pl-c1"],[68,69,"pl-s"],[71,72,"pl-s"],[72,85,"pl-c1"],[85,86,"pl-s"],[91,92,"pl-s"],[92,99,"pl-c1"],[99,100,"pl-s"],[157,158,"pl-s"],[158,173,"pl-c1"],[173,174,"pl-s"],[441,442,"pl-s"],[442,449,"pl-c1"],[449,450,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[111,112,"pl-s"],[112,116,"pl-c1"],[116,117,"pl-s"],[175,176,"pl-s"],[176,179,"pl-c1"],[179,180,"pl-s"],[244,245,"pl-s"],[245,248,"pl-c1"],[248,249,"pl-s"],[251,252,"pl-s"],[252,266,"pl-c1"],[266,267,"pl-s"],[321,322,"pl-s"],[322,329,"pl-c1"],[329,330,"pl-s"],[334,335,"pl-s"],[335,346,"pl-c1"],[346,347,"pl-s"],[365,366,"pl-s"],[366,373,"pl-c1"],[373,374,"pl-s"],[459,460,"pl-s"],[460,465,"pl-c1"],[465,466,"pl-s"],[516,517,"pl-s"],[517,528,"pl-c1"],[528,529,"pl-s"],[555,556,"pl-s"],[556,563,"pl-c1"],[563,564,"pl-s"]],[[0,1,"pl-v"],[126,127,"pl-s"],[127,131,"pl-c1"],[131,132,"pl-s"],[138,139,"pl-s"],[139,150,"pl-c1"],[150,151,"pl-s"],[153,154,"pl-s"],[154,168,"pl-c1"],[168,169,"pl-s"],[171,172,"pl-s"],[172,193,"pl-c1"],[193,194,"pl-s"],[196,197,"pl-s"],[197,213,"pl-c1"],[213,214,"pl-s"],[231,232,"pl-s"],[232,235,"pl-c1"],[235,236,"pl-s"],[340,341,"pl-s"],[341,399,"pl-c1"],[399,400,"pl-s"],[410,411,"pl-s"],[411,424,"pl-c1"],[424,425,"pl-s"],[466,467,"pl-s"],[467,484,"pl-c1"],[484,485,"pl-s"],[650,651,"pl-s"],[651,662,"pl-c1"],[662,663,"pl-s"]],[[0,1,"pl-v"],[146,147,"pl-s"],[147,158,"pl-c1"],[158,159,"pl-s"],[176,177,"pl-s"],[177,195,"pl-c1"],[195,196,"pl-s"],[215,216,"pl-s"],[216,221,"pl-c1"],[221,222,"pl-s"],[255,256,"pl-s"],[256,267,"pl-c1"],[267,268,"pl-s"]],[[0,1,"pl-v"],[358,359,"pl-s"],[359,369,"pl-c1"],[369,370,"pl-s"],[402,403,"pl-s"],[403,407,"pl-c1"],[407,408,"pl-s"],[458,459,"pl-s"],[459,470,"pl-c1"],[470,471,"pl-s"]],[[0,1,"pl-v"],[251,252,"pl-s"],[252,262,"pl-c1"],[262,263,"pl-s"],[355,356,"pl-s"],[356,363,"pl-c1"],[363,364,"pl-s"],[423,424,"pl-s"],[424,431,"pl-c1"],[431,432,"pl-s"],[434,435,"pl-s"],[435,452,"pl-c1"],[452,453,"pl-s"],[458,459,"pl-s"],[459,472,"pl-c1"],[472,473,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[54,55,"pl-s"],[55,75,"pl-c1"],[75,76,"pl-s"],[86,87,"pl-s"],[87,105,"pl-c1"],[105,106,"pl-s"],[115,116,"pl-s"],[116,121,"pl-c1"],[121,122,"pl-s"],[236,237,"pl-s"],[237,246,"pl-c1"],[246,247,"pl-s"],[292,293,"pl-s"],[293,300,"pl-c1"],[300,301,"pl-s"],[321,322,"pl-s"],[322,331,"pl-c1"],[331,332,"pl-s"],[389,390,"pl-s"],[390,402,"pl-c1"],[402,403,"pl-s"],[490,491,"pl-s"],[491,496,"pl-c1"],[496,497,"pl-s"]],[[0,1,"pl-v"],[39,40,"pl-s"],[40,49,"pl-c1"],[49,50,"pl-s"],[87,88,"pl-s"],[88,92,"pl-c1"],[92,93,"pl-s"],[98,99,"pl-s"],[99,104,"pl-c1"],[104,105,"pl-s"],[255,256,"pl-s"],[256,272,"pl-c1"],[272,273,"pl-s"],[367,368,"pl-s"],[368,395,"pl-c1"],[395,396,"pl-s"],[403,404,"pl-s"],[404,416,"pl-c1"],[416,417,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,8,"pl-c1"],[8,9,"pl-s"],[58,59,"pl-s"],[59,95,"pl-c1"],[95,96,"pl-s"],[241,242,"pl-s"],[242,250,"pl-c1"],[250,251,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,30,"pl-c1"],[30,31,"pl-s"],[55,56,"pl-s"],[56,68,"pl-c1"],[68,69,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[4,5,"pl-s"],[5,9,"pl-c1"],[9,10,"pl-s"],[72,73,"pl-s"],[73,77,"pl-c1"],[77,78,"pl-s"],[421,422,"pl-s"],[422,446,"pl-c1"],[446,447,"pl-s"],[497,498,"pl-s"],[498,509,"pl-c1"],[509,510,"pl-s"],[641,642,"pl-s"],[642,646,"pl-c1"],[646,647,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[33,34,"pl-s"],[34,44,"pl-c1"],[44,45,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[49,50,"pl-s"],[50,89,"pl-c1"],[89,90,"pl-s"],[105,106,"pl-s"],[106,137,"pl-c1"],[137,138,"pl-s"],[277,278,"pl-s"],[278,289,"pl-c1"],[289,290,"pl-s"],[448,449,"pl-s"],[449,463,"pl-c1"],[463,464,"pl-s"],[577,578,"pl-s"],[578,598,"pl-c1"],[598,599,"pl-s"]],[[0,1,"pl-v"],[22,23,"pl-s"],[23,25,"pl-c1"],[25,26,"pl-s"],[148,149,"pl-s"],[149,160,"pl-c1"],[160,161,"pl-s"],[275,276,"pl-s"],[276,294,"pl-c1"],[294,295,"pl-s"],[348,349,"pl-s"],[349,370,"pl-c1"],[370,371,"pl-s"],[435,436,"pl-s"],[436,460,"pl-c1"],[460,461,"pl-s"]],[[0,1,"pl-v"],[7,8,"pl-s"],[8,19,"pl-c1"],[19,20,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[41,42,"pl-s"],[42,52,"pl-c1"],[52,53,"pl-s"],[190,191,"pl-s"],[191,196,"pl-c1"],[196,197,"pl-s"],[344,345,"pl-s"],[345,350,"pl-c1"],[350,351,"pl-s"],[353,354,"pl-s"],[354,359,"pl-c1"],[359,360,"pl-s"],[362,363,"pl-s"],[363,368,"pl-c1"],[368,369,"pl-s"],[373,374,"pl-s"],[374,378,"pl-c1"],[378,379,"pl-s"],[474,475,"pl-s"],[475,485,"pl-c1"],[485,486,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"],[145,146,"pl-s"],[146,153,"pl-c1"],[153,154,"pl-s"],[156,157,"pl-s"],[157,167,"pl-c1"],[167,168,"pl-s"],[173,174,"pl-s"],[174,186,"pl-c1"],[186,187,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,18,"pl-c1"],[18,19,"pl-s"],[38,39,"pl-s"],[39,60,"pl-c1"],[60,61,"pl-s"],[134,135,"pl-s"],[135,147,"pl-c1"],[147,148,"pl-s"],[149,150,"pl-s"],[150,156,"pl-c1"],[156,157,"pl-s"],[236,237,"pl-s"],[237,254,"pl-c1"],[254,255,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[43,44,"pl-s"],[52,53,"pl-s"],[53,54,"pl-s"],[54,155,"pl-corl"],[155,156,"pl-s"],[250,251,"pl-s"],[251,256,"pl-c1"],[256,257,"pl-s"],[262,263,"pl-s"],[263,265,"pl-c1"],[265,266,"pl-s"],[267,268,"pl-s"],[268,272,"pl-c1"],[272,273,"pl-s"],[346,347,"pl-s"],[347,431,"pl-c1"],[431,432,"pl-s"],[487,488,"pl-s"],[488,490,"pl-c1"],[490,491,"pl-s"],[492,493,"pl-s"],[493,497,"pl-c1"],[497,498,"pl-s"],[502,503,"pl-s"],[503,508,"pl-c1"],[508,509,"pl-s"],[515,516,"pl-s"],[516,551,"pl-c1"],[551,552,"pl-s"],[737,738,"pl-s"],[738,749,"pl-c1"],[749,750,"pl-s"],[765,766,"pl-s"],[766,768,"pl-c1"],[768,769,"pl-s"],[770,771,"pl-s"],[771,775,"pl-c1"],[775,776,"pl-s"]],[[0,1,"pl-v"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,21,"pl-c1"],[21,22,"pl-s"],[257,258,"pl-s"],[258,270,"pl-c1"],[270,271,"pl-s"],[580,581,"pl-s"],[581,602,"pl-c1"],[602,603,"pl-s"],[630,631,"pl-s"],[631,635,"pl-c1"],[635,636,"pl-s"],[641,642,"pl-s"],[642,654,"pl-c1"],[654,655,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[20,21,"pl-s"],[21,33,"pl-c1"],[33,34,"pl-s"],[73,74,"pl-s"],[74,78,"pl-c1"],[78,79,"pl-s"],[115,116,"pl-s"],[116,134,"pl-c1"],[134,135,"pl-s"],[188,189,"pl-s"],[189,196,"pl-c1"],[196,197,"pl-s"],[241,242,"pl-s"],[242,249,"pl-c1"],[249,250,"pl-s"],[341,342,"pl-s"],[342,361,"pl-c1"],[361,362,"pl-s"],[370,371,"pl-s"],[371,377,"pl-c1"],[377,378,"pl-s"],[552,553,"pl-s"],[553,559,"pl-c1"],[559,560,"pl-s"],[565,566,"pl-s"],[566,573,"pl-c1"],[573,574,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[4,5,"pl-s"],[5,9,"pl-c1"],[9,10,"pl-s"],[163,164,"pl-s"],[164,168,"pl-c1"],[168,169,"pl-s"],[421,422,"pl-s"],[422,429,"pl-c1"],[429,430,"pl-s"]],[[0,1,"pl-v"],[194,195,"pl-s"],[195,198,"pl-c1"],[198,199,"pl-s"],[285,286,"pl-s"],[286,289,"pl-c1"],[289,290,"pl-s"],[431,432,"pl-s"],[432,447,"pl-c1"],[447,448,"pl-s"]],[[0,1,"pl-v"],[32,33,"pl-s"],[33,40,"pl-c1"],[40,41,"pl-s"],[101,102,"pl-s"],[102,105,"pl-c1"],[105,106,"pl-s"]],[[0,1,"pl-v"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[6,7,"pl-s"],[7,10,"pl-c1"],[10,11,"pl-s"],[93,94,"pl-s"],[94,110,"pl-c1"],[110,111,"pl-s"],[257,258,"pl-s"],[258,265,"pl-c1"],[265,266,"pl-s"],[271,272,"pl-s"],[272,276,"pl-c1"],[276,277,"pl-s"],[318,319,"pl-s"],[319,332,"pl-c1"],[332,333,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[36,37,"pl-s"],[37,38,"pl-c1"],[38,39,"pl-s"],[44,45,"pl-s"],[45,46,"pl-c1"],[46,47,"pl-s"],[106,107,"pl-s"],[107,115,"pl-c1"],[115,116,"pl-s"],[140,141,"pl-s"],[141,142,"pl-c1"],[142,143,"pl-s"],[168,169,"pl-s"],[169,171,"pl-c1"],[171,172,"pl-s"],[174,175,"pl-s"],[175,179,"pl-c1"],[179,180,"pl-s"]],[[0,1,"pl-v"],[160,161,"pl-s"],[161,195,"pl-c1"],[195,196,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[199,200,"pl-s"],[200,203,"pl-c1"],[203,204,"pl-s"],[294,295,"pl-s"],[295,298,"pl-c1"],[298,299,"pl-s"],[480,481,"pl-s"],[481,492,"pl-c1"],[492,493,"pl-s"]],[[0,1,"pl-v"],[62,63,"pl-s"],[63,79,"pl-c1"],[79,80,"pl-s"],[86,87,"pl-s"],[87,95,"pl-c1"],[95,96,"pl-s"],[230,231,"pl-s"],[231,234,"pl-c1"],[234,235,"pl-s"]],[[0,1,"pl-v"],[176,177,"pl-s"],[177,185,"pl-c1"],[185,186,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[25,26,"pl-s"],[26,44,"pl-c1"],[44,45,"pl-s"],[154,155,"pl-s"],[155,170,"pl-c1"],[170,171,"pl-s"],[357,358,"pl-s"],[358,361,"pl-c1"],[361,362,"pl-s"],[363,364,"pl-s"],[364,371,"pl-c1"],[371,372,"pl-s"],[385,386,"pl-s"],[386,397,"pl-c1"],[397,398,"pl-s"],[440,441,"pl-s"],[441,462,"pl-c1"],[462,463,"pl-s"],[464,465,"pl-s"],[465,481,"pl-c1"],[481,482,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[130,131,"pl-s"],[131,141,"pl-c1"],[141,142,"pl-s"],[150,151,"pl-s"],[151,159,"pl-c1"],[159,160,"pl-s"],[332,333,"pl-s"],[333,341,"pl-c1"],[341,342,"pl-s"],[392,393,"pl-s"],[393,403,"pl-c1"],[403,404,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[40,41,"pl-s"],[41,56,"pl-c1"],[56,57,"pl-s"],[59,60,"pl-s"],[60,66,"pl-c1"],[66,67,"pl-s"],[69,70,"pl-s"],[70,76,"pl-c1"],[76,77,"pl-s"],[79,80,"pl-s"],[80,89,"pl-c1"],[89,90,"pl-s"],[92,93,"pl-s"],[93,103,"pl-c1"],[103,104,"pl-s"],[106,107,"pl-s"],[107,118,"pl-c1"],[118,119,"pl-s"],[125,126,"pl-s"],[126,137,"pl-c1"],[137,138,"pl-s"],[175,176,"pl-s"],[176,181,"pl-c1"],[181,182,"pl-s"],[325,326,"pl-s"],[326,337,"pl-c1"],[337,338,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[6,7,"pl-s"],[7,20,"pl-c1"],[20,21,"pl-s"],[159,160,"pl-s"],[160,183,"pl-c1"],[183,184,"pl-s"],[311,312,"pl-s"],[336,337,"pl-s"],[337,364,"pl-c1"],[364,365,"pl-s"],[369,370,"pl-s"],[370,385,"pl-c1"],[385,386,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[45,46,"pl-s"],[46,57,"pl-c1"],[57,58,"pl-s"],[67,68,"pl-s"],[68,72,"pl-c1"],[72,73,"pl-s"],[122,123,"pl-s"],[123,155,"pl-c1"],[155,156,"pl-s"],[208,209,"pl-s"],[209,217,"pl-c1"],[217,218,"pl-s"],[400,401,"pl-s"],[401,414,"pl-c1"],[414,415,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[15,16,"pl-s"],[16,20,"pl-c1"],[20,21,"pl-s"],[36,37,"pl-s"],[37,54,"pl-c1"],[54,55,"pl-s"],[127,128,"pl-s"],[128,133,"pl-c1"],[133,134,"pl-s"],[224,225,"pl-s"],[225,236,"pl-c1"],[236,237,"pl-s"],[242,243,"pl-s"],[243,248,"pl-c1"],[248,249,"pl-s"]],[[0,1,"pl-v"],[36,37,"pl-s"],[37,44,"pl-c1"],[44,45,"pl-s"],[54,55,"pl-s"],[55,66,"pl-c1"],[66,67,"pl-s"]],[[0,1,"pl-v"],[50,51,"pl-s"],[51,59,"pl-c1"],[59,60,"pl-s"],[99,100,"pl-s"],[100,113,"pl-c1"],[113,114,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"],[71,72,"pl-s"],[72,83,"pl-c1"],[83,84,"pl-s"],[97,98,"pl-s"],[98,111,"pl-c1"],[111,112,"pl-s"],[190,191,"pl-s"],[191,205,"pl-c1"],[205,206,"pl-s"]],[],[[0,21,"pl-mh"],[3,21,"pl-en"]],[],[[167,168,"pl-s"],[185,186,"pl-s"],[186,187,"pl-s"],[187,204,"pl-corl"],[204,205,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,37,"pl-c1"],[37,38,"pl-s"],[43,44,"pl-s"],[44,84,"pl-c1"],[84,85,"pl-s"],[113,114,"pl-s"],[114,134,"pl-c1"],[134,135,"pl-s"],[136,137,"pl-s"],[137,155,"pl-c1"],[155,156,"pl-s"],[157,158,"pl-s"],[158,173,"pl-c1"],[173,174,"pl-s"],[180,181,"pl-s"],[181,200,"pl-c1"],[200,201,"pl-s"],[207,208,"pl-s"],[232,233,"pl-s"],[233,234,"pl-s"],[234,258,"pl-corl"],[258,259,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[20,21,"pl-s"],[21,22,"pl-s"],[22,39,"pl-corl"],[39,40,"pl-s"]],[[0,1,"pl-v"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,14,"pl-mh"],[4,14,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,37,"pl-c1"],[37,38,"pl-s"],[43,44,"pl-s"],[44,84,"pl-c1"],[84,85,"pl-s"],[201,202,"pl-s"],[202,222,"pl-c1"],[222,223,"pl-s"],[224,225,"pl-s"],[225,243,"pl-c1"],[243,244,"pl-s"],[245,246,"pl-s"],[246,261,"pl-c1"],[261,262,"pl-s"],[268,269,"pl-s"],[269,288,"pl-c1"],[288,289,"pl-s"],[299,300,"pl-s"],[300,319,"pl-c1"],[319,320,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[166,167,"pl-s"],[167,175,"pl-c1"],[175,176,"pl-s"],[212,213,"pl-s"],[213,214,"pl-c1"],[214,215,"pl-s"],[229,230,"pl-s"],[230,234,"pl-c1"],[234,235,"pl-s"],[237,238,"pl-s"],[238,245,"pl-c1"],[245,246,"pl-s"],[252,253,"pl-s"],[253,257,"pl-c1"],[257,258,"pl-s"],[297,298,"pl-s"],[298,310,"pl-c1"],[310,311,"pl-s"]],[[0,1,"pl-v"],[20,21,"pl-s"],[21,60,"pl-c1"],[60,61,"pl-s"],[114,115,"pl-s"],[115,128,"pl-c1"],[128,129,"pl-s"],[130,131,"pl-s"],[131,141,"pl-c1"],[141,142,"pl-s"],[179,180,"pl-s"],[180,201,"pl-c1"],[201,202,"pl-s"],[322,323,"pl-s"],[323,340,"pl-c1"],[340,341,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[33,34,"pl-s"],[34,41,"pl-c1"],[41,42,"pl-s"],[56,57,"pl-s"],[57,71,"pl-c1"],[71,72,"pl-s"],[92,93,"pl-s"],[93,105,"pl-c1"],[105,106,"pl-s"],[146,147,"pl-s"],[147,157,"pl-c1"],[157,158,"pl-s"],[187,188,"pl-s"],[188,200,"pl-c1"],[200,201,"pl-s"],[324,325,"pl-s"],[325,332,"pl-c1"],[332,333,"pl-s"],[362,363,"pl-s"],[363,375,"pl-c1"],[375,376,"pl-s"],[388,389,"pl-s"],[389,426,"pl-c1"],[426,427,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[34,35,"pl-s"],[35,50,"pl-c1"],[50,51,"pl-s"],[58,59,"pl-s"],[59,67,"pl-c1"],[67,68,"pl-s"],[140,141,"pl-s"],[141,159,"pl-c1"],[159,160,"pl-s"],[162,163,"pl-s"],[163,175,"pl-c1"],[175,176,"pl-s"],[178,179,"pl-s"],[179,187,"pl-c1"],[187,188,"pl-s"],[268,269,"pl-s"],[269,309,"pl-c1"],[309,310,"pl-s"],[314,315,"pl-s"],[315,350,"pl-c1"],[350,351,"pl-s"]],[],[[2,5,"pl-s"],[5,7,"pl-en"]],[[2,8,"pl-k"],[11,12,"pl-smi"],[15,19,"pl-k"],[20,37,"pl-s"],[20,21,"pl-pds"],[36,37,"pl-pds"]],[[2,8,"pl-k"],[11,20,"pl-smi"],[22,26,"pl-k"],[27,32,"pl-smi"],[35,39,"pl-k"],[40,55,"pl-s"],[40,41,"pl-pds"],[54,55,"pl-pds"]],[],[[2,7,"pl-k"],[2,7,"pl-k"],[13,14,"pl-k"],[15,16,"pl-smi"],[17,23,"pl-en"]],[[8,9,"pl-smi"],[10,17,"pl-en"]],[[10,11,"pl-smi"],[12,18,"pl-en"],[32,33,"pl-c1"]],[[11,12,"pl-smi"],[13,21,"pl-en"],[22,23,"pl-smi"],[24,30,"pl-en"],[41,48,"pl-s"],[41,42,"pl-pds"],[47,48,"pl-pds"]],[[10,11,"pl-smi"],[12,17,"pl-en"],[19,20,"pl-smi"],[21,28,"pl-en"],[29,36,"pl-s"],[29,30,"pl-pds"],[35,36,"pl-pds"],[39,40,"pl-smi"],[41,48,"pl-en"],[49,55,"pl-s"],[49,50,"pl-pds"],[54,55,"pl-pds"]],[],[[2,6,"pl-k"],[7,11,"pl-en"],[12,13,"pl-k"],[14,19,"pl-en"],[20,26,"pl-k"],[27,31,"pl-smi"]],[[2,7,"pl-k"],[2,7,"pl-k"],[10,11,"pl-k"],[12,15,"pl-k"],[16,25,"pl-en"],[26,30,"pl-smi"]],[[2,5,"pl-s"]],[],[[23,24,"pl-s"],[24,30,"pl-c1"],[30,31,"pl-s"],[33,34,"pl-s"],[34,40,"pl-c1"],[40,41,"pl-s"],[43,44,"pl-s"],[44,51,"pl-c1"],[51,52,"pl-s"],[54,55,"pl-s"],[55,62,"pl-c1"],[62,63,"pl-s"],[65,66,"pl-s"],[66,70,"pl-c1"],[70,71,"pl-s"],[86,87,"pl-s"],[87,93,"pl-c1"],[93,94,"pl-s"],[100,101,"pl-s"],[101,109,"pl-c1"],[109,110,"pl-s"],[117,118,"pl-s"],[118,123,"pl-c1"],[123,124,"pl-s"],[126,127,"pl-s"],[127,132,"pl-c1"],[132,133,"pl-s"],[135,136,"pl-s"],[136,142,"pl-c1"],[142,143,"pl-s"],[145,146,"pl-s"],[146,151,"pl-c1"],[151,152,"pl-s"],[154,155,"pl-s"],[155,164,"pl-c1"],[164,165,"pl-s"],[167,168,"pl-s"],[168,175,"pl-c1"],[175,176,"pl-s"],[178,179,"pl-s"],[179,184,"pl-c1"],[184,185,"pl-s"],[187,188,"pl-s"],[188,192,"pl-c1"],[192,193,"pl-s"],[206,207,"pl-s"],[207,210,"pl-c1"],[210,211,"pl-s"],[292,293,"pl-s"],[293,304,"pl-c1"],[304,305,"pl-s"],[307,308,"pl-s"],[308,322,"pl-c1"],[322,323,"pl-s"],[365,366,"pl-s"],[366,374,"pl-c1"],[374,375,"pl-s"],[396,397,"pl-s"],[397,405,"pl-c1"],[405,406,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"],[49,50,"pl-s"],[50,60,"pl-c1"],[60,61,"pl-s"],[87,88,"pl-s"],[88,108,"pl-c1"],[108,109,"pl-s"],[113,114,"pl-s"],[114,131,"pl-c1"],[131,132,"pl-s"],[144,145,"pl-s"],[145,168,"pl-c1"],[168,169,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[55,56,"pl-s"],[56,72,"pl-c1"],[72,73,"pl-s"],[75,76,"pl-s"],[76,89,"pl-c1"],[89,90,"pl-s"],[96,97,"pl-s"],[97,115,"pl-c1"],[115,116,"pl-s"],[255,256,"pl-s"],[256,265,"pl-c1"],[265,266,"pl-s"]],[[0,1,"pl-v"],[16,17,"pl-s"],[17,32,"pl-c1"],[32,33,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[26,27,"pl-s"],[27,39,"pl-c1"],[39,40,"pl-s"],[42,43,"pl-s"],[43,61,"pl-c1"],[61,62,"pl-s"],[64,65,"pl-s"],[65,71,"pl-c1"],[71,72,"pl-s"],[74,75,"pl-s"],[75,91,"pl-c1"],[91,92,"pl-s"],[94,95,"pl-s"],[95,108,"pl-c1"],[108,109,"pl-s"],[111,112,"pl-s"],[112,122,"pl-c1"],[122,123,"pl-s"],[134,135,"pl-s"],[135,145,"pl-c1"],[145,146,"pl-s"],[175,176,"pl-s"],[176,194,"pl-c1"],[194,195,"pl-s"],[219,220,"pl-s"],[220,234,"pl-c1"],[234,235,"pl-s"],[237,238,"pl-s"],[238,246,"pl-c1"],[246,247,"pl-s"],[358,359,"pl-s"],[359,372,"pl-c1"],[372,373,"pl-s"],[375,376,"pl-s"],[376,385,"pl-c1"],[385,386,"pl-s"],[392,393,"pl-s"],[393,405,"pl-c1"],[405,406,"pl-s"]],[[0,1,"pl-v"],[84,85,"pl-s"],[85,109,"pl-c1"],[109,110,"pl-s"],[127,128,"pl-s"],[128,145,"pl-c1"],[145,146,"pl-s"],[169,170,"pl-s"],[170,185,"pl-c1"],[185,186,"pl-s"],[207,208,"pl-s"],[208,224,"pl-c1"],[224,225,"pl-s"],[227,228,"pl-s"],[228,246,"pl-c1"],[246,247,"pl-s"],[315,316,"pl-s"],[316,351,"pl-c1"],[351,352,"pl-s"],[403,404,"pl-s"],[404,416,"pl-c1"],[416,417,"pl-s"],[419,420,"pl-s"],[420,433,"pl-c1"],[433,434,"pl-s"],[439,440,"pl-s"],[440,449,"pl-c1"],[449,450,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[148,149,"pl-s"],[149,164,"pl-c1"],[164,165,"pl-s"],[224,225,"pl-s"],[225,227,"pl-c1"],[227,228,"pl-s"],[229,230,"pl-s"],[230,234,"pl-c1"],[234,235,"pl-s"],[591,592,"pl-s"],[592,594,"pl-c1"],[594,595,"pl-s"],[596,597,"pl-s"],[597,601,"pl-c1"],[601,602,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[21,22,"pl-s"],[22,39,"pl-c1"],[39,40,"pl-s"],[53,54,"pl-s"],[54,66,"pl-c1"],[66,67,"pl-s"],[187,188,"pl-s"],[188,218,"pl-c1"],[218,219,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,11,"pl-c1"],[11,12,"pl-s"],[48,49,"pl-s"],[49,56,"pl-c1"],[56,57,"pl-s"],[59,60,"pl-s"],[60,65,"pl-c1"],[65,66,"pl-s"],[71,72,"pl-s"],[72,77,"pl-c1"],[77,78,"pl-s"],[94,95,"pl-s"],[95,100,"pl-c1"],[100,101,"pl-s"],[122,123,"pl-s"],[123,134,"pl-c1"],[134,135,"pl-s"],[154,155,"pl-s"],[155,159,"pl-c1"],[159,160,"pl-s"],[172,173,"pl-s"],[173,184,"pl-c1"],[184,185,"pl-s"],[189,190,"pl-s"],[190,207,"pl-c1"],[207,208,"pl-s"],[318,319,"pl-s"],[319,323,"pl-c1"],[323,324,"pl-s"],[343,344,"pl-s"],[344,351,"pl-c1"],[351,352,"pl-s"],[375,376,"pl-s"],[376,397,"pl-c1"],[397,398,"pl-s"],[447,448,"pl-s"],[448,459,"pl-c1"],[459,460,"pl-s"],[571,572,"pl-s"],[572,577,"pl-c1"],[577,578,"pl-s"],[585,586,"pl-s"],[586,591,"pl-c1"],[591,592,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[61,62,"pl-s"],[62,67,"pl-c1"],[67,68,"pl-s"],[69,70,"pl-s"],[70,81,"pl-c1"],[81,82,"pl-s"],[118,119,"pl-s"],[119,131,"pl-c1"],[131,132,"pl-s"],[154,155,"pl-s"],[155,168,"pl-c1"],[168,169,"pl-s"],[359,360,"pl-s"],[360,379,"pl-c1"],[379,380,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[63,64,"pl-s"],[64,82,"pl-c1"],[82,83,"pl-s"],[88,89,"pl-s"],[89,102,"pl-c1"],[102,103,"pl-s"],[119,120,"pl-s"],[120,130,"pl-c1"],[130,131,"pl-s"],[201,202,"pl-s"],[202,227,"pl-c1"],[227,228,"pl-s"],[314,315,"pl-s"],[315,323,"pl-c1"],[323,324,"pl-s"],[340,341,"pl-s"],[341,348,"pl-c1"],[348,349,"pl-s"],[396,397,"pl-s"],[397,414,"pl-c1"],[414,415,"pl-s"],[461,462,"pl-s"],[462,478,"pl-c1"],[478,479,"pl-s"]],[[0,1,"pl-v"],[67,68,"pl-s"],[68,88,"pl-c1"],[88,89,"pl-s"],[146,147,"pl-s"],[147,164,"pl-c1"],[164,165,"pl-s"],[255,256,"pl-s"],[256,262,"pl-c1"],[262,263,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"],[23,24,"pl-s"],[24,26,"pl-c1"],[26,27,"pl-s"],[76,77,"pl-s"],[77,92,"pl-c1"],[92,93,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[],[[0,1,"pl-v"],[16,17,"pl-s"],[17,24,"pl-c1"],[24,25,"pl-s"],[27,28,"pl-s"],[28,45,"pl-c1"],[45,46,"pl-s"],[52,53,"pl-s"],[53,66,"pl-c1"],[66,67,"pl-s"],[307,308,"pl-s"],[308,314,"pl-c1"],[314,315,"pl-s"],[330,331,"pl-s"],[331,337,"pl-c1"],[337,338,"pl-s"],[347,348,"pl-s"],[348,353,"pl-c1"],[353,354,"pl-s"],[356,357,"pl-s"],[357,360,"pl-c1"],[360,361,"pl-s"],[363,364,"pl-s"],[364,377,"pl-c1"],[377,378,"pl-s"],[380,381,"pl-s"],[381,389,"pl-c1"],[389,390,"pl-s"],[392,393,"pl-s"],[393,397,"pl-c1"],[397,398,"pl-s"],[400,401,"pl-s"],[401,405,"pl-c1"],[405,406,"pl-s"],[408,409,"pl-s"],[409,413,"pl-c1"],[413,414,"pl-s"],[416,417,"pl-s"],[417,426,"pl-c1"],[426,427,"pl-s"],[429,430,"pl-s"],[430,434,"pl-c1"],[434,435,"pl-s"],[437,438,"pl-s"],[438,446,"pl-c1"],[446,447,"pl-s"],[449,450,"pl-s"],[450,454,"pl-c1"],[454,455,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[121,122,"pl-s"],[122,141,"pl-c1"],[141,142,"pl-s"],[160,161,"pl-s"],[161,168,"pl-c1"],[168,169,"pl-s"],[223,224,"pl-s"],[224,235,"pl-c1"],[235,236,"pl-s"],[241,242,"pl-s"],[242,251,"pl-c1"],[251,252,"pl-s"],[254,255,"pl-s"],[255,270,"pl-c1"],[270,271,"pl-s"],[276,277,"pl-s"],[277,287,"pl-c1"],[287,288,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[37,38,"pl-s"],[38,43,"pl-c1"],[43,44,"pl-s"],[48,49,"pl-s"],[49,54,"pl-c1"],[54,55,"pl-s"],[103,104,"pl-s"],[104,122,"pl-c1"],[122,123,"pl-s"],[128,129,"pl-s"],[129,142,"pl-c1"],[142,143,"pl-s"],[257,258,"pl-s"],[258,274,"pl-c1"],[274,275,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[68,69,"pl-s"],[69,77,"pl-c1"],[77,78,"pl-s"],[128,129,"pl-s"],[129,163,"pl-c1"],[163,164,"pl-s"],[177,178,"pl-s"],[178,197,"pl-c1"],[197,198,"pl-s"],[203,204,"pl-s"],[204,214,"pl-c1"],[214,215,"pl-s"],[224,225,"pl-s"],[225,236,"pl-c1"],[236,237,"pl-s"],[372,373,"pl-s"],[373,378,"pl-c1"],[378,379,"pl-s"],[381,382,"pl-s"],[382,386,"pl-c1"],[386,387,"pl-s"],[438,439,"pl-s"],[439,443,"pl-c1"],[443,444,"pl-s"],[458,459,"pl-s"],[459,464,"pl-c1"],[464,465,"pl-s"],[466,467,"pl-s"],[467,472,"pl-c1"],[472,473,"pl-s"],[480,481,"pl-s"],[481,488,"pl-c1"],[488,489,"pl-s"],[504,505,"pl-s"],[505,510,"pl-c1"],[510,511,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[57,58,"pl-s"],[58,68,"pl-c1"],[68,69,"pl-s"],[97,98,"pl-s"],[98,122,"pl-c1"],[122,123,"pl-s"],[296,297,"pl-s"],[297,309,"pl-c1"],[309,310,"pl-s"],[319,320,"pl-s"],[320,327,"pl-c1"],[327,328,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[41,42,"pl-s"],[42,52,"pl-c1"],[52,53,"pl-s"],[90,91,"pl-s"],[91,108,"pl-c1"],[108,109,"pl-s"],[193,194,"pl-s"],[194,202,"pl-c1"],[202,203,"pl-s"],[294,295,"pl-s"],[295,304,"pl-c1"],[304,305,"pl-s"],[307,308,"pl-s"],[308,326,"pl-c1"],[326,327,"pl-s"],[389,390,"pl-s"],[390,395,"pl-c1"],[395,396,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,19,"pl-c1"],[19,20,"pl-s"],[30,31,"pl-s"],[31,65,"pl-c1"],[65,66,"pl-s"],[75,76,"pl-s"],[76,80,"pl-c1"],[80,81,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[21,22,"pl-s"],[22,35,"pl-c1"],[35,36,"pl-s"]],[[0,1,"pl-v"],[21,22,"pl-s"],[22,27,"pl-c1"],[27,28,"pl-s"],[59,60,"pl-s"],[60,63,"pl-c1"],[63,64,"pl-s"],[98,99,"pl-s"],[99,103,"pl-c1"],[103,104,"pl-s"]],[[0,1,"pl-v"],[37,38,"pl-s"],[38,54,"pl-c1"],[54,55,"pl-s"],[72,73,"pl-s"],[73,77,"pl-c1"],[77,78,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[26,27,"pl-s"],[27,43,"pl-c1"],[43,44,"pl-s"],[71,72,"pl-s"],[72,76,"pl-c1"],[76,77,"pl-s"],[133,134,"pl-s"],[134,153,"pl-c1"],[153,154,"pl-s"],[216,217,"pl-s"],[217,258,"pl-c1"],[258,259,"pl-s"]],[[0,1,"pl-v"],[72,73,"pl-s"],[73,76,"pl-c1"],[76,77,"pl-s"],[133,134,"pl-s"],[134,137,"pl-c1"],[137,138,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[32,34,"pl-s"],[79,80,"pl-s"],[80,84,"pl-c1"],[84,85,"pl-s"],[87,88,"pl-s"],[88,95,"pl-c1"],[95,96,"pl-s"],[102,103,"pl-s"],[103,111,"pl-c1"],[111,112,"pl-s"],[113,114,"pl-s"],[114,122,"pl-c1"],[122,123,"pl-s"],[132,133,"pl-s"],[133,139,"pl-c1"],[139,140,"pl-s"],[200,201,"pl-s"],[201,210,"pl-c1"],[210,211,"pl-s"],[284,285,"pl-s"],[285,286,"pl-s"],[286,305,"pl-c1"],[305,306,"pl-s"],[306,307,"pl-s"],[307,308,"pl-s"],[308,327,"pl-corl"],[327,328,"pl-s"],[348,349,"pl-s"],[349,383,"pl-c1"],[383,384,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[17,19,"pl-s"],[20,21,"pl-s"],[21,33,"pl-c1"],[33,34,"pl-s"],[36,37,"pl-s"],[37,50,"pl-c1"],[50,51,"pl-s"],[57,58,"pl-s"],[58,68,"pl-c1"],[68,69,"pl-s"],[88,89,"pl-s"],[89,102,"pl-c1"],[102,103,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,17,"pl-c1"],[17,18,"pl-s"],[30,32,"pl-s"],[33,34,"pl-s"],[34,62,"pl-c1"],[62,63,"pl-s"],[182,183,"pl-s"],[183,196,"pl-c1"],[196,197,"pl-s"],[225,226,"pl-s"],[226,234,"pl-c1"],[234,235,"pl-s"],[237,238,"pl-s"],[238,247,"pl-c1"],[247,248,"pl-s"],[250,251,"pl-s"],[251,263,"pl-c1"],[263,264,"pl-s"],[266,267,"pl-s"],[267,274,"pl-c1"],[274,275,"pl-s"],[277,278,"pl-s"],[278,288,"pl-c1"],[288,289,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[24,26,"pl-s"],[27,28,"pl-s"],[28,80,"pl-c1"],[80,81,"pl-s"],[101,102,"pl-s"],[102,114,"pl-c1"],[114,115,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[20,22,"pl-s"],[82,83,"pl-s"],[83,87,"pl-c1"],[87,88,"pl-s"],[90,91,"pl-s"],[91,97,"pl-c1"],[97,98,"pl-s"],[120,121,"pl-s"],[121,133,"pl-c1"],[133,134,"pl-s"],[214,215,"pl-s"],[215,234,"pl-c1"],[234,235,"pl-s"],[239,240,"pl-s"],[240,251,"pl-c1"],[251,252,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[20,21,"pl-s"],[21,30,"pl-c1"],[30,31,"pl-s"],[38,40,"pl-s"],[45,46,"pl-s"],[46,54,"pl-c1"],[54,55,"pl-s"],[58,59,"pl-s"],[59,70,"pl-c1"],[70,71,"pl-s"],[79,80,"pl-s"],[80,96,"pl-c1"],[96,97,"pl-s"],[135,136,"pl-s"],[136,150,"pl-c1"],[150,151,"pl-s"],[173,174,"pl-s"],[174,192,"pl-c1"],[192,193,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[21,23,"pl-s"],[24,25,"pl-s"],[25,43,"pl-c1"],[43,44,"pl-s"],[146,147,"pl-s"],[147,180,"pl-c1"],[180,181,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"],[14,15,"pl-s"],[15,20,"pl-c1"],[20,21,"pl-s"],[31,33,"pl-s"],[93,94,"pl-s"],[94,101,"pl-c1"],[101,102,"pl-s"],[105,106,"pl-s"],[106,113,"pl-c1"],[113,114,"pl-s"],[117,118,"pl-s"],[118,125,"pl-c1"],[125,126,"pl-s"],[225,226,"pl-s"],[226,238,"pl-c1"],[238,239,"pl-s"],[241,242,"pl-s"],[242,247,"pl-c1"],[247,248,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[16,18,"pl-s"],[25,26,"pl-s"],[26,36,"pl-c1"],[36,37,"pl-s"],[231,232,"pl-s"],[232,263,"pl-c1"],[263,264,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,22,"pl-c1"],[22,23,"pl-s"],[32,34,"pl-s"],[35,36,"pl-s"],[36,80,"pl-c1"],[80,81,"pl-s"],[129,130,"pl-s"],[130,146,"pl-c1"],[146,147,"pl-s"],[203,204,"pl-s"],[204,219,"pl-c1"],[219,220,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,18,"pl-c1"],[18,19,"pl-s"],[31,33,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[30,31,"pl-s"],[31,46,"pl-c1"],[46,47,"pl-s"],[49,50,"pl-s"],[50,68,"pl-c1"],[68,69,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[20,21,"pl-s"],[21,30,"pl-c1"],[30,31,"pl-s"],[78,79,"pl-s"],[79,86,"pl-c1"],[86,87,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[16,18,"pl-s"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[45,46,"pl-s"],[46,55,"pl-c1"],[55,56,"pl-s"],[58,59,"pl-s"],[59,69,"pl-c1"],[69,70,"pl-s"],[76,77,"pl-s"],[77,83,"pl-c1"],[83,84,"pl-s"],[110,111,"pl-s"],[111,124,"pl-c1"],[124,125,"pl-s"],[172,173,"pl-s"],[173,190,"pl-c1"],[190,191,"pl-s"],[229,230,"pl-s"],[230,243,"pl-c1"],[243,244,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[19,21,"pl-s"],[47,48,"pl-s"],[48,61,"pl-c1"],[61,62,"pl-s"],[134,135,"pl-s"],[135,154,"pl-c1"],[154,155,"pl-s"],[159,160,"pl-s"],[160,171,"pl-c1"],[171,172,"pl-s"],[206,207,"pl-s"],[207,223,"pl-c1"],[223,224,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[11,13,"pl-s"],[27,28,"pl-s"],[28,39,"pl-c1"],[39,40,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[10,11,"pl-s"],[11,23,"pl-c1"],[23,24,"pl-s"],[45,46,"pl-s"],[46,76,"pl-c1"],[76,77,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[28,29,"pl-s"],[29,54,"pl-c1"],[54,55,"pl-s"],[89,90,"pl-s"],[90,101,"pl-c1"],[101,102,"pl-s"],[139,140,"pl-s"],[140,152,"pl-c1"],[152,153,"pl-s"],[158,159,"pl-s"],[159,165,"pl-c1"],[165,166,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[29,30,"pl-s"],[30,41,"pl-c1"],[41,42,"pl-s"],[47,48,"pl-s"],[48,60,"pl-c1"],[60,61,"pl-s"],[65,66,"pl-s"],[66,82,"pl-c1"],[82,83,"pl-s"],[108,109,"pl-s"],[109,121,"pl-c1"],[121,122,"pl-s"],[217,218,"pl-s"],[218,227,"pl-c1"],[227,228,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[7,8,"pl-s"],[8,13,"pl-c1"],[13,14,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[64,66,"pl-s"],[93,94,"pl-s"],[94,120,"pl-c1"],[120,121,"pl-s"],[143,144,"pl-s"],[144,153,"pl-c1"],[153,154,"pl-s"],[169,170,"pl-s"],[170,175,"pl-c1"],[175,176,"pl-s"],[325,326,"pl-s"],[326,350,"pl-c1"],[350,351,"pl-s"],[368,369,"pl-s"],[369,401,"pl-c1"],[401,402,"pl-s"],[461,462,"pl-s"],[462,468,"pl-c1"],[468,469,"pl-s"],[630,631,"pl-s"],[631,636,"pl-c1"],[636,637,"pl-s"],[643,644,"pl-s"],[644,661,"pl-c1"],[661,662,"pl-s"],[718,721,"pl-s"],[719,721,"pl-corl"]],[[0,1,"pl-v"],[2,4,"pl-s"],[42,44,"pl-s"],[70,71,"pl-s"],[71,79,"pl-c1"],[79,80,"pl-s"],[102,103,"pl-s"],[103,111,"pl-c1"],[111,112,"pl-s"],[204,205,"pl-s"],[205,215,"pl-c1"],[215,216,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[23,25,"pl-s"],[26,27,"pl-s"],[27,35,"pl-c1"],[35,36,"pl-s"],[176,177,"pl-s"],[177,187,"pl-c1"],[187,188,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,19,"pl-c1"],[19,20,"pl-s"],[68,70,"pl-s"],[79,80,"pl-s"],[80,91,"pl-c1"],[91,92,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,31,"pl-c1"],[31,32,"pl-s"],[99,101,"pl-s"],[153,154,"pl-s"],[154,161,"pl-c1"],[161,162,"pl-s"],[252,253,"pl-s"],[253,257,"pl-c1"],[257,258,"pl-s"],[359,360,"pl-s"],[360,398,"pl-c1"],[398,399,"pl-s"],[549,550,"pl-s"],[550,562,"pl-c1"],[562,563,"pl-s"],[602,605,"pl-s"],[603,605,"pl-corl"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[71,73,"pl-s"],[197,198,"pl-s"],[198,203,"pl-c1"],[203,204,"pl-s"],[221,222,"pl-s"],[222,248,"pl-c1"],[248,249,"pl-s"],[272,273,"pl-s"],[273,282,"pl-c1"],[282,283,"pl-s"],[290,291,"pl-s"],[291,295,"pl-c1"],[295,296,"pl-s"],[316,317,"pl-s"],[317,379,"pl-c1"],[379,380,"pl-s"],[456,457,"pl-s"],[457,462,"pl-c1"],[462,463,"pl-s"],[511,512,"pl-s"],[512,518,"pl-c1"],[518,519,"pl-s"],[621,622,"pl-s"],[622,653,"pl-c1"],[653,654,"pl-s"],[681,682,"pl-s"],[682,705,"pl-c1"],[705,706,"pl-s"],[759,762,"pl-s"],[760,762,"pl-corl"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[30,31,"pl-s"],[31,41,"pl-c1"],[41,42,"pl-s"],[42,44,"pl-s"],[106,107,"pl-s"],[107,125,"pl-c1"],[125,126,"pl-s"],[140,141,"pl-s"],[141,151,"pl-c1"],[151,152,"pl-s"],[175,176,"pl-s"],[176,187,"pl-c1"],[187,188,"pl-s"],[215,216,"pl-s"],[216,238,"pl-c1"],[238,239,"pl-s"],[249,250,"pl-s"],[250,265,"pl-c1"],[265,266,"pl-s"],[331,332,"pl-s"],[332,345,"pl-c1"],[345,346,"pl-s"],[462,463,"pl-s"],[463,476,"pl-c1"],[476,477,"pl-s"],[479,515,"pl-s"],[479,510,"pl-corl"],[511,515,"pl-corl"]],[[0,1,"pl-v"],[2,4,"pl-s"],[54,56,"pl-s"],[82,83,"pl-s"],[83,92,"pl-c1"],[92,93,"pl-s"],[158,159,"pl-s"],[159,183,"pl-c1"],[183,184,"pl-s"],[233,234,"pl-s"],[234,248,"pl-c1"],[248,249,"pl-s"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,21,"pl-c1"],[21,22,"pl-s"],[22,24,"pl-s"],[113,114,"pl-s"],[114,127,"pl-c1"],[127,128,"pl-s"],[155,156,"pl-s"],[156,162,"pl-c1"],[162,163,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,24,"pl-c1"],[24,25,"pl-s"],[54,56,"pl-s"],[57,58,"pl-s"],[58,108,"pl-c1"],[108,109,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[18,19,"pl-s"],[19,28,"pl-c1"],[28,29,"pl-s"],[30,32,"pl-s"],[33,34,"pl-s"],[34,43,"pl-c1"],[43,44,"pl-s"],[46,47,"pl-s"],[47,55,"pl-c1"],[55,56,"pl-s"],[58,59,"pl-s"],[59,75,"pl-c1"],[75,76,"pl-s"],[78,79,"pl-s"],[79,92,"pl-c1"],[92,93,"pl-s"],[95,96,"pl-s"],[96,106,"pl-c1"],[106,107,"pl-s"],[109,110,"pl-s"],[110,122,"pl-c1"],[122,123,"pl-s"],[125,126,"pl-s"],[126,133,"pl-c1"],[133,134,"pl-s"],[136,137,"pl-s"],[137,144,"pl-c1"],[144,145,"pl-s"],[147,148,"pl-s"],[148,158,"pl-c1"],[158,159,"pl-s"],[161,162,"pl-s"],[162,170,"pl-c1"],[170,171,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[21,23,"pl-s"],[43,44,"pl-s"],[44,56,"pl-c1"],[56,57,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[23,25,"pl-s"],[35,36,"pl-s"],[36,40,"pl-c1"],[40,41,"pl-s"],[83,84,"pl-s"],[84,89,"pl-c1"],[89,90,"pl-s"],[95,96,"pl-s"],[96,100,"pl-c1"],[100,101,"pl-s"],[127,128,"pl-s"],[128,133,"pl-c1"],[133,134,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[32,34,"pl-s"],[38,39,"pl-s"],[39,69,"pl-c1"],[69,70,"pl-s"],[177,178,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[68,70,"pl-s"],[151,152,"pl-s"],[152,156,"pl-c1"],[156,157,"pl-s"],[185,186,"pl-s"],[186,203,"pl-c1"],[203,204,"pl-s"],[206,207,"pl-s"],[207,220,"pl-c1"],[220,221,"pl-s"],[237,238,"pl-s"],[238,259,"pl-c1"],[259,260,"pl-s"],[266,267,"pl-s"],[267,272,"pl-c1"],[272,273,"pl-s"],[274,275,"pl-s"],[275,280,"pl-c1"],[280,281,"pl-s"],[346,347,"pl-s"],[347,354,"pl-c1"],[354,355,"pl-s"],[357,358,"pl-s"],[358,362,"pl-c1"],[362,363,"pl-s"],[365,366,"pl-s"],[366,370,"pl-c1"],[370,371,"pl-s"],[373,374,"pl-s"],[374,378,"pl-c1"],[378,379,"pl-s"],[391,392,"pl-s"],[392,406,"pl-c1"],[406,407,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,1,"pl-v"],[14,15,"pl-s"],[15,24,"pl-c1"],[24,25,"pl-s"],[38,39,"pl-s"],[39,59,"pl-c1"],[59,60,"pl-s"]],[[0,1,"pl-v"]]],"colorizedLines":null}},"title":"ata-validator/CHANGELOG.md at master · ata-core/ata-validator","appPayload":{},"meta":{"title":"ata-validator/CHANGELOG.md at master · ata-core/ata-validator"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/ata-core/ata-validator" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/ata-core/ata-validator/tree/master" data-discover="true">ata-validator</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">CHANGELOG.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_1cpla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_1cpla9lik5_ _R_1cpla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_1cpla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7p9la9lik5_" id="_R_99la9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7p9la9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7pdla9lik5_" id="_R_9dla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7pdla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/ata-core/ata-validator/commits/master/CHANGELOG.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/ata-core/ata-validator/commits/master/CHANGELOG.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="246 KB" style="--truncate-max-width:100%"><span>1340 lines (829 loc) · 246 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/ata-core/ata-validator/tree/master" data-discover="true">ata-validator</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">CHANGELOG.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="246 KB" style="--truncate-max-width:100%"><span>1340 lines (829 loc) · 246 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/ata-core/ata-validator/raw/refs/heads/master/CHANGELOG.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="d-flex flex-column flex-items-center tmp-py-3"><span class="prc-Spinner-Box-Y-ke-" data-component="Spinner"><svg height="32px" width="32px" viewBox="0 0 16 16" fill="none" aria-hidden="true" aria-label="Loading" class="prc-Spinner-SpinnerAnimation-tutJZ"><circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke"></circle><path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke"></path></svg></span></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

