From 255bf6e8815cabdaa78947753beb2e25e5b288ff Mon Sep 17 00:00:00 2001 From: Julia Date: Wed, 27 Sep 2023 14:05:04 +0200 Subject: [PATCH 01/40] [RAM] Text not localized on rules managament table (#166700) ## Summary Fixed issue: https://github.com/elastic/kibana/issues/165552 for all existing locale. Looked before: Screenshot 2023-09-19 at 12 24 08 Now looks like this: Screenshot 2023-09-19 at 12 19 49 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../components/rules_list_auto_refresh.tsx | 2 +- .../components/rules_list_table.tsx | 21 +++++++++++++------ 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index af5ab8709ddd7..3a0bdfd7514c1 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -38510,7 +38510,6 @@ "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editButtonTooltip": "Modifier", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalIconAriaLabel": "Au-dessous de l'intervalle minimal configuré", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalTooltipTitle": "Au-dessous de l'intervalle minimal configuré", - "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastExecutionDateTitle": "Heure de début de la dernière exécution.", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle": "Dernière réponse", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.nameTitle": "Nom", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle": "Notifier", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 62471657fa93b..3737127a10144 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -38501,7 +38501,6 @@ "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editButtonTooltip": "編集", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalIconAriaLabel": "構成された最小間隔未満", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalTooltipTitle": "構成された最小間隔未満", - "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastExecutionDateTitle": "前回の実行の開始時間。", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle": "前回の応答", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.nameTitle": "名前", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle": "通知", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 79d0a35c8851d..f7b67ac2f2661 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -38495,7 +38495,6 @@ "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editButtonTooltip": "编辑", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalIconAriaLabel": "低于配置的最小时间间隔", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalTooltipTitle": "低于配置的最小时间间隔", - "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastExecutionDateTitle": "上次运行的开始时间。", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle": "上次响应", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.nameTitle": "名称", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle": "通知", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx index eea8d8e5f1bbe..42c59667e0e39 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx @@ -29,7 +29,7 @@ const getLastUpdateText = (lastUpdate: string) => { { defaultMessage: 'Updated {lastUpdateText}', values: { - lastUpdateText: moment(lastUpdate).fromNow(), + lastUpdateText: moment(lastUpdate).locale(i18n.getLocale()).fromNow(), }, } ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index 34c1f83878ef6..3d929cf7bb5b8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -413,14 +413,17 @@ export const RulesListTable = (props: RulesListTableProps) => { - Last run{' '} + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastRunTitle', + { defaultMessage: 'Last run' } + )} @@ -569,14 +572,17 @@ export const RulesListTable = (props: RulesListTableProps) => { - Duration{' '} + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.durationTitle', + { defaultMessage: 'Duration' } + )} @@ -639,14 +645,17 @@ export const RulesListTable = (props: RulesListTableProps) => { - Success ratio{' '} + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.successRatioTitle', + { defaultMessage: 'Success ratio' } + )} From 28fd3ff0b434442342c67e5e911b28a7153d4511 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 27 Sep 2023 15:12:03 +0200 Subject: [PATCH 02/40] [cypress] Trim long cypress configs (#167391) ## Summary In cypress tests, when the logs are output in the beginning, some binary buffers are also stringified, so when looking at logs, we have to scroll through thousands of lines of logs, that's annoying and doesn't help debugging. I'd like that to be somewhat more readable, there are a few options: - the replacer should interpret buffers as strings, try to output it like that - not every binary buffer is printable - the replacer should redact the exact fields (certificateAuthority?) - too specific, might need fixing later - trim long arrays after 32 items - I chose this as a solution Other suggestions are welcome. Screenshot 2023-09-27 at 12 49 54 --- .../scripts/run_cypress/parallel.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts index d411cdf8e8abd..dad6bd5b9de29 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts @@ -263,7 +263,17 @@ ${JSON.stringify(cypressConfigFile, null, 2)} Cypress FTR setup for file: ${filePath}: ---------------------------------------------- -${JSON.stringify(config.getAll(), null, 2)} +${JSON.stringify( + config.getAll(), + (key, v) => { + if (Array.isArray(v) && v.length > 32) { + return v.slice(0, 32).concat('... trimmed after 32 items.'); + } else { + return v; + } + }, + 2 +)} ---------------------------------------------- `); From c666e4d29efdc2157d6adbf13bd64eb85f261469 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 27 Sep 2023 15:19:30 +0200 Subject: [PATCH 03/40] chore(typecheck): clean up unused parameter (#167396) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This unused parameter is causing typescript error in many builds: https://buildkite.com/elastic/kibana-pull-request/builds/162839#018ad64e-f2db-4572-a2df-2a9257777077 ``` proc [tsc] x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx:358:19 - error TS2322: Type '{ frozenDataPreference: FrozenTierPreference; setFrozenDataPreference: (value: FrozenTierPreference \| undefined) => void; dataView: DataView; query: undefined; disabled: false; timefilter: TimefilterContract; hideFrozenDataTierChoice: boolean; }' is not assignable to type 'IntrinsicAttributes & FullTimeRangeSelectorProps & { children?: ReactNode; }'. --   | proc [tsc] Property 'hideFrozenDataTierChoice' does not exist on type 'IntrinsicAttributes & FullTimeRangeSelectorProps & { children?: ReactNode; }'.   | proc [tsc]   | proc [tsc] 358 hideFrozenDataTierChoice={!showNodeInfo} ``` --- .../components/step_define/step_define_form.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx index e9326ae195015..246460d11d3ee 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx @@ -35,7 +35,6 @@ import { import { useStorage } from '@kbn/ml-local-storage'; import { useUrlState } from '@kbn/ml-url-state'; -import { useEnabledFeatures } from '../../../../serverless_context'; import { PivotAggDict } from '../../../../../../common/types/pivot_aggs'; import { PivotGroupByDict } from '../../../../../../common/types/pivot_group_by'; import { TRANSFORM_FUNCTION } from '../../../../../../common/constants'; @@ -113,7 +112,6 @@ export const StepDefineForm: FC = React.memo((props) => { ); const toastNotifications = useToastNotifications(); const stepDefineForm = useStepDefineForm(props); - const { showNodeInfo } = useEnabledFeatures(); const { advancedEditorConfig } = stepDefineForm.advancedPivotEditor.state; const { @@ -355,7 +353,6 @@ export const StepDefineForm: FC = React.memo((props) => { query={undefined} disabled={false} timefilter={timefilter} - hideFrozenDataTierChoice={!showNodeInfo} /> From 563292f0e089a66b9ecab7d5b72cc9258a21237c Mon Sep 17 00:00:00 2001 From: Brad White Date: Wed, 27 Sep 2023 07:22:34 -0600 Subject: [PATCH 04/40] Fix some type issues in x-pack/test_serverless (#167346) ## Summary We're breaking #166813 up into smaller PRs in the interest of getting PRs through sooner for type fixes. These are the changes for `x-pack/test_serverless`. ## Reviewers There are no code owners for these files, so I'm using the recently edited suggestions --------- Co-authored-by: Alex Szabo Co-authored-by: Thomas Watson Co-authored-by: Alex Szabo Co-authored-by: Thomas Watson Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../api_integration/services/svl_cases/api.ts | 14 +++++++------- .../api_integration/services/svl_cases/omit.ts | 16 ++++++++-------- .../observability/cypress/support/commands.ts | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/x-pack/test_serverless/api_integration/services/svl_cases/api.ts b/x-pack/test_serverless/api_integration/services/svl_cases/api.ts index 474a92c317e9f..4163fc70291db 100644 --- a/x-pack/test_serverless/api_integration/services/svl_cases/api.ts +++ b/x-pack/test_serverless/api_integration/services/svl_cases/api.ts @@ -14,17 +14,17 @@ import { CasesFindResponse } from '@kbn/cases-plugin/common/types/api'; import { kbnTestConfig, kibanaTestSuperuserServerless } from '@kbn/test'; import { FtrProviderContext } from '../../ftr_provider_context'; +export interface User { + username: string; + password: string; + description?: string; + roles: string[]; +} + export function SvlCasesApiServiceProvider({ getService }: FtrProviderContext) { const kbnServer = getService('kibanaServer'); const supertest = getService('supertest'); - interface User { - username: string; - password: string; - description?: string; - roles: string[]; - } - const superUser: User = { username: 'superuser', password: 'superuser', diff --git a/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts b/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts index 94ce0a479fffc..cb424ed73609c 100644 --- a/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts +++ b/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts @@ -9,15 +9,15 @@ import { Case, Attachment } from '@kbn/cases-plugin/common/types/domain'; import { omit } from 'lodash'; import { FtrProviderContext } from '../../ftr_provider_context'; -export function SvlCasesOmitServiceProvider({}: FtrProviderContext) { - interface CommonSavedObjectAttributes { - id?: string | null; - created_at?: string | null; - updated_at?: string | null; - version?: string | null; - [key: string]: unknown; - } +export interface CommonSavedObjectAttributes { + id?: string | null; + created_at?: string | null; + updated_at?: string | null; + version?: string | null; + [key: string]: unknown; +} +export function SvlCasesOmitServiceProvider({}: FtrProviderContext) { const savedObjectCommonAttributes = ['created_at', 'updated_at', 'version', 'id']; return { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts b/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts index 42b6801c6ab5b..38279b0c8d636 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts @@ -31,8 +31,8 @@ Cypress.Commands.add('loginAsElasticUser', () => { method: 'POST', url: `${kibanaUrlWithoutAuth}/internal/security/login`, body: { - providerType: basicProvider.type, - providerName: basicProvider.name, + providerType: basicProvider?.type, + providerName: basicProvider?.name, currentURL: `${kibanaUrlWithoutAuth}/login`, params: { username, password }, }, From 07570c6847cbda632d632b2e920abef809ee6256 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 27 Sep 2023 15:24:36 +0200 Subject: [PATCH 05/40] Fix typescript errors in osquery cypress tsconfig (#167369) ## Summary Supposedly, this is the error that's causing these type of errors:/ ``` Cannot write file '/Users/alex/Git/kibana/x-pack/test/functional/services/random.js' because it would overwrite input file. ``` Separated off from: https://github.com/elastic/kibana/pull/167355 Co-authored-by: Thomas Watson Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/osquery/cypress/tsconfig.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x-pack/plugins/osquery/cypress/tsconfig.json b/x-pack/plugins/osquery/cypress/tsconfig.json index 11f17f033495b..cb468e0fb8893 100644 --- a/x-pack/plugins/osquery/cypress/tsconfig.json +++ b/x-pack/plugins/osquery/cypress/tsconfig.json @@ -19,6 +19,9 @@ "resolveJsonModule": true, }, "kbn_references": [ + { + "path": "../../../test_serverless/tsconfig.json" + }, "@kbn/cypress-config", // cypress projects that are nested inside of other ts project use code // from the parent ts project in ways that can't be automatically deteceted From e801e76643666d5d2b73c42ee0b58f46d3609462 Mon Sep 17 00:00:00 2001 From: Maxim Kholod Date: Wed, 27 Sep 2023 15:44:42 +0200 Subject: [PATCH 06/40] [Cloud Security] add unit tests for createBenchmarkScoreIndex func (#167121) ## Summary a follow-up for https://github.com/elastic/kibana/pull/166966 to add unit tests --- .../create_indices/create_indices.test.ts | 111 ++++++++++++++++++ .../server/create_indices/create_indices.ts | 2 +- 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts diff --git a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts new file mode 100644 index 0000000000000..c7f500d891c1b --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; +import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { createBenchmarkScoreIndex } from './create_indices'; +import { + BENCHMARK_SCORE_INDEX_DEFAULT_NS, + BENCHMARK_SCORE_INDEX_PATTERN, + BENCHMARK_SCORE_INDEX_TEMPLATE_NAME, + CSP_INGEST_TIMESTAMP_PIPELINE, +} from '../../common/constants'; +import { IndicesGetIndexTemplateIndexTemplateItem } from '@elastic/elasticsearch/lib/api/types'; + +const mockEsClient = elasticsearchClientMock.createClusterClient().asScoped().asInternalUser; + +describe('createBenchmarkScoreIndex', () => { + let logger: ReturnType; + + beforeEach(() => { + logger = loggingSystemMock.createLogger(); + jest.resetAllMocks(); + }); + + it('should delete old index template from prev verions first', async () => { + mockEsClient.indices.getIndexTemplate.mockResolvedValueOnce({ + index_templates: [{ name: 'foo' } as IndicesGetIndexTemplateIndexTemplateItem], + }); + // @ts-ignore + await createBenchmarkScoreIndex(mockEsClient, { serverless: { enabled: false } }, logger); + expect(mockEsClient.indices.deleteIndexTemplate).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.deleteIndexTemplate).toHaveBeenCalledWith({ + name: 'cloud_security_posture.scores', + }); + }); + + it('should create index template with the correct index pattern, index name and default ingest pipeline', async () => { + // @ts-ignore + await createBenchmarkScoreIndex(mockEsClient, { serverless: { enabled: false } }, logger); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledWith( + expect.objectContaining({ + name: BENCHMARK_SCORE_INDEX_TEMPLATE_NAME, + index_patterns: BENCHMARK_SCORE_INDEX_PATTERN, + template: expect.objectContaining({ + settings: { + index: { + default_pipeline: CSP_INGEST_TIMESTAMP_PIPELINE, + }, + lifecycle: { + name: '', + }, + }, + }), + }) + ); + }); + + it('should create index template the correct index patter, index name and default ingest pipeline but without lifecycle in serverless', async () => { + await createBenchmarkScoreIndex( + mockEsClient, + { serverless: { enabled: true }, enabled: true }, + logger + ); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledWith( + expect.objectContaining({ + name: BENCHMARK_SCORE_INDEX_TEMPLATE_NAME, + index_patterns: BENCHMARK_SCORE_INDEX_PATTERN, + template: expect.objectContaining({ + settings: expect.not.objectContaining({ + lifecycle: { + name: '', + }, + }), + }), + }) + ); + }); + + it('should create index if does not exist', async () => { + mockEsClient.indices.exists.mockResolvedValueOnce(false); + + await createBenchmarkScoreIndex( + mockEsClient, + { serverless: { enabled: true }, enabled: true }, + logger + ); + expect(mockEsClient.indices.create).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.create).toHaveBeenCalledWith({ + index: BENCHMARK_SCORE_INDEX_DEFAULT_NS, + }); + expect(mockEsClient.indices.putMapping).toHaveBeenCalledTimes(0); + }); + + it('should updat index mapping if index exists', async () => { + mockEsClient.indices.exists.mockResolvedValueOnce(true); + + await createBenchmarkScoreIndex( + mockEsClient, + { serverless: { enabled: true }, enabled: true }, + logger + ); + expect(mockEsClient.indices.create).toHaveBeenCalledTimes(0); + expect(mockEsClient.indices.putMapping).toHaveBeenCalledTimes(1); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts index 03e3b0c804dc0..f8a935f361ff6 100644 --- a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts +++ b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts @@ -65,7 +65,7 @@ export const initializeCspIndices = async ( } }; -const createBenchmarkScoreIndex = async ( +export const createBenchmarkScoreIndex = async ( esClient: ElasticsearchClient, cloudSecurityPostureConfig: CloudSecurityPostureConfig, logger: Logger From ecd1cb110f2e6f5e691cc938bf31b59458c85936 Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Wed, 27 Sep 2023 08:50:09 -0500 Subject: [PATCH 07/40] skip failing test suite (#156245) --- .../server/integration_tests/fleet_usage_telemetry.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts b/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts index 046ac5dfe9fad..b841c641c3af4 100644 --- a/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts @@ -20,7 +20,8 @@ import { waitForFleetSetup } from './helpers'; const logFilePath = path.join(__dirname, 'logs.log'); -describe('fleet usage telemetry', () => { +// Failing: See https://github.com/elastic/kibana/issues/156245 +describe.skip('fleet usage telemetry', () => { let core: any; let esServer: TestElasticsearchUtils; let kbnServer: TestKibanaUtils; From 7013a9b7506f7f379683a55dc1fe63079cd270ad Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 27 Sep 2023 10:38:57 -0400 Subject: [PATCH 08/40] skip failing test suite (#167320) --- .../functional/apps/maps/group2/embeddable/add_to_dashboard.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js index fcd3d06115508..dbe4513b1d7ee 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js @@ -21,7 +21,8 @@ export default function ({ getPageObjects, getService }) { const testSubjects = getService('testSubjects'); const security = getService('security'); - describe('maps add-to-dashboard save flow', () => { + // Failing: See https://github.com/elastic/kibana/issues/167320 + describe.skip('maps add-to-dashboard save flow', () => { before(async () => { await security.testUser.setRoles( [ From 93fc80704ae7042107248cd7c1c6811c7e4b20e1 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 27 Sep 2023 19:08:16 +0300 Subject: [PATCH 09/40] [ES|QL] Do not allow saving in library action on text based panels (#167111) ## Summary Save to library action should not be present in ES|QL panels. For now we only allow by value embeddables and we don't want them to be edited/created in Lens editor image ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../src/es_query/es_aggregate_query.test.ts | 5 +++++ .../kbn-es-query/src/es_query/es_aggregate_query.ts | 2 +- .../add_to_library_action.test.tsx | 13 +++++++++++++ .../dashboard_actions/add_to_library_action.tsx | 11 ++++++++--- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/kbn-es-query/src/es_query/es_aggregate_query.test.ts b/packages/kbn-es-query/src/es_query/es_aggregate_query.test.ts index 2ab161e0f7517..34fc90805ca7d 100644 --- a/packages/kbn-es-query/src/es_query/es_aggregate_query.test.ts +++ b/packages/kbn-es-query/src/es_query/es_aggregate_query.test.ts @@ -33,6 +33,11 @@ describe('sql query helpers', () => { expect(flag).toBe(false); }); + it('should return false for an undefined query', () => { + const flag = isOfAggregateQueryType(undefined); + expect(flag).toBe(false); + }); + it('should return true for an Aggregate type query', () => { const flag = isOfAggregateQueryType({ sql: 'SELECT * FROM foo' }); expect(flag).toBe(true); diff --git a/packages/kbn-es-query/src/es_query/es_aggregate_query.ts b/packages/kbn-es-query/src/es_query/es_aggregate_query.ts index 1e87552e98b83..76f7113f2a589 100644 --- a/packages/kbn-es-query/src/es_query/es_aggregate_query.ts +++ b/packages/kbn-es-query/src/es_query/es_aggregate_query.ts @@ -18,7 +18,7 @@ export function isOfQueryType(arg?: Query | AggregateQuery): arg is Query { // currently only supports the sql query type // should be enhanced to support other query types export function isOfAggregateQueryType( - query: AggregateQuery | Query | { [key: string]: any } + query?: AggregateQuery | Query | { [key: string]: any } ): query is AggregateQuery { return Boolean(query && ('sql' in query || 'esql' in query)); } diff --git a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.test.tsx b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.test.tsx index f7c1c2a30f68c..417795dee9334 100644 --- a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.test.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.test.tsx @@ -21,6 +21,7 @@ import { CONTACT_CARD_EMBEDDABLE, } from '@kbn/embeddable-plugin/public/lib/test_samples/embeddables'; import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks'; +import { type Query, type AggregateQuery, Filter } from '@kbn/es-query'; import { buildMockDashboard } from '../mocks'; import { pluginServices } from '../services/plugin_services'; @@ -82,6 +83,18 @@ test('Add to library is incompatible with Error Embeddables', async () => { expect(await action.isCompatible({ embeddable: errorEmbeddable })).toBe(false); }); +test('Add to library is incompatible with ES|QL Embeddables', async () => { + const action = new AddToLibraryAction(); + const mockGetFilters = jest.fn(async () => [] as Filter[]); + const mockGetQuery = jest.fn(async () => undefined as Query | AggregateQuery | undefined); + const filterableEmbeddable = embeddablePluginMock.mockFilterableEmbeddable(embeddable, { + getFilters: () => mockGetFilters(), + getQuery: () => mockGetQuery(), + }); + mockGetQuery.mockResolvedValue({ esql: 'from logstash-* | limit 10' } as AggregateQuery); + expect(await action.isCompatible({ embeddable: filterableEmbeddable })).toBe(false); +}); + test('Add to library is incompatible on visualize embeddable without visualize save permissions', async () => { pluginServices.getServices().application.capabilities = { ...defaultCapabilities, diff --git a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx index 3974c4f713efb..88e34f6028a5e 100644 --- a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx @@ -14,9 +14,10 @@ import { PanelNotFoundError, type EmbeddableInput, isReferenceOrValueEmbeddable, + isFilterableEmbeddable, } from '@kbn/embeddable-plugin/public'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; - +import { type AggregateQuery } from '@kbn/es-query'; import { DashboardPanelState } from '../../common'; import { pluginServices } from '../services/plugin_services'; import { dashboardAddToLibraryActionStrings } from './_dashboard_actions_strings'; @@ -61,7 +62,10 @@ export class AddToLibraryAction implements Action { // TODO: Fix this, potentially by adding a 'canSave' function to embeddable interface const { maps, visualize } = this.applicationCapabilities; const canSave = embeddable.type === 'map' ? maps.save : visualize.save; - + const { isOfAggregateQueryType } = await import('@kbn/es-query'); + const query = isFilterableEmbeddable(embeddable) && (await embeddable.getQuery()); + // Textbased panels (i.e. ES|QL, SQL) should not save to library + const isTextBasedEmbeddable = isOfAggregateQueryType(query as AggregateQuery); return Boolean( canSave && !isErrorEmbeddable(embeddable) && @@ -70,7 +74,8 @@ export class AddToLibraryAction implements Action { embeddable.getRoot().isContainer && embeddable.getRoot().type === DASHBOARD_CONTAINER_TYPE && isReferenceOrValueEmbeddable(embeddable) && - !embeddable.inputIsRefType(embeddable.getInput()) + !embeddable.inputIsRefType(embeddable.getInput()) && + !isTextBasedEmbeddable ); } From 1b9993eb07956c17004cefa27a0b954c4f5ded82 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 27 Sep 2023 18:43:27 +0200 Subject: [PATCH 10/40] [ML] Move `chi2test` to package (#167237) The `chi2test` utils so fare were only used within data comparison view. We plan to use it with other plugins, so moving it so a separate package in this PR. `SIGNIFICANCE_LEVELS` was updated to include some more digits. --- .github/CODEOWNERS | 1 + package.json | 1 + tsconfig.base.json | 2 + x-pack/packages/ml/chi2test/README.md | 4 + .../ml/chi2test/compute_chi_2_pvalue.test.ts} | 6 +- .../ml/chi2test/compute_chi_2_pvalue.ts | 48 + x-pack/packages/ml/chi2test/constants.ts | 1038 +++++++++++++++++ .../ml/chi2test/critical_table_lookup.ts | 40 + x-pack/packages/ml/chi2test/index.ts | 11 + x-pack/packages/ml/chi2test/jest.config.js | 12 + x-pack/packages/ml/chi2test/kibana.jsonc | 5 + x-pack/packages/ml/chi2test/package.json | 6 + x-pack/packages/ml/chi2test/tsconfig.json | 19 + x-pack/packages/ml/chi2test/types.ts | 24 + .../charts/single_distribution_chart.tsx | 13 +- .../application/data_drift/constants.ts | 1008 ---------------- .../data_drift/data_drift_utils.ts | 61 - .../public/application/data_drift/types.ts | 11 +- .../data_drift/use_data_drift_result.ts | 22 +- x-pack/plugins/data_visualizer/tsconfig.json | 3 +- yarn.lock | 4 + 21 files changed, 1247 insertions(+), 1092 deletions(-) create mode 100644 x-pack/packages/ml/chi2test/README.md rename x-pack/{plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts => packages/ml/chi2test/compute_chi_2_pvalue.test.ts} (94%) create mode 100644 x-pack/packages/ml/chi2test/compute_chi_2_pvalue.ts create mode 100644 x-pack/packages/ml/chi2test/constants.ts create mode 100644 x-pack/packages/ml/chi2test/critical_table_lookup.ts create mode 100644 x-pack/packages/ml/chi2test/index.ts create mode 100644 x-pack/packages/ml/chi2test/jest.config.js create mode 100644 x-pack/packages/ml/chi2test/kibana.jsonc create mode 100644 x-pack/packages/ml/chi2test/package.json create mode 100644 x-pack/packages/ml/chi2test/tsconfig.json create mode 100644 x-pack/packages/ml/chi2test/types.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b443075cf7555..af6ce61ca4b58 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -502,6 +502,7 @@ x-pack/plugins/metrics_data_access @elastic/infra-monitoring-ui x-pack/packages/ml/agg_utils @elastic/ml-ui x-pack/packages/ml/anomaly_utils @elastic/ml-ui x-pack/packages/ml/category_validator @elastic/ml-ui +x-pack/packages/ml/chi2test @elastic/ml-ui x-pack/packages/ml/data_frame_analytics_utils @elastic/ml-ui x-pack/packages/ml/data_grid @elastic/ml-ui x-pack/packages/ml/date_picker @elastic/ml-ui diff --git a/package.json b/package.json index c29325ea42092..39ca8426fd0e6 100644 --- a/package.json +++ b/package.json @@ -523,6 +523,7 @@ "@kbn/ml-agg-utils": "link:x-pack/packages/ml/agg_utils", "@kbn/ml-anomaly-utils": "link:x-pack/packages/ml/anomaly_utils", "@kbn/ml-category-validator": "link:x-pack/packages/ml/category_validator", + "@kbn/ml-chi2test": "link:x-pack/packages/ml/chi2test", "@kbn/ml-data-frame-analytics-utils": "link:x-pack/packages/ml/data_frame_analytics_utils", "@kbn/ml-data-grid": "link:x-pack/packages/ml/data_grid", "@kbn/ml-date-picker": "link:x-pack/packages/ml/date_picker", diff --git a/tsconfig.base.json b/tsconfig.base.json index 10f8f78781437..b43c2b3a91847 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -998,6 +998,8 @@ "@kbn/ml-anomaly-utils/*": ["x-pack/packages/ml/anomaly_utils/*"], "@kbn/ml-category-validator": ["x-pack/packages/ml/category_validator"], "@kbn/ml-category-validator/*": ["x-pack/packages/ml/category_validator/*"], + "@kbn/ml-chi2test": ["x-pack/packages/ml/chi2test"], + "@kbn/ml-chi2test/*": ["x-pack/packages/ml/chi2test/*"], "@kbn/ml-data-frame-analytics-utils": ["x-pack/packages/ml/data_frame_analytics_utils"], "@kbn/ml-data-frame-analytics-utils/*": ["x-pack/packages/ml/data_frame_analytics_utils/*"], "@kbn/ml-data-grid": ["x-pack/packages/ml/data_grid"], diff --git a/x-pack/packages/ml/chi2test/README.md b/x-pack/packages/ml/chi2test/README.md new file mode 100644 index 0000000000000..5e99ad9f05ce9 --- /dev/null +++ b/x-pack/packages/ml/chi2test/README.md @@ -0,0 +1,4 @@ +# @kbn/ml-chi2test + +`computeChi2PValue` computes the p-value for how similar the datasets are. +Returned value ranges from 0 to 1, with 1 meaning the datasets are identical. diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts b/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.test.ts similarity index 94% rename from x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts rename to x-pack/packages/ml/chi2test/compute_chi_2_pvalue.test.ts index 66dd69f66fb07..3b608ca6ed953 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts +++ b/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.test.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { computeChi2PValue } from './data_drift_utils'; -import { Histogram } from './types'; +import { computeChi2PValue } from './compute_chi_2_pvalue'; +import type { Histogram } from './types'; describe('computeChi2PValue()', () => { test('should return close to 1 if datasets are both empty or nearly identical', () => { @@ -83,6 +83,6 @@ describe('computeChi2PValue()', () => { percentage: 1, }, ]; - expect(computeChi2PValue(referenceTerms, comparisonTerms)).toStrictEqual(0); + expect(computeChi2PValue(referenceTerms, comparisonTerms)).toStrictEqual(0.000001); }); }); diff --git a/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.ts b/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.ts new file mode 100644 index 0000000000000..79d75cc4d5cf8 --- /dev/null +++ b/x-pack/packages/ml/chi2test/compute_chi_2_pvalue.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { criticalTableLookup } from './critical_table_lookup'; +import type { Histogram } from './types'; + +/** + * Compute the p-value for how similar the datasets are. + * Returned value ranges from 0 to 1, with 1 meaning the datasets are identical. + * + * @param {Histogram[]} normalizedBaselineTerms - An array of normalized baseline terms (Histogram objects). + * @param {Histogram[]} normalizedDriftedTerms - An array of normalized drifted terms (Histogram objects). + * @returns {number} The p-value indicating the similarity of the datasets. + */ +export const computeChi2PValue = ( + normalizedBaselineTerms: Histogram[], + normalizedDriftedTerms: Histogram[] +) => { + // Get all unique keys from both arrays + const allKeys: string[] = Array.from( + new Set([ + ...normalizedBaselineTerms.map((term) => term.key.toString()), + ...normalizedDriftedTerms.map((term) => term.key.toString()), + ]) + ).slice(0, 100); + + // Calculate the chi-squared statistic and degrees of freedom + let chiSquared: number = 0; + const degreesOfFreedom: number = allKeys.length - 1; + + if (degreesOfFreedom === 0) return 1; + + allKeys.forEach((key) => { + const baselineTerm = normalizedBaselineTerms.find((term) => term.key === key); + const driftedTerm = normalizedDriftedTerms.find((term) => term.key === key); + + const observed: number = driftedTerm?.percentage ?? 0; + const expected: number = baselineTerm?.percentage ?? 0; + chiSquared += Math.pow(observed - expected, 2) / (expected > 0 ? expected : 1e-6); // Prevent divide by zero + }); + + // Use the criticalTableLookup function to determine the p-value + return criticalTableLookup(chiSquared, degreesOfFreedom); +}; diff --git a/x-pack/packages/ml/chi2test/constants.ts b/x-pack/packages/ml/chi2test/constants.ts new file mode 100644 index 0000000000000..148c17ffb1025 --- /dev/null +++ b/x-pack/packages/ml/chi2test/constants.ts @@ -0,0 +1,1038 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * Table generated from following python code + +import scipy.stats as stats +import numpy as np + +# generate a chi-squared critical value table + +# degrees of freedom +df = range(1,100) + +# levels of significance +significance_levels = np.concatenate((np.logspace(-6, -3, 3), np.linspace(0.01, 0.99, 99))) + +# create the table +table = [] +for d in df: + row = [] + for l in significance_levels: + row.append(round(stats.chi2.ppf(1 - l, d), 2)) + table.append(row) + +critical_value_table = np.array(table) + +# print the critical value table as a TypeScipt array +print("export const CRITICAL_VALUES_TABLE = [") +for row in critical_value_table: + print(f" [{', '.join([str(x) for x in row])}],") +print("];") + +# print the significance levels as a TypeScript array +print("export const SIGNIFICANCE_LEVELS = [") +print(f" {', '.join([f'{x:.6f}' for x in significance_levels])}") +print("];") + + * until we find a low size replacement for doing chi2test in js + */ +export const CRITICAL_VALUES_TABLE = [ + [ + 23.93, 17.32, 10.83, 6.63, 5.41, 4.71, 4.22, 3.84, 3.54, 3.28, 3.06, 2.87, 2.71, 2.55, 2.42, + 2.29, 2.18, 2.07, 1.97, 1.88, 1.8, 1.72, 1.64, 1.57, 1.5, 1.44, 1.38, 1.32, 1.27, 1.22, 1.17, + 1.12, 1.07, 1.03, 0.99, 0.95, 0.91, 0.87, 0.84, 0.8, 0.77, 0.74, 0.71, 0.68, 0.65, 0.62, 0.6, + 0.57, 0.55, 0.52, 0.5, 0.48, 0.45, 0.43, 0.41, 0.39, 0.38, 0.36, 0.34, 0.32, 0.31, 0.29, 0.27, + 0.26, 0.25, 0.23, 0.22, 0.21, 0.19, 0.18, 0.17, 0.16, 0.15, 0.14, 0.13, 0.12, 0.11, 0.1, 0.09, + 0.09, 0.08, 0.07, 0.06, 0.06, 0.05, 0.05, 0.04, 0.04, 0.03, 0.03, 0.02, 0.02, 0.02, 0.01, 0.01, + 0.01, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, + ], + [ + 27.63, 20.72, 13.82, 9.21, 7.82, 7.01, 6.44, 5.99, 5.63, 5.32, 5.05, 4.82, 4.61, 4.41, 4.24, + 4.08, 3.93, 3.79, 3.67, 3.54, 3.43, 3.32, 3.22, 3.12, 3.03, 2.94, 2.85, 2.77, 2.69, 2.62, 2.55, + 2.48, 2.41, 2.34, 2.28, 2.22, 2.16, 2.1, 2.04, 1.99, 1.94, 1.88, 1.83, 1.78, 1.74, 1.69, 1.64, + 1.6, 1.55, 1.51, 1.47, 1.43, 1.39, 1.35, 1.31, 1.27, 1.23, 1.2, 1.16, 1.12, 1.09, 1.06, 1.02, + 0.99, 0.96, 0.92, 0.89, 0.86, 0.83, 0.8, 0.77, 0.74, 0.71, 0.68, 0.66, 0.63, 0.6, 0.58, 0.55, + 0.52, 0.5, 0.47, 0.45, 0.42, 0.4, 0.37, 0.35, 0.33, 0.3, 0.28, 0.26, 0.23, 0.21, 0.19, 0.17, + 0.15, 0.12, 0.1, 0.08, 0.06, 0.04, 0.02, + ], + [ + 30.66, 23.51, 16.27, 11.34, 9.84, 8.95, 8.31, 7.81, 7.41, 7.06, 6.76, 6.49, 6.25, 6.03, 5.83, + 5.65, 5.48, 5.32, 5.17, 5.02, 4.89, 4.76, 4.64, 4.53, 4.41, 4.31, 4.21, 4.11, 4.01, 3.92, 3.83, + 3.75, 3.66, 3.58, 3.51, 3.43, 3.36, 3.28, 3.21, 3.14, 3.08, 3.01, 2.95, 2.88, 2.82, 2.76, 2.7, + 2.64, 2.59, 2.53, 2.47, 2.42, 2.37, 2.31, 2.26, 2.21, 2.16, 2.11, 2.06, 2.01, 1.96, 1.92, 1.87, + 1.82, 1.78, 1.73, 1.69, 1.64, 1.6, 1.55, 1.51, 1.47, 1.42, 1.38, 1.34, 1.3, 1.25, 1.21, 1.17, + 1.13, 1.09, 1.05, 1.01, 0.96, 0.92, 0.88, 0.84, 0.8, 0.76, 0.71, 0.67, 0.63, 0.58, 0.54, 0.49, + 0.45, 0.4, 0.35, 0.3, 0.25, 0.18, 0.11, + ], + [ + 33.38, 26.0, 18.47, 13.28, 11.67, 10.71, 10.03, 9.49, 9.04, 8.67, 8.34, 8.04, 7.78, 7.54, 7.32, + 7.11, 6.92, 6.74, 6.58, 6.42, 6.27, 6.13, 5.99, 5.86, 5.73, 5.61, 5.5, 5.39, 5.28, 5.17, 5.07, + 4.97, 4.88, 4.79, 4.7, 4.61, 4.52, 4.44, 4.36, 4.28, 4.2, 4.12, 4.04, 3.97, 3.9, 3.83, 3.76, + 3.69, 3.62, 3.55, 3.49, 3.42, 3.36, 3.29, 3.23, 3.17, 3.11, 3.05, 2.99, 2.93, 2.87, 2.81, 2.75, + 2.7, 2.64, 2.58, 2.53, 2.47, 2.41, 2.36, 2.3, 2.25, 2.19, 2.14, 2.09, 2.03, 1.98, 1.92, 1.87, + 1.81, 1.76, 1.7, 1.65, 1.59, 1.54, 1.48, 1.42, 1.37, 1.31, 1.25, 1.19, 1.13, 1.06, 1.0, 0.93, + 0.86, 0.79, 0.71, 0.63, 0.54, 0.43, 0.3, + ], + [ + 35.89, 28.31, 20.52, 15.09, 13.39, 12.37, 11.64, 11.07, 10.6, 10.19, 9.84, 9.52, 9.24, 8.98, + 8.74, 8.52, 8.31, 8.12, 7.93, 7.76, 7.6, 7.44, 7.29, 7.15, 7.01, 6.88, 6.75, 6.63, 6.51, 6.39, + 6.28, 6.17, 6.06, 5.96, 5.86, 5.76, 5.67, 5.57, 5.48, 5.39, 5.3, 5.22, 5.13, 5.05, 4.97, 4.89, + 4.81, 4.73, 4.65, 4.57, 4.5, 4.42, 4.35, 4.28, 4.21, 4.14, 4.07, 4.0, 3.93, 3.86, 3.79, 3.72, + 3.66, 3.59, 3.52, 3.46, 3.39, 3.33, 3.26, 3.19, 3.13, 3.06, 3.0, 2.94, 2.87, 2.81, 2.74, 2.67, + 2.61, 2.54, 2.48, 2.41, 2.34, 2.27, 2.21, 2.14, 2.07, 1.99, 1.92, 1.85, 1.77, 1.69, 1.61, 1.53, + 1.44, 1.35, 1.25, 1.15, 1.03, 0.9, 0.75, 0.55, + ], + [ + 38.26, 30.5, 22.46, 16.81, 15.03, 13.97, 13.2, 12.59, 12.09, 11.66, 11.28, 10.95, 10.64, 10.37, + 10.11, 9.88, 9.65, 9.45, 9.25, 9.06, 8.89, 8.72, 8.56, 8.4, 8.26, 8.11, 7.97, 7.84, 7.71, 7.59, + 7.46, 7.35, 7.23, 7.12, 7.01, 6.9, 6.8, 6.69, 6.59, 6.5, 6.4, 6.3, 6.21, 6.12, 6.03, 5.94, 5.85, + 5.77, 5.68, 5.6, 5.51, 5.43, 5.35, 5.27, 5.19, 5.11, 5.03, 4.95, 4.87, 4.8, 4.72, 4.65, 4.57, + 4.5, 4.42, 4.35, 4.27, 4.2, 4.12, 4.05, 3.98, 3.9, 3.83, 3.75, 3.68, 3.6, 3.53, 3.45, 3.38, 3.3, + 3.23, 3.15, 3.07, 2.99, 2.91, 2.83, 2.75, 2.66, 2.57, 2.49, 2.4, 2.3, 2.2, 2.1, 2.0, 1.88, 1.76, + 1.64, 1.49, 1.33, 1.13, 0.87, + ], + [ + 40.52, 32.59, 24.32, 18.48, 16.62, 15.51, 14.7, 14.07, 13.54, 13.09, 12.69, 12.34, 12.02, 11.72, + 11.45, 11.2, 10.97, 10.75, 10.54, 10.34, 10.15, 9.97, 9.8, 9.64, 9.48, 9.33, 9.18, 9.04, 8.9, + 8.76, 8.63, 8.51, 8.38, 8.26, 8.14, 8.03, 7.92, 7.81, 7.7, 7.59, 7.49, 7.38, 7.28, 7.18, 7.09, + 6.99, 6.89, 6.8, 6.71, 6.62, 6.52, 6.43, 6.35, 6.26, 6.17, 6.08, 6.0, 5.91, 5.83, 5.74, 5.66, + 5.58, 5.49, 5.41, 5.33, 5.25, 5.16, 5.08, 5.0, 4.92, 4.84, 4.75, 4.67, 4.59, 4.51, 4.42, 4.34, + 4.25, 4.17, 4.08, 4.0, 3.91, 3.82, 3.73, 3.64, 3.55, 3.45, 3.36, 3.26, 3.16, 3.05, 2.95, 2.83, + 2.72, 2.59, 2.46, 2.32, 2.17, 2.0, 1.8, 1.56, 1.24, + ], + [ + 42.7, 34.6, 26.12, 20.09, 18.17, 17.01, 16.17, 15.51, 14.96, 14.48, 14.07, 13.7, 13.36, 13.05, + 12.77, 12.51, 12.26, 12.03, 11.81, 11.6, 11.4, 11.21, 11.03, 10.86, 10.69, 10.53, 10.37, 10.22, + 10.07, 9.93, 9.79, 9.66, 9.52, 9.4, 9.27, 9.15, 9.03, 8.91, 8.79, 8.68, 8.57, 8.46, 8.35, 8.24, + 8.14, 8.04, 7.93, 7.83, 7.73, 7.63, 7.54, 7.44, 7.34, 7.25, 7.16, 7.06, 6.97, 6.88, 6.78, 6.69, + 6.6, 6.51, 6.42, 6.33, 6.24, 6.15, 6.06, 5.98, 5.89, 5.8, 5.71, 5.62, 5.53, 5.44, 5.35, 5.26, + 5.16, 5.07, 4.98, 4.88, 4.79, 4.69, 4.59, 4.49, 4.39, 4.29, 4.19, 4.08, 3.97, 3.85, 3.74, 3.62, + 3.49, 3.36, 3.22, 3.07, 2.91, 2.73, 2.54, 2.31, 2.03, 1.65, + ], + [ + 44.81, 36.55, 27.88, 21.67, 19.68, 18.48, 17.61, 16.92, 16.35, 15.85, 15.42, 15.03, 14.68, + 14.36, 14.07, 13.79, 13.53, 13.29, 13.06, 12.84, 12.63, 12.43, 12.24, 12.06, 11.88, 11.71, + 11.55, 11.39, 11.23, 11.08, 10.94, 10.8, 10.66, 10.52, 10.39, 10.26, 10.13, 10.01, 9.88, 9.76, + 9.64, 9.53, 9.41, 9.3, 9.19, 9.08, 8.97, 8.86, 8.76, 8.65, 8.55, 8.44, 8.34, 8.24, 8.14, 8.04, + 7.94, 7.84, 7.75, 7.65, 7.55, 7.45, 7.36, 7.26, 7.16, 7.07, 6.97, 6.88, 6.78, 6.68, 6.59, 6.49, + 6.39, 6.3, 6.2, 6.1, 6.0, 5.9, 5.8, 5.7, 5.59, 5.49, 5.38, 5.27, 5.16, 5.05, 4.93, 4.82, 4.7, + 4.57, 4.44, 4.31, 4.17, 4.02, 3.87, 3.7, 3.52, 3.33, 3.1, 2.85, 2.53, 2.09, + ], + [ + 46.86, 38.45, 29.59, 23.21, 21.16, 19.92, 19.02, 18.31, 17.71, 17.2, 16.75, 16.35, 15.99, 15.65, + 15.34, 15.06, 14.79, 14.53, 14.29, 14.07, 13.85, 13.64, 13.44, 13.25, 13.07, 12.89, 12.72, + 12.55, 12.39, 12.23, 12.08, 11.93, 11.78, 11.64, 11.5, 11.36, 11.23, 11.1, 10.97, 10.84, 10.72, + 10.59, 10.47, 10.35, 10.24, 10.12, 10.01, 9.89, 9.78, 9.67, 9.56, 9.45, 9.34, 9.23, 9.13, 9.02, + 8.92, 8.81, 8.71, 8.6, 8.5, 8.4, 8.3, 8.19, 8.09, 7.99, 7.89, 7.78, 7.68, 7.58, 7.47, 7.37, + 7.27, 7.16, 7.06, 6.95, 6.84, 6.74, 6.63, 6.52, 6.41, 6.29, 6.18, 6.06, 5.94, 5.82, 5.7, 5.57, + 5.44, 5.3, 5.16, 5.02, 4.87, 4.7, 4.54, 4.35, 4.16, 3.94, 3.7, 3.41, 3.06, 2.56, + ], + [ + 48.87, 40.31, 31.26, 24.72, 22.62, 21.34, 20.41, 19.68, 19.06, 18.53, 18.07, 17.65, 17.28, + 16.93, 16.61, 16.31, 16.03, 15.77, 15.52, 15.28, 15.05, 14.84, 14.63, 14.43, 14.24, 14.05, + 13.87, 13.7, 13.53, 13.37, 13.21, 13.05, 12.9, 12.75, 12.6, 12.46, 12.32, 12.18, 12.05, 11.92, + 11.79, 11.66, 11.53, 11.4, 11.28, 11.16, 11.04, 10.92, 10.8, 10.69, 10.57, 10.45, 10.34, 10.23, + 10.12, 10.0, 9.89, 9.78, 9.67, 9.56, 9.45, 9.35, 9.24, 9.13, 9.02, 8.91, 8.8, 8.7, 8.59, 8.48, + 8.37, 8.26, 8.15, 8.04, 7.93, 7.81, 7.7, 7.58, 7.47, 7.35, 7.23, 7.11, 6.99, 6.86, 6.74, 6.61, + 6.47, 6.34, 6.2, 6.05, 5.9, 5.74, 5.58, 5.4, 5.22, 5.02, 4.81, 4.57, 4.31, 4.0, 3.61, 3.05, + ], + [ + 50.83, 42.13, 32.91, 26.22, 24.05, 22.74, 21.79, 21.03, 20.39, 19.85, 19.37, 18.94, 18.55, + 18.19, 17.86, 17.55, 17.26, 16.99, 16.73, 16.49, 16.25, 16.03, 15.81, 15.61, 15.41, 15.21, + 15.03, 14.85, 14.67, 14.5, 14.33, 14.17, 14.01, 13.86, 13.7, 13.56, 13.41, 13.27, 13.13, 12.99, + 12.85, 12.72, 12.58, 12.45, 12.32, 12.2, 12.07, 11.95, 11.82, 11.7, 11.58, 11.46, 11.34, 11.22, + 11.1, 10.99, 10.87, 10.76, 10.64, 10.53, 10.41, 10.3, 10.18, 10.07, 9.95, 9.84, 9.73, 9.61, 9.5, + 9.38, 9.27, 9.15, 9.03, 8.92, 8.8, 8.68, 8.56, 8.44, 8.32, 8.19, 8.07, 7.94, 7.81, 7.67, 7.54, + 7.4, 7.26, 7.11, 6.96, 6.81, 6.65, 6.48, 6.3, 6.12, 5.92, 5.71, 5.48, 5.23, 4.94, 4.6, 4.18, + 3.57, + ], + [ + 52.75, 43.92, 34.53, 27.69, 25.47, 24.12, 23.14, 22.36, 21.71, 21.15, 20.66, 20.21, 19.81, + 19.44, 19.1, 18.78, 18.48, 18.2, 17.94, 17.68, 17.44, 17.21, 16.98, 16.77, 16.56, 16.36, 16.17, + 15.98, 15.8, 15.62, 15.45, 15.28, 15.12, 14.96, 14.8, 14.65, 14.49, 14.35, 14.2, 14.05, 13.91, + 13.77, 13.64, 13.5, 13.37, 13.23, 13.1, 12.97, 12.84, 12.72, 12.59, 12.46, 12.34, 12.22, 12.09, + 11.97, 11.85, 11.73, 11.61, 11.49, 11.37, 11.25, 11.13, 11.01, 10.89, 10.77, 10.65, 10.53, + 10.41, 10.29, 10.17, 10.05, 9.93, 9.8, 9.68, 9.55, 9.43, 9.3, 9.17, 9.04, 8.91, 8.77, 8.63, + 8.49, 8.35, 8.2, 8.05, 7.9, 7.74, 7.58, 7.41, 7.23, 7.04, 6.84, 6.63, 6.41, 6.16, 5.89, 5.58, + 5.22, 4.77, 4.11, + ], + [ + 54.64, 45.68, 36.12, 29.14, 26.87, 25.49, 24.49, 23.68, 23.02, 22.44, 21.93, 21.48, 21.06, + 20.68, 20.33, 20.0, 19.7, 19.41, 19.13, 18.87, 18.62, 18.38, 18.15, 17.93, 17.72, 17.51, 17.31, + 17.12, 16.93, 16.75, 16.57, 16.39, 16.22, 16.06, 15.89, 15.73, 15.58, 15.42, 15.27, 15.12, + 14.97, 14.83, 14.69, 14.54, 14.4, 14.27, 14.13, 14.0, 13.86, 13.73, 13.6, 13.47, 13.34, 13.21, + 13.08, 12.96, 12.83, 12.7, 12.58, 12.45, 12.33, 12.2, 12.08, 11.95, 11.83, 11.7, 11.58, 11.45, + 11.33, 11.2, 11.08, 10.95, 10.82, 10.69, 10.56, 10.43, 10.3, 10.17, 10.03, 9.89, 9.75, 9.61, + 9.47, 9.32, 9.17, 9.02, 8.86, 8.7, 8.53, 8.36, 8.18, 7.99, 7.79, 7.58, 7.36, 7.12, 6.86, 6.57, + 6.24, 5.86, 5.37, 4.66, + ], + [ + 56.49, 47.41, 37.7, 30.58, 28.26, 26.85, 25.82, 25.0, 24.31, 23.72, 23.2, 22.73, 22.31, 21.92, + 21.56, 21.22, 20.9, 20.6, 20.32, 20.05, 19.79, 19.55, 19.31, 19.08, 18.86, 18.65, 18.44, 18.25, + 18.05, 17.86, 17.68, 17.5, 17.32, 17.15, 16.98, 16.82, 16.65, 16.49, 16.34, 16.18, 16.03, 15.88, + 15.73, 15.59, 15.44, 15.3, 15.16, 15.02, 14.88, 14.74, 14.61, 14.47, 14.34, 14.21, 14.07, 13.94, + 13.81, 13.68, 13.55, 13.42, 13.29, 13.16, 13.03, 12.9, 12.77, 12.64, 12.51, 12.38, 12.25, 12.12, + 11.99, 11.85, 11.72, 11.59, 11.45, 11.31, 11.18, 11.04, 10.9, 10.75, 10.61, 10.46, 10.31, 10.15, + 10.0, 9.83, 9.67, 9.5, 9.32, 9.14, 8.95, 8.75, 8.55, 8.33, 8.09, 7.84, 7.57, 7.26, 6.91, 6.5, + 5.98, 5.23, + ], + [ + 58.32, 49.12, 39.25, 32.0, 29.63, 28.19, 27.14, 26.3, 25.59, 24.99, 24.46, 23.98, 23.54, 23.14, + 22.77, 22.42, 22.1, 21.79, 21.5, 21.23, 20.96, 20.71, 20.47, 20.23, 20.0, 19.79, 19.57, 19.37, + 19.17, 18.97, 18.78, 18.6, 18.42, 18.24, 18.07, 17.9, 17.73, 17.56, 17.4, 17.24, 17.09, 16.93, + 16.78, 16.63, 16.48, 16.33, 16.19, 16.04, 15.9, 15.76, 15.62, 15.48, 15.34, 15.2, 15.06, 14.93, + 14.79, 14.66, 14.52, 14.39, 14.25, 14.12, 13.98, 13.85, 13.71, 13.58, 13.44, 13.31, 13.17, + 13.04, 12.9, 12.76, 12.62, 12.48, 12.34, 12.2, 12.06, 11.91, 11.76, 11.62, 11.46, 11.31, 11.15, + 10.99, 10.83, 10.66, 10.49, 10.31, 10.13, 9.94, 9.74, 9.53, 9.31, 9.08, 8.84, 8.57, 8.28, 7.96, + 7.6, 7.16, 6.61, 5.81, + ], + [ + 60.13, 50.81, 40.79, 33.41, 31.0, 29.52, 28.44, 27.59, 26.87, 26.25, 25.71, 25.21, 24.77, 24.36, + 23.98, 23.62, 23.29, 22.98, 22.68, 22.4, 22.12, 21.86, 21.61, 21.37, 21.14, 20.92, 20.7, 20.49, + 20.28, 20.08, 19.89, 19.7, 19.51, 19.33, 19.15, 18.97, 18.8, 18.63, 18.47, 18.3, 18.14, 17.98, + 17.82, 17.67, 17.52, 17.36, 17.21, 17.06, 16.92, 16.77, 16.63, 16.48, 16.34, 16.2, 16.05, 15.91, + 15.77, 15.63, 15.49, 15.35, 15.21, 15.08, 14.94, 14.8, 14.66, 14.52, 14.38, 14.24, 14.1, 13.96, + 13.82, 13.67, 13.53, 13.39, 13.24, 13.09, 12.94, 12.79, 12.64, 12.48, 12.33, 12.17, 12.0, 11.84, + 11.66, 11.49, 11.31, 11.12, 10.93, 10.74, 10.53, 10.31, 10.09, 9.84, 9.59, 9.31, 9.01, 8.67, + 8.29, 7.83, 7.26, 6.41, + ], + [ + 61.91, 52.47, 42.31, 34.81, 32.35, 30.84, 29.75, 28.87, 28.14, 27.5, 26.95, 26.45, 25.99, 25.57, + 25.18, 24.82, 24.48, 24.16, 23.85, 23.56, 23.28, 23.02, 22.76, 22.51, 22.28, 22.04, 21.82, 21.6, + 21.39, 21.19, 20.99, 20.79, 20.6, 20.41, 20.23, 20.05, 19.87, 19.7, 19.53, 19.36, 19.19, 19.03, + 18.87, 18.71, 18.55, 18.39, 18.24, 18.09, 17.93, 17.78, 17.63, 17.49, 17.34, 17.19, 17.05, 16.9, + 16.76, 16.61, 16.47, 16.32, 16.18, 16.04, 15.89, 15.75, 15.61, 15.46, 15.32, 15.17, 15.03, + 14.88, 14.74, 14.59, 14.44, 14.29, 14.14, 13.99, 13.83, 13.68, 13.52, 13.36, 13.19, 13.03, + 12.86, 12.68, 12.51, 12.33, 12.14, 11.95, 11.75, 11.54, 11.33, 11.1, 10.86, 10.61, 10.35, 10.06, + 9.74, 9.39, 8.99, 8.51, 7.91, 7.01, + ], + [ + 63.68, 54.12, 43.82, 36.19, 33.69, 32.16, 31.04, 30.14, 29.4, 28.75, 28.18, 27.67, 27.2, 26.78, + 26.38, 26.01, 25.66, 25.33, 25.02, 24.72, 24.43, 24.16, 23.9, 23.65, 23.4, 23.17, 22.94, 22.72, + 22.5, 22.29, 22.09, 21.89, 21.69, 21.5, 21.31, 21.12, 20.94, 20.76, 20.59, 20.42, 20.24, 20.08, + 19.91, 19.75, 19.58, 19.42, 19.26, 19.11, 18.95, 18.8, 18.64, 18.49, 18.34, 18.19, 18.04, 17.89, + 17.74, 17.59, 17.44, 17.29, 17.15, 17.0, 16.85, 16.7, 16.55, 16.41, 16.26, 16.11, 15.96, 15.81, + 15.66, 15.51, 15.35, 15.2, 15.04, 14.88, 14.72, 14.56, 14.4, 14.23, 14.06, 13.89, 13.72, 13.54, + 13.35, 13.17, 12.97, 12.77, 12.57, 12.35, 12.13, 11.9, 11.65, 11.39, 11.11, 10.81, 10.48, 10.12, + 9.7, 9.2, 8.57, 7.63, + ], + [ + 65.42, 55.76, 45.31, 37.57, 35.02, 33.46, 32.32, 31.41, 30.65, 29.99, 29.41, 28.89, 28.41, + 27.97, 27.57, 27.19, 26.83, 26.5, 26.18, 25.87, 25.58, 25.31, 25.04, 24.78, 24.53, 24.29, 24.05, + 23.83, 23.61, 23.39, 23.18, 22.98, 22.77, 22.58, 22.38, 22.2, 22.01, 21.83, 21.65, 21.47, 21.29, + 21.12, 20.95, 20.78, 20.62, 20.45, 20.29, 20.13, 19.97, 19.81, 19.65, 19.49, 19.34, 19.18, + 19.03, 18.87, 18.72, 18.57, 18.42, 18.26, 18.11, 17.96, 17.81, 17.66, 17.5, 17.35, 17.2, 17.05, + 16.89, 16.74, 16.58, 16.42, 16.27, 16.11, 15.95, 15.78, 15.62, 15.45, 15.28, 15.11, 14.94, + 14.76, 14.58, 14.39, 14.2, 14.01, 13.81, 13.6, 13.39, 13.17, 12.94, 12.7, 12.44, 12.17, 11.88, + 11.57, 11.23, 10.85, 10.42, 9.9, 9.24, 8.26, + ], + [ + 67.15, 57.37, 46.8, 38.93, 36.34, 34.76, 33.6, 32.67, 31.89, 31.22, 30.63, 30.1, 29.62, 29.17, + 28.76, 28.37, 28.01, 27.66, 27.34, 27.03, 26.73, 26.44, 26.17, 25.91, 25.65, 25.41, 25.17, + 24.93, 24.71, 24.49, 24.27, 24.06, 23.86, 23.66, 23.46, 23.27, 23.07, 22.89, 22.7, 22.52, 22.34, + 22.17, 21.99, 21.82, 21.65, 21.48, 21.31, 21.15, 20.98, 20.82, 20.66, 20.5, 20.34, 20.18, 20.02, + 19.86, 19.71, 19.55, 19.39, 19.24, 19.08, 18.92, 18.77, 18.61, 18.46, 18.3, 18.14, 17.98, 17.83, + 17.67, 17.51, 17.34, 17.18, 17.02, 16.85, 16.69, 16.52, 16.34, 16.17, 15.99, 15.81, 15.63, + 15.44, 15.25, 15.06, 14.86, 14.65, 14.44, 14.22, 13.99, 13.75, 13.5, 13.24, 12.96, 12.66, 12.34, + 11.99, 11.59, 11.14, 10.6, 9.91, 8.9, + ], + [ + 68.86, 58.98, 48.27, 40.29, 37.66, 36.05, 34.87, 33.92, 33.13, 32.45, 31.85, 31.31, 30.81, + 30.36, 29.94, 29.54, 29.17, 28.82, 28.49, 28.17, 27.87, 27.58, 27.3, 27.03, 26.77, 26.52, 26.28, + 26.04, 25.81, 25.58, 25.36, 25.15, 24.94, 24.73, 24.53, 24.33, 24.14, 23.95, 23.76, 23.57, + 23.39, 23.21, 23.03, 22.85, 22.68, 22.51, 22.34, 22.17, 22.0, 21.83, 21.67, 21.5, 21.34, 21.17, + 21.01, 20.85, 20.69, 20.53, 20.37, 20.21, 20.05, 19.89, 19.73, 19.57, 19.41, 19.25, 19.09, + 18.92, 18.76, 18.6, 18.43, 18.27, 18.1, 17.93, 17.76, 17.59, 17.42, 17.24, 17.06, 16.88, 16.69, + 16.51, 16.31, 16.12, 15.92, 15.71, 15.5, 15.28, 15.05, 14.82, 14.57, 14.31, 14.04, 13.75, 13.45, + 13.11, 12.75, 12.34, 11.87, 11.31, 10.6, 9.54, + ], + [ + 70.55, 60.57, 49.73, 41.64, 38.97, 37.33, 36.13, 35.17, 34.37, 33.68, 33.06, 32.51, 32.01, + 31.54, 31.11, 30.71, 30.34, 29.98, 29.64, 29.32, 29.01, 28.71, 28.43, 28.15, 27.89, 27.63, + 27.38, 27.14, 26.91, 26.68, 26.45, 26.23, 26.02, 25.81, 25.6, 25.4, 25.2, 25.01, 24.81, 24.62, + 24.44, 24.25, 24.07, 23.89, 23.71, 23.53, 23.36, 23.19, 23.01, 22.84, 22.67, 22.5, 22.34, 22.17, + 22.0, 21.84, 21.67, 21.51, 21.35, 21.18, 21.02, 20.85, 20.69, 20.53, 20.36, 20.2, 20.03, 19.87, + 19.7, 19.53, 19.36, 19.19, 19.02, 18.85, 18.67, 18.5, 18.32, 18.14, 17.95, 17.77, 17.58, 17.38, + 17.19, 16.98, 16.78, 16.57, 16.35, 16.12, 15.89, 15.65, 15.39, 15.13, 14.85, 14.55, 14.23, + 13.89, 13.51, 13.09, 12.61, 12.03, 11.29, 10.2, + ], + [ + 72.23, 62.14, 51.18, 42.98, 40.27, 38.61, 37.39, 36.42, 35.6, 34.89, 34.27, 33.71, 33.2, 32.73, + 32.29, 31.88, 31.5, 31.13, 30.79, 30.46, 30.14, 29.84, 29.55, 29.27, 29.0, 28.74, 28.49, 28.24, + 28.0, 27.77, 27.54, 27.31, 27.1, 26.88, 26.67, 26.47, 26.26, 26.06, 25.87, 25.67, 25.48, 25.29, + 25.11, 24.92, 24.74, 24.56, 24.38, 24.2, 24.03, 23.85, 23.68, 23.51, 23.34, 23.17, 23.0, 22.83, + 22.66, 22.49, 22.32, 22.16, 21.99, 21.82, 21.65, 21.48, 21.32, 21.15, 20.98, 20.81, 20.64, + 20.47, 20.29, 20.12, 19.94, 19.77, 19.59, 19.41, 19.22, 19.04, 18.85, 18.66, 18.46, 18.26, + 18.06, 17.85, 17.64, 17.42, 17.2, 16.97, 16.73, 16.48, 16.22, 15.95, 15.66, 15.35, 15.03, 14.67, + 14.28, 13.85, 13.35, 12.75, 11.99, 10.86, + ], + [ + 73.89, 63.71, 52.62, 44.31, 41.57, 39.88, 38.64, 37.65, 36.82, 36.11, 35.47, 34.9, 34.38, 33.9, + 33.46, 33.04, 32.65, 32.28, 31.93, 31.6, 31.28, 30.97, 30.68, 30.39, 30.12, 29.85, 29.59, 29.34, + 29.09, 28.86, 28.62, 28.39, 28.17, 27.95, 27.74, 27.53, 27.32, 27.12, 26.92, 26.72, 26.53, + 26.33, 26.14, 25.96, 25.77, 25.59, 25.4, 25.22, 25.04, 24.86, 24.69, 24.51, 24.34, 24.16, 23.99, + 23.82, 23.64, 23.47, 23.3, 23.13, 22.96, 22.79, 22.62, 22.44, 22.27, 22.1, 21.93, 21.75, 21.58, + 21.4, 21.22, 21.05, 20.87, 20.69, 20.5, 20.32, 20.13, 19.94, 19.75, 19.55, 19.35, 19.15, 18.94, + 18.73, 18.51, 18.29, 18.06, 17.82, 17.57, 17.32, 17.05, 16.77, 16.47, 16.16, 15.82, 15.46, + 15.06, 14.61, 14.1, 13.48, 12.7, 11.52, + ], + [ + 75.55, 65.26, 54.05, 45.64, 42.86, 41.15, 39.89, 38.89, 38.04, 37.32, 36.67, 36.09, 35.56, + 35.08, 34.62, 34.2, 33.81, 33.43, 33.07, 32.73, 32.41, 32.09, 31.79, 31.5, 31.22, 30.95, 30.69, + 30.43, 30.19, 29.94, 29.71, 29.47, 29.25, 29.02, 28.81, 28.59, 28.38, 28.17, 27.97, 27.77, + 27.57, 27.37, 27.18, 26.99, 26.8, 26.61, 26.42, 26.24, 26.06, 25.87, 25.69, 25.51, 25.34, 25.16, + 24.98, 24.81, 24.63, 24.45, 24.28, 24.1, 23.93, 23.75, 23.58, 23.4, 23.23, 23.05, 22.88, 22.7, + 22.52, 22.34, 22.16, 21.98, 21.79, 21.61, 21.42, 21.23, 21.04, 20.84, 20.65, 20.45, 20.24, + 20.03, 19.82, 19.6, 19.38, 19.15, 18.91, 18.67, 18.42, 18.16, 17.88, 17.6, 17.29, 16.97, 16.62, + 16.25, 15.84, 15.38, 14.85, 14.22, 13.41, 12.2, + ], + [ + 77.19, 66.81, 55.48, 46.96, 44.14, 42.41, 41.13, 40.11, 39.26, 38.52, 37.87, 37.28, 36.74, + 36.25, 35.79, 35.36, 34.96, 34.57, 34.21, 33.87, 33.53, 33.22, 32.91, 32.62, 32.33, 32.06, + 31.79, 31.53, 31.27, 31.03, 30.79, 30.55, 30.32, 30.09, 29.87, 29.65, 29.44, 29.23, 29.02, + 28.81, 28.61, 28.41, 28.21, 28.02, 27.83, 27.63, 27.44, 27.26, 27.07, 26.89, 26.7, 26.52, 26.34, + 26.16, 25.97, 25.79, 25.62, 25.44, 25.26, 25.08, 24.9, 24.72, 24.54, 24.37, 24.19, 24.01, 23.83, + 23.64, 23.46, 23.28, 23.09, 22.91, 22.72, 22.53, 22.34, 22.14, 21.95, 21.75, 21.55, 21.34, + 21.13, 20.92, 20.7, 20.48, 20.25, 20.02, 19.78, 19.53, 19.27, 19.0, 18.72, 18.42, 18.11, 17.78, + 17.43, 17.05, 16.62, 16.15, 15.61, 14.96, 14.13, 12.88, + ], + [ + 78.82, 68.34, 56.89, 48.28, 45.42, 43.66, 42.37, 41.34, 40.47, 39.72, 39.06, 38.46, 37.92, + 37.41, 36.95, 36.51, 36.1, 35.71, 35.35, 35.0, 34.66, 34.34, 34.03, 33.73, 33.44, 33.16, 32.89, + 32.62, 32.36, 32.11, 31.87, 31.63, 31.39, 31.16, 30.93, 30.71, 30.49, 30.28, 30.07, 29.86, + 29.65, 29.45, 29.25, 29.05, 28.85, 28.66, 28.47, 28.27, 28.08, 27.9, 27.71, 27.52, 27.34, 27.15, + 26.97, 26.78, 26.6, 26.42, 26.24, 26.06, 25.87, 25.69, 25.51, 25.33, 25.14, 24.96, 24.78, 24.59, + 24.4, 24.22, 24.03, 23.84, 23.65, 23.45, 23.26, 23.06, 22.86, 22.66, 22.45, 22.24, 22.03, 21.81, + 21.59, 21.36, 21.13, 20.89, 20.64, 20.39, 20.12, 19.85, 19.56, 19.26, 18.94, 18.6, 18.24, 17.84, + 17.41, 16.93, 16.37, 15.7, 14.85, 13.56, + ], + [ + 80.44, 69.87, 58.3, 49.59, 46.69, 44.91, 43.6, 42.56, 41.68, 40.92, 40.25, 39.64, 39.09, 38.58, + 38.11, 37.66, 37.25, 36.85, 36.48, 36.12, 35.78, 35.45, 35.14, 34.84, 34.54, 34.26, 33.98, + 33.71, 33.45, 33.19, 32.94, 32.7, 32.46, 32.23, 32.0, 31.77, 31.55, 31.33, 31.12, 30.9, 30.69, + 30.49, 30.28, 30.08, 29.88, 29.68, 29.49, 29.29, 29.1, 28.91, 28.71, 28.52, 28.34, 28.15, 27.96, + 27.77, 27.59, 27.4, 27.22, 27.03, 26.85, 26.66, 26.48, 26.29, 26.1, 25.92, 25.73, 25.54, 25.35, + 25.16, 24.97, 24.77, 24.58, 24.38, 24.18, 23.98, 23.77, 23.57, 23.36, 23.14, 22.92, 22.7, 22.48, + 22.24, 22.0, 21.76, 21.51, 21.25, 20.98, 20.7, 20.4, 20.09, 19.77, 19.42, 19.05, 18.65, 18.2, + 17.71, 17.14, 16.45, 15.57, 14.26, + ], + [ + 82.04, 71.38, 59.7, 50.89, 47.96, 46.16, 44.83, 43.77, 42.88, 42.11, 41.43, 40.82, 40.26, 39.74, + 39.26, 38.81, 38.39, 37.99, 37.61, 37.25, 36.9, 36.57, 36.25, 35.94, 35.64, 35.35, 35.07, 34.8, + 34.53, 34.27, 34.02, 33.77, 33.53, 33.29, 33.06, 32.83, 32.6, 32.38, 32.16, 31.95, 31.73, 31.52, + 31.32, 31.11, 30.91, 30.71, 30.51, 30.31, 30.11, 29.92, 29.72, 29.53, 29.34, 29.14, 28.95, + 28.76, 28.57, 28.39, 28.2, 28.01, 27.82, 27.63, 27.44, 27.25, 27.06, 26.87, 26.68, 26.49, 26.29, + 26.1, 25.9, 25.71, 25.51, 25.31, 25.1, 24.9, 24.69, 24.48, 24.26, 24.04, 23.82, 23.6, 23.36, + 23.13, 22.88, 22.63, 22.38, 22.11, 21.83, 21.55, 21.25, 20.93, 20.6, 20.25, 19.87, 19.45, 19.0, + 18.49, 17.91, 17.21, 16.31, 14.95, + ], + [ + 83.64, 72.89, 61.1, 52.19, 49.23, 47.4, 46.06, 44.99, 44.08, 43.3, 42.61, 41.99, 41.42, 40.9, + 40.41, 39.96, 39.53, 39.12, 38.74, 38.37, 38.02, 37.68, 37.36, 37.05, 36.74, 36.45, 36.16, + 35.89, 35.62, 35.35, 35.1, 34.84, 34.6, 34.36, 34.12, 33.89, 33.66, 33.43, 33.21, 32.99, 32.77, + 32.56, 32.35, 32.14, 31.93, 31.73, 31.52, 31.32, 31.12, 30.92, 30.73, 30.53, 30.34, 30.14, + 29.95, 29.75, 29.56, 29.37, 29.18, 28.99, 28.79, 28.6, 28.41, 28.22, 28.02, 27.83, 27.63, 27.44, + 27.24, 27.04, 26.84, 26.64, 26.44, 26.23, 26.03, 25.82, 25.61, 25.39, 25.17, 24.95, 24.72, + 24.49, 24.26, 24.01, 23.77, 23.51, 23.25, 22.98, 22.69, 22.4, 22.1, 21.77, 21.43, 21.07, 20.68, + 20.26, 19.8, 19.28, 18.68, 17.97, 17.04, 15.66, + ], + [ + 85.23, 74.39, 62.49, 53.49, 50.49, 48.64, 47.28, 46.19, 45.28, 44.49, 43.79, 43.16, 42.58, + 42.05, 41.56, 41.1, 40.67, 40.26, 39.87, 39.49, 39.14, 38.8, 38.47, 38.15, 37.84, 37.54, 37.25, + 36.97, 36.7, 36.43, 36.17, 35.92, 35.66, 35.42, 35.18, 34.94, 34.71, 34.48, 34.25, 34.03, 33.81, + 33.6, 33.38, 33.17, 32.96, 32.75, 32.54, 32.34, 32.14, 31.93, 31.73, 31.53, 31.34, 31.14, 30.94, + 30.74, 30.55, 30.35, 30.16, 29.96, 29.77, 29.57, 29.38, 29.18, 28.98, 28.79, 28.59, 28.39, + 28.19, 27.99, 27.78, 27.58, 27.37, 27.16, 26.95, 26.74, 26.52, 26.3, 26.08, 25.85, 25.62, 25.39, + 25.15, 24.9, 24.65, 24.39, 24.12, 23.84, 23.56, 23.26, 22.95, 22.62, 22.27, 21.9, 21.51, 21.08, + 20.6, 20.07, 19.46, 18.73, 17.78, 16.36, + ], + [ + 86.81, 75.88, 63.87, 54.78, 51.74, 49.88, 48.5, 47.4, 46.48, 45.68, 44.97, 44.33, 43.75, 43.21, + 42.71, 42.24, 41.8, 41.39, 40.99, 40.61, 40.25, 39.91, 39.57, 39.25, 38.94, 38.64, 38.34, 38.06, + 37.78, 37.51, 37.24, 36.98, 36.73, 36.48, 36.24, 36.0, 35.76, 35.53, 35.3, 35.07, 34.85, 34.63, + 34.41, 34.2, 33.98, 33.77, 33.56, 33.36, 33.15, 32.94, 32.74, 32.54, 32.34, 32.13, 31.93, 31.74, + 31.54, 31.34, 31.14, 30.94, 30.74, 30.54, 30.34, 30.15, 29.95, 29.74, 29.54, 29.34, 29.14, + 28.93, 28.73, 28.52, 28.31, 28.09, 27.88, 27.66, 27.44, 27.22, 26.99, 26.76, 26.53, 26.29, + 26.04, 25.79, 25.53, 25.27, 25.0, 24.71, 24.42, 24.12, 23.8, 23.46, 23.11, 22.73, 22.33, 21.89, + 21.41, 20.87, 20.24, 19.49, 18.53, 17.07, + ], + [ + 88.38, 77.37, 65.25, 56.06, 53.0, 51.11, 49.72, 48.6, 47.67, 46.86, 46.14, 45.49, 44.9, 44.36, + 43.85, 43.38, 42.94, 42.51, 42.11, 41.73, 41.37, 41.01, 40.68, 40.35, 40.03, 39.73, 39.43, + 39.14, 38.86, 38.58, 38.32, 38.05, 37.8, 37.54, 37.3, 37.05, 36.81, 36.58, 36.34, 36.11, 35.89, + 35.66, 35.44, 35.23, 35.01, 34.79, 34.58, 34.37, 34.16, 33.95, 33.75, 33.54, 33.34, 33.13, + 32.93, 32.73, 32.52, 32.32, 32.12, 31.92, 31.72, 31.52, 31.31, 31.11, 30.91, 30.7, 30.5, 30.29, + 30.09, 29.88, 29.67, 29.46, 29.24, 29.03, 28.81, 28.59, 28.36, 28.14, 27.91, 27.67, 27.43, + 27.19, 26.94, 26.68, 26.42, 26.15, 25.87, 25.59, 25.29, 24.98, 24.65, 24.31, 23.95, 23.57, + 23.16, 22.71, 22.22, 21.66, 21.03, 20.26, 19.28, 17.79, + ], + [ + 89.95, 78.84, 66.62, 57.34, 54.24, 52.34, 50.93, 49.8, 48.86, 48.04, 47.31, 46.66, 46.06, 45.51, + 45.0, 44.52, 44.07, 43.64, 43.23, 42.85, 42.48, 42.12, 41.78, 41.45, 41.13, 40.82, 40.52, 40.22, + 39.94, 39.66, 39.39, 39.12, 38.86, 38.6, 38.35, 38.11, 37.86, 37.62, 37.39, 37.15, 36.93, 36.7, + 36.47, 36.25, 36.03, 35.82, 35.6, 35.39, 35.17, 34.96, 34.75, 34.54, 34.34, 34.13, 33.92, 33.72, + 33.51, 33.31, 33.1, 32.9, 32.69, 32.49, 32.28, 32.08, 31.87, 31.66, 31.45, 31.25, 31.04, 30.82, + 30.61, 30.4, 30.18, 29.96, 29.74, 29.51, 29.28, 29.05, 28.82, 28.58, 28.34, 28.09, 27.84, 27.58, + 27.31, 27.04, 26.75, 26.46, 26.16, 25.84, 25.51, 25.16, 24.8, 24.41, 23.99, 23.53, 23.03, 22.47, + 21.82, 21.03, 20.03, 18.51, + ], + [ + 91.5, 80.31, 67.99, 58.62, 55.49, 53.56, 52.14, 51.0, 50.04, 49.21, 48.48, 47.82, 47.21, 46.66, + 46.14, 45.65, 45.2, 44.76, 44.35, 43.96, 43.59, 43.23, 42.88, 42.54, 42.22, 41.91, 41.6, 41.3, + 41.01, 40.73, 40.46, 40.19, 39.92, 39.66, 39.41, 39.16, 38.91, 38.67, 38.43, 38.19, 37.96, + 37.73, 37.5, 37.28, 37.06, 36.84, 36.62, 36.4, 36.19, 35.97, 35.76, 35.55, 35.34, 35.13, 34.92, + 34.71, 34.5, 34.29, 34.08, 33.88, 33.67, 33.46, 33.25, 33.04, 32.83, 32.62, 32.41, 32.2, 31.99, + 31.77, 31.55, 31.34, 31.12, 30.89, 30.67, 30.44, 30.21, 29.97, 29.73, 29.49, 29.24, 28.99, + 28.73, 28.47, 28.2, 27.92, 27.63, 27.34, 27.03, 26.71, 26.37, 26.02, 25.64, 25.25, 24.82, 24.35, + 23.84, 23.27, 22.61, 21.81, 20.78, 19.23, + ], + [ + 93.05, 81.78, 69.35, 59.89, 56.73, 54.78, 53.34, 52.19, 51.23, 50.39, 49.64, 48.97, 48.36, 47.8, + 47.28, 46.79, 46.32, 45.89, 45.47, 45.07, 44.69, 44.33, 43.98, 43.64, 43.31, 42.99, 42.68, + 42.38, 42.09, 41.8, 41.53, 41.25, 40.98, 40.72, 40.46, 40.21, 39.96, 39.71, 39.47, 39.23, 39.0, + 38.77, 38.53, 38.31, 38.08, 37.86, 37.64, 37.42, 37.2, 36.98, 36.76, 36.55, 36.34, 36.12, 35.91, + 35.7, 35.49, 35.28, 35.07, 34.85, 34.64, 34.43, 34.22, 34.01, 33.8, 33.58, 33.37, 33.15, 32.94, + 32.72, 32.5, 32.28, 32.05, 31.83, 31.6, 31.37, 31.13, 30.89, 30.65, 30.4, 30.15, 29.9, 29.64, + 29.37, 29.09, 28.81, 28.52, 28.21, 27.9, 27.57, 27.23, 26.87, 26.49, 26.09, 25.65, 25.18, 24.66, + 24.07, 23.4, 22.59, 21.54, 19.96, + ], + [ + 94.59, 83.24, 70.7, 61.16, 57.97, 56.0, 54.55, 53.38, 52.41, 51.56, 50.81, 50.13, 49.51, 48.94, + 48.41, 47.92, 47.45, 47.01, 46.59, 46.19, 45.8, 45.43, 45.08, 44.73, 44.4, 44.08, 43.77, 43.46, + 43.17, 42.88, 42.59, 42.32, 42.05, 41.78, 41.52, 41.26, 41.01, 40.76, 40.51, 40.27, 40.03, 39.8, + 39.56, 39.33, 39.1, 38.88, 38.65, 38.43, 38.21, 37.99, 37.77, 37.55, 37.34, 37.12, 36.9, 36.69, + 36.48, 36.26, 36.05, 35.83, 35.62, 35.41, 35.19, 34.98, 34.76, 34.54, 34.33, 34.11, 33.89, + 33.67, 33.44, 33.22, 32.99, 32.76, 32.53, 32.29, 32.06, 31.81, 31.57, 31.32, 31.06, 30.8, 30.54, + 30.26, 29.99, 29.7, 29.4, 29.09, 28.77, 28.44, 28.09, 27.73, 27.34, 26.93, 26.49, 26.01, 25.48, + 24.88, 24.2, 23.37, 22.3, 20.69, + ], + [ + 96.13, 84.69, 72.05, 62.43, 59.2, 57.22, 55.75, 54.57, 53.58, 52.73, 51.97, 51.28, 50.66, 50.08, + 49.55, 49.05, 48.57, 48.13, 47.7, 47.29, 46.91, 46.53, 46.17, 45.83, 45.49, 45.16, 44.85, 44.54, + 44.24, 43.95, 43.66, 43.38, 43.11, 42.84, 42.57, 42.31, 42.06, 41.8, 41.56, 41.31, 41.07, 40.83, + 40.59, 40.36, 40.13, 39.9, 39.67, 39.44, 39.22, 39.0, 38.78, 38.56, 38.34, 38.12, 37.9, 37.68, + 37.46, 37.25, 37.03, 36.81, 36.6, 36.38, 36.16, 35.94, 35.73, 35.51, 35.29, 35.06, 34.84, 34.62, + 34.39, 34.16, 33.93, 33.7, 33.46, 33.22, 32.98, 32.74, 32.49, 32.23, 31.97, 31.71, 31.44, 31.16, + 30.88, 30.59, 30.29, 29.97, 29.65, 29.31, 28.96, 28.59, 28.2, 27.78, 27.33, 26.84, 26.3, 25.7, + 25.0, 24.16, 23.07, 21.43, + ], + [ + 97.65, 86.14, 73.4, 63.69, 60.44, 58.43, 56.95, 55.76, 54.76, 53.9, 53.13, 52.44, 51.81, 51.22, + 50.68, 50.17, 49.7, 49.24, 48.81, 48.4, 48.01, 47.63, 47.27, 46.92, 46.58, 46.25, 45.93, 45.62, + 45.31, 45.02, 44.73, 44.44, 44.16, 43.89, 43.62, 43.36, 43.1, 42.85, 42.6, 42.35, 42.1, 41.86, + 41.62, 41.39, 41.15, 40.92, 40.69, 40.46, 40.23, 40.01, 39.78, 39.56, 39.34, 39.11, 38.89, + 38.67, 38.45, 38.23, 38.01, 37.79, 37.57, 37.35, 37.13, 36.91, 36.69, 36.47, 36.25, 36.02, + 35.79, 35.57, 35.34, 35.11, 34.87, 34.64, 34.4, 34.15, 33.91, 33.66, 33.41, 33.15, 32.89, 32.62, + 32.34, 32.06, 31.78, 31.48, 31.17, 30.86, 30.53, 30.18, 29.83, 29.45, 29.05, 28.63, 28.17, + 27.67, 27.12, 26.51, 25.8, 24.94, 23.84, 22.16, + ], + [ + 99.17, 87.58, 74.74, 64.95, 61.67, 59.64, 58.14, 56.94, 55.93, 55.06, 54.29, 53.59, 52.95, + 52.36, 51.81, 51.3, 50.82, 50.36, 49.93, 49.51, 49.11, 48.73, 48.36, 48.01, 47.66, 47.33, 47.01, + 46.69, 46.38, 46.08, 45.79, 45.5, 45.22, 44.95, 44.68, 44.41, 44.15, 43.89, 43.64, 43.39, 43.14, + 42.89, 42.65, 42.41, 42.17, 41.94, 41.7, 41.47, 41.24, 41.01, 40.79, 40.56, 40.34, 40.11, 39.89, + 39.66, 39.44, 39.22, 39.0, 38.77, 38.55, 38.33, 38.11, 37.88, 37.66, 37.43, 37.21, 36.98, 36.75, + 36.52, 36.28, 36.05, 35.81, 35.57, 35.33, 35.09, 34.84, 34.58, 34.33, 34.07, 33.8, 33.53, 33.25, + 32.97, 32.67, 32.37, 32.06, 31.74, 31.41, 31.06, 30.69, 30.31, 29.91, 29.48, 29.01, 28.51, + 27.95, 27.33, 26.6, 25.73, 24.61, 22.91, + ], + [ + 100.69, 89.01, 76.08, 66.21, 62.89, 60.85, 59.33, 58.12, 57.11, 56.22, 55.44, 54.73, 54.09, + 53.5, 52.94, 52.42, 51.94, 51.47, 51.04, 50.62, 50.21, 49.83, 49.46, 49.1, 48.75, 48.41, 48.08, + 47.77, 47.46, 47.15, 46.86, 46.57, 46.28, 46.0, 45.73, 45.46, 45.19, 44.93, 44.68, 44.42, 44.17, + 43.92, 43.68, 43.44, 43.2, 42.96, 42.72, 42.49, 42.25, 42.02, 41.79, 41.56, 41.34, 41.11, 40.88, + 40.66, 40.43, 40.2, 39.98, 39.75, 39.53, 39.3, 39.08, 38.85, 38.62, 38.39, 38.17, 37.93, 37.7, + 37.47, 37.23, 37.0, 36.75, 36.51, 36.27, 36.02, 35.77, 35.51, 35.25, 34.98, 34.71, 34.44, 34.16, + 33.87, 33.57, 33.27, 32.95, 32.63, 32.29, 31.93, 31.56, 31.18, 30.77, 30.33, 29.86, 29.34, + 28.78, 28.14, 27.41, 26.53, 25.38, 23.65, + ], + [ + 102.2, 90.44, 77.42, 67.46, 64.12, 62.05, 60.53, 59.3, 58.28, 57.38, 56.59, 55.88, 55.23, 54.63, + 54.07, 53.55, 53.05, 52.59, 52.14, 51.72, 51.31, 50.92, 50.55, 50.19, 49.83, 49.49, 49.16, + 48.84, 48.53, 48.22, 47.92, 47.63, 47.34, 47.06, 46.78, 46.51, 46.24, 45.98, 45.72, 45.46, 45.2, + 44.95, 44.71, 44.46, 44.22, 43.98, 43.74, 43.5, 43.26, 43.03, 42.8, 42.57, 42.34, 42.11, 41.88, + 41.65, 41.42, 41.19, 40.96, 40.74, 40.51, 40.28, 40.05, 39.82, 39.59, 39.36, 39.13, 38.89, + 38.66, 38.42, 38.18, 37.94, 37.7, 37.45, 37.2, 36.95, 36.7, 36.44, 36.17, 35.9, 35.63, 35.35, + 35.07, 34.77, 34.47, 34.16, 33.84, 33.51, 33.17, 32.81, 32.44, 32.04, 31.63, 31.18, 30.7, 30.18, + 29.61, 28.96, 28.22, 27.32, 26.16, 24.4, + ], + [ + 103.7, 91.87, 78.75, 68.71, 65.34, 63.25, 61.71, 60.48, 59.44, 58.54, 57.75, 57.03, 56.37, + 55.76, 55.2, 54.67, 54.17, 53.7, 53.25, 52.82, 52.41, 52.02, 51.64, 51.27, 50.92, 50.57, 50.24, + 49.91, 49.6, 49.29, 48.98, 48.69, 48.4, 48.11, 47.83, 47.56, 47.28, 47.02, 46.75, 46.49, 46.24, + 45.98, 45.73, 45.49, 45.24, 45.0, 44.75, 44.51, 44.28, 44.04, 43.8, 43.57, 43.34, 43.1, 42.87, + 42.64, 42.41, 42.18, 41.95, 41.72, 41.49, 41.25, 41.02, 40.79, 40.56, 40.32, 40.09, 39.85, + 39.61, 39.37, 39.13, 38.89, 38.64, 38.39, 38.14, 37.88, 37.63, 37.36, 37.1, 36.82, 36.55, 36.26, + 35.97, 35.68, 35.37, 35.06, 34.74, 34.4, 34.05, 33.69, 33.31, 32.91, 32.49, 32.04, 31.55, 31.02, + 30.44, 29.79, 29.03, 28.12, 26.94, 25.15, + ], + [ + 105.2, 93.29, 80.08, 69.96, 66.56, 64.45, 62.9, 61.66, 60.61, 59.7, 58.9, 58.17, 57.51, 56.89, + 56.32, 55.79, 55.29, 54.81, 54.36, 53.92, 53.51, 53.11, 52.73, 52.36, 52.0, 51.65, 51.31, 50.98, + 50.66, 50.35, 50.05, 49.75, 49.45, 49.16, 48.88, 48.6, 48.33, 48.06, 47.79, 47.53, 47.27, 47.01, + 46.76, 46.51, 46.26, 46.01, 45.77, 45.53, 45.29, 45.05, 44.81, 44.57, 44.34, 44.1, 43.87, 43.63, + 43.4, 43.16, 42.93, 42.7, 42.46, 42.23, 42.0, 41.76, 41.52, 41.29, 41.05, 40.81, 40.57, 40.33, + 40.08, 39.83, 39.58, 39.33, 39.08, 38.82, 38.56, 38.29, 38.02, 37.75, 37.46, 37.18, 36.88, + 36.58, 36.28, 35.96, 35.63, 35.29, 34.94, 34.57, 34.18, 33.78, 33.35, 32.89, 32.4, 31.87, 31.28, + 30.61, 29.84, 28.92, 27.72, 25.9, + ], + [ + 106.69, 94.71, 81.4, 71.2, 67.77, 65.65, 64.09, 62.83, 61.77, 60.86, 60.04, 59.31, 58.64, 58.02, + 57.45, 56.91, 56.4, 55.92, 55.46, 55.03, 54.61, 54.21, 53.82, 53.44, 53.08, 52.73, 52.39, 52.06, + 51.73, 51.42, 51.11, 50.8, 50.51, 50.22, 49.93, 49.65, 49.37, 49.1, 48.83, 48.56, 48.3, 48.04, + 47.79, 47.53, 47.28, 47.03, 46.79, 46.54, 46.3, 46.05, 45.81, 45.57, 45.34, 45.1, 44.86, 44.62, + 44.39, 44.15, 43.91, 43.68, 43.44, 43.21, 42.97, 42.73, 42.49, 42.25, 42.01, 41.77, 41.52, + 41.28, 41.03, 40.78, 40.53, 40.27, 40.02, 39.75, 39.49, 39.22, 38.95, 38.67, 38.38, 38.09, 37.8, + 37.49, 37.18, 36.86, 36.52, 36.18, 35.82, 35.45, 35.06, 34.65, 34.22, 33.75, 33.25, 32.71, + 32.11, 31.44, 30.66, 29.72, 28.5, 26.66, + ], + [ + 108.18, 96.12, 82.72, 72.44, 68.99, 66.85, 65.27, 64.0, 62.94, 62.01, 61.19, 60.45, 59.77, + 59.15, 58.57, 58.03, 57.51, 57.03, 56.57, 56.13, 55.7, 55.3, 54.91, 54.53, 54.16, 53.81, 53.46, + 53.13, 52.8, 52.48, 52.17, 51.86, 51.56, 51.27, 50.98, 50.69, 50.41, 50.14, 49.87, 49.6, 49.33, + 49.07, 48.81, 48.56, 48.3, 48.05, 47.8, 47.55, 47.31, 47.06, 46.82, 46.58, 46.34, 46.09, 45.85, + 45.62, 45.38, 45.14, 44.9, 44.66, 44.42, 44.18, 43.94, 43.7, 43.46, 43.22, 42.97, 42.73, 42.48, + 42.23, 41.98, 41.73, 41.47, 41.22, 40.95, 40.69, 40.42, 40.15, 39.87, 39.59, 39.3, 39.01, 38.71, + 38.4, 38.08, 37.76, 37.42, 37.07, 36.71, 36.33, 35.94, 35.52, 35.08, 34.61, 34.11, 33.56, 32.95, + 32.27, 31.48, 30.53, 29.29, 27.42, + ], + [ + 109.66, 97.53, 84.04, 73.68, 70.2, 68.04, 66.45, 65.17, 64.1, 63.16, 62.34, 61.59, 60.91, 60.28, + 59.69, 59.14, 58.63, 58.14, 57.67, 57.22, 56.8, 56.39, 55.99, 55.61, 55.24, 54.88, 54.54, 54.2, + 53.87, 53.54, 53.23, 52.92, 52.62, 52.32, 52.03, 51.74, 51.46, 51.18, 50.9, 50.63, 50.37, 50.1, + 49.84, 49.58, 49.32, 49.07, 48.82, 48.57, 48.32, 48.07, 47.82, 47.58, 47.34, 47.09, 46.85, + 46.61, 46.37, 46.12, 45.88, 45.64, 45.4, 45.16, 44.92, 44.67, 44.43, 44.18, 43.94, 43.69, 43.44, + 43.19, 42.93, 42.68, 42.42, 42.16, 41.89, 41.63, 41.36, 41.08, 40.8, 40.51, 40.22, 39.92, 39.62, + 39.31, 38.99, 38.66, 38.32, 37.96, 37.6, 37.22, 36.82, 36.4, 35.95, 35.47, 34.96, 34.4, 33.79, + 33.1, 32.3, 31.33, 30.08, 28.18, + ], + [ + 111.14, 98.93, 85.35, 74.92, 71.41, 69.23, 67.63, 66.34, 65.25, 64.31, 63.48, 62.73, 62.04, + 61.4, 60.81, 60.26, 59.74, 59.24, 58.77, 58.32, 57.89, 57.48, 57.08, 56.69, 56.32, 55.96, 55.61, + 55.27, 54.93, 54.61, 54.29, 53.98, 53.67, 53.37, 53.07, 52.79, 52.5, 52.22, 51.94, 51.67, 51.4, + 51.13, 50.87, 50.6, 50.34, 50.09, 49.83, 49.58, 49.33, 49.08, 48.83, 48.58, 48.33, 48.09, 47.84, + 47.6, 47.36, 47.11, 46.87, 46.62, 46.38, 46.13, 45.89, 45.64, 45.4, 45.15, 44.9, 44.65, 44.4, + 44.14, 43.89, 43.63, 43.37, 43.1, 42.83, 42.56, 42.29, 42.01, 41.73, 41.44, 41.14, 40.84, 40.53, + 40.22, 39.89, 39.56, 39.22, 38.86, 38.49, 38.1, 37.7, 37.27, 36.82, 36.34, 35.82, 35.25, 34.63, + 33.93, 33.12, 32.14, 30.87, 28.94, + ], + [ + 112.61, 100.33, 86.66, 76.15, 72.61, 70.42, 68.8, 67.5, 66.41, 65.46, 64.62, 63.86, 63.17, + 62.53, 61.93, 61.37, 60.84, 60.35, 59.87, 59.42, 58.98, 58.57, 58.16, 57.78, 57.4, 57.03, 56.68, + 56.33, 56.0, 55.67, 55.35, 55.03, 54.72, 54.42, 54.12, 53.83, 53.54, 53.26, 52.98, 52.7, 52.43, + 52.16, 51.89, 51.63, 51.37, 51.11, 50.85, 50.59, 50.34, 50.09, 49.83, 49.58, 49.33, 49.09, + 48.84, 48.59, 48.35, 48.1, 47.85, 47.61, 47.36, 47.11, 46.86, 46.62, 46.37, 46.12, 45.86, 45.61, + 45.35, 45.1, 44.84, 44.58, 44.31, 44.05, 43.78, 43.5, 43.22, 42.94, 42.66, 42.36, 42.07, 41.76, + 41.45, 41.13, 40.8, 40.46, 40.12, 39.75, 39.38, 38.99, 38.58, 38.15, 37.69, 37.2, 36.68, 36.11, + 35.47, 34.76, 33.94, 32.95, 31.66, 29.71, + ], + [ + 114.08, 101.73, 87.97, 77.39, 73.82, 71.61, 69.98, 68.67, 67.57, 66.61, 65.76, 65.0, 64.3, + 63.65, 63.05, 62.48, 61.95, 61.45, 60.97, 60.51, 60.08, 59.65, 59.25, 58.86, 58.48, 58.11, + 57.75, 57.4, 57.06, 56.73, 56.4, 56.09, 55.78, 55.47, 55.17, 54.87, 54.58, 54.3, 54.01, 53.73, + 53.46, 53.19, 52.92, 52.65, 52.39, 52.12, 51.86, 51.6, 51.35, 51.09, 50.84, 50.59, 50.33, 50.08, + 49.83, 49.58, 49.34, 49.09, 48.84, 48.59, 48.34, 48.09, 47.84, 47.59, 47.34, 47.08, 46.83, + 46.57, 46.31, 46.05, 45.79, 45.53, 45.26, 44.99, 44.72, 44.44, 44.16, 43.87, 43.58, 43.29, + 42.99, 42.68, 42.36, 42.04, 41.71, 41.37, 41.02, 40.65, 40.27, 39.87, 39.46, 39.02, 38.56, + 38.07, 37.54, 36.96, 36.32, 35.6, 34.77, 33.76, 32.46, 30.48, + ], + [ + 115.54, 103.12, 89.27, 78.62, 75.02, 72.8, 71.15, 69.83, 68.72, 67.76, 66.9, 66.13, 65.42, + 64.77, 64.16, 63.6, 63.06, 62.55, 62.07, 61.61, 61.17, 60.74, 60.33, 59.94, 59.55, 59.18, 58.82, + 58.47, 58.13, 57.79, 57.46, 57.14, 56.83, 56.52, 56.22, 55.92, 55.62, 55.33, 55.05, 54.77, + 54.49, 54.21, 53.94, 53.67, 53.41, 53.14, 52.88, 52.62, 52.36, 52.1, 51.84, 51.59, 51.33, 51.08, + 50.83, 50.58, 50.33, 50.07, 49.82, 49.57, 49.32, 49.07, 48.81, 48.56, 48.3, 48.05, 47.79, 47.53, + 47.27, 47.01, 46.75, 46.48, 46.21, 45.94, 45.66, 45.38, 45.1, 44.81, 44.51, 44.22, 43.91, 43.6, + 43.28, 42.95, 42.62, 42.27, 41.92, 41.55, 41.16, 40.76, 40.34, 39.9, 39.43, 38.93, 38.4, 37.81, + 37.16, 36.44, 35.59, 34.58, 33.26, 31.25, + ], + [ + 117.0, 104.5, 90.57, 79.84, 76.22, 73.98, 72.32, 70.99, 69.87, 68.9, 68.04, 67.26, 66.55, 65.89, + 65.28, 64.71, 64.17, 63.65, 63.17, 62.7, 62.26, 61.83, 61.41, 61.02, 60.63, 60.25, 59.89, 59.53, + 59.19, 58.85, 58.52, 58.2, 57.88, 57.57, 57.26, 56.96, 56.66, 56.37, 56.08, 55.8, 55.52, 55.24, + 54.97, 54.69, 54.43, 54.16, 53.89, 53.63, 53.37, 53.11, 52.85, 52.59, 52.33, 52.08, 51.82, + 51.57, 51.32, 51.06, 50.81, 50.55, 50.3, 50.04, 49.79, 49.53, 49.27, 49.02, 48.76, 48.5, 48.23, + 47.97, 47.7, 47.43, 47.16, 46.88, 46.6, 46.32, 46.03, 45.74, 45.44, 45.14, 44.84, 44.52, 44.2, + 43.87, 43.53, 43.18, 42.82, 42.45, 42.06, 41.65, 41.23, 40.78, 40.31, 39.8, 39.26, 38.67, 38.01, + 37.28, 36.42, 35.39, 34.06, 32.02, + ], + [ + 118.45, 105.89, 91.87, 81.07, 77.42, 75.16, 73.49, 72.15, 71.02, 70.04, 69.18, 68.39, 67.67, + 67.01, 66.39, 65.82, 65.27, 64.76, 64.26, 63.79, 63.35, 62.91, 62.5, 62.09, 61.7, 61.33, 60.96, + 60.6, 60.25, 59.91, 59.58, 59.25, 58.93, 58.62, 58.31, 58.0, 57.7, 57.41, 57.12, 56.83, 56.55, + 56.27, 55.99, 55.72, 55.45, 55.18, 54.91, 54.64, 54.38, 54.12, 53.85, 53.59, 53.33, 53.08, + 52.82, 52.56, 52.31, 52.05, 51.79, 51.54, 51.28, 51.02, 50.76, 50.5, 50.24, 49.98, 49.72, 49.46, + 49.19, 48.92, 48.65, 48.38, 48.11, 47.83, 47.55, 47.26, 46.97, 46.68, 46.38, 46.07, 45.76, + 45.44, 45.12, 44.78, 44.44, 44.09, 43.72, 43.34, 42.95, 42.54, 42.11, 41.66, 41.18, 40.67, + 40.12, 39.52, 38.86, 38.12, 37.25, 36.21, 34.86, 32.79, + ], + [ + 119.9, 107.27, 93.17, 82.29, 78.62, 76.34, 74.66, 73.31, 72.17, 71.19, 70.31, 69.52, 68.8, + 68.13, 67.51, 66.92, 66.38, 65.86, 65.36, 64.89, 64.43, 64.0, 63.58, 63.17, 62.78, 62.4, 62.03, + 61.66, 61.31, 60.97, 60.63, 60.3, 59.98, 59.66, 59.35, 59.05, 58.74, 58.45, 58.15, 57.86, 57.58, + 57.3, 57.02, 56.74, 56.46, 56.19, 55.92, 55.65, 55.39, 55.12, 54.86, 54.6, 54.33, 54.07, 53.81, + 53.55, 53.3, 53.04, 52.78, 52.52, 52.26, 52.0, 51.74, 51.48, 51.22, 50.95, 50.69, 50.42, 50.15, + 49.88, 49.61, 49.33, 49.06, 48.77, 48.49, 48.2, 47.91, 47.61, 47.31, 47.0, 46.69, 46.36, 46.04, + 45.7, 45.35, 45.0, 44.63, 44.24, 43.85, 43.43, 43.0, 42.54, 42.06, 41.54, 40.99, 40.38, 39.71, + 38.96, 38.08, 37.03, 35.66, 33.57, + ], + [ + 121.35, 108.65, 94.46, 83.51, 79.81, 77.52, 75.83, 74.47, 73.32, 72.33, 71.44, 70.65, 69.92, + 69.25, 68.62, 68.03, 67.48, 66.95, 66.45, 65.98, 65.52, 65.08, 64.66, 64.25, 63.85, 63.47, + 63.09, 62.73, 62.37, 62.03, 61.69, 61.36, 61.03, 60.71, 60.4, 60.09, 59.78, 59.48, 59.19, 58.9, + 58.61, 58.32, 58.04, 57.76, 57.48, 57.21, 56.94, 56.67, 56.4, 56.13, 55.86, 55.6, 55.33, 55.07, + 54.81, 54.55, 54.29, 54.02, 53.76, 53.5, 53.24, 52.98, 52.71, 52.45, 52.19, 51.92, 51.65, 51.38, + 51.11, 50.84, 50.56, 50.29, 50.01, 49.72, 49.43, 49.14, 48.85, 48.55, 48.24, 47.93, 47.61, + 47.29, 46.96, 46.61, 46.26, 45.9, 45.53, 45.15, 44.74, 44.33, 43.89, 43.43, 42.94, 42.42, 41.85, + 41.24, 40.56, 39.8, 38.92, 37.85, 36.46, 34.35, + ], + [ + 122.79, 110.02, 95.75, 84.73, 81.01, 78.7, 76.99, 75.62, 74.47, 73.47, 72.58, 71.77, 71.04, + 70.36, 69.73, 69.14, 68.58, 68.05, 67.55, 67.07, 66.61, 66.16, 65.74, 65.32, 64.93, 64.54, + 64.16, 63.79, 63.44, 63.09, 62.74, 62.41, 62.08, 61.76, 61.44, 61.13, 60.82, 60.52, 60.22, + 59.93, 59.64, 59.35, 59.06, 58.78, 58.5, 58.23, 57.95, 57.68, 57.41, 57.14, 56.87, 56.6, 56.33, + 56.07, 55.8, 55.54, 55.28, 55.01, 54.75, 54.49, 54.22, 53.96, 53.69, 53.42, 53.16, 52.89, 52.62, + 52.35, 52.07, 51.8, 51.52, 51.24, 50.96, 50.67, 50.38, 50.08, 49.79, 49.48, 49.17, 48.86, 48.54, + 48.21, 47.88, 47.53, 47.18, 46.81, 46.44, 46.05, 45.64, 45.22, 44.78, 44.31, 43.82, 43.29, + 42.72, 42.1, 41.42, 40.65, 39.75, 38.67, 37.27, 35.13, + ], + [ + 124.23, 111.39, 97.04, 85.95, 82.2, 79.88, 78.16, 76.78, 75.62, 74.61, 73.71, 72.9, 72.16, + 71.48, 70.84, 70.24, 69.68, 69.15, 68.64, 68.16, 67.69, 67.25, 66.82, 66.4, 66.0, 65.61, 65.23, + 64.86, 64.5, 64.14, 63.8, 63.46, 63.13, 62.8, 62.48, 62.17, 61.86, 61.56, 61.26, 60.96, 60.67, + 60.38, 60.09, 59.8, 59.52, 59.24, 58.96, 58.69, 58.42, 58.14, 57.87, 57.6, 57.33, 57.07, 56.8, + 56.53, 56.27, 56.0, 55.73, 55.47, 55.2, 54.93, 54.67, 54.4, 54.13, 53.86, 53.59, 53.31, 53.03, + 52.76, 52.48, 52.19, 51.91, 51.62, 51.32, 51.03, 50.73, 50.42, 50.11, 49.79, 49.47, 49.14, 48.8, + 48.45, 48.09, 47.72, 47.34, 46.95, 46.54, 46.11, 45.67, 45.2, 44.7, 44.16, 43.59, 42.96, 42.27, + 41.49, 40.59, 39.5, 38.08, 35.91, + ], + [ + 125.66, 112.76, 98.32, 87.17, 83.39, 81.05, 79.32, 77.93, 76.76, 75.74, 74.84, 74.02, 73.28, + 72.59, 71.95, 71.35, 70.78, 70.25, 69.73, 69.25, 68.78, 68.33, 67.89, 67.48, 67.07, 66.68, + 66.29, 65.92, 65.56, 65.2, 64.85, 64.51, 64.18, 63.85, 63.53, 63.21, 62.9, 62.59, 62.29, 61.99, + 61.69, 61.4, 61.11, 60.82, 60.54, 60.26, 59.98, 59.7, 59.43, 59.15, 58.88, 58.61, 58.33, 58.06, + 57.8, 57.53, 57.26, 56.99, 56.72, 56.45, 56.18, 55.91, 55.64, 55.37, 55.1, 54.83, 54.55, 54.27, + 54.0, 53.72, 53.43, 53.15, 52.86, 52.57, 52.27, 51.97, 51.67, 51.36, 51.04, 50.72, 50.39, 50.06, + 49.72, 49.37, 49.01, 48.64, 48.25, 47.85, 47.44, 47.01, 46.56, 46.08, 45.58, 45.04, 44.46, + 43.83, 43.13, 42.34, 41.43, 40.32, 38.89, 36.7, + ], + [ + 127.1, 114.12, 99.61, 88.38, 84.58, 82.23, 80.48, 79.08, 77.9, 76.88, 75.97, 75.15, 74.4, 73.7, + 73.06, 72.45, 71.88, 71.34, 70.83, 70.33, 69.86, 69.41, 68.97, 68.55, 68.14, 67.74, 67.36, + 66.98, 66.61, 66.26, 65.91, 65.56, 65.23, 64.9, 64.57, 64.25, 63.94, 63.63, 63.32, 63.02, 62.72, + 62.43, 62.13, 61.85, 61.56, 61.27, 60.99, 60.71, 60.43, 60.16, 59.88, 59.61, 59.33, 59.06, + 58.79, 58.52, 58.25, 57.98, 57.71, 57.44, 57.16, 56.89, 56.62, 56.35, 56.07, 55.8, 55.52, 55.24, + 54.96, 54.67, 54.39, 54.1, 53.81, 53.51, 53.22, 52.91, 52.61, 52.29, 51.98, 51.65, 51.32, 50.99, + 50.64, 50.29, 49.92, 49.55, 49.16, 48.76, 48.34, 47.91, 47.45, 46.97, 46.46, 45.91, 45.33, + 44.69, 43.98, 43.19, 42.27, 41.15, 39.7, 37.48, + ], + [ + 128.52, 115.49, 100.89, 89.59, 85.77, 83.4, 81.64, 80.23, 79.04, 78.01, 77.1, 76.27, 75.51, + 74.82, 74.17, 73.56, 72.98, 72.44, 71.92, 71.42, 70.95, 70.49, 70.05, 69.62, 69.21, 68.81, + 68.42, 68.04, 67.67, 67.31, 66.96, 66.61, 66.27, 65.94, 65.61, 65.29, 64.98, 64.66, 64.35, + 64.05, 63.75, 63.45, 63.16, 62.87, 62.58, 62.29, 62.01, 61.72, 61.44, 61.16, 60.89, 60.61, + 60.33, 60.06, 59.79, 59.51, 59.24, 58.97, 58.69, 58.42, 58.15, 57.87, 57.6, 57.32, 57.04, 56.77, + 56.49, 56.2, 55.92, 55.63, 55.35, 55.06, 54.76, 54.46, 54.16, 53.86, 53.55, 53.23, 52.91, 52.59, + 52.25, 51.91, 51.56, 51.21, 50.84, 50.46, 50.07, 49.66, 49.24, 48.8, 48.34, 47.86, 47.34, 46.79, + 46.2, 45.56, 44.84, 44.04, 43.11, 41.98, 40.51, 38.27, + ], + [ + 129.95, 116.85, 102.17, 90.8, 86.95, 84.57, 82.8, 81.38, 80.19, 79.15, 78.22, 77.39, 76.63, + 75.93, 75.27, 74.66, 74.08, 73.53, 73.01, 72.51, 72.03, 71.57, 71.13, 70.7, 70.28, 69.88, 69.49, + 69.1, 68.73, 68.37, 68.01, 67.66, 67.32, 66.99, 66.66, 66.33, 66.01, 65.7, 65.39, 65.08, 64.78, + 64.48, 64.18, 63.89, 63.6, 63.31, 63.02, 62.74, 62.45, 62.17, 61.89, 61.61, 61.33, 61.06, 60.78, + 60.51, 60.23, 59.95, 59.68, 59.4, 59.13, 58.85, 58.57, 58.3, 58.02, 57.74, 57.45, 57.17, 56.88, + 56.59, 56.3, 56.01, 55.71, 55.41, 55.11, 54.8, 54.49, 54.17, 53.85, 53.52, 53.18, 52.84, 52.49, + 52.13, 51.76, 51.37, 50.98, 50.57, 50.14, 49.7, 49.24, 48.75, 48.23, 47.67, 47.07, 46.42, 45.7, + 44.89, 43.95, 42.81, 41.33, 39.06, + ], + [ + 131.37, 118.2, 103.44, 92.01, 88.14, 85.74, 83.96, 82.53, 81.33, 80.28, 79.35, 78.51, 77.75, + 77.04, 76.38, 75.76, 75.18, 74.62, 74.1, 73.59, 73.11, 72.65, 72.2, 71.77, 71.35, 70.94, 70.55, + 70.16, 69.79, 69.42, 69.06, 68.71, 68.37, 68.03, 67.7, 67.37, 67.05, 66.73, 66.42, 66.11, 65.8, + 65.5, 65.2, 64.91, 64.61, 64.32, 64.03, 63.75, 63.46, 63.18, 62.9, 62.61, 62.33, 62.06, 61.78, + 61.5, 61.22, 60.94, 60.67, 60.39, 60.11, 59.83, 59.55, 59.27, 58.99, 58.71, 58.42, 58.13, 57.85, + 57.56, 57.26, 56.97, 56.67, 56.36, 56.06, 55.75, 55.43, 55.11, 54.78, 54.45, 54.11, 53.77, + 53.41, 53.05, 52.67, 52.29, 51.89, 51.48, 51.05, 50.6, 50.13, 49.64, 49.11, 48.55, 47.95, 47.29, + 46.56, 45.74, 44.79, 43.64, 42.14, 39.86, + ], + [ + 132.79, 119.55, 104.72, 93.22, 89.32, 86.9, 85.11, 83.68, 82.46, 81.41, 80.48, 79.63, 78.86, + 78.15, 77.48, 76.86, 76.27, 75.72, 75.19, 74.68, 74.19, 73.73, 73.28, 72.84, 72.42, 72.01, + 71.61, 71.23, 70.85, 70.48, 70.12, 69.76, 69.42, 69.08, 68.74, 68.41, 68.09, 67.77, 67.45, + 67.14, 66.83, 66.53, 66.23, 65.93, 65.63, 65.34, 65.05, 64.76, 64.47, 64.18, 63.9, 63.62, 63.33, + 63.05, 62.77, 62.49, 62.21, 61.93, 61.65, 61.37, 61.09, 60.81, 60.53, 60.25, 59.96, 59.68, + 59.39, 59.1, 58.81, 58.52, 58.22, 57.92, 57.62, 57.31, 57.0, 56.69, 56.37, 56.05, 55.72, 55.39, + 55.04, 54.69, 54.34, 53.97, 53.59, 53.2, 52.8, 52.38, 51.95, 51.5, 51.03, 50.53, 50.0, 49.43, + 48.82, 48.16, 47.42, 46.59, 45.63, 44.47, 42.96, 40.65, + ], + [ + 134.2, 120.9, 105.99, 94.42, 90.5, 88.07, 86.27, 84.82, 83.6, 82.54, 81.6, 80.75, 79.97, 79.26, + 78.59, 77.96, 77.37, 76.81, 76.27, 75.76, 75.27, 74.8, 74.35, 73.91, 73.49, 73.08, 72.68, 72.28, + 71.9, 71.53, 71.17, 70.81, 70.46, 70.12, 69.78, 69.45, 69.12, 68.8, 68.48, 68.17, 67.86, 67.55, + 67.25, 66.95, 66.65, 66.35, 66.06, 65.77, 65.48, 65.19, 64.9, 64.62, 64.33, 64.05, 63.77, 63.49, + 63.2, 62.92, 62.64, 62.36, 62.07, 61.79, 61.51, 61.22, 60.93, 60.65, 60.36, 60.07, 59.77, 59.48, + 59.18, 58.88, 58.57, 58.27, 57.95, 57.64, 57.32, 56.99, 56.66, 56.32, 55.98, 55.62, 55.26, + 54.89, 54.51, 54.12, 53.71, 53.29, 52.86, 52.4, 51.92, 51.42, 50.88, 50.31, 49.7, 49.03, 48.29, + 47.45, 46.48, 45.31, 43.78, 41.44, + ], + [ + 135.61, 122.25, 107.26, 95.63, 91.68, 89.23, 87.42, 85.96, 84.74, 83.67, 82.72, 81.87, 81.09, + 80.36, 79.69, 79.06, 78.46, 77.9, 77.36, 76.85, 76.35, 75.88, 75.42, 74.98, 74.56, 74.14, 73.74, + 73.34, 72.96, 72.59, 72.22, 71.86, 71.51, 71.16, 70.82, 70.49, 70.16, 69.83, 69.51, 69.2, 68.89, + 68.58, 68.27, 67.97, 67.67, 67.37, 67.07, 66.78, 66.49, 66.2, 65.91, 65.62, 65.33, 65.05, 64.76, + 64.48, 64.19, 63.91, 63.63, 63.34, 63.06, 62.77, 62.48, 62.2, 61.91, 61.62, 61.33, 61.03, 60.74, + 60.44, 60.14, 59.83, 59.53, 59.22, 58.9, 58.58, 58.26, 57.93, 57.6, 57.26, 56.91, 56.55, 56.19, + 55.81, 55.43, 55.03, 54.63, 54.2, 53.76, 53.3, 52.82, 52.31, 51.77, 51.19, 50.57, 49.9, 49.15, + 48.31, 47.33, 46.14, 44.6, 42.24, + ], + [ + 137.02, 123.6, 108.53, 96.83, 92.86, 90.4, 88.57, 87.11, 85.87, 84.8, 83.85, 82.98, 82.2, 81.47, + 80.79, 80.16, 79.56, 78.99, 78.45, 77.93, 77.43, 76.96, 76.5, 76.05, 75.62, 75.21, 74.8, 74.4, + 74.02, 73.64, 73.27, 72.91, 72.55, 72.21, 71.86, 71.53, 71.2, 70.87, 70.55, 70.23, 69.91, 69.6, + 69.29, 68.99, 68.69, 68.39, 68.09, 67.79, 67.5, 67.2, 66.91, 66.62, 66.33, 66.05, 65.76, 65.47, + 65.19, 64.9, 64.61, 64.33, 64.04, 63.75, 63.46, 63.17, 62.88, 62.59, 62.29, 62.0, 61.7, 61.4, + 61.1, 60.79, 60.48, 60.17, 59.85, 59.53, 59.2, 58.87, 58.53, 58.19, 57.84, 57.48, 57.11, 56.74, + 56.35, 55.95, 55.54, 55.11, 54.67, 54.2, 53.72, 53.2, 52.66, 52.08, 51.45, 50.77, 50.01, 49.16, + 48.17, 46.98, 45.42, 43.04, + ], + [ + 138.43, 124.94, 109.79, 98.03, 94.04, 91.56, 89.73, 88.25, 87.01, 85.93, 84.97, 84.1, 83.31, + 82.58, 81.89, 81.25, 80.65, 80.08, 79.53, 79.01, 78.51, 78.03, 77.57, 77.12, 76.69, 76.27, + 75.86, 75.46, 75.07, 74.69, 74.32, 73.96, 73.6, 73.25, 72.9, 72.57, 72.23, 71.9, 71.58, 71.26, + 70.94, 70.63, 70.32, 70.01, 69.7, 69.4, 69.1, 68.8, 68.51, 68.21, 67.92, 67.63, 67.33, 67.04, + 66.75, 66.47, 66.18, 65.89, 65.6, 65.31, 65.02, 64.73, 64.44, 64.15, 63.85, 63.56, 63.26, 62.97, + 62.66, 62.36, 62.06, 61.75, 61.44, 61.12, 60.8, 60.48, 60.15, 59.81, 59.47, 59.13, 58.77, 58.41, + 58.04, 57.66, 57.27, 56.87, 56.45, 56.02, 55.57, 55.11, 54.61, 54.1, 53.55, 52.96, 52.33, 51.64, + 50.88, 50.02, 49.02, 47.82, 46.24, 43.84, + ], + [ + 139.83, 126.28, 111.06, 99.23, 95.21, 92.72, 90.88, 89.39, 88.14, 87.05, 86.09, 85.22, 84.42, + 83.68, 82.99, 82.35, 81.74, 81.17, 80.62, 80.09, 79.59, 79.11, 78.64, 78.19, 77.76, 77.33, + 76.92, 76.52, 76.13, 75.75, 75.37, 75.0, 74.64, 74.29, 73.94, 73.6, 73.27, 72.93, 72.61, 72.28, + 71.97, 71.65, 71.34, 71.03, 70.72, 70.42, 70.11, 69.81, 69.51, 69.22, 68.92, 68.63, 68.33, + 68.04, 67.75, 67.46, 67.17, 66.88, 66.59, 66.29, 66.0, 65.71, 65.42, 65.12, 64.83, 64.53, 64.23, + 63.93, 63.63, 63.32, 63.02, 62.71, 62.39, 62.07, 61.75, 61.42, 61.09, 60.76, 60.41, 60.06, + 59.71, 59.34, 58.97, 58.59, 58.19, 57.79, 57.37, 56.93, 56.48, 56.01, 55.51, 54.99, 54.44, + 53.85, 53.21, 52.51, 51.75, 50.88, 49.87, 48.66, 47.07, 44.64, + ], + [ + 141.23, 127.62, 112.32, 100.43, 96.39, 93.88, 92.02, 90.53, 89.27, 88.18, 87.21, 86.33, 85.53, + 84.79, 84.09, 83.45, 82.83, 82.26, 81.7, 81.18, 80.67, 80.18, 79.71, 79.26, 78.82, 78.4, 77.98, + 77.58, 77.18, 76.8, 76.42, 76.05, 75.69, 75.33, 74.98, 74.64, 74.3, 73.97, 73.64, 73.31, 72.99, + 72.67, 72.36, 72.05, 71.74, 71.43, 71.13, 70.82, 70.52, 70.22, 69.93, 69.63, 69.33, 69.04, + 68.75, 68.45, 68.16, 67.87, 67.57, 67.28, 66.99, 66.69, 66.4, 66.1, 65.8, 65.5, 65.2, 64.9, + 64.59, 64.29, 63.98, 63.66, 63.35, 63.03, 62.7, 62.37, 62.04, 61.7, 61.35, 61.0, 60.64, 60.27, + 59.9, 59.51, 59.11, 58.71, 58.28, 57.84, 57.39, 56.91, 56.41, 55.89, 55.33, 54.73, 54.09, 53.39, + 52.61, 51.74, 50.72, 49.5, 47.89, 45.44, + ], + [ + 142.63, 128.95, 113.58, 101.62, 97.56, 95.04, 93.17, 91.67, 90.4, 89.3, 88.33, 87.44, 86.64, + 85.89, 85.19, 84.54, 83.93, 83.34, 82.79, 82.26, 81.75, 81.26, 80.79, 80.33, 79.89, 79.46, + 79.04, 78.63, 78.24, 77.85, 77.47, 77.1, 76.73, 76.38, 76.02, 75.68, 75.34, 75.0, 74.67, 74.34, + 74.02, 73.7, 73.38, 73.07, 72.75, 72.45, 72.14, 71.83, 71.53, 71.23, 70.93, 70.63, 70.33, 70.04, + 69.74, 69.45, 69.15, 68.86, 68.56, 68.26, 67.97, 67.67, 67.37, 67.08, 66.78, 66.47, 66.17, + 65.87, 65.56, 65.25, 64.94, 64.62, 64.3, 63.98, 63.65, 63.32, 62.98, 62.64, 62.29, 61.94, 61.58, + 61.21, 60.83, 60.44, 60.04, 59.62, 59.2, 58.76, 58.3, 57.82, 57.31, 56.78, 56.22, 55.62, 54.97, + 54.26, 53.48, 52.6, 51.58, 50.34, 48.72, 46.25, + ], + [ + 144.02, 130.29, 114.84, 102.82, 98.73, 96.2, 94.32, 92.81, 91.54, 90.43, 89.44, 88.56, 87.74, + 86.99, 86.29, 85.64, 85.02, 84.43, 83.87, 83.34, 82.82, 82.33, 81.86, 81.4, 80.95, 80.52, 80.1, + 79.69, 79.29, 78.9, 78.52, 78.14, 77.78, 77.42, 77.06, 76.71, 76.37, 76.03, 75.7, 75.37, 75.04, + 74.72, 74.4, 74.08, 73.77, 73.46, 73.15, 72.84, 72.54, 72.24, 71.93, 71.63, 71.33, 71.04, 70.74, + 70.44, 70.14, 69.85, 69.55, 69.25, 68.95, 68.65, 68.35, 68.05, 67.75, 67.45, 67.14, 66.83, + 66.52, 66.21, 65.9, 65.58, 65.26, 64.93, 64.6, 64.27, 63.93, 63.58, 63.23, 62.88, 62.51, 62.14, + 61.76, 61.36, 60.96, 60.54, 60.11, 59.67, 59.21, 58.72, 58.22, 57.68, 57.11, 56.51, 55.85, + 55.14, 54.35, 53.46, 52.43, 51.18, 49.55, 47.05, + ], + [ + 145.41, 131.62, 116.09, 104.01, 99.9, 97.35, 95.46, 93.95, 92.66, 91.55, 90.56, 89.67, 88.85, + 88.09, 87.39, 86.73, 86.11, 85.52, 84.95, 84.42, 83.9, 83.41, 82.93, 82.46, 82.02, 81.58, 81.16, + 80.75, 80.34, 79.95, 79.57, 79.19, 78.82, 78.46, 78.1, 77.75, 77.41, 77.06, 76.73, 76.4, 76.07, + 75.74, 75.42, 75.1, 74.79, 74.47, 74.16, 73.86, 73.55, 73.24, 72.94, 72.64, 72.33, 72.03, 71.73, + 71.43, 71.13, 70.83, 70.54, 70.24, 69.94, 69.63, 69.33, 69.03, 68.72, 68.42, 68.11, 67.8, 67.49, + 67.18, 66.86, 66.54, 66.21, 65.89, 65.55, 65.22, 64.88, 64.53, 64.17, 63.81, 63.45, 63.07, + 62.69, 62.29, 61.88, 61.47, 61.03, 60.58, 60.12, 59.63, 59.12, 58.58, 58.01, 57.4, 56.74, 56.02, + 55.22, 54.33, 53.28, 52.02, 50.38, 47.86, + ], + [ + 146.8, 132.94, 117.35, 105.2, 101.07, 98.51, 96.61, 95.08, 93.79, 92.67, 91.68, 90.78, 89.96, + 89.2, 88.49, 87.82, 87.2, 86.6, 86.04, 85.5, 84.98, 84.48, 84.0, 83.53, 83.08, 82.64, 82.22, + 81.8, 81.4, 81.0, 80.62, 80.24, 79.86, 79.5, 79.14, 78.79, 78.44, 78.1, 77.76, 77.42, 77.09, + 76.77, 76.44, 76.12, 75.8, 75.49, 75.18, 74.87, 74.56, 74.25, 73.94, 73.64, 73.33, 73.03, 72.73, + 72.43, 72.13, 71.82, 71.52, 71.22, 70.92, 70.62, 70.31, 70.01, 69.7, 69.39, 69.08, 68.77, 68.46, + 68.14, 67.82, 67.5, 67.17, 66.84, 66.51, 66.17, 65.82, 65.47, 65.12, 64.75, 64.38, 64.0, 63.62, + 63.22, 62.81, 62.39, 61.95, 61.5, 61.03, 60.54, 60.02, 59.48, 58.9, 58.28, 57.62, 56.9, 56.09, + 55.19, 54.14, 52.87, 51.21, 48.67, + ], + [ + 148.19, 134.27, 118.6, 106.39, 102.24, 99.66, 97.75, 96.22, 94.92, 93.79, 92.79, 91.89, 91.06, + 90.3, 89.58, 88.92, 88.29, 87.69, 87.12, 86.57, 86.05, 85.55, 85.07, 84.6, 84.14, 83.7, 83.28, + 82.86, 82.45, 82.05, 81.66, 81.28, 80.91, 80.54, 80.18, 79.82, 79.47, 79.13, 78.79, 78.45, + 78.12, 77.79, 77.46, 77.14, 76.82, 76.5, 76.19, 75.88, 75.56, 75.26, 74.95, 74.64, 74.33, 74.03, + 73.73, 73.42, 73.12, 72.81, 72.51, 72.21, 71.9, 71.6, 71.29, 70.98, 70.67, 70.36, 70.05, 69.74, + 69.42, 69.1, 68.78, 68.46, 68.13, 67.79, 67.46, 67.12, 66.77, 66.42, 66.06, 65.69, 65.32, 64.94, + 64.55, 64.15, 63.73, 63.31, 62.87, 62.41, 61.94, 61.44, 60.92, 60.38, 59.79, 59.17, 58.5, 57.77, + 56.97, 56.05, 55.0, 53.71, 52.04, 49.48, + ], + [ + 149.57, 135.6, 119.85, 107.58, 103.41, 100.82, 98.9, 97.35, 96.05, 94.92, 93.91, 93.0, 92.17, + 91.4, 90.68, 90.01, 89.37, 88.77, 88.2, 87.65, 87.13, 86.62, 86.13, 85.66, 85.21, 84.76, 84.33, + 83.91, 83.5, 83.1, 82.71, 82.33, 81.95, 81.58, 81.22, 80.86, 80.51, 80.16, 79.82, 79.48, 79.14, + 78.81, 78.48, 78.16, 77.84, 77.52, 77.2, 76.89, 76.57, 76.26, 75.95, 75.64, 75.33, 75.03, 74.72, + 74.41, 74.11, 73.8, 73.5, 73.19, 72.89, 72.58, 72.27, 71.96, 71.65, 71.34, 71.02, 70.71, 70.39, + 70.07, 69.74, 69.42, 69.08, 68.75, 68.41, 68.07, 67.72, 67.36, 67.0, 66.63, 66.26, 65.87, 65.48, + 65.07, 64.66, 64.23, 63.79, 63.33, 62.85, 62.35, 61.83, 61.28, 60.69, 60.06, 59.39, 58.65, + 57.84, 56.92, 55.85, 54.56, 52.87, 50.29, + ], + [ + 150.95, 136.92, 121.1, 108.77, 104.58, 101.97, 100.04, 98.48, 97.17, 96.03, 95.02, 94.11, 93.27, + 92.5, 91.78, 91.1, 90.46, 89.86, 89.28, 88.73, 88.2, 87.69, 87.2, 86.73, 86.27, 85.82, 85.39, + 84.97, 84.56, 84.15, 83.76, 83.37, 82.99, 82.62, 82.26, 81.9, 81.54, 81.19, 80.85, 80.51, 80.17, + 79.84, 79.51, 79.18, 78.85, 78.53, 78.21, 77.9, 77.58, 77.27, 76.96, 76.64, 76.33, 76.03, 75.72, + 75.41, 75.1, 74.79, 74.49, 74.18, 73.87, 73.56, 73.25, 72.94, 72.62, 72.31, 71.99, 71.68, 71.35, + 71.03, 70.7, 70.37, 70.04, 69.7, 69.36, 69.02, 68.66, 68.31, 67.94, 67.57, 67.19, 66.81, 66.41, + 66.0, 65.58, 65.15, 64.71, 64.24, 63.76, 63.26, 62.73, 62.18, 61.59, 60.96, 60.28, 59.53, 58.71, + 57.79, 56.71, 55.41, 53.71, 51.1, + ], + [ + 152.33, 138.24, 122.35, 109.96, 105.74, 103.12, 101.18, 99.62, 98.3, 97.15, 96.14, 95.22, 94.37, + 93.6, 92.87, 92.19, 91.55, 90.94, 90.36, 89.81, 89.28, 88.76, 88.27, 87.79, 87.33, 86.88, 86.45, + 86.02, 85.61, 85.2, 84.81, 84.42, 84.04, 83.66, 83.29, 82.93, 82.57, 82.22, 81.88, 81.53, 81.19, + 80.86, 80.53, 80.2, 79.87, 79.55, 79.23, 78.91, 78.59, 78.27, 77.96, 77.65, 77.33, 77.02, 76.71, + 76.4, 76.09, 75.78, 75.47, 75.16, 74.85, 74.54, 74.23, 73.91, 73.6, 73.28, 72.96, 72.64, 72.32, + 72.0, 71.67, 71.33, 71.0, 70.66, 70.32, 69.97, 69.61, 69.25, 68.89, 68.51, 68.13, 67.74, 67.34, + 66.93, 66.51, 66.07, 65.63, 65.16, 64.67, 64.17, 63.64, 63.08, 62.48, 61.85, 61.16, 60.42, + 59.59, 58.65, 57.57, 56.26, 54.54, 51.91, + ], + [ + 153.71, 139.55, 123.59, 111.14, 106.91, 104.27, 102.32, 100.75, 99.42, 98.27, 97.25, 96.32, + 95.48, 94.69, 93.96, 93.28, 92.64, 92.02, 91.44, 90.88, 90.35, 89.83, 89.34, 88.86, 88.39, + 87.94, 87.5, 87.08, 86.66, 86.25, 85.85, 85.46, 85.08, 84.7, 84.33, 83.97, 83.61, 83.25, 82.9, + 82.56, 82.22, 81.88, 81.55, 81.22, 80.89, 80.56, 80.24, 79.92, 79.6, 79.28, 78.96, 78.65, 78.33, + 78.02, 77.71, 77.4, 77.08, 76.77, 76.46, 76.15, 75.84, 75.52, 75.21, 74.89, 74.58, 74.26, 73.94, + 73.61, 73.29, 72.96, 72.63, 72.3, 71.96, 71.62, 71.27, 70.92, 70.56, 70.2, 69.83, 69.45, 69.07, + 68.68, 68.27, 67.86, 67.44, 67.0, 66.55, 66.08, 65.59, 65.08, 64.54, 63.98, 63.38, 62.74, 62.05, + 61.3, 60.46, 59.52, 58.43, 57.1, 55.38, 52.72, + ], + [ + 155.08, 140.87, 124.84, 112.33, 108.07, 105.42, 103.46, 101.88, 100.55, 99.39, 98.36, 97.43, + 96.58, 95.79, 95.06, 94.37, 93.72, 93.11, 92.52, 91.96, 91.42, 90.9, 90.41, 89.92, 89.46, 89.0, + 88.56, 88.13, 87.71, 87.3, 86.9, 86.51, 86.12, 85.74, 85.37, 85.0, 84.64, 84.28, 83.93, 83.59, + 83.24, 82.9, 82.57, 82.23, 81.9, 81.58, 81.25, 80.93, 80.61, 80.29, 79.97, 79.65, 79.33, 79.02, + 78.7, 78.39, 78.08, 77.76, 77.45, 77.13, 76.82, 76.5, 76.19, 75.87, 75.55, 75.23, 74.91, 74.58, + 74.26, 73.93, 73.59, 73.26, 72.92, 72.57, 72.22, 71.87, 71.51, 71.14, 70.77, 70.39, 70.01, + 69.61, 69.21, 68.79, 68.36, 67.92, 67.47, 66.99, 66.5, 65.99, 65.45, 64.88, 64.28, 63.63, 62.94, + 62.18, 61.34, 60.39, 59.29, 57.96, 56.21, 53.54, + ], + [ + 156.45, 142.18, 126.08, 113.51, 109.23, 106.57, 104.6, 103.01, 101.67, 100.51, 99.47, 98.54, + 97.68, 96.89, 96.15, 95.46, 94.81, 94.19, 93.6, 93.03, 92.49, 91.97, 91.47, 90.99, 90.52, 90.06, + 89.62, 89.18, 88.76, 88.35, 87.95, 87.55, 87.16, 86.78, 86.41, 86.04, 85.67, 85.31, 84.96, + 84.61, 84.27, 83.92, 83.59, 83.25, 82.92, 82.59, 82.26, 81.94, 81.61, 81.29, 80.97, 80.65, + 80.33, 80.02, 79.7, 79.38, 79.07, 78.75, 78.44, 78.12, 77.8, 77.49, 77.17, 76.85, 76.53, 76.2, + 75.88, 75.55, 75.22, 74.89, 74.55, 74.22, 73.87, 73.53, 73.18, 72.82, 72.46, 72.09, 71.72, + 71.34, 70.95, 70.55, 70.14, 69.72, 69.29, 68.85, 68.39, 67.91, 67.42, 66.9, 66.36, 65.78, 65.18, + 64.53, 63.83, 63.06, 62.22, 61.26, 60.15, 58.81, 57.05, 54.36, + ], + [ + 157.82, 143.5, 127.32, 114.69, 110.39, 107.72, 105.73, 104.14, 102.79, 101.62, 100.58, 99.64, + 98.78, 97.98, 97.24, 96.55, 95.89, 95.27, 94.68, 94.11, 93.57, 93.04, 92.54, 92.05, 91.58, + 91.12, 90.67, 90.24, 89.81, 89.4, 88.99, 88.59, 88.2, 87.82, 87.44, 87.07, 86.71, 86.34, 85.99, + 85.64, 85.29, 84.95, 84.61, 84.27, 83.93, 83.6, 83.27, 82.95, 82.62, 82.3, 81.98, 81.65, 81.33, + 81.02, 80.7, 80.38, 80.06, 79.74, 79.43, 79.11, 78.79, 78.47, 78.15, 77.83, 77.5, 77.18, 76.85, + 76.52, 76.19, 75.86, 75.52, 75.18, 74.83, 74.48, 74.13, 73.77, 73.41, 73.04, 72.66, 72.28, + 71.89, 71.48, 71.07, 70.65, 70.22, 69.77, 69.31, 68.83, 68.33, 67.81, 67.26, 66.69, 66.08, + 65.42, 64.72, 63.95, 63.09, 62.13, 61.01, 59.66, 57.89, 55.17, + ], + [ + 159.19, 144.81, 128.56, 115.88, 111.55, 108.87, 106.87, 105.27, 103.91, 102.74, 101.69, 100.75, + 99.88, 99.08, 98.34, 97.64, 96.98, 96.35, 95.75, 95.18, 94.64, 94.11, 93.6, 93.11, 92.64, 92.18, + 91.73, 91.29, 90.86, 90.44, 90.04, 89.64, 89.24, 88.86, 88.48, 88.11, 87.74, 87.37, 87.02, + 86.66, 86.31, 85.97, 85.63, 85.29, 84.95, 84.62, 84.29, 83.96, 83.63, 83.3, 82.98, 82.66, 82.33, + 82.01, 81.69, 81.37, 81.05, 80.73, 80.41, 80.09, 79.77, 79.45, 79.13, 78.8, 78.48, 78.15, 77.82, + 77.49, 77.16, 76.82, 76.48, 76.14, 75.79, 75.44, 75.08, 74.72, 74.36, 73.99, 73.61, 73.22, + 72.83, 72.42, 72.01, 71.58, 71.15, 70.7, 70.23, 69.75, 69.25, 68.72, 68.17, 67.59, 66.98, 66.32, + 65.61, 64.83, 63.97, 63.0, 61.88, 60.51, 58.73, 55.99, + ], + [ + 160.55, 146.11, 129.8, 117.06, 112.71, 110.01, 108.01, 106.39, 105.03, 103.85, 102.8, 101.85, + 100.98, 100.18, 99.43, 98.72, 98.06, 97.43, 96.83, 96.26, 95.71, 95.18, 94.67, 94.18, 93.7, + 93.23, 92.78, 92.34, 91.91, 91.49, 91.08, 90.68, 90.28, 89.9, 89.51, 89.14, 88.77, 88.4, 88.04, + 87.69, 87.34, 86.99, 86.65, 86.3, 85.97, 85.63, 85.3, 84.97, 84.64, 84.31, 83.98, 83.66, 83.33, + 83.01, 82.69, 82.37, 82.05, 81.72, 81.4, 81.08, 80.76, 80.43, 80.11, 79.78, 79.46, 79.13, 78.79, + 78.46, 78.13, 77.79, 77.45, 77.1, 76.75, 76.4, 76.04, 75.68, 75.31, 74.93, 74.55, 74.16, 73.77, + 73.36, 72.94, 72.52, 72.08, 71.62, 71.15, 70.67, 70.16, 69.63, 69.08, 68.5, 67.88, 67.21, 66.5, + 65.72, 64.85, 63.88, 62.74, 61.37, 59.57, 56.81, + ], + [ + 161.92, 147.42, 131.04, 118.24, 113.87, 111.16, 109.14, 107.52, 106.15, 104.97, 103.91, 102.95, + 102.08, 101.27, 100.52, 99.81, 99.14, 98.51, 97.91, 97.33, 96.78, 96.25, 95.73, 95.24, 94.76, + 94.29, 93.84, 93.39, 92.96, 92.54, 92.13, 91.72, 91.32, 90.93, 90.55, 90.17, 89.8, 89.43, 89.07, + 88.71, 88.36, 88.01, 87.67, 87.32, 86.98, 86.64, 86.31, 85.98, 85.64, 85.31, 84.99, 84.66, + 84.33, 84.01, 83.69, 83.36, 83.04, 82.71, 82.39, 82.07, 81.74, 81.42, 81.09, 80.76, 80.43, 80.1, + 79.77, 79.43, 79.09, 78.75, 78.41, 78.06, 77.71, 77.35, 76.99, 76.63, 76.26, 75.88, 75.5, 75.11, + 74.71, 74.3, 73.88, 73.45, 73.01, 72.55, 72.08, 71.59, 71.08, 70.55, 69.99, 69.4, 68.78, 68.11, + 67.39, 66.6, 65.73, 64.75, 63.61, 62.22, 60.41, 57.63, + ], + [ + 163.28, 148.73, 132.28, 119.41, 115.03, 112.3, 110.28, 108.65, 107.27, 106.08, 105.02, 104.06, + 103.18, 102.36, 101.61, 100.9, 100.23, 99.59, 98.98, 98.41, 97.85, 97.31, 96.8, 96.3, 95.82, + 95.35, 94.89, 94.45, 94.01, 93.59, 93.17, 92.76, 92.37, 91.97, 91.59, 91.21, 90.83, 90.46, 90.1, + 89.74, 89.38, 89.03, 88.68, 88.34, 88.0, 87.66, 87.32, 86.99, 86.65, 86.32, 85.99, 85.66, 85.33, + 85.01, 84.68, 84.36, 84.03, 83.7, 83.38, 83.05, 82.73, 82.4, 82.07, 81.74, 81.41, 81.07, 80.74, + 80.4, 80.06, 79.72, 79.37, 79.02, 78.67, 78.31, 77.95, 77.58, 77.21, 76.83, 76.44, 76.05, 75.65, + 75.23, 74.81, 74.38, 73.94, 73.48, 73.0, 72.51, 72.0, 71.46, 70.9, 70.31, 69.68, 69.01, 68.28, + 67.49, 66.61, 65.62, 64.47, 63.08, 61.25, 58.46, + ], + [ + 164.64, 150.03, 133.51, 120.59, 116.18, 113.44, 111.41, 109.77, 108.39, 107.19, 106.12, 105.16, + 104.28, 103.46, 102.7, 101.98, 101.31, 100.67, 100.06, 99.48, 98.92, 98.38, 97.86, 97.36, 96.88, + 96.4, 95.94, 95.5, 95.06, 94.63, 94.22, 93.81, 93.41, 93.01, 92.62, 92.24, 91.86, 91.49, 91.13, + 90.77, 90.41, 90.05, 89.7, 89.36, 89.01, 88.67, 88.33, 87.99, 87.66, 87.33, 86.99, 86.66, 86.33, + 86.01, 85.68, 85.35, 85.02, 84.69, 84.37, 84.04, 83.71, 83.38, 83.05, 82.72, 82.38, 82.05, + 81.71, 81.37, 81.03, 80.69, 80.34, 79.99, 79.63, 79.27, 78.91, 78.54, 78.16, 77.78, 77.39, + 76.99, 76.59, 76.17, 75.75, 75.31, 74.87, 74.4, 73.93, 73.43, 72.91, 72.38, 71.81, 71.21, 70.58, + 69.9, 69.17, 68.38, 67.49, 66.5, 65.34, 63.93, 62.1, 59.28, + ], + [ + 165.99, 151.33, 134.75, 121.77, 117.34, 114.59, 112.54, 110.9, 109.51, 108.3, 107.23, 106.26, + 105.37, 104.55, 103.79, 103.07, 102.39, 101.75, 101.14, 100.55, 99.99, 99.45, 98.93, 98.42, + 97.93, 97.46, 97.0, 96.55, 96.11, 95.68, 95.26, 94.85, 94.44, 94.05, 93.66, 93.27, 92.9, 92.52, + 92.15, 91.79, 91.43, 91.08, 90.72, 90.37, 90.03, 89.68, 89.34, 89.0, 88.67, 88.33, 88.0, 87.67, + 87.33, 87.0, 86.67, 86.34, 86.01, 85.69, 85.36, 85.03, 84.69, 84.36, 84.03, 83.7, 83.36, 83.02, + 82.69, 82.34, 82.0, 81.65, 81.3, 80.95, 80.59, 80.23, 79.86, 79.49, 79.11, 78.73, 78.33, 77.94, + 77.53, 77.11, 76.69, 76.25, 75.8, 75.33, 74.85, 74.35, 73.83, 73.29, 72.72, 72.12, 71.48, 70.8, + 70.07, 69.27, 68.38, 67.37, 66.21, 64.79, 62.94, 60.1, + ], + [ + 167.35, 152.63, 135.98, 122.94, 118.49, 115.73, 113.67, 112.02, 110.63, 109.41, 108.34, 107.36, + 106.47, 105.64, 104.88, 104.15, 103.47, 102.83, 102.21, 101.62, 101.06, 100.51, 99.99, 99.48, + 98.99, 98.52, 98.05, 97.6, 97.16, 96.73, 96.3, 95.89, 95.48, 95.09, 94.69, 94.31, 93.93, 93.55, + 93.18, 92.82, 92.45, 92.1, 91.74, 91.39, 91.04, 90.7, 90.35, 90.01, 89.68, 89.34, 89.0, 88.67, + 88.33, 88.0, 87.67, 87.34, 87.01, 86.68, 86.34, 86.01, 85.68, 85.35, 85.01, 84.68, 84.34, 84.0, + 83.66, 83.31, 82.97, 82.62, 82.27, 81.91, 81.55, 81.19, 80.82, 80.44, 80.06, 79.68, 79.28, + 78.88, 78.47, 78.05, 77.62, 77.18, 76.73, 76.26, 75.78, 75.27, 74.75, 74.21, 73.63, 73.03, + 72.39, 71.7, 70.96, 70.15, 69.26, 68.25, 67.07, 65.65, 63.79, 60.93, + ], + [ + 168.7, 153.93, 137.21, 124.12, 119.65, 116.87, 114.81, 113.15, 111.74, 110.53, 109.44, 108.46, + 107.57, 106.74, 105.96, 105.24, 104.55, 103.9, 103.29, 102.69, 102.13, 101.58, 101.05, 100.54, + 100.05, 99.57, 99.1, 98.65, 98.21, 97.77, 97.35, 96.93, 96.52, 96.12, 95.73, 95.34, 94.96, + 94.58, 94.21, 93.84, 93.48, 93.12, 92.76, 92.41, 92.06, 91.71, 91.37, 91.02, 90.68, 90.34, + 90.01, 89.67, 89.33, 89.0, 88.67, 88.33, 88.0, 87.67, 87.33, 87.0, 86.66, 86.33, 85.99, 85.65, + 85.32, 84.97, 84.63, 84.29, 83.94, 83.59, 83.23, 82.87, 82.51, 82.14, 81.77, 81.4, 81.01, 80.62, + 80.23, 79.82, 79.41, 78.99, 78.56, 78.11, 77.66, 77.19, 76.7, 76.2, 75.67, 75.12, 74.54, 73.94, + 73.29, 72.6, 71.86, 71.04, 70.14, 69.13, 67.94, 66.51, 64.63, 61.75, + ], + [ + 170.05, 155.22, 138.44, 125.29, 120.8, 118.01, 115.94, 114.27, 112.86, 111.64, 110.55, 109.56, + 108.66, 107.83, 107.05, 106.32, 105.63, 104.98, 104.36, 103.77, 103.19, 102.65, 102.12, 101.6, + 101.11, 100.63, 100.16, 99.7, 99.25, 98.82, 98.39, 97.97, 97.56, 97.16, 96.76, 96.37, 95.99, + 95.61, 95.24, 94.87, 94.5, 94.14, 93.78, 93.43, 93.07, 92.72, 92.38, 92.03, 91.69, 91.35, 91.01, + 90.67, 90.33, 90.0, 89.66, 89.33, 88.99, 88.66, 88.32, 87.99, 87.65, 87.31, 86.97, 86.63, 86.29, + 85.95, 85.6, 85.26, 84.91, 84.55, 84.2, 83.84, 83.47, 83.1, 82.73, 82.35, 81.97, 81.57, 81.18, + 80.77, 80.35, 79.93, 79.5, 79.05, 78.59, 78.12, 77.63, 77.12, 76.59, 76.04, 75.46, 74.84, 74.2, + 73.5, 72.75, 71.93, 71.03, 70.0, 68.81, 67.37, 65.48, 62.58, + ], + [ + 171.4, 156.52, 139.67, 126.46, 121.95, 119.15, 117.07, 115.39, 113.98, 112.74, 111.65, 110.66, + 109.76, 108.92, 108.14, 107.41, 106.71, 106.06, 105.43, 104.84, 104.26, 103.71, 103.18, 102.66, + 102.17, 101.68, 101.21, 100.75, 100.3, 99.86, 99.43, 99.01, 98.6, 98.2, 97.8, 97.41, 97.02, + 96.64, 96.26, 95.89, 95.52, 95.16, 94.8, 94.44, 94.09, 93.74, 93.39, 93.04, 92.7, 92.35, 92.01, + 91.67, 91.33, 91.0, 90.66, 90.32, 89.98, 89.65, 89.31, 88.97, 88.63, 88.3, 87.95, 87.61, 87.27, + 86.92, 86.58, 86.23, 85.88, 85.52, 85.16, 84.8, 84.43, 84.06, 83.69, 83.31, 82.92, 82.52, 82.12, + 81.71, 81.3, 80.87, 80.43, 79.98, 79.52, 79.05, 78.55, 78.04, 77.51, 76.95, 76.37, 75.75, 75.1, + 74.4, 73.65, 72.82, 71.91, 70.88, 69.68, 68.23, 66.33, 63.41, + ], + [ + 172.75, 157.81, 140.89, 127.63, 123.1, 120.29, 118.19, 116.51, 115.09, 113.85, 112.75, 111.76, + 110.85, 110.01, 109.22, 108.49, 107.79, 107.13, 106.51, 105.91, 105.33, 104.78, 104.24, 103.72, + 103.22, 102.74, 102.26, 101.8, 101.35, 100.91, 100.48, 100.06, 99.64, 99.23, 98.83, 98.44, + 98.05, 97.67, 97.29, 96.91, 96.55, 96.18, 95.82, 95.46, 95.1, 94.75, 94.4, 94.05, 93.7, 93.36, + 93.02, 92.68, 92.33, 91.99, 91.65, 91.32, 90.98, 90.64, 90.3, 89.96, 89.62, 89.28, 88.94, 88.59, + 88.25, 87.9, 87.55, 87.2, 86.85, 86.49, 86.13, 85.76, 85.39, 85.02, 84.64, 84.26, 83.87, 83.47, + 83.07, 82.66, 82.24, 81.81, 81.37, 80.92, 80.45, 79.97, 79.48, 78.96, 78.43, 77.87, 77.28, + 76.66, 76.01, 75.3, 74.54, 73.72, 72.8, 71.76, 70.55, 69.09, 67.18, 64.24, + ], + [ + 174.09, 159.1, 142.12, 128.8, 124.26, 121.42, 119.32, 117.63, 116.2, 114.96, 113.86, 112.86, + 111.94, 111.1, 110.31, 109.57, 108.87, 108.21, 107.58, 106.98, 106.4, 105.84, 105.3, 104.78, + 104.28, 103.79, 103.31, 102.85, 102.4, 101.95, 101.52, 101.1, 100.68, 100.27, 99.87, 99.47, + 99.08, 98.69, 98.31, 97.94, 97.57, 97.2, 96.84, 96.48, 96.12, 95.76, 95.41, 95.06, 94.71, 94.37, + 94.02, 93.68, 93.33, 92.99, 92.65, 92.31, 91.97, 91.63, 91.29, 90.95, 90.6, 90.26, 89.92, 89.57, + 89.22, 88.88, 88.52, 88.17, 87.81, 87.46, 87.09, 86.73, 86.36, 85.98, 85.6, 85.21, 84.82, 84.42, + 84.02, 83.61, 83.18, 82.75, 82.31, 81.85, 81.39, 80.9, 80.41, 79.89, 79.35, 78.79, 78.2, 77.57, + 76.91, 76.2, 75.44, 74.61, 73.68, 72.64, 71.43, 69.95, 68.03, 65.07, + ], + [ + 175.44, 160.39, 143.34, 129.97, 125.4, 122.56, 120.45, 118.75, 117.32, 116.07, 114.96, 113.96, + 113.04, 112.19, 111.4, 110.65, 109.95, 109.29, 108.65, 108.05, 107.46, 106.9, 106.36, 105.84, + 105.34, 104.84, 104.37, 103.9, 103.44, 103.0, 102.56, 102.14, 101.72, 101.31, 100.9, 100.5, + 100.11, 99.72, 99.34, 98.96, 98.59, 98.22, 97.85, 97.49, 97.13, 96.78, 96.42, 96.07, 95.72, + 95.37, 95.02, 94.68, 94.33, 93.99, 93.65, 93.3, 92.96, 92.62, 92.28, 91.93, 91.59, 91.24, 90.9, + 90.55, 90.2, 89.85, 89.5, 89.14, 88.78, 88.42, 88.06, 87.69, 87.32, 86.94, 86.56, 86.17, 85.78, + 85.38, 84.97, 84.55, 84.13, 83.69, 83.25, 82.79, 82.32, 81.84, 81.33, 80.81, 80.27, 79.71, + 79.11, 78.48, 77.82, 77.11, 76.34, 75.5, 74.57, 73.52, 72.3, 70.82, 68.88, 65.9, + ], + [ + 176.78, 161.68, 144.57, 131.14, 126.55, 123.7, 121.58, 119.87, 118.43, 117.18, 116.06, 115.05, + 114.13, 113.28, 112.48, 111.74, 111.03, 110.36, 109.72, 109.12, 108.53, 107.97, 107.43, 106.9, + 106.39, 105.9, 105.42, 104.95, 104.49, 104.04, 103.61, 103.18, 102.76, 102.34, 101.94, 101.53, + 101.14, 100.75, 100.37, 99.99, 99.61, 99.24, 98.87, 98.51, 98.15, 97.79, 97.43, 97.08, 96.73, + 96.38, 96.03, 95.68, 95.33, 94.99, 94.64, 94.3, 93.95, 93.61, 93.27, 92.92, 92.58, 92.23, 91.88, + 91.53, 91.18, 90.83, 90.47, 90.12, 89.75, 89.39, 89.02, 88.65, 88.28, 87.9, 87.52, 87.13, 86.73, + 86.33, 85.92, 85.5, 85.07, 84.63, 84.19, 83.73, 83.25, 82.77, 82.26, 81.74, 81.19, 80.62, 80.03, + 79.39, 78.73, 78.01, 77.24, 76.39, 75.46, 74.4, 73.17, 71.68, 69.73, 66.73, + ], + [ + 178.12, 162.97, 145.79, 132.31, 127.7, 124.83, 122.7, 120.99, 119.54, 118.28, 117.16, 116.15, + 115.22, 114.37, 113.57, 112.82, 112.11, 111.44, 110.8, 110.18, 109.6, 109.03, 108.49, 107.96, + 107.45, 106.95, 106.47, 106.0, 105.54, 105.09, 104.65, 104.22, 103.79, 103.38, 102.97, 102.57, + 102.17, 101.78, 101.39, 101.01, 100.63, 100.26, 99.89, 99.53, 99.16, 98.8, 98.44, 98.09, 97.73, + 97.38, 97.03, 96.68, 96.33, 95.99, 95.64, 95.29, 94.95, 94.6, 94.25, 93.91, 93.56, 93.21, 92.86, + 92.51, 92.16, 91.8, 91.45, 91.09, 90.73, 90.36, 89.99, 89.62, 89.24, 88.86, 88.47, 88.08, 87.68, + 87.28, 86.87, 86.44, 86.02, 85.58, 85.13, 84.66, 84.19, 83.7, 83.19, 82.66, 82.11, 81.54, 80.94, + 80.31, 79.63, 78.91, 78.13, 77.29, 76.35, 75.28, 74.05, 72.54, 70.58, 67.56, + ], + [ + 179.46, 164.25, 147.01, 133.48, 128.85, 125.97, 123.83, 122.11, 120.65, 119.39, 118.26, 117.25, + 116.32, 115.45, 114.65, 113.9, 113.19, 112.51, 111.87, 111.25, 110.66, 110.09, 109.55, 109.02, + 108.5, 108.0, 107.52, 107.05, 106.58, 106.13, 105.69, 105.26, 104.83, 104.41, 104.0, 103.6, + 103.2, 102.81, 102.42, 102.04, 101.66, 101.28, 100.91, 100.54, 100.18, 99.81, 99.45, 99.1, + 98.74, 98.39, 98.04, 97.68, 97.33, 96.98, 96.64, 96.29, 95.94, 95.59, 95.24, 94.9, 94.55, 94.2, + 93.84, 93.49, 93.14, 92.78, 92.42, 92.06, 91.7, 91.33, 90.96, 90.58, 90.2, 89.82, 89.43, 89.04, + 88.64, 88.23, 87.81, 87.39, 86.96, 86.52, 86.07, 85.6, 85.12, 84.63, 84.12, 83.59, 83.04, 82.46, + 81.86, 81.22, 80.54, 79.82, 79.03, 78.18, 77.23, 76.16, 74.92, 73.41, 71.43, 68.4, + ], + [ + 180.79, 165.54, 148.23, 134.64, 130.0, 127.1, 124.95, 123.23, 121.77, 120.49, 119.36, 118.34, + 117.41, 116.54, 115.74, 114.98, 114.26, 113.59, 112.94, 112.32, 111.73, 111.16, 110.61, 110.07, + 109.56, 109.06, 108.57, 108.09, 107.63, 107.18, 106.73, 106.3, 105.87, 105.45, 105.04, 104.63, + 104.23, 103.83, 103.44, 103.06, 102.68, 102.3, 101.93, 101.56, 101.19, 100.83, 100.47, 100.11, + 99.75, 99.39, 99.04, 98.69, 98.33, 97.98, 97.63, 97.28, 96.93, 96.58, 96.23, 95.88, 95.53, + 95.18, 94.83, 94.47, 94.11, 93.76, 93.4, 93.03, 92.67, 92.3, 91.92, 91.55, 91.17, 90.78, 90.39, + 89.99, 89.59, 89.18, 88.76, 88.34, 87.9, 87.46, 87.01, 86.54, 86.06, 85.56, 85.05, 84.51, 83.96, + 83.38, 82.77, 82.13, 81.45, 80.72, 79.93, 79.07, 78.12, 77.05, 75.79, 74.28, 72.29, 69.23, + ], +]; + +/** + * Signifance levels used by `computeChi2PValue`. + */ +export const SIGNIFICANCE_LEVELS = [ + 0.000001, 0.000032, 0.001, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, + 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, + 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43, 0.44, + 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, + 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, + 0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, + 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, +]; diff --git a/x-pack/packages/ml/chi2test/critical_table_lookup.ts b/x-pack/packages/ml/chi2test/critical_table_lookup.ts new file mode 100644 index 0000000000000..1a11f11b0cbf7 --- /dev/null +++ b/x-pack/packages/ml/chi2test/critical_table_lookup.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CRITICAL_VALUES_TABLE, SIGNIFICANCE_LEVELS } from './constants'; + +/** + * Performs a lookup in a critical values table to determine the significance level + * associated with a given chi-squared statistic and degrees of freedom. + * + * @param {number} chi2Statistic - The chi-squared statistic for which the significance level is to be determined. + * @param {number} df - The degrees of freedom (an integer) for the chi-squared test. + * @returns {number} The significance level corresponding to the chi-squared statistic and degrees of freedom. + * @throws {Error} If df is less than 1 or not an integer. + */ +export const criticalTableLookup = (chi2Statistic: number, df: number) => { + if (df < 1) return 1; + if (!Number.isInteger(df)) throw Error('Degrees of freedom must be a valid integer'); + + // Get the row index + const rowIndex: number = df - 1; + + // Get the column index + let minDiff: number = Math.abs(CRITICAL_VALUES_TABLE[rowIndex][0] - chi2Statistic); + let columnIndex: number = 0; + for (let j = 1; j < CRITICAL_VALUES_TABLE[rowIndex].length; j++) { + const diff: number = Math.abs(CRITICAL_VALUES_TABLE[rowIndex][j] - chi2Statistic); + if (diff < minDiff) { + minDiff = diff; + columnIndex = j; + } + } + + // Determine the significance level from the column index + const significanceLevel: number = SIGNIFICANCE_LEVELS[columnIndex]; + return significanceLevel; +}; diff --git a/x-pack/packages/ml/chi2test/index.ts b/x-pack/packages/ml/chi2test/index.ts new file mode 100644 index 0000000000000..41a9d5e799e15 --- /dev/null +++ b/x-pack/packages/ml/chi2test/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { computeChi2PValue } from './compute_chi_2_pvalue'; +export { criticalTableLookup } from './critical_table_lookup'; +export { CRITICAL_VALUES_TABLE, SIGNIFICANCE_LEVELS } from './constants'; +export type { Histogram } from './types'; diff --git a/x-pack/packages/ml/chi2test/jest.config.js b/x-pack/packages/ml/chi2test/jest.config.js new file mode 100644 index 0000000000000..1a1e0ce1f29c4 --- /dev/null +++ b/x-pack/packages/ml/chi2test/jest.config.js @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/ml/chi2test'], +}; diff --git a/x-pack/packages/ml/chi2test/kibana.jsonc b/x-pack/packages/ml/chi2test/kibana.jsonc new file mode 100644 index 0000000000000..073ffe15d4294 --- /dev/null +++ b/x-pack/packages/ml/chi2test/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/ml-chi2test", + "owner": "@elastic/ml-ui" +} diff --git a/x-pack/packages/ml/chi2test/package.json b/x-pack/packages/ml/chi2test/package.json new file mode 100644 index 0000000000000..d70dd6242df3e --- /dev/null +++ b/x-pack/packages/ml/chi2test/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/ml-chi2test", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/ml/chi2test/tsconfig.json b/x-pack/packages/ml/chi2test/tsconfig.json new file mode 100644 index 0000000000000..b05325b824a67 --- /dev/null +++ b/x-pack/packages/ml/chi2test/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] +} diff --git a/x-pack/packages/ml/chi2test/types.ts b/x-pack/packages/ml/chi2test/types.ts new file mode 100644 index 0000000000000..614b640eedb1a --- /dev/null +++ b/x-pack/packages/ml/chi2test/types.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * Interface for the Histogram type used by computeChi2PValue. + */ +export interface Histogram { + /** + * The doc count. + */ + doc_count: number; + /** + * The key. + */ + key: string | number; + /** + * Optional percentage. + */ + percentage?: number; +} diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx index a8232a2ea7e12..956772d9af4fe 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx @@ -5,15 +5,20 @@ * 2.0. */ +import React from 'react'; + import { SeriesColorAccessor } from '@elastic/charts/dist/chart_types/xy_chart/utils/specs'; import { Axis, BarSeries, Chart, Position, ScaleType, Settings, Tooltip } from '@elastic/charts'; -import React from 'react'; + import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; -import { getFieldFormatType, useFieldFormatter } from './default_value_formatter'; +import type { Histogram } from '@kbn/ml-chi2test'; + import { DataComparisonChartTooltipBody } from '../data_drift_chart_tooltip_body'; -import { NoChartsData } from './no_charts_data'; import { DATA_COMPARISON_TYPE } from '../constants'; -import { DataDriftField, Feature, Histogram } from '../types'; +import type { DataDriftField, Feature } from '../types'; + +import { getFieldFormatType, useFieldFormatter } from './default_value_formatter'; +import { NoChartsData } from './no_charts_data'; export const SingleDistributionChart = ({ data, diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/constants.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/constants.ts index ed5313df80624..3474c28051f65 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/constants.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/constants.ts @@ -42,1011 +42,3 @@ export const DATA_COMPARISON_TYPE_LABEL = { } as const; export const DRIFT_P_VALUE_THRESHOLD = 0.05; -/** - * Table generated from following python code - df = range(1,100) - - # levels of significance - significance_levels = np.concatenate((np.logspace(-6, -3, 3), np.linspace(0.01, 0.99, 99))) - - # create the table - table = [] - for d in df: - row = [] - for l in significance_levels: - row.append(round(stats.chi2.ppf(1 - l, d), 2)) - table.append(row) - - critical_value_table = np.array(table) - * until we find a low size replacement for doing chi2test in js - */ -export const CRITICAL_VALUES_TABLE = [ - [ - 23.93, 17.32, 10.83, 6.63, 5.41, 4.71, 4.22, 3.84, 3.54, 3.28, 3.06, 2.87, 2.71, 2.55, 2.42, - 2.29, 2.18, 2.07, 1.97, 1.88, 1.8, 1.72, 1.64, 1.57, 1.5, 1.44, 1.38, 1.32, 1.27, 1.22, 1.17, - 1.12, 1.07, 1.03, 0.99, 0.95, 0.91, 0.87, 0.84, 0.8, 0.77, 0.74, 0.71, 0.68, 0.65, 0.62, 0.6, - 0.57, 0.55, 0.52, 0.5, 0.48, 0.45, 0.43, 0.41, 0.39, 0.38, 0.36, 0.34, 0.32, 0.31, 0.29, 0.27, - 0.26, 0.25, 0.23, 0.22, 0.21, 0.19, 0.18, 0.17, 0.16, 0.15, 0.14, 0.13, 0.12, 0.11, 0.1, 0.09, - 0.09, 0.08, 0.07, 0.06, 0.06, 0.05, 0.05, 0.04, 0.04, 0.03, 0.03, 0.02, 0.02, 0.02, 0.01, 0.01, - 0.01, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, - ], - [ - 27.63, 20.72, 13.82, 9.21, 7.82, 7.01, 6.44, 5.99, 5.63, 5.32, 5.05, 4.82, 4.61, 4.41, 4.24, - 4.08, 3.93, 3.79, 3.67, 3.54, 3.43, 3.32, 3.22, 3.12, 3.03, 2.94, 2.85, 2.77, 2.69, 2.62, 2.55, - 2.48, 2.41, 2.34, 2.28, 2.22, 2.16, 2.1, 2.04, 1.99, 1.94, 1.88, 1.83, 1.78, 1.74, 1.69, 1.64, - 1.6, 1.55, 1.51, 1.47, 1.43, 1.39, 1.35, 1.31, 1.27, 1.23, 1.2, 1.16, 1.12, 1.09, 1.06, 1.02, - 0.99, 0.96, 0.92, 0.89, 0.86, 0.83, 0.8, 0.77, 0.74, 0.71, 0.68, 0.66, 0.63, 0.6, 0.58, 0.55, - 0.52, 0.5, 0.47, 0.45, 0.42, 0.4, 0.37, 0.35, 0.33, 0.3, 0.28, 0.26, 0.23, 0.21, 0.19, 0.17, - 0.15, 0.12, 0.1, 0.08, 0.06, 0.04, 0.02, - ], - [ - 30.66, 23.51, 16.27, 11.34, 9.84, 8.95, 8.31, 7.81, 7.41, 7.06, 6.76, 6.49, 6.25, 6.03, 5.83, - 5.65, 5.48, 5.32, 5.17, 5.02, 4.89, 4.76, 4.64, 4.53, 4.41, 4.31, 4.21, 4.11, 4.01, 3.92, 3.83, - 3.75, 3.66, 3.58, 3.51, 3.43, 3.36, 3.28, 3.21, 3.14, 3.08, 3.01, 2.95, 2.88, 2.82, 2.76, 2.7, - 2.64, 2.59, 2.53, 2.47, 2.42, 2.37, 2.31, 2.26, 2.21, 2.16, 2.11, 2.06, 2.01, 1.96, 1.92, 1.87, - 1.82, 1.78, 1.73, 1.69, 1.64, 1.6, 1.55, 1.51, 1.47, 1.42, 1.38, 1.34, 1.3, 1.25, 1.21, 1.17, - 1.13, 1.09, 1.05, 1.01, 0.96, 0.92, 0.88, 0.84, 0.8, 0.76, 0.71, 0.67, 0.63, 0.58, 0.54, 0.49, - 0.45, 0.4, 0.35, 0.3, 0.25, 0.18, 0.11, - ], - [ - 33.38, 26.0, 18.47, 13.28, 11.67, 10.71, 10.03, 9.49, 9.04, 8.67, 8.34, 8.04, 7.78, 7.54, 7.32, - 7.11, 6.92, 6.74, 6.58, 6.42, 6.27, 6.13, 5.99, 5.86, 5.73, 5.61, 5.5, 5.39, 5.28, 5.17, 5.07, - 4.97, 4.88, 4.79, 4.7, 4.61, 4.52, 4.44, 4.36, 4.28, 4.2, 4.12, 4.04, 3.97, 3.9, 3.83, 3.76, - 3.69, 3.62, 3.55, 3.49, 3.42, 3.36, 3.29, 3.23, 3.17, 3.11, 3.05, 2.99, 2.93, 2.87, 2.81, 2.75, - 2.7, 2.64, 2.58, 2.53, 2.47, 2.41, 2.36, 2.3, 2.25, 2.19, 2.14, 2.09, 2.03, 1.98, 1.92, 1.87, - 1.81, 1.76, 1.7, 1.65, 1.59, 1.54, 1.48, 1.42, 1.37, 1.31, 1.25, 1.19, 1.13, 1.06, 1.0, 0.93, - 0.86, 0.79, 0.71, 0.63, 0.54, 0.43, 0.3, - ], - [ - 35.89, 28.31, 20.52, 15.09, 13.39, 12.37, 11.64, 11.07, 10.6, 10.19, 9.84, 9.52, 9.24, 8.98, - 8.74, 8.52, 8.31, 8.12, 7.93, 7.76, 7.6, 7.44, 7.29, 7.15, 7.01, 6.88, 6.75, 6.63, 6.51, 6.39, - 6.28, 6.17, 6.06, 5.96, 5.86, 5.76, 5.67, 5.57, 5.48, 5.39, 5.3, 5.22, 5.13, 5.05, 4.97, 4.89, - 4.81, 4.73, 4.65, 4.57, 4.5, 4.42, 4.35, 4.28, 4.21, 4.14, 4.07, 4.0, 3.93, 3.86, 3.79, 3.72, - 3.66, 3.59, 3.52, 3.46, 3.39, 3.33, 3.26, 3.19, 3.13, 3.06, 3.0, 2.94, 2.87, 2.81, 2.74, 2.67, - 2.61, 2.54, 2.48, 2.41, 2.34, 2.27, 2.21, 2.14, 2.07, 1.99, 1.92, 1.85, 1.77, 1.69, 1.61, 1.53, - 1.44, 1.35, 1.25, 1.15, 1.03, 0.9, 0.75, 0.55, - ], - [ - 38.26, 30.5, 22.46, 16.81, 15.03, 13.97, 13.2, 12.59, 12.09, 11.66, 11.28, 10.95, 10.64, 10.37, - 10.11, 9.88, 9.65, 9.45, 9.25, 9.06, 8.89, 8.72, 8.56, 8.4, 8.26, 8.11, 7.97, 7.84, 7.71, 7.59, - 7.46, 7.35, 7.23, 7.12, 7.01, 6.9, 6.8, 6.69, 6.59, 6.5, 6.4, 6.3, 6.21, 6.12, 6.03, 5.94, 5.85, - 5.77, 5.68, 5.6, 5.51, 5.43, 5.35, 5.27, 5.19, 5.11, 5.03, 4.95, 4.87, 4.8, 4.72, 4.65, 4.57, - 4.5, 4.42, 4.35, 4.27, 4.2, 4.12, 4.05, 3.98, 3.9, 3.83, 3.75, 3.68, 3.6, 3.53, 3.45, 3.38, 3.3, - 3.23, 3.15, 3.07, 2.99, 2.91, 2.83, 2.75, 2.66, 2.57, 2.49, 2.4, 2.3, 2.2, 2.1, 2.0, 1.88, 1.76, - 1.64, 1.49, 1.33, 1.13, 0.87, - ], - [ - 40.52, 32.59, 24.32, 18.48, 16.62, 15.51, 14.7, 14.07, 13.54, 13.09, 12.69, 12.34, 12.02, 11.72, - 11.45, 11.2, 10.97, 10.75, 10.54, 10.34, 10.15, 9.97, 9.8, 9.64, 9.48, 9.33, 9.18, 9.04, 8.9, - 8.76, 8.63, 8.51, 8.38, 8.26, 8.14, 8.03, 7.92, 7.81, 7.7, 7.59, 7.49, 7.38, 7.28, 7.18, 7.09, - 6.99, 6.89, 6.8, 6.71, 6.62, 6.52, 6.43, 6.35, 6.26, 6.17, 6.08, 6.0, 5.91, 5.83, 5.74, 5.66, - 5.58, 5.49, 5.41, 5.33, 5.25, 5.16, 5.08, 5.0, 4.92, 4.84, 4.75, 4.67, 4.59, 4.51, 4.42, 4.34, - 4.25, 4.17, 4.08, 4.0, 3.91, 3.82, 3.73, 3.64, 3.55, 3.45, 3.36, 3.26, 3.16, 3.05, 2.95, 2.83, - 2.72, 2.59, 2.46, 2.32, 2.17, 2.0, 1.8, 1.56, 1.24, - ], - [ - 42.7, 34.6, 26.12, 20.09, 18.17, 17.01, 16.17, 15.51, 14.96, 14.48, 14.07, 13.7, 13.36, 13.05, - 12.77, 12.51, 12.26, 12.03, 11.81, 11.6, 11.4, 11.21, 11.03, 10.86, 10.69, 10.53, 10.37, 10.22, - 10.07, 9.93, 9.79, 9.66, 9.52, 9.4, 9.27, 9.15, 9.03, 8.91, 8.79, 8.68, 8.57, 8.46, 8.35, 8.24, - 8.14, 8.04, 7.93, 7.83, 7.73, 7.63, 7.54, 7.44, 7.34, 7.25, 7.16, 7.06, 6.97, 6.88, 6.78, 6.69, - 6.6, 6.51, 6.42, 6.33, 6.24, 6.15, 6.06, 5.98, 5.89, 5.8, 5.71, 5.62, 5.53, 5.44, 5.35, 5.26, - 5.16, 5.07, 4.98, 4.88, 4.79, 4.69, 4.59, 4.49, 4.39, 4.29, 4.19, 4.08, 3.97, 3.85, 3.74, 3.62, - 3.49, 3.36, 3.22, 3.07, 2.91, 2.73, 2.54, 2.31, 2.03, 1.65, - ], - [ - 44.81, 36.55, 27.88, 21.67, 19.68, 18.48, 17.61, 16.92, 16.35, 15.85, 15.42, 15.03, 14.68, - 14.36, 14.07, 13.79, 13.53, 13.29, 13.06, 12.84, 12.63, 12.43, 12.24, 12.06, 11.88, 11.71, - 11.55, 11.39, 11.23, 11.08, 10.94, 10.8, 10.66, 10.52, 10.39, 10.26, 10.13, 10.01, 9.88, 9.76, - 9.64, 9.53, 9.41, 9.3, 9.19, 9.08, 8.97, 8.86, 8.76, 8.65, 8.55, 8.44, 8.34, 8.24, 8.14, 8.04, - 7.94, 7.84, 7.75, 7.65, 7.55, 7.45, 7.36, 7.26, 7.16, 7.07, 6.97, 6.88, 6.78, 6.68, 6.59, 6.49, - 6.39, 6.3, 6.2, 6.1, 6.0, 5.9, 5.8, 5.7, 5.59, 5.49, 5.38, 5.27, 5.16, 5.05, 4.93, 4.82, 4.7, - 4.57, 4.44, 4.31, 4.17, 4.02, 3.87, 3.7, 3.52, 3.33, 3.1, 2.85, 2.53, 2.09, - ], - [ - 46.86, 38.45, 29.59, 23.21, 21.16, 19.92, 19.02, 18.31, 17.71, 17.2, 16.75, 16.35, 15.99, 15.65, - 15.34, 15.06, 14.79, 14.53, 14.29, 14.07, 13.85, 13.64, 13.44, 13.25, 13.07, 12.89, 12.72, - 12.55, 12.39, 12.23, 12.08, 11.93, 11.78, 11.64, 11.5, 11.36, 11.23, 11.1, 10.97, 10.84, 10.72, - 10.59, 10.47, 10.35, 10.24, 10.12, 10.01, 9.89, 9.78, 9.67, 9.56, 9.45, 9.34, 9.23, 9.13, 9.02, - 8.92, 8.81, 8.71, 8.6, 8.5, 8.4, 8.3, 8.19, 8.09, 7.99, 7.89, 7.78, 7.68, 7.58, 7.47, 7.37, - 7.27, 7.16, 7.06, 6.95, 6.84, 6.74, 6.63, 6.52, 6.41, 6.29, 6.18, 6.06, 5.94, 5.82, 5.7, 5.57, - 5.44, 5.3, 5.16, 5.02, 4.87, 4.7, 4.54, 4.35, 4.16, 3.94, 3.7, 3.41, 3.06, 2.56, - ], - [ - 48.87, 40.31, 31.26, 24.72, 22.62, 21.34, 20.41, 19.68, 19.06, 18.53, 18.07, 17.65, 17.28, - 16.93, 16.61, 16.31, 16.03, 15.77, 15.52, 15.28, 15.05, 14.84, 14.63, 14.43, 14.24, 14.05, - 13.87, 13.7, 13.53, 13.37, 13.21, 13.05, 12.9, 12.75, 12.6, 12.46, 12.32, 12.18, 12.05, 11.92, - 11.79, 11.66, 11.53, 11.4, 11.28, 11.16, 11.04, 10.92, 10.8, 10.69, 10.57, 10.45, 10.34, 10.23, - 10.12, 10.0, 9.89, 9.78, 9.67, 9.56, 9.45, 9.35, 9.24, 9.13, 9.02, 8.91, 8.8, 8.7, 8.59, 8.48, - 8.37, 8.26, 8.15, 8.04, 7.93, 7.81, 7.7, 7.58, 7.47, 7.35, 7.23, 7.11, 6.99, 6.86, 6.74, 6.61, - 6.47, 6.34, 6.2, 6.05, 5.9, 5.74, 5.58, 5.4, 5.22, 5.02, 4.81, 4.57, 4.31, 4.0, 3.61, 3.05, - ], - [ - 50.83, 42.13, 32.91, 26.22, 24.05, 22.74, 21.79, 21.03, 20.39, 19.85, 19.37, 18.94, 18.55, - 18.19, 17.86, 17.55, 17.26, 16.99, 16.73, 16.49, 16.25, 16.03, 15.81, 15.61, 15.41, 15.21, - 15.03, 14.85, 14.67, 14.5, 14.33, 14.17, 14.01, 13.86, 13.7, 13.56, 13.41, 13.27, 13.13, 12.99, - 12.85, 12.72, 12.58, 12.45, 12.32, 12.2, 12.07, 11.95, 11.82, 11.7, 11.58, 11.46, 11.34, 11.22, - 11.1, 10.99, 10.87, 10.76, 10.64, 10.53, 10.41, 10.3, 10.18, 10.07, 9.95, 9.84, 9.73, 9.61, 9.5, - 9.38, 9.27, 9.15, 9.03, 8.92, 8.8, 8.68, 8.56, 8.44, 8.32, 8.19, 8.07, 7.94, 7.81, 7.67, 7.54, - 7.4, 7.26, 7.11, 6.96, 6.81, 6.65, 6.48, 6.3, 6.12, 5.92, 5.71, 5.48, 5.23, 4.94, 4.6, 4.18, - 3.57, - ], - [ - 52.75, 43.92, 34.53, 27.69, 25.47, 24.12, 23.14, 22.36, 21.71, 21.15, 20.66, 20.21, 19.81, - 19.44, 19.1, 18.78, 18.48, 18.2, 17.94, 17.68, 17.44, 17.21, 16.98, 16.77, 16.56, 16.36, 16.17, - 15.98, 15.8, 15.62, 15.45, 15.28, 15.12, 14.96, 14.8, 14.65, 14.49, 14.35, 14.2, 14.05, 13.91, - 13.77, 13.64, 13.5, 13.37, 13.23, 13.1, 12.97, 12.84, 12.72, 12.59, 12.46, 12.34, 12.22, 12.09, - 11.97, 11.85, 11.73, 11.61, 11.49, 11.37, 11.25, 11.13, 11.01, 10.89, 10.77, 10.65, 10.53, - 10.41, 10.29, 10.17, 10.05, 9.93, 9.8, 9.68, 9.55, 9.43, 9.3, 9.17, 9.04, 8.91, 8.77, 8.63, - 8.49, 8.35, 8.2, 8.05, 7.9, 7.74, 7.58, 7.41, 7.23, 7.04, 6.84, 6.63, 6.41, 6.16, 5.89, 5.58, - 5.22, 4.77, 4.11, - ], - [ - 54.64, 45.68, 36.12, 29.14, 26.87, 25.49, 24.49, 23.68, 23.02, 22.44, 21.93, 21.48, 21.06, - 20.68, 20.33, 20.0, 19.7, 19.41, 19.13, 18.87, 18.62, 18.38, 18.15, 17.93, 17.72, 17.51, 17.31, - 17.12, 16.93, 16.75, 16.57, 16.39, 16.22, 16.06, 15.89, 15.73, 15.58, 15.42, 15.27, 15.12, - 14.97, 14.83, 14.69, 14.54, 14.4, 14.27, 14.13, 14.0, 13.86, 13.73, 13.6, 13.47, 13.34, 13.21, - 13.08, 12.96, 12.83, 12.7, 12.58, 12.45, 12.33, 12.2, 12.08, 11.95, 11.83, 11.7, 11.58, 11.45, - 11.33, 11.2, 11.08, 10.95, 10.82, 10.69, 10.56, 10.43, 10.3, 10.17, 10.03, 9.89, 9.75, 9.61, - 9.47, 9.32, 9.17, 9.02, 8.86, 8.7, 8.53, 8.36, 8.18, 7.99, 7.79, 7.58, 7.36, 7.12, 6.86, 6.57, - 6.24, 5.86, 5.37, 4.66, - ], - [ - 56.49, 47.41, 37.7, 30.58, 28.26, 26.85, 25.82, 25.0, 24.31, 23.72, 23.2, 22.73, 22.31, 21.92, - 21.56, 21.22, 20.9, 20.6, 20.32, 20.05, 19.79, 19.55, 19.31, 19.08, 18.86, 18.65, 18.44, 18.25, - 18.05, 17.86, 17.68, 17.5, 17.32, 17.15, 16.98, 16.82, 16.65, 16.49, 16.34, 16.18, 16.03, 15.88, - 15.73, 15.59, 15.44, 15.3, 15.16, 15.02, 14.88, 14.74, 14.61, 14.47, 14.34, 14.21, 14.07, 13.94, - 13.81, 13.68, 13.55, 13.42, 13.29, 13.16, 13.03, 12.9, 12.77, 12.64, 12.51, 12.38, 12.25, 12.12, - 11.99, 11.85, 11.72, 11.59, 11.45, 11.31, 11.18, 11.04, 10.9, 10.75, 10.61, 10.46, 10.31, 10.15, - 10.0, 9.83, 9.67, 9.5, 9.32, 9.14, 8.95, 8.75, 8.55, 8.33, 8.09, 7.84, 7.57, 7.26, 6.91, 6.5, - 5.98, 5.23, - ], - [ - 58.32, 49.12, 39.25, 32.0, 29.63, 28.19, 27.14, 26.3, 25.59, 24.99, 24.46, 23.98, 23.54, 23.14, - 22.77, 22.42, 22.1, 21.79, 21.5, 21.23, 20.96, 20.71, 20.47, 20.23, 20.0, 19.79, 19.57, 19.37, - 19.17, 18.97, 18.78, 18.6, 18.42, 18.24, 18.07, 17.9, 17.73, 17.56, 17.4, 17.24, 17.09, 16.93, - 16.78, 16.63, 16.48, 16.33, 16.19, 16.04, 15.9, 15.76, 15.62, 15.48, 15.34, 15.2, 15.06, 14.93, - 14.79, 14.66, 14.52, 14.39, 14.25, 14.12, 13.98, 13.85, 13.71, 13.58, 13.44, 13.31, 13.17, - 13.04, 12.9, 12.76, 12.62, 12.48, 12.34, 12.2, 12.06, 11.91, 11.76, 11.62, 11.46, 11.31, 11.15, - 10.99, 10.83, 10.66, 10.49, 10.31, 10.13, 9.94, 9.74, 9.53, 9.31, 9.08, 8.84, 8.57, 8.28, 7.96, - 7.6, 7.16, 6.61, 5.81, - ], - [ - 60.13, 50.81, 40.79, 33.41, 31.0, 29.52, 28.44, 27.59, 26.87, 26.25, 25.71, 25.21, 24.77, 24.36, - 23.98, 23.62, 23.29, 22.98, 22.68, 22.4, 22.12, 21.86, 21.61, 21.37, 21.14, 20.92, 20.7, 20.49, - 20.28, 20.08, 19.89, 19.7, 19.51, 19.33, 19.15, 18.97, 18.8, 18.63, 18.47, 18.3, 18.14, 17.98, - 17.82, 17.67, 17.52, 17.36, 17.21, 17.06, 16.92, 16.77, 16.63, 16.48, 16.34, 16.2, 16.05, 15.91, - 15.77, 15.63, 15.49, 15.35, 15.21, 15.08, 14.94, 14.8, 14.66, 14.52, 14.38, 14.24, 14.1, 13.96, - 13.82, 13.67, 13.53, 13.39, 13.24, 13.09, 12.94, 12.79, 12.64, 12.48, 12.33, 12.17, 12.0, 11.84, - 11.66, 11.49, 11.31, 11.12, 10.93, 10.74, 10.53, 10.31, 10.09, 9.84, 9.59, 9.31, 9.01, 8.67, - 8.29, 7.83, 7.26, 6.41, - ], - [ - 61.91, 52.47, 42.31, 34.81, 32.35, 30.84, 29.75, 28.87, 28.14, 27.5, 26.95, 26.45, 25.99, 25.57, - 25.18, 24.82, 24.48, 24.16, 23.85, 23.56, 23.28, 23.02, 22.76, 22.51, 22.28, 22.04, 21.82, 21.6, - 21.39, 21.19, 20.99, 20.79, 20.6, 20.41, 20.23, 20.05, 19.87, 19.7, 19.53, 19.36, 19.19, 19.03, - 18.87, 18.71, 18.55, 18.39, 18.24, 18.09, 17.93, 17.78, 17.63, 17.49, 17.34, 17.19, 17.05, 16.9, - 16.76, 16.61, 16.47, 16.32, 16.18, 16.04, 15.89, 15.75, 15.61, 15.46, 15.32, 15.17, 15.03, - 14.88, 14.74, 14.59, 14.44, 14.29, 14.14, 13.99, 13.83, 13.68, 13.52, 13.36, 13.19, 13.03, - 12.86, 12.68, 12.51, 12.33, 12.14, 11.95, 11.75, 11.54, 11.33, 11.1, 10.86, 10.61, 10.35, 10.06, - 9.74, 9.39, 8.99, 8.51, 7.91, 7.01, - ], - [ - 63.68, 54.12, 43.82, 36.19, 33.69, 32.16, 31.04, 30.14, 29.4, 28.75, 28.18, 27.67, 27.2, 26.78, - 26.38, 26.01, 25.66, 25.33, 25.02, 24.72, 24.43, 24.16, 23.9, 23.65, 23.4, 23.17, 22.94, 22.72, - 22.5, 22.29, 22.09, 21.89, 21.69, 21.5, 21.31, 21.12, 20.94, 20.76, 20.59, 20.42, 20.24, 20.08, - 19.91, 19.75, 19.58, 19.42, 19.26, 19.11, 18.95, 18.8, 18.64, 18.49, 18.34, 18.19, 18.04, 17.89, - 17.74, 17.59, 17.44, 17.29, 17.15, 17.0, 16.85, 16.7, 16.55, 16.41, 16.26, 16.11, 15.96, 15.81, - 15.66, 15.51, 15.35, 15.2, 15.04, 14.88, 14.72, 14.56, 14.4, 14.23, 14.06, 13.89, 13.72, 13.54, - 13.35, 13.17, 12.97, 12.77, 12.57, 12.35, 12.13, 11.9, 11.65, 11.39, 11.11, 10.81, 10.48, 10.12, - 9.7, 9.2, 8.57, 7.63, - ], - [ - 65.42, 55.76, 45.31, 37.57, 35.02, 33.46, 32.32, 31.41, 30.65, 29.99, 29.41, 28.89, 28.41, - 27.97, 27.57, 27.19, 26.83, 26.5, 26.18, 25.87, 25.58, 25.31, 25.04, 24.78, 24.53, 24.29, 24.05, - 23.83, 23.61, 23.39, 23.18, 22.98, 22.77, 22.58, 22.38, 22.2, 22.01, 21.83, 21.65, 21.47, 21.29, - 21.12, 20.95, 20.78, 20.62, 20.45, 20.29, 20.13, 19.97, 19.81, 19.65, 19.49, 19.34, 19.18, - 19.03, 18.87, 18.72, 18.57, 18.42, 18.26, 18.11, 17.96, 17.81, 17.66, 17.5, 17.35, 17.2, 17.05, - 16.89, 16.74, 16.58, 16.42, 16.27, 16.11, 15.95, 15.78, 15.62, 15.45, 15.28, 15.11, 14.94, - 14.76, 14.58, 14.39, 14.2, 14.01, 13.81, 13.6, 13.39, 13.17, 12.94, 12.7, 12.44, 12.17, 11.88, - 11.57, 11.23, 10.85, 10.42, 9.9, 9.24, 8.26, - ], - [ - 67.15, 57.37, 46.8, 38.93, 36.34, 34.76, 33.6, 32.67, 31.89, 31.22, 30.63, 30.1, 29.62, 29.17, - 28.76, 28.37, 28.01, 27.66, 27.34, 27.03, 26.73, 26.44, 26.17, 25.91, 25.65, 25.41, 25.17, - 24.93, 24.71, 24.49, 24.27, 24.06, 23.86, 23.66, 23.46, 23.27, 23.07, 22.89, 22.7, 22.52, 22.34, - 22.17, 21.99, 21.82, 21.65, 21.48, 21.31, 21.15, 20.98, 20.82, 20.66, 20.5, 20.34, 20.18, 20.02, - 19.86, 19.71, 19.55, 19.39, 19.24, 19.08, 18.92, 18.77, 18.61, 18.46, 18.3, 18.14, 17.98, 17.83, - 17.67, 17.51, 17.34, 17.18, 17.02, 16.85, 16.69, 16.52, 16.34, 16.17, 15.99, 15.81, 15.63, - 15.44, 15.25, 15.06, 14.86, 14.65, 14.44, 14.22, 13.99, 13.75, 13.5, 13.24, 12.96, 12.66, 12.34, - 11.99, 11.59, 11.14, 10.6, 9.91, 8.9, - ], - [ - 68.86, 58.98, 48.27, 40.29, 37.66, 36.05, 34.87, 33.92, 33.13, 32.45, 31.85, 31.31, 30.81, - 30.36, 29.94, 29.54, 29.17, 28.82, 28.49, 28.17, 27.87, 27.58, 27.3, 27.03, 26.77, 26.52, 26.28, - 26.04, 25.81, 25.58, 25.36, 25.15, 24.94, 24.73, 24.53, 24.33, 24.14, 23.95, 23.76, 23.57, - 23.39, 23.21, 23.03, 22.85, 22.68, 22.51, 22.34, 22.17, 22.0, 21.83, 21.67, 21.5, 21.34, 21.17, - 21.01, 20.85, 20.69, 20.53, 20.37, 20.21, 20.05, 19.89, 19.73, 19.57, 19.41, 19.25, 19.09, - 18.92, 18.76, 18.6, 18.43, 18.27, 18.1, 17.93, 17.76, 17.59, 17.42, 17.24, 17.06, 16.88, 16.69, - 16.51, 16.31, 16.12, 15.92, 15.71, 15.5, 15.28, 15.05, 14.82, 14.57, 14.31, 14.04, 13.75, 13.45, - 13.11, 12.75, 12.34, 11.87, 11.31, 10.6, 9.54, - ], - [ - 70.55, 60.57, 49.73, 41.64, 38.97, 37.33, 36.13, 35.17, 34.37, 33.68, 33.06, 32.51, 32.01, - 31.54, 31.11, 30.71, 30.34, 29.98, 29.64, 29.32, 29.01, 28.71, 28.43, 28.15, 27.89, 27.63, - 27.38, 27.14, 26.91, 26.68, 26.45, 26.23, 26.02, 25.81, 25.6, 25.4, 25.2, 25.01, 24.81, 24.62, - 24.44, 24.25, 24.07, 23.89, 23.71, 23.53, 23.36, 23.19, 23.01, 22.84, 22.67, 22.5, 22.34, 22.17, - 22.0, 21.84, 21.67, 21.51, 21.35, 21.18, 21.02, 20.85, 20.69, 20.53, 20.36, 20.2, 20.03, 19.87, - 19.7, 19.53, 19.36, 19.19, 19.02, 18.85, 18.67, 18.5, 18.32, 18.14, 17.95, 17.77, 17.58, 17.38, - 17.19, 16.98, 16.78, 16.57, 16.35, 16.12, 15.89, 15.65, 15.39, 15.13, 14.85, 14.55, 14.23, - 13.89, 13.51, 13.09, 12.61, 12.03, 11.29, 10.2, - ], - [ - 72.23, 62.14, 51.18, 42.98, 40.27, 38.61, 37.39, 36.42, 35.6, 34.89, 34.27, 33.71, 33.2, 32.73, - 32.29, 31.88, 31.5, 31.13, 30.79, 30.46, 30.14, 29.84, 29.55, 29.27, 29.0, 28.74, 28.49, 28.24, - 28.0, 27.77, 27.54, 27.31, 27.1, 26.88, 26.67, 26.47, 26.26, 26.06, 25.87, 25.67, 25.48, 25.29, - 25.11, 24.92, 24.74, 24.56, 24.38, 24.2, 24.03, 23.85, 23.68, 23.51, 23.34, 23.17, 23.0, 22.83, - 22.66, 22.49, 22.32, 22.16, 21.99, 21.82, 21.65, 21.48, 21.32, 21.15, 20.98, 20.81, 20.64, - 20.47, 20.29, 20.12, 19.94, 19.77, 19.59, 19.41, 19.22, 19.04, 18.85, 18.66, 18.46, 18.26, - 18.06, 17.85, 17.64, 17.42, 17.2, 16.97, 16.73, 16.48, 16.22, 15.95, 15.66, 15.35, 15.03, 14.67, - 14.28, 13.85, 13.35, 12.75, 11.99, 10.86, - ], - [ - 73.89, 63.71, 52.62, 44.31, 41.57, 39.88, 38.64, 37.65, 36.82, 36.11, 35.47, 34.9, 34.38, 33.9, - 33.46, 33.04, 32.65, 32.28, 31.93, 31.6, 31.28, 30.97, 30.68, 30.39, 30.12, 29.85, 29.59, 29.34, - 29.09, 28.86, 28.62, 28.39, 28.17, 27.95, 27.74, 27.53, 27.32, 27.12, 26.92, 26.72, 26.53, - 26.33, 26.14, 25.96, 25.77, 25.59, 25.4, 25.22, 25.04, 24.86, 24.69, 24.51, 24.34, 24.16, 23.99, - 23.82, 23.64, 23.47, 23.3, 23.13, 22.96, 22.79, 22.62, 22.44, 22.27, 22.1, 21.93, 21.75, 21.58, - 21.4, 21.22, 21.05, 20.87, 20.69, 20.5, 20.32, 20.13, 19.94, 19.75, 19.55, 19.35, 19.15, 18.94, - 18.73, 18.51, 18.29, 18.06, 17.82, 17.57, 17.32, 17.05, 16.77, 16.47, 16.16, 15.82, 15.46, - 15.06, 14.61, 14.1, 13.48, 12.7, 11.52, - ], - [ - 75.55, 65.26, 54.05, 45.64, 42.86, 41.15, 39.89, 38.89, 38.04, 37.32, 36.67, 36.09, 35.56, - 35.08, 34.62, 34.2, 33.81, 33.43, 33.07, 32.73, 32.41, 32.09, 31.79, 31.5, 31.22, 30.95, 30.69, - 30.43, 30.19, 29.94, 29.71, 29.47, 29.25, 29.02, 28.81, 28.59, 28.38, 28.17, 27.97, 27.77, - 27.57, 27.37, 27.18, 26.99, 26.8, 26.61, 26.42, 26.24, 26.06, 25.87, 25.69, 25.51, 25.34, 25.16, - 24.98, 24.81, 24.63, 24.45, 24.28, 24.1, 23.93, 23.75, 23.58, 23.4, 23.23, 23.05, 22.88, 22.7, - 22.52, 22.34, 22.16, 21.98, 21.79, 21.61, 21.42, 21.23, 21.04, 20.84, 20.65, 20.45, 20.24, - 20.03, 19.82, 19.6, 19.38, 19.15, 18.91, 18.67, 18.42, 18.16, 17.88, 17.6, 17.29, 16.97, 16.62, - 16.25, 15.84, 15.38, 14.85, 14.22, 13.41, 12.2, - ], - [ - 77.19, 66.81, 55.48, 46.96, 44.14, 42.41, 41.13, 40.11, 39.26, 38.52, 37.87, 37.28, 36.74, - 36.25, 35.79, 35.36, 34.96, 34.57, 34.21, 33.87, 33.53, 33.22, 32.91, 32.62, 32.33, 32.06, - 31.79, 31.53, 31.27, 31.03, 30.79, 30.55, 30.32, 30.09, 29.87, 29.65, 29.44, 29.23, 29.02, - 28.81, 28.61, 28.41, 28.21, 28.02, 27.83, 27.63, 27.44, 27.26, 27.07, 26.89, 26.7, 26.52, 26.34, - 26.16, 25.97, 25.79, 25.62, 25.44, 25.26, 25.08, 24.9, 24.72, 24.54, 24.37, 24.19, 24.01, 23.83, - 23.64, 23.46, 23.28, 23.09, 22.91, 22.72, 22.53, 22.34, 22.14, 21.95, 21.75, 21.55, 21.34, - 21.13, 20.92, 20.7, 20.48, 20.25, 20.02, 19.78, 19.53, 19.27, 19.0, 18.72, 18.42, 18.11, 17.78, - 17.43, 17.05, 16.62, 16.15, 15.61, 14.96, 14.13, 12.88, - ], - [ - 78.82, 68.34, 56.89, 48.28, 45.42, 43.66, 42.37, 41.34, 40.47, 39.72, 39.06, 38.46, 37.92, - 37.41, 36.95, 36.51, 36.1, 35.71, 35.35, 35.0, 34.66, 34.34, 34.03, 33.73, 33.44, 33.16, 32.89, - 32.62, 32.36, 32.11, 31.87, 31.63, 31.39, 31.16, 30.93, 30.71, 30.49, 30.28, 30.07, 29.86, - 29.65, 29.45, 29.25, 29.05, 28.85, 28.66, 28.47, 28.27, 28.08, 27.9, 27.71, 27.52, 27.34, 27.15, - 26.97, 26.78, 26.6, 26.42, 26.24, 26.06, 25.87, 25.69, 25.51, 25.33, 25.14, 24.96, 24.78, 24.59, - 24.4, 24.22, 24.03, 23.84, 23.65, 23.45, 23.26, 23.06, 22.86, 22.66, 22.45, 22.24, 22.03, 21.81, - 21.59, 21.36, 21.13, 20.89, 20.64, 20.39, 20.12, 19.85, 19.56, 19.26, 18.94, 18.6, 18.24, 17.84, - 17.41, 16.93, 16.37, 15.7, 14.85, 13.56, - ], - [ - 80.44, 69.87, 58.3, 49.59, 46.69, 44.91, 43.6, 42.56, 41.68, 40.92, 40.25, 39.64, 39.09, 38.58, - 38.11, 37.66, 37.25, 36.85, 36.48, 36.12, 35.78, 35.45, 35.14, 34.84, 34.54, 34.26, 33.98, - 33.71, 33.45, 33.19, 32.94, 32.7, 32.46, 32.23, 32.0, 31.77, 31.55, 31.33, 31.12, 30.9, 30.69, - 30.49, 30.28, 30.08, 29.88, 29.68, 29.49, 29.29, 29.1, 28.91, 28.71, 28.52, 28.34, 28.15, 27.96, - 27.77, 27.59, 27.4, 27.22, 27.03, 26.85, 26.66, 26.48, 26.29, 26.1, 25.92, 25.73, 25.54, 25.35, - 25.16, 24.97, 24.77, 24.58, 24.38, 24.18, 23.98, 23.77, 23.57, 23.36, 23.14, 22.92, 22.7, 22.48, - 22.24, 22.0, 21.76, 21.51, 21.25, 20.98, 20.7, 20.4, 20.09, 19.77, 19.42, 19.05, 18.65, 18.2, - 17.71, 17.14, 16.45, 15.57, 14.26, - ], - [ - 82.04, 71.38, 59.7, 50.89, 47.96, 46.16, 44.83, 43.77, 42.88, 42.11, 41.43, 40.82, 40.26, 39.74, - 39.26, 38.81, 38.39, 37.99, 37.61, 37.25, 36.9, 36.57, 36.25, 35.94, 35.64, 35.35, 35.07, 34.8, - 34.53, 34.27, 34.02, 33.77, 33.53, 33.29, 33.06, 32.83, 32.6, 32.38, 32.16, 31.95, 31.73, 31.52, - 31.32, 31.11, 30.91, 30.71, 30.51, 30.31, 30.11, 29.92, 29.72, 29.53, 29.34, 29.14, 28.95, - 28.76, 28.57, 28.39, 28.2, 28.01, 27.82, 27.63, 27.44, 27.25, 27.06, 26.87, 26.68, 26.49, 26.29, - 26.1, 25.9, 25.71, 25.51, 25.31, 25.1, 24.9, 24.69, 24.48, 24.26, 24.04, 23.82, 23.6, 23.36, - 23.13, 22.88, 22.63, 22.38, 22.11, 21.83, 21.55, 21.25, 20.93, 20.6, 20.25, 19.87, 19.45, 19.0, - 18.49, 17.91, 17.21, 16.31, 14.95, - ], - [ - 83.64, 72.89, 61.1, 52.19, 49.23, 47.4, 46.06, 44.99, 44.08, 43.3, 42.61, 41.99, 41.42, 40.9, - 40.41, 39.96, 39.53, 39.12, 38.74, 38.37, 38.02, 37.68, 37.36, 37.05, 36.74, 36.45, 36.16, - 35.89, 35.62, 35.35, 35.1, 34.84, 34.6, 34.36, 34.12, 33.89, 33.66, 33.43, 33.21, 32.99, 32.77, - 32.56, 32.35, 32.14, 31.93, 31.73, 31.52, 31.32, 31.12, 30.92, 30.73, 30.53, 30.34, 30.14, - 29.95, 29.75, 29.56, 29.37, 29.18, 28.99, 28.79, 28.6, 28.41, 28.22, 28.02, 27.83, 27.63, 27.44, - 27.24, 27.04, 26.84, 26.64, 26.44, 26.23, 26.03, 25.82, 25.61, 25.39, 25.17, 24.95, 24.72, - 24.49, 24.26, 24.01, 23.77, 23.51, 23.25, 22.98, 22.69, 22.4, 22.1, 21.77, 21.43, 21.07, 20.68, - 20.26, 19.8, 19.28, 18.68, 17.97, 17.04, 15.66, - ], - [ - 85.23, 74.39, 62.49, 53.49, 50.49, 48.64, 47.28, 46.19, 45.28, 44.49, 43.79, 43.16, 42.58, - 42.05, 41.56, 41.1, 40.67, 40.26, 39.87, 39.49, 39.14, 38.8, 38.47, 38.15, 37.84, 37.54, 37.25, - 36.97, 36.7, 36.43, 36.17, 35.92, 35.66, 35.42, 35.18, 34.94, 34.71, 34.48, 34.25, 34.03, 33.81, - 33.6, 33.38, 33.17, 32.96, 32.75, 32.54, 32.34, 32.14, 31.93, 31.73, 31.53, 31.34, 31.14, 30.94, - 30.74, 30.55, 30.35, 30.16, 29.96, 29.77, 29.57, 29.38, 29.18, 28.98, 28.79, 28.59, 28.39, - 28.19, 27.99, 27.78, 27.58, 27.37, 27.16, 26.95, 26.74, 26.52, 26.3, 26.08, 25.85, 25.62, 25.39, - 25.15, 24.9, 24.65, 24.39, 24.12, 23.84, 23.56, 23.26, 22.95, 22.62, 22.27, 21.9, 21.51, 21.08, - 20.6, 20.07, 19.46, 18.73, 17.78, 16.36, - ], - [ - 86.81, 75.88, 63.87, 54.78, 51.74, 49.88, 48.5, 47.4, 46.48, 45.68, 44.97, 44.33, 43.75, 43.21, - 42.71, 42.24, 41.8, 41.39, 40.99, 40.61, 40.25, 39.91, 39.57, 39.25, 38.94, 38.64, 38.34, 38.06, - 37.78, 37.51, 37.24, 36.98, 36.73, 36.48, 36.24, 36.0, 35.76, 35.53, 35.3, 35.07, 34.85, 34.63, - 34.41, 34.2, 33.98, 33.77, 33.56, 33.36, 33.15, 32.94, 32.74, 32.54, 32.34, 32.13, 31.93, 31.74, - 31.54, 31.34, 31.14, 30.94, 30.74, 30.54, 30.34, 30.15, 29.95, 29.74, 29.54, 29.34, 29.14, - 28.93, 28.73, 28.52, 28.31, 28.09, 27.88, 27.66, 27.44, 27.22, 26.99, 26.76, 26.53, 26.29, - 26.04, 25.79, 25.53, 25.27, 25.0, 24.71, 24.42, 24.12, 23.8, 23.46, 23.11, 22.73, 22.33, 21.89, - 21.41, 20.87, 20.24, 19.49, 18.53, 17.07, - ], - [ - 88.38, 77.37, 65.25, 56.06, 53.0, 51.11, 49.72, 48.6, 47.67, 46.86, 46.14, 45.49, 44.9, 44.36, - 43.85, 43.38, 42.94, 42.51, 42.11, 41.73, 41.37, 41.01, 40.68, 40.35, 40.03, 39.73, 39.43, - 39.14, 38.86, 38.58, 38.32, 38.05, 37.8, 37.54, 37.3, 37.05, 36.81, 36.58, 36.34, 36.11, 35.89, - 35.66, 35.44, 35.23, 35.01, 34.79, 34.58, 34.37, 34.16, 33.95, 33.75, 33.54, 33.34, 33.13, - 32.93, 32.73, 32.52, 32.32, 32.12, 31.92, 31.72, 31.52, 31.31, 31.11, 30.91, 30.7, 30.5, 30.29, - 30.09, 29.88, 29.67, 29.46, 29.24, 29.03, 28.81, 28.59, 28.36, 28.14, 27.91, 27.67, 27.43, - 27.19, 26.94, 26.68, 26.42, 26.15, 25.87, 25.59, 25.29, 24.98, 24.65, 24.31, 23.95, 23.57, - 23.16, 22.71, 22.22, 21.66, 21.03, 20.26, 19.28, 17.79, - ], - [ - 89.95, 78.84, 66.62, 57.34, 54.24, 52.34, 50.93, 49.8, 48.86, 48.04, 47.31, 46.66, 46.06, 45.51, - 45.0, 44.52, 44.07, 43.64, 43.23, 42.85, 42.48, 42.12, 41.78, 41.45, 41.13, 40.82, 40.52, 40.22, - 39.94, 39.66, 39.39, 39.12, 38.86, 38.6, 38.35, 38.11, 37.86, 37.62, 37.39, 37.15, 36.93, 36.7, - 36.47, 36.25, 36.03, 35.82, 35.6, 35.39, 35.17, 34.96, 34.75, 34.54, 34.34, 34.13, 33.92, 33.72, - 33.51, 33.31, 33.1, 32.9, 32.69, 32.49, 32.28, 32.08, 31.87, 31.66, 31.45, 31.25, 31.04, 30.82, - 30.61, 30.4, 30.18, 29.96, 29.74, 29.51, 29.28, 29.05, 28.82, 28.58, 28.34, 28.09, 27.84, 27.58, - 27.31, 27.04, 26.75, 26.46, 26.16, 25.84, 25.51, 25.16, 24.8, 24.41, 23.99, 23.53, 23.03, 22.47, - 21.82, 21.03, 20.03, 18.51, - ], - [ - 91.5, 80.31, 67.99, 58.62, 55.49, 53.56, 52.14, 51.0, 50.04, 49.21, 48.48, 47.82, 47.21, 46.66, - 46.14, 45.65, 45.2, 44.76, 44.35, 43.96, 43.59, 43.23, 42.88, 42.54, 42.22, 41.91, 41.6, 41.3, - 41.01, 40.73, 40.46, 40.19, 39.92, 39.66, 39.41, 39.16, 38.91, 38.67, 38.43, 38.19, 37.96, - 37.73, 37.5, 37.28, 37.06, 36.84, 36.62, 36.4, 36.19, 35.97, 35.76, 35.55, 35.34, 35.13, 34.92, - 34.71, 34.5, 34.29, 34.08, 33.88, 33.67, 33.46, 33.25, 33.04, 32.83, 32.62, 32.41, 32.2, 31.99, - 31.77, 31.55, 31.34, 31.12, 30.89, 30.67, 30.44, 30.21, 29.97, 29.73, 29.49, 29.24, 28.99, - 28.73, 28.47, 28.2, 27.92, 27.63, 27.34, 27.03, 26.71, 26.37, 26.02, 25.64, 25.25, 24.82, 24.35, - 23.84, 23.27, 22.61, 21.81, 20.78, 19.23, - ], - [ - 93.05, 81.78, 69.35, 59.89, 56.73, 54.78, 53.34, 52.19, 51.23, 50.39, 49.64, 48.97, 48.36, 47.8, - 47.28, 46.79, 46.32, 45.89, 45.47, 45.07, 44.69, 44.33, 43.98, 43.64, 43.31, 42.99, 42.68, - 42.38, 42.09, 41.8, 41.53, 41.25, 40.98, 40.72, 40.46, 40.21, 39.96, 39.71, 39.47, 39.23, 39.0, - 38.77, 38.53, 38.31, 38.08, 37.86, 37.64, 37.42, 37.2, 36.98, 36.76, 36.55, 36.34, 36.12, 35.91, - 35.7, 35.49, 35.28, 35.07, 34.85, 34.64, 34.43, 34.22, 34.01, 33.8, 33.58, 33.37, 33.15, 32.94, - 32.72, 32.5, 32.28, 32.05, 31.83, 31.6, 31.37, 31.13, 30.89, 30.65, 30.4, 30.15, 29.9, 29.64, - 29.37, 29.09, 28.81, 28.52, 28.21, 27.9, 27.57, 27.23, 26.87, 26.49, 26.09, 25.65, 25.18, 24.66, - 24.07, 23.4, 22.59, 21.54, 19.96, - ], - [ - 94.59, 83.24, 70.7, 61.16, 57.97, 56.0, 54.55, 53.38, 52.41, 51.56, 50.81, 50.13, 49.51, 48.94, - 48.41, 47.92, 47.45, 47.01, 46.59, 46.19, 45.8, 45.43, 45.08, 44.73, 44.4, 44.08, 43.77, 43.46, - 43.17, 42.88, 42.59, 42.32, 42.05, 41.78, 41.52, 41.26, 41.01, 40.76, 40.51, 40.27, 40.03, 39.8, - 39.56, 39.33, 39.1, 38.88, 38.65, 38.43, 38.21, 37.99, 37.77, 37.55, 37.34, 37.12, 36.9, 36.69, - 36.48, 36.26, 36.05, 35.83, 35.62, 35.41, 35.19, 34.98, 34.76, 34.54, 34.33, 34.11, 33.89, - 33.67, 33.44, 33.22, 32.99, 32.76, 32.53, 32.29, 32.06, 31.81, 31.57, 31.32, 31.06, 30.8, 30.54, - 30.26, 29.99, 29.7, 29.4, 29.09, 28.77, 28.44, 28.09, 27.73, 27.34, 26.93, 26.49, 26.01, 25.48, - 24.88, 24.2, 23.37, 22.3, 20.69, - ], - [ - 96.13, 84.69, 72.05, 62.43, 59.2, 57.22, 55.75, 54.57, 53.58, 52.73, 51.97, 51.28, 50.66, 50.08, - 49.55, 49.05, 48.57, 48.13, 47.7, 47.29, 46.91, 46.53, 46.17, 45.83, 45.49, 45.16, 44.85, 44.54, - 44.24, 43.95, 43.66, 43.38, 43.11, 42.84, 42.57, 42.31, 42.06, 41.8, 41.56, 41.31, 41.07, 40.83, - 40.59, 40.36, 40.13, 39.9, 39.67, 39.44, 39.22, 39.0, 38.78, 38.56, 38.34, 38.12, 37.9, 37.68, - 37.46, 37.25, 37.03, 36.81, 36.6, 36.38, 36.16, 35.94, 35.73, 35.51, 35.29, 35.06, 34.84, 34.62, - 34.39, 34.16, 33.93, 33.7, 33.46, 33.22, 32.98, 32.74, 32.49, 32.23, 31.97, 31.71, 31.44, 31.16, - 30.88, 30.59, 30.29, 29.97, 29.65, 29.31, 28.96, 28.59, 28.2, 27.78, 27.33, 26.84, 26.3, 25.7, - 25.0, 24.16, 23.07, 21.43, - ], - [ - 97.65, 86.14, 73.4, 63.69, 60.44, 58.43, 56.95, 55.76, 54.76, 53.9, 53.13, 52.44, 51.81, 51.22, - 50.68, 50.17, 49.7, 49.24, 48.81, 48.4, 48.01, 47.63, 47.27, 46.92, 46.58, 46.25, 45.93, 45.62, - 45.31, 45.02, 44.73, 44.44, 44.16, 43.89, 43.62, 43.36, 43.1, 42.85, 42.6, 42.35, 42.1, 41.86, - 41.62, 41.39, 41.15, 40.92, 40.69, 40.46, 40.23, 40.01, 39.78, 39.56, 39.34, 39.11, 38.89, - 38.67, 38.45, 38.23, 38.01, 37.79, 37.57, 37.35, 37.13, 36.91, 36.69, 36.47, 36.25, 36.02, - 35.79, 35.57, 35.34, 35.11, 34.87, 34.64, 34.4, 34.15, 33.91, 33.66, 33.41, 33.15, 32.89, 32.62, - 32.34, 32.06, 31.78, 31.48, 31.17, 30.86, 30.53, 30.18, 29.83, 29.45, 29.05, 28.63, 28.17, - 27.67, 27.12, 26.51, 25.8, 24.94, 23.84, 22.16, - ], - [ - 99.17, 87.58, 74.74, 64.95, 61.67, 59.64, 58.14, 56.94, 55.93, 55.06, 54.29, 53.59, 52.95, - 52.36, 51.81, 51.3, 50.82, 50.36, 49.93, 49.51, 49.11, 48.73, 48.36, 48.01, 47.66, 47.33, 47.01, - 46.69, 46.38, 46.08, 45.79, 45.5, 45.22, 44.95, 44.68, 44.41, 44.15, 43.89, 43.64, 43.39, 43.14, - 42.89, 42.65, 42.41, 42.17, 41.94, 41.7, 41.47, 41.24, 41.01, 40.79, 40.56, 40.34, 40.11, 39.89, - 39.66, 39.44, 39.22, 39.0, 38.77, 38.55, 38.33, 38.11, 37.88, 37.66, 37.43, 37.21, 36.98, 36.75, - 36.52, 36.28, 36.05, 35.81, 35.57, 35.33, 35.09, 34.84, 34.58, 34.33, 34.07, 33.8, 33.53, 33.25, - 32.97, 32.67, 32.37, 32.06, 31.74, 31.41, 31.06, 30.69, 30.31, 29.91, 29.48, 29.01, 28.51, - 27.95, 27.33, 26.6, 25.73, 24.61, 22.91, - ], - [ - 100.69, 89.01, 76.08, 66.21, 62.89, 60.85, 59.33, 58.12, 57.11, 56.22, 55.44, 54.73, 54.09, - 53.5, 52.94, 52.42, 51.94, 51.47, 51.04, 50.62, 50.21, 49.83, 49.46, 49.1, 48.75, 48.41, 48.08, - 47.77, 47.46, 47.15, 46.86, 46.57, 46.28, 46.0, 45.73, 45.46, 45.19, 44.93, 44.68, 44.42, 44.17, - 43.92, 43.68, 43.44, 43.2, 42.96, 42.72, 42.49, 42.25, 42.02, 41.79, 41.56, 41.34, 41.11, 40.88, - 40.66, 40.43, 40.2, 39.98, 39.75, 39.53, 39.3, 39.08, 38.85, 38.62, 38.39, 38.17, 37.93, 37.7, - 37.47, 37.23, 37.0, 36.75, 36.51, 36.27, 36.02, 35.77, 35.51, 35.25, 34.98, 34.71, 34.44, 34.16, - 33.87, 33.57, 33.27, 32.95, 32.63, 32.29, 31.93, 31.56, 31.18, 30.77, 30.33, 29.86, 29.34, - 28.78, 28.14, 27.41, 26.53, 25.38, 23.65, - ], - [ - 102.2, 90.44, 77.42, 67.46, 64.12, 62.05, 60.53, 59.3, 58.28, 57.38, 56.59, 55.88, 55.23, 54.63, - 54.07, 53.55, 53.05, 52.59, 52.14, 51.72, 51.31, 50.92, 50.55, 50.19, 49.83, 49.49, 49.16, - 48.84, 48.53, 48.22, 47.92, 47.63, 47.34, 47.06, 46.78, 46.51, 46.24, 45.98, 45.72, 45.46, 45.2, - 44.95, 44.71, 44.46, 44.22, 43.98, 43.74, 43.5, 43.26, 43.03, 42.8, 42.57, 42.34, 42.11, 41.88, - 41.65, 41.42, 41.19, 40.96, 40.74, 40.51, 40.28, 40.05, 39.82, 39.59, 39.36, 39.13, 38.89, - 38.66, 38.42, 38.18, 37.94, 37.7, 37.45, 37.2, 36.95, 36.7, 36.44, 36.17, 35.9, 35.63, 35.35, - 35.07, 34.77, 34.47, 34.16, 33.84, 33.51, 33.17, 32.81, 32.44, 32.04, 31.63, 31.18, 30.7, 30.18, - 29.61, 28.96, 28.22, 27.32, 26.16, 24.4, - ], - [ - 103.7, 91.87, 78.75, 68.71, 65.34, 63.25, 61.71, 60.48, 59.44, 58.54, 57.75, 57.03, 56.37, - 55.76, 55.2, 54.67, 54.17, 53.7, 53.25, 52.82, 52.41, 52.02, 51.64, 51.27, 50.92, 50.57, 50.24, - 49.91, 49.6, 49.29, 48.98, 48.69, 48.4, 48.11, 47.83, 47.56, 47.28, 47.02, 46.75, 46.49, 46.24, - 45.98, 45.73, 45.49, 45.24, 45.0, 44.75, 44.51, 44.28, 44.04, 43.8, 43.57, 43.34, 43.1, 42.87, - 42.64, 42.41, 42.18, 41.95, 41.72, 41.49, 41.25, 41.02, 40.79, 40.56, 40.32, 40.09, 39.85, - 39.61, 39.37, 39.13, 38.89, 38.64, 38.39, 38.14, 37.88, 37.63, 37.36, 37.1, 36.82, 36.55, 36.26, - 35.97, 35.68, 35.37, 35.06, 34.74, 34.4, 34.05, 33.69, 33.31, 32.91, 32.49, 32.04, 31.55, 31.02, - 30.44, 29.79, 29.03, 28.12, 26.94, 25.15, - ], - [ - 105.2, 93.29, 80.08, 69.96, 66.56, 64.45, 62.9, 61.66, 60.61, 59.7, 58.9, 58.17, 57.51, 56.89, - 56.32, 55.79, 55.29, 54.81, 54.36, 53.92, 53.51, 53.11, 52.73, 52.36, 52.0, 51.65, 51.31, 50.98, - 50.66, 50.35, 50.05, 49.75, 49.45, 49.16, 48.88, 48.6, 48.33, 48.06, 47.79, 47.53, 47.27, 47.01, - 46.76, 46.51, 46.26, 46.01, 45.77, 45.53, 45.29, 45.05, 44.81, 44.57, 44.34, 44.1, 43.87, 43.63, - 43.4, 43.16, 42.93, 42.7, 42.46, 42.23, 42.0, 41.76, 41.52, 41.29, 41.05, 40.81, 40.57, 40.33, - 40.08, 39.83, 39.58, 39.33, 39.08, 38.82, 38.56, 38.29, 38.02, 37.75, 37.46, 37.18, 36.88, - 36.58, 36.28, 35.96, 35.63, 35.29, 34.94, 34.57, 34.18, 33.78, 33.35, 32.89, 32.4, 31.87, 31.28, - 30.61, 29.84, 28.92, 27.72, 25.9, - ], - [ - 106.69, 94.71, 81.4, 71.2, 67.77, 65.65, 64.09, 62.83, 61.77, 60.86, 60.04, 59.31, 58.64, 58.02, - 57.45, 56.91, 56.4, 55.92, 55.46, 55.03, 54.61, 54.21, 53.82, 53.44, 53.08, 52.73, 52.39, 52.06, - 51.73, 51.42, 51.11, 50.8, 50.51, 50.22, 49.93, 49.65, 49.37, 49.1, 48.83, 48.56, 48.3, 48.04, - 47.79, 47.53, 47.28, 47.03, 46.79, 46.54, 46.3, 46.05, 45.81, 45.57, 45.34, 45.1, 44.86, 44.62, - 44.39, 44.15, 43.91, 43.68, 43.44, 43.21, 42.97, 42.73, 42.49, 42.25, 42.01, 41.77, 41.52, - 41.28, 41.03, 40.78, 40.53, 40.27, 40.02, 39.75, 39.49, 39.22, 38.95, 38.67, 38.38, 38.09, 37.8, - 37.49, 37.18, 36.86, 36.52, 36.18, 35.82, 35.45, 35.06, 34.65, 34.22, 33.75, 33.25, 32.71, - 32.11, 31.44, 30.66, 29.72, 28.5, 26.66, - ], - [ - 108.18, 96.12, 82.72, 72.44, 68.99, 66.85, 65.27, 64.0, 62.94, 62.01, 61.19, 60.45, 59.77, - 59.15, 58.57, 58.03, 57.51, 57.03, 56.57, 56.13, 55.7, 55.3, 54.91, 54.53, 54.16, 53.81, 53.46, - 53.13, 52.8, 52.48, 52.17, 51.86, 51.56, 51.27, 50.98, 50.69, 50.41, 50.14, 49.87, 49.6, 49.33, - 49.07, 48.81, 48.56, 48.3, 48.05, 47.8, 47.55, 47.31, 47.06, 46.82, 46.58, 46.34, 46.09, 45.85, - 45.62, 45.38, 45.14, 44.9, 44.66, 44.42, 44.18, 43.94, 43.7, 43.46, 43.22, 42.97, 42.73, 42.48, - 42.23, 41.98, 41.73, 41.47, 41.22, 40.95, 40.69, 40.42, 40.15, 39.87, 39.59, 39.3, 39.01, 38.71, - 38.4, 38.08, 37.76, 37.42, 37.07, 36.71, 36.33, 35.94, 35.52, 35.08, 34.61, 34.11, 33.56, 32.95, - 32.27, 31.48, 30.53, 29.29, 27.42, - ], - [ - 109.66, 97.53, 84.04, 73.68, 70.2, 68.04, 66.45, 65.17, 64.1, 63.16, 62.34, 61.59, 60.91, 60.28, - 59.69, 59.14, 58.63, 58.14, 57.67, 57.22, 56.8, 56.39, 55.99, 55.61, 55.24, 54.88, 54.54, 54.2, - 53.87, 53.54, 53.23, 52.92, 52.62, 52.32, 52.03, 51.74, 51.46, 51.18, 50.9, 50.63, 50.37, 50.1, - 49.84, 49.58, 49.32, 49.07, 48.82, 48.57, 48.32, 48.07, 47.82, 47.58, 47.34, 47.09, 46.85, - 46.61, 46.37, 46.12, 45.88, 45.64, 45.4, 45.16, 44.92, 44.67, 44.43, 44.18, 43.94, 43.69, 43.44, - 43.19, 42.93, 42.68, 42.42, 42.16, 41.89, 41.63, 41.36, 41.08, 40.8, 40.51, 40.22, 39.92, 39.62, - 39.31, 38.99, 38.66, 38.32, 37.96, 37.6, 37.22, 36.82, 36.4, 35.95, 35.47, 34.96, 34.4, 33.79, - 33.1, 32.3, 31.33, 30.08, 28.18, - ], - [ - 111.14, 98.93, 85.35, 74.92, 71.41, 69.23, 67.63, 66.34, 65.25, 64.31, 63.48, 62.73, 62.04, - 61.4, 60.81, 60.26, 59.74, 59.24, 58.77, 58.32, 57.89, 57.48, 57.08, 56.69, 56.32, 55.96, 55.61, - 55.27, 54.93, 54.61, 54.29, 53.98, 53.67, 53.37, 53.07, 52.79, 52.5, 52.22, 51.94, 51.67, 51.4, - 51.13, 50.87, 50.6, 50.34, 50.09, 49.83, 49.58, 49.33, 49.08, 48.83, 48.58, 48.33, 48.09, 47.84, - 47.6, 47.36, 47.11, 46.87, 46.62, 46.38, 46.13, 45.89, 45.64, 45.4, 45.15, 44.9, 44.65, 44.4, - 44.14, 43.89, 43.63, 43.37, 43.1, 42.83, 42.56, 42.29, 42.01, 41.73, 41.44, 41.14, 40.84, 40.53, - 40.22, 39.89, 39.56, 39.22, 38.86, 38.49, 38.1, 37.7, 37.27, 36.82, 36.34, 35.82, 35.25, 34.63, - 33.93, 33.12, 32.14, 30.87, 28.94, - ], - [ - 112.61, 100.33, 86.66, 76.15, 72.61, 70.42, 68.8, 67.5, 66.41, 65.46, 64.62, 63.86, 63.17, - 62.53, 61.93, 61.37, 60.84, 60.35, 59.87, 59.42, 58.98, 58.57, 58.16, 57.78, 57.4, 57.03, 56.68, - 56.33, 56.0, 55.67, 55.35, 55.03, 54.72, 54.42, 54.12, 53.83, 53.54, 53.26, 52.98, 52.7, 52.43, - 52.16, 51.89, 51.63, 51.37, 51.11, 50.85, 50.59, 50.34, 50.09, 49.83, 49.58, 49.33, 49.09, - 48.84, 48.59, 48.35, 48.1, 47.85, 47.61, 47.36, 47.11, 46.86, 46.62, 46.37, 46.12, 45.86, 45.61, - 45.35, 45.1, 44.84, 44.58, 44.31, 44.05, 43.78, 43.5, 43.22, 42.94, 42.66, 42.36, 42.07, 41.76, - 41.45, 41.13, 40.8, 40.46, 40.12, 39.75, 39.38, 38.99, 38.58, 38.15, 37.69, 37.2, 36.68, 36.11, - 35.47, 34.76, 33.94, 32.95, 31.66, 29.71, - ], - [ - 114.08, 101.73, 87.97, 77.39, 73.82, 71.61, 69.98, 68.67, 67.57, 66.61, 65.76, 65.0, 64.3, - 63.65, 63.05, 62.48, 61.95, 61.45, 60.97, 60.51, 60.08, 59.65, 59.25, 58.86, 58.48, 58.11, - 57.75, 57.4, 57.06, 56.73, 56.4, 56.09, 55.78, 55.47, 55.17, 54.87, 54.58, 54.3, 54.01, 53.73, - 53.46, 53.19, 52.92, 52.65, 52.39, 52.12, 51.86, 51.6, 51.35, 51.09, 50.84, 50.59, 50.33, 50.08, - 49.83, 49.58, 49.34, 49.09, 48.84, 48.59, 48.34, 48.09, 47.84, 47.59, 47.34, 47.08, 46.83, - 46.57, 46.31, 46.05, 45.79, 45.53, 45.26, 44.99, 44.72, 44.44, 44.16, 43.87, 43.58, 43.29, - 42.99, 42.68, 42.36, 42.04, 41.71, 41.37, 41.02, 40.65, 40.27, 39.87, 39.46, 39.02, 38.56, - 38.07, 37.54, 36.96, 36.32, 35.6, 34.77, 33.76, 32.46, 30.48, - ], - [ - 115.54, 103.12, 89.27, 78.62, 75.02, 72.8, 71.15, 69.83, 68.72, 67.76, 66.9, 66.13, 65.42, - 64.77, 64.16, 63.6, 63.06, 62.55, 62.07, 61.61, 61.17, 60.74, 60.33, 59.94, 59.55, 59.18, 58.82, - 58.47, 58.13, 57.79, 57.46, 57.14, 56.83, 56.52, 56.22, 55.92, 55.62, 55.33, 55.05, 54.77, - 54.49, 54.21, 53.94, 53.67, 53.41, 53.14, 52.88, 52.62, 52.36, 52.1, 51.84, 51.59, 51.33, 51.08, - 50.83, 50.58, 50.33, 50.07, 49.82, 49.57, 49.32, 49.07, 48.81, 48.56, 48.3, 48.05, 47.79, 47.53, - 47.27, 47.01, 46.75, 46.48, 46.21, 45.94, 45.66, 45.38, 45.1, 44.81, 44.51, 44.22, 43.91, 43.6, - 43.28, 42.95, 42.62, 42.27, 41.92, 41.55, 41.16, 40.76, 40.34, 39.9, 39.43, 38.93, 38.4, 37.81, - 37.16, 36.44, 35.59, 34.58, 33.26, 31.25, - ], - [ - 117.0, 104.5, 90.57, 79.84, 76.22, 73.98, 72.32, 70.99, 69.87, 68.9, 68.04, 67.26, 66.55, 65.89, - 65.28, 64.71, 64.17, 63.65, 63.17, 62.7, 62.26, 61.83, 61.41, 61.02, 60.63, 60.25, 59.89, 59.53, - 59.19, 58.85, 58.52, 58.2, 57.88, 57.57, 57.26, 56.96, 56.66, 56.37, 56.08, 55.8, 55.52, 55.24, - 54.97, 54.69, 54.43, 54.16, 53.89, 53.63, 53.37, 53.11, 52.85, 52.59, 52.33, 52.08, 51.82, - 51.57, 51.32, 51.06, 50.81, 50.55, 50.3, 50.04, 49.79, 49.53, 49.27, 49.02, 48.76, 48.5, 48.23, - 47.97, 47.7, 47.43, 47.16, 46.88, 46.6, 46.32, 46.03, 45.74, 45.44, 45.14, 44.84, 44.52, 44.2, - 43.87, 43.53, 43.18, 42.82, 42.45, 42.06, 41.65, 41.23, 40.78, 40.31, 39.8, 39.26, 38.67, 38.01, - 37.28, 36.42, 35.39, 34.06, 32.02, - ], - [ - 118.45, 105.89, 91.87, 81.07, 77.42, 75.16, 73.49, 72.15, 71.02, 70.04, 69.18, 68.39, 67.67, - 67.01, 66.39, 65.82, 65.27, 64.76, 64.26, 63.79, 63.35, 62.91, 62.5, 62.09, 61.7, 61.33, 60.96, - 60.6, 60.25, 59.91, 59.58, 59.25, 58.93, 58.62, 58.31, 58.0, 57.7, 57.41, 57.12, 56.83, 56.55, - 56.27, 55.99, 55.72, 55.45, 55.18, 54.91, 54.64, 54.38, 54.12, 53.85, 53.59, 53.33, 53.08, - 52.82, 52.56, 52.31, 52.05, 51.79, 51.54, 51.28, 51.02, 50.76, 50.5, 50.24, 49.98, 49.72, 49.46, - 49.19, 48.92, 48.65, 48.38, 48.11, 47.83, 47.55, 47.26, 46.97, 46.68, 46.38, 46.07, 45.76, - 45.44, 45.12, 44.78, 44.44, 44.09, 43.72, 43.34, 42.95, 42.54, 42.11, 41.66, 41.18, 40.67, - 40.12, 39.52, 38.86, 38.12, 37.25, 36.21, 34.86, 32.79, - ], - [ - 119.9, 107.27, 93.17, 82.29, 78.62, 76.34, 74.66, 73.31, 72.17, 71.19, 70.31, 69.52, 68.8, - 68.13, 67.51, 66.92, 66.38, 65.86, 65.36, 64.89, 64.43, 64.0, 63.58, 63.17, 62.78, 62.4, 62.03, - 61.66, 61.31, 60.97, 60.63, 60.3, 59.98, 59.66, 59.35, 59.05, 58.74, 58.45, 58.15, 57.86, 57.58, - 57.3, 57.02, 56.74, 56.46, 56.19, 55.92, 55.65, 55.39, 55.12, 54.86, 54.6, 54.33, 54.07, 53.81, - 53.55, 53.3, 53.04, 52.78, 52.52, 52.26, 52.0, 51.74, 51.48, 51.22, 50.95, 50.69, 50.42, 50.15, - 49.88, 49.61, 49.33, 49.06, 48.77, 48.49, 48.2, 47.91, 47.61, 47.31, 47.0, 46.69, 46.36, 46.04, - 45.7, 45.35, 45.0, 44.63, 44.24, 43.85, 43.43, 43.0, 42.54, 42.06, 41.54, 40.99, 40.38, 39.71, - 38.96, 38.08, 37.03, 35.66, 33.57, - ], - [ - 121.35, 108.65, 94.46, 83.51, 79.81, 77.52, 75.83, 74.47, 73.32, 72.33, 71.44, 70.65, 69.92, - 69.25, 68.62, 68.03, 67.48, 66.95, 66.45, 65.98, 65.52, 65.08, 64.66, 64.25, 63.85, 63.47, - 63.09, 62.73, 62.37, 62.03, 61.69, 61.36, 61.03, 60.71, 60.4, 60.09, 59.78, 59.48, 59.19, 58.9, - 58.61, 58.32, 58.04, 57.76, 57.48, 57.21, 56.94, 56.67, 56.4, 56.13, 55.86, 55.6, 55.33, 55.07, - 54.81, 54.55, 54.29, 54.02, 53.76, 53.5, 53.24, 52.98, 52.71, 52.45, 52.19, 51.92, 51.65, 51.38, - 51.11, 50.84, 50.56, 50.29, 50.01, 49.72, 49.43, 49.14, 48.85, 48.55, 48.24, 47.93, 47.61, - 47.29, 46.96, 46.61, 46.26, 45.9, 45.53, 45.15, 44.74, 44.33, 43.89, 43.43, 42.94, 42.42, 41.85, - 41.24, 40.56, 39.8, 38.92, 37.85, 36.46, 34.35, - ], - [ - 122.79, 110.02, 95.75, 84.73, 81.01, 78.7, 76.99, 75.62, 74.47, 73.47, 72.58, 71.77, 71.04, - 70.36, 69.73, 69.14, 68.58, 68.05, 67.55, 67.07, 66.61, 66.16, 65.74, 65.32, 64.93, 64.54, - 64.16, 63.79, 63.44, 63.09, 62.74, 62.41, 62.08, 61.76, 61.44, 61.13, 60.82, 60.52, 60.22, - 59.93, 59.64, 59.35, 59.06, 58.78, 58.5, 58.23, 57.95, 57.68, 57.41, 57.14, 56.87, 56.6, 56.33, - 56.07, 55.8, 55.54, 55.28, 55.01, 54.75, 54.49, 54.22, 53.96, 53.69, 53.42, 53.16, 52.89, 52.62, - 52.35, 52.07, 51.8, 51.52, 51.24, 50.96, 50.67, 50.38, 50.08, 49.79, 49.48, 49.17, 48.86, 48.54, - 48.21, 47.88, 47.53, 47.18, 46.81, 46.44, 46.05, 45.64, 45.22, 44.78, 44.31, 43.82, 43.29, - 42.72, 42.1, 41.42, 40.65, 39.75, 38.67, 37.27, 35.13, - ], - [ - 124.23, 111.39, 97.04, 85.95, 82.2, 79.88, 78.16, 76.78, 75.62, 74.61, 73.71, 72.9, 72.16, - 71.48, 70.84, 70.24, 69.68, 69.15, 68.64, 68.16, 67.69, 67.25, 66.82, 66.4, 66.0, 65.61, 65.23, - 64.86, 64.5, 64.14, 63.8, 63.46, 63.13, 62.8, 62.48, 62.17, 61.86, 61.56, 61.26, 60.96, 60.67, - 60.38, 60.09, 59.8, 59.52, 59.24, 58.96, 58.69, 58.42, 58.14, 57.87, 57.6, 57.33, 57.07, 56.8, - 56.53, 56.27, 56.0, 55.73, 55.47, 55.2, 54.93, 54.67, 54.4, 54.13, 53.86, 53.59, 53.31, 53.03, - 52.76, 52.48, 52.19, 51.91, 51.62, 51.32, 51.03, 50.73, 50.42, 50.11, 49.79, 49.47, 49.14, 48.8, - 48.45, 48.09, 47.72, 47.34, 46.95, 46.54, 46.11, 45.67, 45.2, 44.7, 44.16, 43.59, 42.96, 42.27, - 41.49, 40.59, 39.5, 38.08, 35.91, - ], - [ - 125.66, 112.76, 98.32, 87.17, 83.39, 81.05, 79.32, 77.93, 76.76, 75.74, 74.84, 74.02, 73.28, - 72.59, 71.95, 71.35, 70.78, 70.25, 69.73, 69.25, 68.78, 68.33, 67.89, 67.48, 67.07, 66.68, - 66.29, 65.92, 65.56, 65.2, 64.85, 64.51, 64.18, 63.85, 63.53, 63.21, 62.9, 62.59, 62.29, 61.99, - 61.69, 61.4, 61.11, 60.82, 60.54, 60.26, 59.98, 59.7, 59.43, 59.15, 58.88, 58.61, 58.33, 58.06, - 57.8, 57.53, 57.26, 56.99, 56.72, 56.45, 56.18, 55.91, 55.64, 55.37, 55.1, 54.83, 54.55, 54.27, - 54.0, 53.72, 53.43, 53.15, 52.86, 52.57, 52.27, 51.97, 51.67, 51.36, 51.04, 50.72, 50.39, 50.06, - 49.72, 49.37, 49.01, 48.64, 48.25, 47.85, 47.44, 47.01, 46.56, 46.08, 45.58, 45.04, 44.46, - 43.83, 43.13, 42.34, 41.43, 40.32, 38.89, 36.7, - ], - [ - 127.1, 114.12, 99.61, 88.38, 84.58, 82.23, 80.48, 79.08, 77.9, 76.88, 75.97, 75.15, 74.4, 73.7, - 73.06, 72.45, 71.88, 71.34, 70.83, 70.33, 69.86, 69.41, 68.97, 68.55, 68.14, 67.74, 67.36, - 66.98, 66.61, 66.26, 65.91, 65.56, 65.23, 64.9, 64.57, 64.25, 63.94, 63.63, 63.32, 63.02, 62.72, - 62.43, 62.13, 61.85, 61.56, 61.27, 60.99, 60.71, 60.43, 60.16, 59.88, 59.61, 59.33, 59.06, - 58.79, 58.52, 58.25, 57.98, 57.71, 57.44, 57.16, 56.89, 56.62, 56.35, 56.07, 55.8, 55.52, 55.24, - 54.96, 54.67, 54.39, 54.1, 53.81, 53.51, 53.22, 52.91, 52.61, 52.29, 51.98, 51.65, 51.32, 50.99, - 50.64, 50.29, 49.92, 49.55, 49.16, 48.76, 48.34, 47.91, 47.45, 46.97, 46.46, 45.91, 45.33, - 44.69, 43.98, 43.19, 42.27, 41.15, 39.7, 37.48, - ], - [ - 128.52, 115.49, 100.89, 89.59, 85.77, 83.4, 81.64, 80.23, 79.04, 78.01, 77.1, 76.27, 75.51, - 74.82, 74.17, 73.56, 72.98, 72.44, 71.92, 71.42, 70.95, 70.49, 70.05, 69.62, 69.21, 68.81, - 68.42, 68.04, 67.67, 67.31, 66.96, 66.61, 66.27, 65.94, 65.61, 65.29, 64.98, 64.66, 64.35, - 64.05, 63.75, 63.45, 63.16, 62.87, 62.58, 62.29, 62.01, 61.72, 61.44, 61.16, 60.89, 60.61, - 60.33, 60.06, 59.79, 59.51, 59.24, 58.97, 58.69, 58.42, 58.15, 57.87, 57.6, 57.32, 57.04, 56.77, - 56.49, 56.2, 55.92, 55.63, 55.35, 55.06, 54.76, 54.46, 54.16, 53.86, 53.55, 53.23, 52.91, 52.59, - 52.25, 51.91, 51.56, 51.21, 50.84, 50.46, 50.07, 49.66, 49.24, 48.8, 48.34, 47.86, 47.34, 46.79, - 46.2, 45.56, 44.84, 44.04, 43.11, 41.98, 40.51, 38.27, - ], - [ - 129.95, 116.85, 102.17, 90.8, 86.95, 84.57, 82.8, 81.38, 80.19, 79.15, 78.22, 77.39, 76.63, - 75.93, 75.27, 74.66, 74.08, 73.53, 73.01, 72.51, 72.03, 71.57, 71.13, 70.7, 70.28, 69.88, 69.49, - 69.1, 68.73, 68.37, 68.01, 67.66, 67.32, 66.99, 66.66, 66.33, 66.01, 65.7, 65.39, 65.08, 64.78, - 64.48, 64.18, 63.89, 63.6, 63.31, 63.02, 62.74, 62.45, 62.17, 61.89, 61.61, 61.33, 61.06, 60.78, - 60.51, 60.23, 59.95, 59.68, 59.4, 59.13, 58.85, 58.57, 58.3, 58.02, 57.74, 57.45, 57.17, 56.88, - 56.59, 56.3, 56.01, 55.71, 55.41, 55.11, 54.8, 54.49, 54.17, 53.85, 53.52, 53.18, 52.84, 52.49, - 52.13, 51.76, 51.37, 50.98, 50.57, 50.14, 49.7, 49.24, 48.75, 48.23, 47.67, 47.07, 46.42, 45.7, - 44.89, 43.95, 42.81, 41.33, 39.06, - ], - [ - 131.37, 118.2, 103.44, 92.01, 88.14, 85.74, 83.96, 82.53, 81.33, 80.28, 79.35, 78.51, 77.75, - 77.04, 76.38, 75.76, 75.18, 74.62, 74.1, 73.59, 73.11, 72.65, 72.2, 71.77, 71.35, 70.94, 70.55, - 70.16, 69.79, 69.42, 69.06, 68.71, 68.37, 68.03, 67.7, 67.37, 67.05, 66.73, 66.42, 66.11, 65.8, - 65.5, 65.2, 64.91, 64.61, 64.32, 64.03, 63.75, 63.46, 63.18, 62.9, 62.61, 62.33, 62.06, 61.78, - 61.5, 61.22, 60.94, 60.67, 60.39, 60.11, 59.83, 59.55, 59.27, 58.99, 58.71, 58.42, 58.13, 57.85, - 57.56, 57.26, 56.97, 56.67, 56.36, 56.06, 55.75, 55.43, 55.11, 54.78, 54.45, 54.11, 53.77, - 53.41, 53.05, 52.67, 52.29, 51.89, 51.48, 51.05, 50.6, 50.13, 49.64, 49.11, 48.55, 47.95, 47.29, - 46.56, 45.74, 44.79, 43.64, 42.14, 39.86, - ], - [ - 132.79, 119.55, 104.72, 93.22, 89.32, 86.9, 85.11, 83.68, 82.46, 81.41, 80.48, 79.63, 78.86, - 78.15, 77.48, 76.86, 76.27, 75.72, 75.19, 74.68, 74.19, 73.73, 73.28, 72.84, 72.42, 72.01, - 71.61, 71.23, 70.85, 70.48, 70.12, 69.76, 69.42, 69.08, 68.74, 68.41, 68.09, 67.77, 67.45, - 67.14, 66.83, 66.53, 66.23, 65.93, 65.63, 65.34, 65.05, 64.76, 64.47, 64.18, 63.9, 63.62, 63.33, - 63.05, 62.77, 62.49, 62.21, 61.93, 61.65, 61.37, 61.09, 60.81, 60.53, 60.25, 59.96, 59.68, - 59.39, 59.1, 58.81, 58.52, 58.22, 57.92, 57.62, 57.31, 57.0, 56.69, 56.37, 56.05, 55.72, 55.39, - 55.04, 54.69, 54.34, 53.97, 53.59, 53.2, 52.8, 52.38, 51.95, 51.5, 51.03, 50.53, 50.0, 49.43, - 48.82, 48.16, 47.42, 46.59, 45.63, 44.47, 42.96, 40.65, - ], - [ - 134.2, 120.9, 105.99, 94.42, 90.5, 88.07, 86.27, 84.82, 83.6, 82.54, 81.6, 80.75, 79.97, 79.26, - 78.59, 77.96, 77.37, 76.81, 76.27, 75.76, 75.27, 74.8, 74.35, 73.91, 73.49, 73.08, 72.68, 72.28, - 71.9, 71.53, 71.17, 70.81, 70.46, 70.12, 69.78, 69.45, 69.12, 68.8, 68.48, 68.17, 67.86, 67.55, - 67.25, 66.95, 66.65, 66.35, 66.06, 65.77, 65.48, 65.19, 64.9, 64.62, 64.33, 64.05, 63.77, 63.49, - 63.2, 62.92, 62.64, 62.36, 62.07, 61.79, 61.51, 61.22, 60.93, 60.65, 60.36, 60.07, 59.77, 59.48, - 59.18, 58.88, 58.57, 58.27, 57.95, 57.64, 57.32, 56.99, 56.66, 56.32, 55.98, 55.62, 55.26, - 54.89, 54.51, 54.12, 53.71, 53.29, 52.86, 52.4, 51.92, 51.42, 50.88, 50.31, 49.7, 49.03, 48.29, - 47.45, 46.48, 45.31, 43.78, 41.44, - ], - [ - 135.61, 122.25, 107.26, 95.63, 91.68, 89.23, 87.42, 85.96, 84.74, 83.67, 82.72, 81.87, 81.09, - 80.36, 79.69, 79.06, 78.46, 77.9, 77.36, 76.85, 76.35, 75.88, 75.42, 74.98, 74.56, 74.14, 73.74, - 73.34, 72.96, 72.59, 72.22, 71.86, 71.51, 71.16, 70.82, 70.49, 70.16, 69.83, 69.51, 69.2, 68.89, - 68.58, 68.27, 67.97, 67.67, 67.37, 67.07, 66.78, 66.49, 66.2, 65.91, 65.62, 65.33, 65.05, 64.76, - 64.48, 64.19, 63.91, 63.63, 63.34, 63.06, 62.77, 62.48, 62.2, 61.91, 61.62, 61.33, 61.03, 60.74, - 60.44, 60.14, 59.83, 59.53, 59.22, 58.9, 58.58, 58.26, 57.93, 57.6, 57.26, 56.91, 56.55, 56.19, - 55.81, 55.43, 55.03, 54.63, 54.2, 53.76, 53.3, 52.82, 52.31, 51.77, 51.19, 50.57, 49.9, 49.15, - 48.31, 47.33, 46.14, 44.6, 42.24, - ], - [ - 137.02, 123.6, 108.53, 96.83, 92.86, 90.4, 88.57, 87.11, 85.87, 84.8, 83.85, 82.98, 82.2, 81.47, - 80.79, 80.16, 79.56, 78.99, 78.45, 77.93, 77.43, 76.96, 76.5, 76.05, 75.62, 75.21, 74.8, 74.4, - 74.02, 73.64, 73.27, 72.91, 72.55, 72.21, 71.86, 71.53, 71.2, 70.87, 70.55, 70.23, 69.91, 69.6, - 69.29, 68.99, 68.69, 68.39, 68.09, 67.79, 67.5, 67.2, 66.91, 66.62, 66.33, 66.05, 65.76, 65.47, - 65.19, 64.9, 64.61, 64.33, 64.04, 63.75, 63.46, 63.17, 62.88, 62.59, 62.29, 62.0, 61.7, 61.4, - 61.1, 60.79, 60.48, 60.17, 59.85, 59.53, 59.2, 58.87, 58.53, 58.19, 57.84, 57.48, 57.11, 56.74, - 56.35, 55.95, 55.54, 55.11, 54.67, 54.2, 53.72, 53.2, 52.66, 52.08, 51.45, 50.77, 50.01, 49.16, - 48.17, 46.98, 45.42, 43.04, - ], - [ - 138.43, 124.94, 109.79, 98.03, 94.04, 91.56, 89.73, 88.25, 87.01, 85.93, 84.97, 84.1, 83.31, - 82.58, 81.89, 81.25, 80.65, 80.08, 79.53, 79.01, 78.51, 78.03, 77.57, 77.12, 76.69, 76.27, - 75.86, 75.46, 75.07, 74.69, 74.32, 73.96, 73.6, 73.25, 72.9, 72.57, 72.23, 71.9, 71.58, 71.26, - 70.94, 70.63, 70.32, 70.01, 69.7, 69.4, 69.1, 68.8, 68.51, 68.21, 67.92, 67.63, 67.33, 67.04, - 66.75, 66.47, 66.18, 65.89, 65.6, 65.31, 65.02, 64.73, 64.44, 64.15, 63.85, 63.56, 63.26, 62.97, - 62.66, 62.36, 62.06, 61.75, 61.44, 61.12, 60.8, 60.48, 60.15, 59.81, 59.47, 59.13, 58.77, 58.41, - 58.04, 57.66, 57.27, 56.87, 56.45, 56.02, 55.57, 55.11, 54.61, 54.1, 53.55, 52.96, 52.33, 51.64, - 50.88, 50.02, 49.02, 47.82, 46.24, 43.84, - ], - [ - 139.83, 126.28, 111.06, 99.23, 95.21, 92.72, 90.88, 89.39, 88.14, 87.05, 86.09, 85.22, 84.42, - 83.68, 82.99, 82.35, 81.74, 81.17, 80.62, 80.09, 79.59, 79.11, 78.64, 78.19, 77.76, 77.33, - 76.92, 76.52, 76.13, 75.75, 75.37, 75.0, 74.64, 74.29, 73.94, 73.6, 73.27, 72.93, 72.61, 72.28, - 71.97, 71.65, 71.34, 71.03, 70.72, 70.42, 70.11, 69.81, 69.51, 69.22, 68.92, 68.63, 68.33, - 68.04, 67.75, 67.46, 67.17, 66.88, 66.59, 66.29, 66.0, 65.71, 65.42, 65.12, 64.83, 64.53, 64.23, - 63.93, 63.63, 63.32, 63.02, 62.71, 62.39, 62.07, 61.75, 61.42, 61.09, 60.76, 60.41, 60.06, - 59.71, 59.34, 58.97, 58.59, 58.19, 57.79, 57.37, 56.93, 56.48, 56.01, 55.51, 54.99, 54.44, - 53.85, 53.21, 52.51, 51.75, 50.88, 49.87, 48.66, 47.07, 44.64, - ], - [ - 141.23, 127.62, 112.32, 100.43, 96.39, 93.88, 92.02, 90.53, 89.27, 88.18, 87.21, 86.33, 85.53, - 84.79, 84.09, 83.45, 82.83, 82.26, 81.7, 81.18, 80.67, 80.18, 79.71, 79.26, 78.82, 78.4, 77.98, - 77.58, 77.18, 76.8, 76.42, 76.05, 75.69, 75.33, 74.98, 74.64, 74.3, 73.97, 73.64, 73.31, 72.99, - 72.67, 72.36, 72.05, 71.74, 71.43, 71.13, 70.82, 70.52, 70.22, 69.93, 69.63, 69.33, 69.04, - 68.75, 68.45, 68.16, 67.87, 67.57, 67.28, 66.99, 66.69, 66.4, 66.1, 65.8, 65.5, 65.2, 64.9, - 64.59, 64.29, 63.98, 63.66, 63.35, 63.03, 62.7, 62.37, 62.04, 61.7, 61.35, 61.0, 60.64, 60.27, - 59.9, 59.51, 59.11, 58.71, 58.28, 57.84, 57.39, 56.91, 56.41, 55.89, 55.33, 54.73, 54.09, 53.39, - 52.61, 51.74, 50.72, 49.5, 47.89, 45.44, - ], - [ - 142.63, 128.95, 113.58, 101.62, 97.56, 95.04, 93.17, 91.67, 90.4, 89.3, 88.33, 87.44, 86.64, - 85.89, 85.19, 84.54, 83.93, 83.34, 82.79, 82.26, 81.75, 81.26, 80.79, 80.33, 79.89, 79.46, - 79.04, 78.63, 78.24, 77.85, 77.47, 77.1, 76.73, 76.38, 76.02, 75.68, 75.34, 75.0, 74.67, 74.34, - 74.02, 73.7, 73.38, 73.07, 72.75, 72.45, 72.14, 71.83, 71.53, 71.23, 70.93, 70.63, 70.33, 70.04, - 69.74, 69.45, 69.15, 68.86, 68.56, 68.26, 67.97, 67.67, 67.37, 67.08, 66.78, 66.47, 66.17, - 65.87, 65.56, 65.25, 64.94, 64.62, 64.3, 63.98, 63.65, 63.32, 62.98, 62.64, 62.29, 61.94, 61.58, - 61.21, 60.83, 60.44, 60.04, 59.62, 59.2, 58.76, 58.3, 57.82, 57.31, 56.78, 56.22, 55.62, 54.97, - 54.26, 53.48, 52.6, 51.58, 50.34, 48.72, 46.25, - ], - [ - 144.02, 130.29, 114.84, 102.82, 98.73, 96.2, 94.32, 92.81, 91.54, 90.43, 89.44, 88.56, 87.74, - 86.99, 86.29, 85.64, 85.02, 84.43, 83.87, 83.34, 82.82, 82.33, 81.86, 81.4, 80.95, 80.52, 80.1, - 79.69, 79.29, 78.9, 78.52, 78.14, 77.78, 77.42, 77.06, 76.71, 76.37, 76.03, 75.7, 75.37, 75.04, - 74.72, 74.4, 74.08, 73.77, 73.46, 73.15, 72.84, 72.54, 72.24, 71.93, 71.63, 71.33, 71.04, 70.74, - 70.44, 70.14, 69.85, 69.55, 69.25, 68.95, 68.65, 68.35, 68.05, 67.75, 67.45, 67.14, 66.83, - 66.52, 66.21, 65.9, 65.58, 65.26, 64.93, 64.6, 64.27, 63.93, 63.58, 63.23, 62.88, 62.51, 62.14, - 61.76, 61.36, 60.96, 60.54, 60.11, 59.67, 59.21, 58.72, 58.22, 57.68, 57.11, 56.51, 55.85, - 55.14, 54.35, 53.46, 52.43, 51.18, 49.55, 47.05, - ], - [ - 145.41, 131.62, 116.09, 104.01, 99.9, 97.35, 95.46, 93.95, 92.66, 91.55, 90.56, 89.67, 88.85, - 88.09, 87.39, 86.73, 86.11, 85.52, 84.95, 84.42, 83.9, 83.41, 82.93, 82.46, 82.02, 81.58, 81.16, - 80.75, 80.34, 79.95, 79.57, 79.19, 78.82, 78.46, 78.1, 77.75, 77.41, 77.06, 76.73, 76.4, 76.07, - 75.74, 75.42, 75.1, 74.79, 74.47, 74.16, 73.86, 73.55, 73.24, 72.94, 72.64, 72.33, 72.03, 71.73, - 71.43, 71.13, 70.83, 70.54, 70.24, 69.94, 69.63, 69.33, 69.03, 68.72, 68.42, 68.11, 67.8, 67.49, - 67.18, 66.86, 66.54, 66.21, 65.89, 65.55, 65.22, 64.88, 64.53, 64.17, 63.81, 63.45, 63.07, - 62.69, 62.29, 61.88, 61.47, 61.03, 60.58, 60.12, 59.63, 59.12, 58.58, 58.01, 57.4, 56.74, 56.02, - 55.22, 54.33, 53.28, 52.02, 50.38, 47.86, - ], - [ - 146.8, 132.94, 117.35, 105.2, 101.07, 98.51, 96.61, 95.08, 93.79, 92.67, 91.68, 90.78, 89.96, - 89.2, 88.49, 87.82, 87.2, 86.6, 86.04, 85.5, 84.98, 84.48, 84.0, 83.53, 83.08, 82.64, 82.22, - 81.8, 81.4, 81.0, 80.62, 80.24, 79.86, 79.5, 79.14, 78.79, 78.44, 78.1, 77.76, 77.42, 77.09, - 76.77, 76.44, 76.12, 75.8, 75.49, 75.18, 74.87, 74.56, 74.25, 73.94, 73.64, 73.33, 73.03, 72.73, - 72.43, 72.13, 71.82, 71.52, 71.22, 70.92, 70.62, 70.31, 70.01, 69.7, 69.39, 69.08, 68.77, 68.46, - 68.14, 67.82, 67.5, 67.17, 66.84, 66.51, 66.17, 65.82, 65.47, 65.12, 64.75, 64.38, 64.0, 63.62, - 63.22, 62.81, 62.39, 61.95, 61.5, 61.03, 60.54, 60.02, 59.48, 58.9, 58.28, 57.62, 56.9, 56.09, - 55.19, 54.14, 52.87, 51.21, 48.67, - ], - [ - 148.19, 134.27, 118.6, 106.39, 102.24, 99.66, 97.75, 96.22, 94.92, 93.79, 92.79, 91.89, 91.06, - 90.3, 89.58, 88.92, 88.29, 87.69, 87.12, 86.57, 86.05, 85.55, 85.07, 84.6, 84.14, 83.7, 83.28, - 82.86, 82.45, 82.05, 81.66, 81.28, 80.91, 80.54, 80.18, 79.82, 79.47, 79.13, 78.79, 78.45, - 78.12, 77.79, 77.46, 77.14, 76.82, 76.5, 76.19, 75.88, 75.56, 75.26, 74.95, 74.64, 74.33, 74.03, - 73.73, 73.42, 73.12, 72.81, 72.51, 72.21, 71.9, 71.6, 71.29, 70.98, 70.67, 70.36, 70.05, 69.74, - 69.42, 69.1, 68.78, 68.46, 68.13, 67.79, 67.46, 67.12, 66.77, 66.42, 66.06, 65.69, 65.32, 64.94, - 64.55, 64.15, 63.73, 63.31, 62.87, 62.41, 61.94, 61.44, 60.92, 60.38, 59.79, 59.17, 58.5, 57.77, - 56.97, 56.05, 55.0, 53.71, 52.04, 49.48, - ], - [ - 149.57, 135.6, 119.85, 107.58, 103.41, 100.82, 98.9, 97.35, 96.05, 94.92, 93.91, 93.0, 92.17, - 91.4, 90.68, 90.01, 89.37, 88.77, 88.2, 87.65, 87.13, 86.62, 86.13, 85.66, 85.21, 84.76, 84.33, - 83.91, 83.5, 83.1, 82.71, 82.33, 81.95, 81.58, 81.22, 80.86, 80.51, 80.16, 79.82, 79.48, 79.14, - 78.81, 78.48, 78.16, 77.84, 77.52, 77.2, 76.89, 76.57, 76.26, 75.95, 75.64, 75.33, 75.03, 74.72, - 74.41, 74.11, 73.8, 73.5, 73.19, 72.89, 72.58, 72.27, 71.96, 71.65, 71.34, 71.02, 70.71, 70.39, - 70.07, 69.74, 69.42, 69.08, 68.75, 68.41, 68.07, 67.72, 67.36, 67.0, 66.63, 66.26, 65.87, 65.48, - 65.07, 64.66, 64.23, 63.79, 63.33, 62.85, 62.35, 61.83, 61.28, 60.69, 60.06, 59.39, 58.65, - 57.84, 56.92, 55.85, 54.56, 52.87, 50.29, - ], - [ - 150.95, 136.92, 121.1, 108.77, 104.58, 101.97, 100.04, 98.48, 97.17, 96.03, 95.02, 94.11, 93.27, - 92.5, 91.78, 91.1, 90.46, 89.86, 89.28, 88.73, 88.2, 87.69, 87.2, 86.73, 86.27, 85.82, 85.39, - 84.97, 84.56, 84.15, 83.76, 83.37, 82.99, 82.62, 82.26, 81.9, 81.54, 81.19, 80.85, 80.51, 80.17, - 79.84, 79.51, 79.18, 78.85, 78.53, 78.21, 77.9, 77.58, 77.27, 76.96, 76.64, 76.33, 76.03, 75.72, - 75.41, 75.1, 74.79, 74.49, 74.18, 73.87, 73.56, 73.25, 72.94, 72.62, 72.31, 71.99, 71.68, 71.35, - 71.03, 70.7, 70.37, 70.04, 69.7, 69.36, 69.02, 68.66, 68.31, 67.94, 67.57, 67.19, 66.81, 66.41, - 66.0, 65.58, 65.15, 64.71, 64.24, 63.76, 63.26, 62.73, 62.18, 61.59, 60.96, 60.28, 59.53, 58.71, - 57.79, 56.71, 55.41, 53.71, 51.1, - ], - [ - 152.33, 138.24, 122.35, 109.96, 105.74, 103.12, 101.18, 99.62, 98.3, 97.15, 96.14, 95.22, 94.37, - 93.6, 92.87, 92.19, 91.55, 90.94, 90.36, 89.81, 89.28, 88.76, 88.27, 87.79, 87.33, 86.88, 86.45, - 86.02, 85.61, 85.2, 84.81, 84.42, 84.04, 83.66, 83.29, 82.93, 82.57, 82.22, 81.88, 81.53, 81.19, - 80.86, 80.53, 80.2, 79.87, 79.55, 79.23, 78.91, 78.59, 78.27, 77.96, 77.65, 77.33, 77.02, 76.71, - 76.4, 76.09, 75.78, 75.47, 75.16, 74.85, 74.54, 74.23, 73.91, 73.6, 73.28, 72.96, 72.64, 72.32, - 72.0, 71.67, 71.33, 71.0, 70.66, 70.32, 69.97, 69.61, 69.25, 68.89, 68.51, 68.13, 67.74, 67.34, - 66.93, 66.51, 66.07, 65.63, 65.16, 64.67, 64.17, 63.64, 63.08, 62.48, 61.85, 61.16, 60.42, - 59.59, 58.65, 57.57, 56.26, 54.54, 51.91, - ], - [ - 153.71, 139.55, 123.59, 111.14, 106.91, 104.27, 102.32, 100.75, 99.42, 98.27, 97.25, 96.32, - 95.48, 94.69, 93.96, 93.28, 92.64, 92.02, 91.44, 90.88, 90.35, 89.83, 89.34, 88.86, 88.39, - 87.94, 87.5, 87.08, 86.66, 86.25, 85.85, 85.46, 85.08, 84.7, 84.33, 83.97, 83.61, 83.25, 82.9, - 82.56, 82.22, 81.88, 81.55, 81.22, 80.89, 80.56, 80.24, 79.92, 79.6, 79.28, 78.96, 78.65, 78.33, - 78.02, 77.71, 77.4, 77.08, 76.77, 76.46, 76.15, 75.84, 75.52, 75.21, 74.89, 74.58, 74.26, 73.94, - 73.61, 73.29, 72.96, 72.63, 72.3, 71.96, 71.62, 71.27, 70.92, 70.56, 70.2, 69.83, 69.45, 69.07, - 68.68, 68.27, 67.86, 67.44, 67.0, 66.55, 66.08, 65.59, 65.08, 64.54, 63.98, 63.38, 62.74, 62.05, - 61.3, 60.46, 59.52, 58.43, 57.1, 55.38, 52.72, - ], - [ - 155.08, 140.87, 124.84, 112.33, 108.07, 105.42, 103.46, 101.88, 100.55, 99.39, 98.36, 97.43, - 96.58, 95.79, 95.06, 94.37, 93.72, 93.11, 92.52, 91.96, 91.42, 90.9, 90.41, 89.92, 89.46, 89.0, - 88.56, 88.13, 87.71, 87.3, 86.9, 86.51, 86.12, 85.74, 85.37, 85.0, 84.64, 84.28, 83.93, 83.59, - 83.24, 82.9, 82.57, 82.23, 81.9, 81.58, 81.25, 80.93, 80.61, 80.29, 79.97, 79.65, 79.33, 79.02, - 78.7, 78.39, 78.08, 77.76, 77.45, 77.13, 76.82, 76.5, 76.19, 75.87, 75.55, 75.23, 74.91, 74.58, - 74.26, 73.93, 73.59, 73.26, 72.92, 72.57, 72.22, 71.87, 71.51, 71.14, 70.77, 70.39, 70.01, - 69.61, 69.21, 68.79, 68.36, 67.92, 67.47, 66.99, 66.5, 65.99, 65.45, 64.88, 64.28, 63.63, 62.94, - 62.18, 61.34, 60.39, 59.29, 57.96, 56.21, 53.54, - ], - [ - 156.45, 142.18, 126.08, 113.51, 109.23, 106.57, 104.6, 103.01, 101.67, 100.51, 99.47, 98.54, - 97.68, 96.89, 96.15, 95.46, 94.81, 94.19, 93.6, 93.03, 92.49, 91.97, 91.47, 90.99, 90.52, 90.06, - 89.62, 89.18, 88.76, 88.35, 87.95, 87.55, 87.16, 86.78, 86.41, 86.04, 85.67, 85.31, 84.96, - 84.61, 84.27, 83.92, 83.59, 83.25, 82.92, 82.59, 82.26, 81.94, 81.61, 81.29, 80.97, 80.65, - 80.33, 80.02, 79.7, 79.38, 79.07, 78.75, 78.44, 78.12, 77.8, 77.49, 77.17, 76.85, 76.53, 76.2, - 75.88, 75.55, 75.22, 74.89, 74.55, 74.22, 73.87, 73.53, 73.18, 72.82, 72.46, 72.09, 71.72, - 71.34, 70.95, 70.55, 70.14, 69.72, 69.29, 68.85, 68.39, 67.91, 67.42, 66.9, 66.36, 65.78, 65.18, - 64.53, 63.83, 63.06, 62.22, 61.26, 60.15, 58.81, 57.05, 54.36, - ], - [ - 157.82, 143.5, 127.32, 114.69, 110.39, 107.72, 105.73, 104.14, 102.79, 101.62, 100.58, 99.64, - 98.78, 97.98, 97.24, 96.55, 95.89, 95.27, 94.68, 94.11, 93.57, 93.04, 92.54, 92.05, 91.58, - 91.12, 90.67, 90.24, 89.81, 89.4, 88.99, 88.59, 88.2, 87.82, 87.44, 87.07, 86.71, 86.34, 85.99, - 85.64, 85.29, 84.95, 84.61, 84.27, 83.93, 83.6, 83.27, 82.95, 82.62, 82.3, 81.98, 81.65, 81.33, - 81.02, 80.7, 80.38, 80.06, 79.74, 79.43, 79.11, 78.79, 78.47, 78.15, 77.83, 77.5, 77.18, 76.85, - 76.52, 76.19, 75.86, 75.52, 75.18, 74.83, 74.48, 74.13, 73.77, 73.41, 73.04, 72.66, 72.28, - 71.89, 71.48, 71.07, 70.65, 70.22, 69.77, 69.31, 68.83, 68.33, 67.81, 67.26, 66.69, 66.08, - 65.42, 64.72, 63.95, 63.09, 62.13, 61.01, 59.66, 57.89, 55.17, - ], - [ - 159.19, 144.81, 128.56, 115.88, 111.55, 108.87, 106.87, 105.27, 103.91, 102.74, 101.69, 100.75, - 99.88, 99.08, 98.34, 97.64, 96.98, 96.35, 95.75, 95.18, 94.64, 94.11, 93.6, 93.11, 92.64, 92.18, - 91.73, 91.29, 90.86, 90.44, 90.04, 89.64, 89.24, 88.86, 88.48, 88.11, 87.74, 87.37, 87.02, - 86.66, 86.31, 85.97, 85.63, 85.29, 84.95, 84.62, 84.29, 83.96, 83.63, 83.3, 82.98, 82.66, 82.33, - 82.01, 81.69, 81.37, 81.05, 80.73, 80.41, 80.09, 79.77, 79.45, 79.13, 78.8, 78.48, 78.15, 77.82, - 77.49, 77.16, 76.82, 76.48, 76.14, 75.79, 75.44, 75.08, 74.72, 74.36, 73.99, 73.61, 73.22, - 72.83, 72.42, 72.01, 71.58, 71.15, 70.7, 70.23, 69.75, 69.25, 68.72, 68.17, 67.59, 66.98, 66.32, - 65.61, 64.83, 63.97, 63.0, 61.88, 60.51, 58.73, 55.99, - ], - [ - 160.55, 146.11, 129.8, 117.06, 112.71, 110.01, 108.01, 106.39, 105.03, 103.85, 102.8, 101.85, - 100.98, 100.18, 99.43, 98.72, 98.06, 97.43, 96.83, 96.26, 95.71, 95.18, 94.67, 94.18, 93.7, - 93.23, 92.78, 92.34, 91.91, 91.49, 91.08, 90.68, 90.28, 89.9, 89.51, 89.14, 88.77, 88.4, 88.04, - 87.69, 87.34, 86.99, 86.65, 86.3, 85.97, 85.63, 85.3, 84.97, 84.64, 84.31, 83.98, 83.66, 83.33, - 83.01, 82.69, 82.37, 82.05, 81.72, 81.4, 81.08, 80.76, 80.43, 80.11, 79.78, 79.46, 79.13, 78.79, - 78.46, 78.13, 77.79, 77.45, 77.1, 76.75, 76.4, 76.04, 75.68, 75.31, 74.93, 74.55, 74.16, 73.77, - 73.36, 72.94, 72.52, 72.08, 71.62, 71.15, 70.67, 70.16, 69.63, 69.08, 68.5, 67.88, 67.21, 66.5, - 65.72, 64.85, 63.88, 62.74, 61.37, 59.57, 56.81, - ], - [ - 161.92, 147.42, 131.04, 118.24, 113.87, 111.16, 109.14, 107.52, 106.15, 104.97, 103.91, 102.95, - 102.08, 101.27, 100.52, 99.81, 99.14, 98.51, 97.91, 97.33, 96.78, 96.25, 95.73, 95.24, 94.76, - 94.29, 93.84, 93.39, 92.96, 92.54, 92.13, 91.72, 91.32, 90.93, 90.55, 90.17, 89.8, 89.43, 89.07, - 88.71, 88.36, 88.01, 87.67, 87.32, 86.98, 86.64, 86.31, 85.98, 85.64, 85.31, 84.99, 84.66, - 84.33, 84.01, 83.69, 83.36, 83.04, 82.71, 82.39, 82.07, 81.74, 81.42, 81.09, 80.76, 80.43, 80.1, - 79.77, 79.43, 79.09, 78.75, 78.41, 78.06, 77.71, 77.35, 76.99, 76.63, 76.26, 75.88, 75.5, 75.11, - 74.71, 74.3, 73.88, 73.45, 73.01, 72.55, 72.08, 71.59, 71.08, 70.55, 69.99, 69.4, 68.78, 68.11, - 67.39, 66.6, 65.73, 64.75, 63.61, 62.22, 60.41, 57.63, - ], - [ - 163.28, 148.73, 132.28, 119.41, 115.03, 112.3, 110.28, 108.65, 107.27, 106.08, 105.02, 104.06, - 103.18, 102.36, 101.61, 100.9, 100.23, 99.59, 98.98, 98.41, 97.85, 97.31, 96.8, 96.3, 95.82, - 95.35, 94.89, 94.45, 94.01, 93.59, 93.17, 92.76, 92.37, 91.97, 91.59, 91.21, 90.83, 90.46, 90.1, - 89.74, 89.38, 89.03, 88.68, 88.34, 88.0, 87.66, 87.32, 86.99, 86.65, 86.32, 85.99, 85.66, 85.33, - 85.01, 84.68, 84.36, 84.03, 83.7, 83.38, 83.05, 82.73, 82.4, 82.07, 81.74, 81.41, 81.07, 80.74, - 80.4, 80.06, 79.72, 79.37, 79.02, 78.67, 78.31, 77.95, 77.58, 77.21, 76.83, 76.44, 76.05, 75.65, - 75.23, 74.81, 74.38, 73.94, 73.48, 73.0, 72.51, 72.0, 71.46, 70.9, 70.31, 69.68, 69.01, 68.28, - 67.49, 66.61, 65.62, 64.47, 63.08, 61.25, 58.46, - ], - [ - 164.64, 150.03, 133.51, 120.59, 116.18, 113.44, 111.41, 109.77, 108.39, 107.19, 106.12, 105.16, - 104.28, 103.46, 102.7, 101.98, 101.31, 100.67, 100.06, 99.48, 98.92, 98.38, 97.86, 97.36, 96.88, - 96.4, 95.94, 95.5, 95.06, 94.63, 94.22, 93.81, 93.41, 93.01, 92.62, 92.24, 91.86, 91.49, 91.13, - 90.77, 90.41, 90.05, 89.7, 89.36, 89.01, 88.67, 88.33, 87.99, 87.66, 87.33, 86.99, 86.66, 86.33, - 86.01, 85.68, 85.35, 85.02, 84.69, 84.37, 84.04, 83.71, 83.38, 83.05, 82.72, 82.38, 82.05, - 81.71, 81.37, 81.03, 80.69, 80.34, 79.99, 79.63, 79.27, 78.91, 78.54, 78.16, 77.78, 77.39, - 76.99, 76.59, 76.17, 75.75, 75.31, 74.87, 74.4, 73.93, 73.43, 72.91, 72.38, 71.81, 71.21, 70.58, - 69.9, 69.17, 68.38, 67.49, 66.5, 65.34, 63.93, 62.1, 59.28, - ], - [ - 165.99, 151.33, 134.75, 121.77, 117.34, 114.59, 112.54, 110.9, 109.51, 108.3, 107.23, 106.26, - 105.37, 104.55, 103.79, 103.07, 102.39, 101.75, 101.14, 100.55, 99.99, 99.45, 98.93, 98.42, - 97.93, 97.46, 97.0, 96.55, 96.11, 95.68, 95.26, 94.85, 94.44, 94.05, 93.66, 93.27, 92.9, 92.52, - 92.15, 91.79, 91.43, 91.08, 90.72, 90.37, 90.03, 89.68, 89.34, 89.0, 88.67, 88.33, 88.0, 87.67, - 87.33, 87.0, 86.67, 86.34, 86.01, 85.69, 85.36, 85.03, 84.69, 84.36, 84.03, 83.7, 83.36, 83.02, - 82.69, 82.34, 82.0, 81.65, 81.3, 80.95, 80.59, 80.23, 79.86, 79.49, 79.11, 78.73, 78.33, 77.94, - 77.53, 77.11, 76.69, 76.25, 75.8, 75.33, 74.85, 74.35, 73.83, 73.29, 72.72, 72.12, 71.48, 70.8, - 70.07, 69.27, 68.38, 67.37, 66.21, 64.79, 62.94, 60.1, - ], - [ - 167.35, 152.63, 135.98, 122.94, 118.49, 115.73, 113.67, 112.02, 110.63, 109.41, 108.34, 107.36, - 106.47, 105.64, 104.88, 104.15, 103.47, 102.83, 102.21, 101.62, 101.06, 100.51, 99.99, 99.48, - 98.99, 98.52, 98.05, 97.6, 97.16, 96.73, 96.3, 95.89, 95.48, 95.09, 94.69, 94.31, 93.93, 93.55, - 93.18, 92.82, 92.45, 92.1, 91.74, 91.39, 91.04, 90.7, 90.35, 90.01, 89.68, 89.34, 89.0, 88.67, - 88.33, 88.0, 87.67, 87.34, 87.01, 86.68, 86.34, 86.01, 85.68, 85.35, 85.01, 84.68, 84.34, 84.0, - 83.66, 83.31, 82.97, 82.62, 82.27, 81.91, 81.55, 81.19, 80.82, 80.44, 80.06, 79.68, 79.28, - 78.88, 78.47, 78.05, 77.62, 77.18, 76.73, 76.26, 75.78, 75.27, 74.75, 74.21, 73.63, 73.03, - 72.39, 71.7, 70.96, 70.15, 69.26, 68.25, 67.07, 65.65, 63.79, 60.93, - ], - [ - 168.7, 153.93, 137.21, 124.12, 119.65, 116.87, 114.81, 113.15, 111.74, 110.53, 109.44, 108.46, - 107.57, 106.74, 105.96, 105.24, 104.55, 103.9, 103.29, 102.69, 102.13, 101.58, 101.05, 100.54, - 100.05, 99.57, 99.1, 98.65, 98.21, 97.77, 97.35, 96.93, 96.52, 96.12, 95.73, 95.34, 94.96, - 94.58, 94.21, 93.84, 93.48, 93.12, 92.76, 92.41, 92.06, 91.71, 91.37, 91.02, 90.68, 90.34, - 90.01, 89.67, 89.33, 89.0, 88.67, 88.33, 88.0, 87.67, 87.33, 87.0, 86.66, 86.33, 85.99, 85.65, - 85.32, 84.97, 84.63, 84.29, 83.94, 83.59, 83.23, 82.87, 82.51, 82.14, 81.77, 81.4, 81.01, 80.62, - 80.23, 79.82, 79.41, 78.99, 78.56, 78.11, 77.66, 77.19, 76.7, 76.2, 75.67, 75.12, 74.54, 73.94, - 73.29, 72.6, 71.86, 71.04, 70.14, 69.13, 67.94, 66.51, 64.63, 61.75, - ], - [ - 170.05, 155.22, 138.44, 125.29, 120.8, 118.01, 115.94, 114.27, 112.86, 111.64, 110.55, 109.56, - 108.66, 107.83, 107.05, 106.32, 105.63, 104.98, 104.36, 103.77, 103.19, 102.65, 102.12, 101.6, - 101.11, 100.63, 100.16, 99.7, 99.25, 98.82, 98.39, 97.97, 97.56, 97.16, 96.76, 96.37, 95.99, - 95.61, 95.24, 94.87, 94.5, 94.14, 93.78, 93.43, 93.07, 92.72, 92.38, 92.03, 91.69, 91.35, 91.01, - 90.67, 90.33, 90.0, 89.66, 89.33, 88.99, 88.66, 88.32, 87.99, 87.65, 87.31, 86.97, 86.63, 86.29, - 85.95, 85.6, 85.26, 84.91, 84.55, 84.2, 83.84, 83.47, 83.1, 82.73, 82.35, 81.97, 81.57, 81.18, - 80.77, 80.35, 79.93, 79.5, 79.05, 78.59, 78.12, 77.63, 77.12, 76.59, 76.04, 75.46, 74.84, 74.2, - 73.5, 72.75, 71.93, 71.03, 70.0, 68.81, 67.37, 65.48, 62.58, - ], - [ - 171.4, 156.52, 139.67, 126.46, 121.95, 119.15, 117.07, 115.39, 113.98, 112.74, 111.65, 110.66, - 109.76, 108.92, 108.14, 107.41, 106.71, 106.06, 105.43, 104.84, 104.26, 103.71, 103.18, 102.66, - 102.17, 101.68, 101.21, 100.75, 100.3, 99.86, 99.43, 99.01, 98.6, 98.2, 97.8, 97.41, 97.02, - 96.64, 96.26, 95.89, 95.52, 95.16, 94.8, 94.44, 94.09, 93.74, 93.39, 93.04, 92.7, 92.35, 92.01, - 91.67, 91.33, 91.0, 90.66, 90.32, 89.98, 89.65, 89.31, 88.97, 88.63, 88.3, 87.95, 87.61, 87.27, - 86.92, 86.58, 86.23, 85.88, 85.52, 85.16, 84.8, 84.43, 84.06, 83.69, 83.31, 82.92, 82.52, 82.12, - 81.71, 81.3, 80.87, 80.43, 79.98, 79.52, 79.05, 78.55, 78.04, 77.51, 76.95, 76.37, 75.75, 75.1, - 74.4, 73.65, 72.82, 71.91, 70.88, 69.68, 68.23, 66.33, 63.41, - ], - [ - 172.75, 157.81, 140.89, 127.63, 123.1, 120.29, 118.19, 116.51, 115.09, 113.85, 112.75, 111.76, - 110.85, 110.01, 109.22, 108.49, 107.79, 107.13, 106.51, 105.91, 105.33, 104.78, 104.24, 103.72, - 103.22, 102.74, 102.26, 101.8, 101.35, 100.91, 100.48, 100.06, 99.64, 99.23, 98.83, 98.44, - 98.05, 97.67, 97.29, 96.91, 96.55, 96.18, 95.82, 95.46, 95.1, 94.75, 94.4, 94.05, 93.7, 93.36, - 93.02, 92.68, 92.33, 91.99, 91.65, 91.32, 90.98, 90.64, 90.3, 89.96, 89.62, 89.28, 88.94, 88.59, - 88.25, 87.9, 87.55, 87.2, 86.85, 86.49, 86.13, 85.76, 85.39, 85.02, 84.64, 84.26, 83.87, 83.47, - 83.07, 82.66, 82.24, 81.81, 81.37, 80.92, 80.45, 79.97, 79.48, 78.96, 78.43, 77.87, 77.28, - 76.66, 76.01, 75.3, 74.54, 73.72, 72.8, 71.76, 70.55, 69.09, 67.18, 64.24, - ], - [ - 174.09, 159.1, 142.12, 128.8, 124.26, 121.42, 119.32, 117.63, 116.2, 114.96, 113.86, 112.86, - 111.94, 111.1, 110.31, 109.57, 108.87, 108.21, 107.58, 106.98, 106.4, 105.84, 105.3, 104.78, - 104.28, 103.79, 103.31, 102.85, 102.4, 101.95, 101.52, 101.1, 100.68, 100.27, 99.87, 99.47, - 99.08, 98.69, 98.31, 97.94, 97.57, 97.2, 96.84, 96.48, 96.12, 95.76, 95.41, 95.06, 94.71, 94.37, - 94.02, 93.68, 93.33, 92.99, 92.65, 92.31, 91.97, 91.63, 91.29, 90.95, 90.6, 90.26, 89.92, 89.57, - 89.22, 88.88, 88.52, 88.17, 87.81, 87.46, 87.09, 86.73, 86.36, 85.98, 85.6, 85.21, 84.82, 84.42, - 84.02, 83.61, 83.18, 82.75, 82.31, 81.85, 81.39, 80.9, 80.41, 79.89, 79.35, 78.79, 78.2, 77.57, - 76.91, 76.2, 75.44, 74.61, 73.68, 72.64, 71.43, 69.95, 68.03, 65.07, - ], - [ - 175.44, 160.39, 143.34, 129.97, 125.4, 122.56, 120.45, 118.75, 117.32, 116.07, 114.96, 113.96, - 113.04, 112.19, 111.4, 110.65, 109.95, 109.29, 108.65, 108.05, 107.46, 106.9, 106.36, 105.84, - 105.34, 104.84, 104.37, 103.9, 103.44, 103.0, 102.56, 102.14, 101.72, 101.31, 100.9, 100.5, - 100.11, 99.72, 99.34, 98.96, 98.59, 98.22, 97.85, 97.49, 97.13, 96.78, 96.42, 96.07, 95.72, - 95.37, 95.02, 94.68, 94.33, 93.99, 93.65, 93.3, 92.96, 92.62, 92.28, 91.93, 91.59, 91.24, 90.9, - 90.55, 90.2, 89.85, 89.5, 89.14, 88.78, 88.42, 88.06, 87.69, 87.32, 86.94, 86.56, 86.17, 85.78, - 85.38, 84.97, 84.55, 84.13, 83.69, 83.25, 82.79, 82.32, 81.84, 81.33, 80.81, 80.27, 79.71, - 79.11, 78.48, 77.82, 77.11, 76.34, 75.5, 74.57, 73.52, 72.3, 70.82, 68.88, 65.9, - ], - [ - 176.78, 161.68, 144.57, 131.14, 126.55, 123.7, 121.58, 119.87, 118.43, 117.18, 116.06, 115.05, - 114.13, 113.28, 112.48, 111.74, 111.03, 110.36, 109.72, 109.12, 108.53, 107.97, 107.43, 106.9, - 106.39, 105.9, 105.42, 104.95, 104.49, 104.04, 103.61, 103.18, 102.76, 102.34, 101.94, 101.53, - 101.14, 100.75, 100.37, 99.99, 99.61, 99.24, 98.87, 98.51, 98.15, 97.79, 97.43, 97.08, 96.73, - 96.38, 96.03, 95.68, 95.33, 94.99, 94.64, 94.3, 93.95, 93.61, 93.27, 92.92, 92.58, 92.23, 91.88, - 91.53, 91.18, 90.83, 90.47, 90.12, 89.75, 89.39, 89.02, 88.65, 88.28, 87.9, 87.52, 87.13, 86.73, - 86.33, 85.92, 85.5, 85.07, 84.63, 84.19, 83.73, 83.25, 82.77, 82.26, 81.74, 81.19, 80.62, 80.03, - 79.39, 78.73, 78.01, 77.24, 76.39, 75.46, 74.4, 73.17, 71.68, 69.73, 66.73, - ], - [ - 178.12, 162.97, 145.79, 132.31, 127.7, 124.83, 122.7, 120.99, 119.54, 118.28, 117.16, 116.15, - 115.22, 114.37, 113.57, 112.82, 112.11, 111.44, 110.8, 110.18, 109.6, 109.03, 108.49, 107.96, - 107.45, 106.95, 106.47, 106.0, 105.54, 105.09, 104.65, 104.22, 103.79, 103.38, 102.97, 102.57, - 102.17, 101.78, 101.39, 101.01, 100.63, 100.26, 99.89, 99.53, 99.16, 98.8, 98.44, 98.09, 97.73, - 97.38, 97.03, 96.68, 96.33, 95.99, 95.64, 95.29, 94.95, 94.6, 94.25, 93.91, 93.56, 93.21, 92.86, - 92.51, 92.16, 91.8, 91.45, 91.09, 90.73, 90.36, 89.99, 89.62, 89.24, 88.86, 88.47, 88.08, 87.68, - 87.28, 86.87, 86.44, 86.02, 85.58, 85.13, 84.66, 84.19, 83.7, 83.19, 82.66, 82.11, 81.54, 80.94, - 80.31, 79.63, 78.91, 78.13, 77.29, 76.35, 75.28, 74.05, 72.54, 70.58, 67.56, - ], - [ - 179.46, 164.25, 147.01, 133.48, 128.85, 125.97, 123.83, 122.11, 120.65, 119.39, 118.26, 117.25, - 116.32, 115.45, 114.65, 113.9, 113.19, 112.51, 111.87, 111.25, 110.66, 110.09, 109.55, 109.02, - 108.5, 108.0, 107.52, 107.05, 106.58, 106.13, 105.69, 105.26, 104.83, 104.41, 104.0, 103.6, - 103.2, 102.81, 102.42, 102.04, 101.66, 101.28, 100.91, 100.54, 100.18, 99.81, 99.45, 99.1, - 98.74, 98.39, 98.04, 97.68, 97.33, 96.98, 96.64, 96.29, 95.94, 95.59, 95.24, 94.9, 94.55, 94.2, - 93.84, 93.49, 93.14, 92.78, 92.42, 92.06, 91.7, 91.33, 90.96, 90.58, 90.2, 89.82, 89.43, 89.04, - 88.64, 88.23, 87.81, 87.39, 86.96, 86.52, 86.07, 85.6, 85.12, 84.63, 84.12, 83.59, 83.04, 82.46, - 81.86, 81.22, 80.54, 79.82, 79.03, 78.18, 77.23, 76.16, 74.92, 73.41, 71.43, 68.4, - ], - [ - 180.79, 165.54, 148.23, 134.64, 130.0, 127.1, 124.95, 123.23, 121.77, 120.49, 119.36, 118.34, - 117.41, 116.54, 115.74, 114.98, 114.26, 113.59, 112.94, 112.32, 111.73, 111.16, 110.61, 110.07, - 109.56, 109.06, 108.57, 108.09, 107.63, 107.18, 106.73, 106.3, 105.87, 105.45, 105.04, 104.63, - 104.23, 103.83, 103.44, 103.06, 102.68, 102.3, 101.93, 101.56, 101.19, 100.83, 100.47, 100.11, - 99.75, 99.39, 99.04, 98.69, 98.33, 97.98, 97.63, 97.28, 96.93, 96.58, 96.23, 95.88, 95.53, - 95.18, 94.83, 94.47, 94.11, 93.76, 93.4, 93.03, 92.67, 92.3, 91.92, 91.55, 91.17, 90.78, 90.39, - 89.99, 89.59, 89.18, 88.76, 88.34, 87.9, 87.46, 87.01, 86.54, 86.06, 85.56, 85.05, 84.51, 83.96, - 83.38, 82.77, 82.13, 81.45, 80.72, 79.93, 79.07, 78.12, 77.05, 75.79, 74.28, 72.29, 69.23, - ], -]; -export const SIGNIFICANCE_LEVELS = [ - 0.0, 0.0, 0.0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, - 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, - 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, - 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, - 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, - 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, - 0.95, 0.96, 0.97, 0.98, 0.99, -]; diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts index 10ad33e87cd18..bb9b5cbc5a99b 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts @@ -5,67 +5,6 @@ * 2.0. */ -import { CRITICAL_VALUES_TABLE, SIGNIFICANCE_LEVELS } from './constants'; -import { Histogram } from './types'; - -const criticalTableLookup = (chi2Statistic: number, df: number) => { - if (df < 1) return 1; - if (!Number.isInteger(df)) throw Error('Degrees of freedom must be a valid integer'); - - // Get the row index - const rowIndex: number = df - 1; - - // Get the column index - let minDiff: number = Math.abs(CRITICAL_VALUES_TABLE[rowIndex][0] - chi2Statistic); - let columnIndex: number = 0; - for (let j = 1; j < CRITICAL_VALUES_TABLE[rowIndex].length; j++) { - const diff: number = Math.abs(CRITICAL_VALUES_TABLE[rowIndex][j] - chi2Statistic); - if (diff < minDiff) { - minDiff = diff; - columnIndex = j; - } - } - - const significanceLevel: number = SIGNIFICANCE_LEVELS[columnIndex]; - return significanceLevel; -}; - -/** - * Compute the p-value for how similar the datasets are. - * Returned value ranges from 0 to 1, with 1 meaning the datasets are identical. - * @param normalizedBaselineTerms - * @param normalizedDriftedTerms - */ -export const computeChi2PValue = ( - normalizedBaselineTerms: Histogram[], - normalizedDriftedTerms: Histogram[] -) => { - // Get all unique keys from both arrays - const allKeys: string[] = Array.from( - new Set([ - ...normalizedBaselineTerms.map((term) => term.key.toString()), - ...normalizedDriftedTerms.map((term) => term.key.toString()), - ]) - ).slice(0, 100); - - // Calculate the chi-squared statistic and degrees of freedom - let chiSquared: number = 0; - const degreesOfFreedom: number = allKeys.length - 1; - - if (degreesOfFreedom === 0) return 1; - - allKeys.forEach((key) => { - const baselineTerm = normalizedBaselineTerms.find((term) => term.key === key); - const driftedTerm = normalizedDriftedTerms.find((term) => term.key === key); - - const observed: number = driftedTerm?.percentage ?? 0; - const expected: number = baselineTerm?.percentage ?? 0; - chiSquared += Math.pow(observed - expected, 2) / (expected > 0 ? expected : 1e-6); // Prevent divide by zero - }); - - return criticalTableLookup(chiSquared, degreesOfFreedom); -}; - /** * formatSignificanceLevel * @param significanceLevel diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/types.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/types.ts index 55da47f44d01c..c261e9f6231ab 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/types.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/types.ts @@ -5,10 +5,13 @@ * 2.0. */ +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { Filter, Query } from '@kbn/es-query'; -import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SEARCH_QUERY_LANGUAGE, SearchQueryLanguage } from '@kbn/ml-query-utils'; +import type { Histogram } from '@kbn/ml-chi2test'; + import { DATA_COMPARISON_TYPE } from './constants'; export interface DataComparisonQueryState { @@ -52,12 +55,6 @@ export const getDefaultDataComparisonState = ( ...overrides, }); -export interface Histogram { - doc_count: number; - key: string | number; - percentage?: number; -} - export interface ComparisonHistogram extends Histogram { g: string; } diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts index 7707f23afd3e0..8b22e1d94db33 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts @@ -5,27 +5,35 @@ * 2.0. */ +import { chunk, cloneDeep, flatten } from 'lodash'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import type { IKibanaSearchRequest } from '@kbn/data-plugin/common'; import { lastValueFrom } from 'rxjs'; + import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { + MappingRuntimeFields, + QueryDslBoolQuery, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { AggregationsAggregate } from '@elastic/elasticsearch/lib/api/types'; + +import type { IKibanaSearchRequest } from '@kbn/data-plugin/common'; import type { DataView } from '@kbn/data-views-plugin/public'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { Query } from '@kbn/data-plugin/common'; -import { chunk, cloneDeep, flatten } from 'lodash'; -import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; import { getDefaultDSLQuery } from '@kbn/ml-query-utils'; import { i18n } from '@kbn/i18n'; import { RandomSamplerWrapper } from '@kbn/ml-random-sampler-utils'; import { extractErrorMessage } from '@kbn/ml-error-utils'; -import { AggregationsAggregate } from '@elastic/elasticsearch/lib/api/types'; -import { QueryDslBoolQuery } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isDefined } from '@kbn/ml-is-defined'; +import { computeChi2PValue, type Histogram } from '@kbn/ml-chi2test'; import { mapAndFlattenFilters } from '@kbn/data-plugin/public'; + import { createMergedEsQuery } from '../index_data_visualizer/utils/saved_search_utils'; -import { useDataDriftStateManagerContext } from './use_state_manager'; import { useDataVisualizerKibana } from '../kibana_context'; + +import { useDataDriftStateManagerContext } from './use_state_manager'; + import { REFERENCE_LABEL, COMPARISON_LABEL, @@ -34,7 +42,6 @@ import { } from './constants'; import { - Histogram, NumericDriftData, CategoricalDriftData, Range, @@ -46,7 +53,6 @@ import { TimeRange, ComparisonHistogram, } from './types'; -import { computeChi2PValue } from './data_drift_utils'; export const getDataComparisonType = (kibanaType: string): DataDriftField['type'] => { switch (kibanaType) { diff --git a/x-pack/plugins/data_visualizer/tsconfig.json b/x-pack/plugins/data_visualizer/tsconfig.json index 5d50d27043b91..bf930b470a82c 100644 --- a/x-pack/plugins/data_visualizer/tsconfig.json +++ b/x-pack/plugins/data_visualizer/tsconfig.json @@ -69,7 +69,8 @@ "@kbn/ml-random-sampler-utils", "@kbn/data-service", "@kbn/core-notifications-browser", - "@kbn/ebt-tools" + "@kbn/ebt-tools", + "@kbn/ml-chi2test" ], "exclude": [ "target/**/*", diff --git a/yarn.lock b/yarn.lock index 7e9bb35da1443..fc9f8363ed206 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4939,6 +4939,10 @@ version "0.0.0" uid "" +"@kbn/ml-chi2test@link:x-pack/packages/ml/chi2test": + version "0.0.0" + uid "" + "@kbn/ml-data-frame-analytics-utils@link:x-pack/packages/ml/data_frame_analytics_utils": version "0.0.0" uid "" From b2271a9fd73eb110e003285744dbb19babe89245 Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Wed, 27 Sep 2023 18:02:37 +0100 Subject: [PATCH 11/40] [Logs+] Remove configurable redirects to Discover (#167151) ## Summary Closes https://github.com/elastic/kibana/issues/165227. Removes configurable app targets. Only the standard logs app is registered (Note: [Infra is disabled in serverless](https://github.com/elastic/kibana/pull/165289) observability / security projects currently). --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- config/serverless.oblt.yml | 1 - .../test_suites/core_plugins/rendering.ts | 5 - .../shared/links/observability_logs_link.ts | 6 +- x-pack/plugins/infra/common/constants.ts | 3 - .../common/locators/discover_logs_locator.ts | 27 ---- .../locators/discover_node_logs_locator.ts | 32 ----- x-pack/plugins/infra/common/locators/index.ts | 8 +- .../infra/common/plugin_config_types.ts | 4 - .../infra/public/apps/discover_app.tsx | 30 ---- x-pack/plugins/infra/public/plugin.ts | 130 +++++++----------- ...nventory_metric_threshold_executor.test.ts | 3 - .../metric_threshold_executor.test.ts | 3 - .../infra/server/lib/sources/sources.test.ts | 3 - x-pack/plugins/infra/server/plugin.ts | 21 +-- 14 files changed, 55 insertions(+), 221 deletions(-) delete mode 100644 x-pack/plugins/infra/common/locators/discover_logs_locator.ts delete mode 100644 x-pack/plugins/infra/common/locators/discover_node_logs_locator.ts delete mode 100644 x-pack/plugins/infra/public/apps/discover_app.tsx diff --git a/config/serverless.oblt.yml b/config/serverless.oblt.yml index d89f5c5e76cd7..cd180cb3829fa 100644 --- a/config/serverless.oblt.yml +++ b/config/serverless.oblt.yml @@ -12,7 +12,6 @@ xpack.legacy_uptime.enabled: false xpack.serverless.observability.enabled: true ## Configure plugins -xpack.infra.logs.app_target: discover ## Set the home route uiSettings.overrides.defaultRoute: /app/observability/landing diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index f47b019176eed..56eae55099d4b 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -250,11 +250,6 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.index_management.dev.enableIndexDetailsPage (boolean)', 'xpack.index_management.enableIndexStats (any)', 'xpack.infra.sources.default.fields.message (array)', - /** - * xpack.infra.logs is conditional and will resolve to an object of properties - * - xpack.infra.logs.app_target (string) - */ - 'xpack.infra.logs (any)', 'xpack.license_management.ui.enabled (boolean)', 'xpack.maps.preserveDrawingBuffer (boolean)', 'xpack.maps.showMapsInspectorAdapter (boolean)', diff --git a/x-pack/plugins/apm/public/components/shared/links/observability_logs_link.ts b/x-pack/plugins/apm/public/components/shared/links/observability_logs_link.ts index 6909d0035b2f0..85bbaf2d09bdf 100644 --- a/x-pack/plugins/apm/public/components/shared/links/observability_logs_link.ts +++ b/x-pack/plugins/apm/public/components/shared/links/observability_logs_link.ts @@ -7,9 +7,7 @@ import type { NodeLogsLocator, - DiscoverNodeLogsLocator, LogsLocator, - DiscoverLogsLocator, } from '@kbn/infra-plugin/common/locators'; import { AllDatasetsLocatorParams } from '@kbn/deeplinks-observability/locators'; import { LocatorPublic } from '@kbn/share-plugin/common'; @@ -29,7 +27,7 @@ export const getNodeLogsHref = ( id: string, time: number | undefined, allDatasetsLocator: LocatorPublic, - infraNodeLocator?: NodeLogsLocator | DiscoverNodeLogsLocator + infraNodeLocator?: NodeLogsLocator ): string => { if (infraNodeLocator) return infraNodeLocator?.getRedirectUrl({ @@ -55,7 +53,7 @@ export const getTraceLogsHref = ( traceId: string, time: number | undefined, allDatasetsLocator: LocatorPublic, - infraLogsLocator?: LogsLocator | DiscoverLogsLocator + infraLogsLocator?: LogsLocator ): string => { const query = `trace.id:"${traceId}" OR (not trace.id:* AND "${traceId}")`; diff --git a/x-pack/plugins/infra/common/constants.ts b/x-pack/plugins/infra/common/constants.ts index 9dd43c6e72c99..12d89484570c6 100644 --- a/x-pack/plugins/infra/common/constants.ts +++ b/x-pack/plugins/infra/common/constants.ts @@ -22,9 +22,6 @@ export const HOST_FIELD = 'host.name'; export const CONTAINER_FIELD = 'container.id'; export const POD_FIELD = 'kubernetes.pod.uid'; -export const DISCOVER_APP_TARGET = 'discover'; -export const LOGS_APP_TARGET = 'logs-ui'; - export const O11Y_AAD_FIELDS = [ 'cloud.*', 'host.*', diff --git a/x-pack/plugins/infra/common/locators/discover_logs_locator.ts b/x-pack/plugins/infra/common/locators/discover_logs_locator.ts deleted file mode 100644 index 292105678388f..0000000000000 --- a/x-pack/plugins/infra/common/locators/discover_logs_locator.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; -import type { LogsLocatorDependencies, LogsLocatorParams } from './logs_locator'; -import { LOGS_LOCATOR_ID } from './logs_locator'; - -export type DiscoverLogsLocator = LocatorPublic; - -export class DiscoverLogsLocatorDefinition implements LocatorDefinition { - public readonly id = LOGS_LOCATOR_ID; - - constructor(protected readonly deps: LogsLocatorDependencies) {} - - public readonly getLocation = async (params: LogsLocatorParams) => { - const { getLocationToDiscover } = await import('./helpers'); - - return getLocationToDiscover({ - core: this.deps.core, - ...params, - }); - }; -} diff --git a/x-pack/plugins/infra/common/locators/discover_node_logs_locator.ts b/x-pack/plugins/infra/common/locators/discover_node_logs_locator.ts deleted file mode 100644 index 43418747ab502..0000000000000 --- a/x-pack/plugins/infra/common/locators/discover_node_logs_locator.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; -import type { NodeLogsLocatorDependencies, NodeLogsLocatorParams } from './node_logs_locator'; -import { NODE_LOGS_LOCATOR_ID } from './node_logs_locator'; - -export type DiscoverNodeLogsLocator = LocatorPublic; - -export class DiscoverNodeLogsLocatorDefinition implements LocatorDefinition { - public readonly id = NODE_LOGS_LOCATOR_ID; - - constructor(protected readonly deps: NodeLogsLocatorDependencies) {} - - public readonly getLocation = async (params: NodeLogsLocatorParams) => { - const { createNodeLogsQuery, getLocationToDiscover } = await import('./helpers'); - - const { timeRange, logView } = params; - const query = createNodeLogsQuery(params); - - return getLocationToDiscover({ - core: this.deps.core, - timeRange, - filter: query, - logView, - }); - }; -} diff --git a/x-pack/plugins/infra/common/locators/index.ts b/x-pack/plugins/infra/common/locators/index.ts index 8749d88ae9b53..d84c42a6dc21e 100644 --- a/x-pack/plugins/infra/common/locators/index.ts +++ b/x-pack/plugins/infra/common/locators/index.ts @@ -5,17 +5,13 @@ * 2.0. */ -import type { DiscoverLogsLocator } from './discover_logs_locator'; -import type { DiscoverNodeLogsLocator } from './discover_node_logs_locator'; import type { LogsLocator } from './logs_locator'; import type { NodeLogsLocator } from './node_logs_locator'; -export * from './discover_logs_locator'; -export * from './discover_node_logs_locator'; export * from './logs_locator'; export * from './node_logs_locator'; export interface InfraLocators { - logsLocator: LogsLocator | DiscoverLogsLocator; - nodeLogsLocator: NodeLogsLocator | DiscoverNodeLogsLocator; + logsLocator: LogsLocator; + nodeLogsLocator: NodeLogsLocator; } diff --git a/x-pack/plugins/infra/common/plugin_config_types.ts b/x-pack/plugins/infra/common/plugin_config_types.ts index 52803a09ae499..adff4cabe30a5 100644 --- a/x-pack/plugins/infra/common/plugin_config_types.ts +++ b/x-pack/plugins/infra/common/plugin_config_types.ts @@ -18,9 +18,6 @@ export interface InfraConfig { inventory: { compositeSize: number; }; - logs: { - app_target: 'logs-ui' | 'discover'; - }; sources?: { default?: { fields?: { @@ -32,7 +29,6 @@ export interface InfraConfig { export const publicConfigKeys = { sources: true, - logs: true, } as const; export type InfraPublicConfigKey = keyof { diff --git a/x-pack/plugins/infra/public/apps/discover_app.tsx b/x-pack/plugins/infra/public/apps/discover_app.tsx deleted file mode 100644 index 2ea704fa9b21f..0000000000000 --- a/x-pack/plugins/infra/public/apps/discover_app.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; -import type { AppMountParameters, CoreStart } from '@kbn/core/public'; -import { getLogViewReferenceFromUrl } from '@kbn/logs-shared-plugin/public'; -import type { InfraClientStartExports } from '../types'; - -export const renderApp = ( - core: CoreStart, - pluginStart: InfraClientStartExports, - params: AppMountParameters -) => { - const toastsService = core.notifications.toasts; - - const urlStateStorage = createKbnUrlStateStorage({ - history: params.history, - useHash: false, - useHashQuery: false, - }); - - const logView = getLogViewReferenceFromUrl({ toastsService, urlStateStorage }); - - pluginStart.locators.logsLocator.navigate({ ...(logView ? { logView } : {}) }, { replace: true }); - - return () => true; -}; diff --git a/x-pack/plugins/infra/public/plugin.ts b/x-pack/plugins/infra/public/plugin.ts index 04e3f34e067b4..0bcdfa7e04bcc 100644 --- a/x-pack/plugins/infra/public/plugin.ts +++ b/x-pack/plugins/infra/public/plugin.ts @@ -7,7 +7,6 @@ import { AppMountParameters, - AppNavLinkStatus, AppUpdater, CoreStart, DEFAULT_APP_CATEGORIES, @@ -18,7 +17,6 @@ import { enableInfrastructureHostsView } from '@kbn/observability-plugin/public' import { ObservabilityTriggerId } from '@kbn/observability-shared-plugin/common'; import { BehaviorSubject, combineLatest, from } from 'rxjs'; import { map } from 'rxjs/operators'; -import { DISCOVER_APP_TARGET, LOGS_APP_TARGET } from '../common/constants'; import { InfraPublicConfig } from '../common/plugin_config_types'; import { createInventoryMetricRuleType } from './alerting/inventory'; import { createLogThresholdRuleType } from './alerting/log_threshold'; @@ -29,8 +27,6 @@ import { createLazyPodMetricsTable } from './components/infrastructure_node_metr import { LOG_STREAM_EMBEDDABLE } from './components/log_stream/log_stream_embeddable'; import { LogStreamEmbeddableFactoryDefinition } from './components/log_stream/log_stream_embeddable_factory'; import { - DiscoverLogsLocatorDefinition, - DiscoverNodeLogsLocatorDefinition, InfraLocators, LogsLocatorDefinition, NodeLogsLocatorDefinition, @@ -57,7 +53,6 @@ export class Plugin implements InfraClientPluginClass { private metricsExplorerViews: MetricsExplorerViewsService; private telemetry: TelemetryService; private locators?: InfraLocators; - private appTarget: string; private kibanaVersion: string; private readonly appUpdater$ = new BehaviorSubject(() => ({})); @@ -67,7 +62,6 @@ export class Plugin implements InfraClientPluginClass { this.inventoryViews = new InventoryViewsService(); this.metricsExplorerViews = new MetricsExplorerViewsService(); this.telemetry = new TelemetryService(); - this.appTarget = this.config.logs.app_target; this.kibanaVersion = context.env.packageInfo.version; } @@ -163,89 +157,63 @@ export class Plugin implements InfraClientPluginClass { ); // Register Locators - let logsLocator = pluginsSetup.share.url.locators.create(new LogsLocatorDefinition({ core })); - let nodeLogsLocator = pluginsSetup.share.url.locators.create( + const logsLocator = pluginsSetup.share.url.locators.create(new LogsLocatorDefinition({ core })); + const nodeLogsLocator = pluginsSetup.share.url.locators.create( new NodeLogsLocatorDefinition({ core }) ); - if (this.appTarget === DISCOVER_APP_TARGET) { - // Register Locators - logsLocator = pluginsSetup.share.url.locators.create( - new DiscoverLogsLocatorDefinition({ core }) - ); - nodeLogsLocator = pluginsSetup.share.url.locators.create( - new DiscoverNodeLogsLocatorDefinition({ core }) - ); - - core.application.register({ - id: 'logs-to-discover', - title: '', - navLinkStatus: AppNavLinkStatus.hidden, - appRoute: '/app/logs', - mount: async (params: AppMountParameters) => { - // mount callback should not use setup dependencies, get start dependencies instead - const [coreStart, , pluginStart] = await core.getStartServices(); - const { renderApp } = await import('./apps/discover_app'); - - return renderApp(coreStart, pluginStart, params); - }, - }); - } - pluginsSetup.observability.observabilityRuleTypeRegistry.register( createLogThresholdRuleType(core, logsLocator) ); - if (this.appTarget === LOGS_APP_TARGET) { - core.application.register({ - id: 'logs', - title: i18n.translate('xpack.infra.logs.pluginTitle', { - defaultMessage: 'Logs', - }), - euiIconType: 'logoObservability', - order: 8100, - appRoute: '/app/logs', - // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/logs/page_content.tsx - deepLinks: [ - { - id: 'stream', - title: i18n.translate('xpack.infra.logs.index.streamTabTitle', { - defaultMessage: 'Stream', - }), - path: '/stream', - }, - { - id: 'anomalies', - title: i18n.translate('xpack.infra.logs.index.anomaliesTabTitle', { - defaultMessage: 'Anomalies', - }), - path: '/anomalies', - }, - { - id: 'log-categories', - title: i18n.translate('xpack.infra.logs.index.logCategoriesBetaBadgeTitle', { - defaultMessage: 'Categories', - }), - path: '/log-categories', - }, - { - id: 'settings', - title: i18n.translate('xpack.infra.logs.index.settingsTabTitle', { - defaultMessage: 'Settings', - }), - path: '/settings', - }, - ], - category: DEFAULT_APP_CATEGORIES.observability, - mount: async (params: AppMountParameters) => { - // mount callback should not use setup dependencies, get start dependencies instead - const [coreStart, plugins, pluginStart] = await core.getStartServices(); - - const { renderApp } = await import('./apps/logs_app'); - return renderApp(coreStart, plugins, pluginStart, params); + core.application.register({ + id: 'logs', + title: i18n.translate('xpack.infra.logs.pluginTitle', { + defaultMessage: 'Logs', + }), + euiIconType: 'logoObservability', + order: 8100, + appRoute: '/app/logs', + // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/logs/page_content.tsx + deepLinks: [ + { + id: 'stream', + title: i18n.translate('xpack.infra.logs.index.streamTabTitle', { + defaultMessage: 'Stream', + }), + path: '/stream', }, - }); - } + { + id: 'anomalies', + title: i18n.translate('xpack.infra.logs.index.anomaliesTabTitle', { + defaultMessage: 'Anomalies', + }), + path: '/anomalies', + }, + { + id: 'log-categories', + title: i18n.translate('xpack.infra.logs.index.logCategoriesBetaBadgeTitle', { + defaultMessage: 'Categories', + }), + path: '/log-categories', + }, + { + id: 'settings', + title: i18n.translate('xpack.infra.logs.index.settingsTabTitle', { + defaultMessage: 'Settings', + }), + path: '/settings', + }, + ], + category: DEFAULT_APP_CATEGORIES.observability, + mount: async (params: AppMountParameters) => { + // mount callback should not use setup dependencies, get start dependencies instead + const [coreStart, plugins, pluginStart] = await core.getStartServices(); + + const { renderApp } = await import('./apps/logs_app'); + return renderApp(coreStart, plugins, pluginStart, params); + }, + }); // !! Need to be kept in sync with the routes in x-pack/plugins/infra/public/pages/metrics/index.tsx const infraDeepLinks = [ diff --git a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts index 02308de051806..a47008a0fbaf1 100644 --- a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts @@ -100,9 +100,6 @@ const createMockStaticConfiguration = (sources: any) => ({ inventory: { compositeSize: 2000, }, - logs: { - app_target: 'logs-ui', - }, sources, }); diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 26fbb4d72a7e5..4b618dbd82e85 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -1899,9 +1899,6 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ inventory: { compositeSize: 2000, }, - logs: { - app_target: 'logs-ui', - }, enabled: true, sources, }); diff --git a/x-pack/plugins/infra/server/lib/sources/sources.test.ts b/x-pack/plugins/infra/server/lib/sources/sources.test.ts index a8c7cf3231b41..183ce952583a0 100644 --- a/x-pack/plugins/infra/server/lib/sources/sources.test.ts +++ b/x-pack/plugins/infra/server/lib/sources/sources.test.ts @@ -125,9 +125,6 @@ const createMockStaticConfiguration = (sources: any): InfraConfig => ({ inventory: { compositeSize: 2000, }, - logs: { - app_target: 'logs-ui', - }, sources, enabled: true, }); diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index d3898f064135f..10bf7e37fb7c6 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -6,7 +6,7 @@ */ import { Server } from '@hapi/hapi'; -import { offeringBasedSchema, schema } from '@kbn/config-schema'; +import { schema } from '@kbn/config-schema'; import { CoreStart, Plugin, @@ -19,12 +19,7 @@ import { Logger } from '@kbn/logging'; import { alertsLocatorID } from '@kbn/observability-plugin/common'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { GetMetricIndicesOptions } from '@kbn/metrics-data-access-plugin/server'; -import { - DISCOVER_APP_TARGET, - LOGS_APP_TARGET, - LOGS_FEATURE_ID, - METRICS_FEATURE_ID, -} from '../common/constants'; +import { LOGS_FEATURE_ID, METRICS_FEATURE_ID } from '../common/constants'; import { publicConfigKeys } from '../common/plugin_config_types'; import { configDeprecations, getInfraDeprecationsFactory } from './deprecations'; import { LOGS_FEATURE, METRICS_FEATURE } from './features'; @@ -61,18 +56,6 @@ import { mapSourceToLogView } from './utils/map_source_to_log_view'; export const config: PluginConfigDescriptor = { schema: schema.object({ enabled: schema.boolean({ defaultValue: true }), - // Setting variants only allowed in the Serverless offering, otherwise always default `logs-ui` value - logs: offeringBasedSchema({ - serverless: schema.object({ - app_target: schema.oneOf( - [schema.literal(LOGS_APP_TARGET), schema.literal(DISCOVER_APP_TARGET)], - { defaultValue: LOGS_APP_TARGET } - ), - }), - options: { - defaultValue: { app_target: LOGS_APP_TARGET } as const, // "as const" is required for TS to not generalize `app_target: string` - }, - }), alerting: schema.object({ inventory_threshold: schema.object({ group_by_page_size: schema.number({ defaultValue: 5_000 }), From 55a86ba12033f090ccef6c69b82a29a5a0fdb804 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 27 Sep 2023 18:45:18 +0100 Subject: [PATCH 12/40] [ML] Changing wording of awaiting ML nodes messages (#167306) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates the text for the info callouts which are displayed when anomaly detection jobs are waiting for a node. @szabosteve would you mind having a review of the text? **Jobs list** ![image](https://github.com/elastic/kibana/assets/22172091/2f5e9293-7834-483f-9898-e797150963f8) **Creating a new job** ![image](https://github.com/elastic/kibana/assets/22172091/dcf594e4-67a1-4b96-95d7-bc832b77b1af) Fixes https://github.com/elastic/kibana/issues/165472 --------- Co-authored-by: István Zoltán Szabó --- .../jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx | 2 +- .../jobs_awaiting_node_warning/new_job_awaiting_node.tsx | 2 +- .../new_job_awaiting_node_shared.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx index 336e707c32499..d67e1c87f8c46 100644 --- a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx +++ b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx @@ -37,7 +37,7 @@ export const JobsAwaitingNodeWarning: FC = ({ jobCount }) => {
= () => {
diff --git a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node_shared/new_job_awaiting_node_shared.tsx b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node_shared/new_job_awaiting_node_shared.tsx index 2e932da5dc465..f5d1ade2eaca0 100644 --- a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node_shared/new_job_awaiting_node_shared.tsx +++ b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node_shared/new_job_awaiting_node_shared.tsx @@ -107,7 +107,7 @@ const MLJobsAwaitingNodeWarning: FC = ({ jobIds }) => {
Date: Wed, 27 Sep 2023 18:45:36 +0100 Subject: [PATCH 13/40] [ML] Retain created_by setting when exporting anomaly detection jobs (#167319) When exporting an anomaly detection job, it would be useful if the original `created_by` property was not removed from the job config. Related to https://github.com/elastic/kibana/pull/167021#discussion_r1337007611 Related PR https://github.com/elastic/kibana/pull/88898 --- .../export_jobs_flyout/jobs_export_service.ts | 4 +++- .../services/ml_api_service/jobs.ts | 4 ++-- .../ml/server/models/job_service/jobs.ts | 22 +++++++++++++------ .../plugins/ml/server/routes/job_service.ts | 8 +++---- .../schemas/anomaly_detectors_schema.ts | 7 ++++++ 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/jobs_export_service.ts b/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/jobs_export_service.ts index 9b073a87110d8..52e9bb2e101c2 100644 --- a/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/jobs_export_service.ts +++ b/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/jobs_export_service.ts @@ -30,7 +30,9 @@ export class JobsExportService { constructor(private _mlApiServices: MlApiServices) {} public async exportAnomalyDetectionJobs(jobIds: string[]) { - const configs = await Promise.all(jobIds.map(this._mlApiServices.jobs.jobForCloning)); + const configs = await Promise.all( + jobIds.map((id) => this._mlApiServices.jobs.jobForCloning(id, true)) + ); this._export(configs, 'anomaly-detector'); } diff --git a/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts b/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts index 45e5c2f4b82dc..0b79dfc2dd990 100644 --- a/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts +++ b/x-pack/plugins/ml/public/application/services/ml_api_service/jobs.ts @@ -67,8 +67,8 @@ export const jobsApiProvider = (httpService: HttpService) => ({ }); }, - jobForCloning(jobId: string) { - const body = JSON.stringify({ jobId }); + jobForCloning(jobId: string, retainCreatedBy = false) { + const body = JSON.stringify({ jobId, retainCreatedBy }); return httpService.http<{ job?: Job; datafeed?: Datafeed } | undefined>({ path: `${ML_INTERNAL_BASE_PATH}/jobs/job_for_cloning`, method: 'POST', diff --git a/x-pack/plugins/ml/server/models/job_service/jobs.ts b/x-pack/plugins/ml/server/models/job_service/jobs.ts index be9d6961cd6ba..669b1d4b737d7 100644 --- a/x-pack/plugins/ml/server/models/job_service/jobs.ts +++ b/x-pack/plugins/ml/server/models/job_service/jobs.ts @@ -315,22 +315,30 @@ export function jobsProvider( return { jobs, jobsMap }; } - async function getJobForCloning(jobId: string) { - const [jobResults, datafeedResult] = await Promise.all([ + async function getJobForCloning(jobId: string, retainCreatedBy = false) { + const [jobResults, datafeedResult, fullJobResults] = await Promise.all([ mlClient.getJobs({ job_id: jobId, exclude_generated: true }), getDatafeedByJobId(jobId, true), + ...(retainCreatedBy ? [mlClient.getJobs({ job_id: jobId })] : []), ]); const result: { datafeed?: Datafeed; job?: Job } = { job: undefined, datafeed: undefined }; if (datafeedResult && datafeedResult.job_id === jobId) { result.datafeed = datafeedResult; } - if (jobResults && jobResults.jobs) { - const job = jobResults.jobs.find((j) => j.job_id === jobId); - if (job) { - removeUnClonableCustomSettings(job); - result.job = job; + if (jobResults?.jobs?.length > 0) { + const job = jobResults.jobs[0]; + removeUnClonableCustomSettings(job); + + // to retain the created by property we need to add it back in + // from the job which hasn't been loaded with exclude_generated: true + if (retainCreatedBy && fullJobResults?.jobs?.length > 0) { + const fullJob = fullJobResults.jobs[0]; + if (fullJob.custom_settings?.created_by) { + job.custom_settings.created_by = fullJob.custom_settings.created_by; + } } + result.job = job; } return result; } diff --git a/x-pack/plugins/ml/server/routes/job_service.ts b/x-pack/plugins/ml/server/routes/job_service.ts index 18c57b90925f6..b7fad0ef66ce2 100644 --- a/x-pack/plugins/ml/server/routes/job_service.ts +++ b/x-pack/plugins/ml/server/routes/job_service.ts @@ -30,7 +30,7 @@ import { deleteJobsSchema, } from './schemas/job_service_schema'; -import { jobIdSchema } from './schemas/anomaly_detectors_schema'; +import { jobForCloningSchema, jobIdSchema } from './schemas/anomaly_detectors_schema'; import { jobServiceProvider } from '../models/job_service'; import { getAuthorizationHeader } from '../lib/request_authorization'; @@ -428,16 +428,16 @@ export function jobServiceRoutes({ router, routeGuard }: RouteInitialization) { version: '1', validate: { request: { - body: jobIdSchema, + body: jobForCloningSchema, }, }, }, routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { try { const { getJobForCloning } = jobServiceProvider(client, mlClient); - const { jobId } = request.body; + const { jobId, retainCreatedBy } = request.body; - const resp = await getJobForCloning(jobId); + const resp = await getJobForCloning(jobId, retainCreatedBy); return response.ok({ body: resp, }); diff --git a/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts b/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts index 6d3940c8d3e1f..d39ab40b7c561 100644 --- a/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/anomaly_detectors_schema.ts @@ -211,3 +211,10 @@ export const forceQuerySchema = schema.object({ /** force close */ force: schema.maybe(schema.boolean()), }); + +export const jobForCloningSchema = schema.object({ + /** Whether to retain the created_by custom setting. */ + retainCreatedBy: schema.maybe(schema.boolean()), + /** Job ID */ + jobId: schema.string(), +}); From 581b30b743c7b870a6e8c803cde96d06787ba90f Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 27 Sep 2023 11:04:45 -0700 Subject: [PATCH 14/40] Upgrade EUI to v88.5.0 (#166868) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v88.3.0`⏩`v88.5.0` closes #151514 --- ## [`88.5.0`](https://github.com/elastic/eui/tree/v88.5.0) - Updated `EuiCallOut` with a new `onDismiss` prop ([#7156](https://github.com/elastic/eui/pull/7156)) - Added a new `renderCustomToolbar` prop to `EuiDataGrid`, which allows custom rendering of the toolbar. ([#7190](https://github.com/elastic/eui/pull/7190)) - Added a new `allowResetButton` prop to `toolbarVisibility.showDisplaySelector` of `EuiDataGrid`, which allows hiding the "Reset to default" button from the display settings popover. ([#7190](https://github.com/elastic/eui/pull/7190)) - Added a new `additionalDisplaySettings` prop to `toolbarVisibility.showDisplaySelector` of `EuiDataGrid`, which allows rendering extra settings inside the display settings popover. ([#7190](https://github.com/elastic/eui/pull/7190)) - Updated `EuiDataGrid`'s toolbar display settings button icon ([#7190](https://github.com/elastic/eui/pull/7190)) - Updated `EuiTextTruncate` with significantly improved iteration performance. Removed `measurementRenderAPI` prop, as `EuiTextTruncation` now only uses more performant canvas render API ([#7210](https://github.com/elastic/eui/pull/7210)) - Updated `EuiPopover` with a new configurable `repositionToCrossAxis` prop ([#7211](https://github.com/elastic/eui/pull/7211)) - Updated `EuiDatePicker` to support `compressed` input styling ([#7218](https://github.com/elastic/eui/pull/7218)) - Added `gradient` and `palette` icon glyphs. ([#7220](https://github.com/elastic/eui/pull/7220)) **Bug fixes** - Fixed `EuiPopover`'s missing animations on popover close ([#7211](https://github.com/elastic/eui/pull/7211)) - Fixed `EuiInputPopover` anchoring to the wrong side and missing shadows on smaller screens ([#7211](https://github.com/elastic/eui/pull/7211)) - Fixed `EuiSuperDatePicker` icon spacing on the quick select button ([#7217](https://github.com/elastic/eui/pull/7217)) - Fixed a missing type in `EuiMarkdownEditor`'s default processing plugins ([#7221](https://github.com/elastic/eui/pull/7221)) ## [`88.4.1`](https://github.com/elastic/eui/tree/v88.4.1) **Bug fixes** - Fixed missing `className`s on `EuiTextTruncate` ([#7212](https://github.com/elastic/eui/pull/7212)) - Fixed `title`s on `EuiComboBox` dropdown options to always be present ([#7212](https://github.com/elastic/eui/pull/7212)) - Fixed `EuiComboBox` truncation issues when search is an empty space ([#7212](https://github.com/elastic/eui/pull/7212)) ## [`88.4.0`](https://github.com/elastic/eui/tree/v88.4.0) - Updated `EuiComboBox` to allow configuring text truncation behavior via `truncationProps`. These props can be set on the entire combobox as well as on on individual dropdown options. ([#7028](https://github.com/elastic/eui/pull/7028)) - Updated `EuiInMemoryTable` with a new `searchFormat` prop (defaults to `eql`). When setting this prop to `text`, the built-in search bar will ignore EQL syntax and allow searching for plain strings with special characters and symbols. ([#7175](https://github.com/elastic/eui/pull/7175)) **Bug fixes** - `EuiComboBox` now always shows the highlighted search text, even on truncated text ([#7028](https://github.com/elastic/eui/pull/7028)) - Fixed missing i18n in `EuiSearchBar`'s default placeholder and aria-label text ([#7175](https://github.com/elastic/eui/pull/7175)) - Fixed the inline compressed styles of `EuiDescriptionListTitle` to use a taller line-height for readability ([#7185](https://github.com/elastic/eui/pull/7185)) - Fixed `EuiComboBox` to correctly truncate selected items when displayed as pills and plain text ([#7193](https://github.com/elastic/eui/pull/7193)) **Accessibility** - Added `aria-current` attribute to `EuiTablePagination` ([#7186](https://github.com/elastic/eui/pull/7186)) **CSS-in-JS conversions** - Converted `EuiDroppable` and `EuiDraggable` to Emotion; Removed `$euiDragAndDropSpacing` Sass variables ([#7187](https://github.com/elastic/eui/pull/7187)) --------- Co-authored-by: Patryk Kopycinski Co-authored-by: Jan Monschke Co-authored-by: Thomas Watson --- package.json | 2 +- .../__snapshots__/status_table.test.tsx.snap | 1 + .../__snapshots__/i18n_service.test.tsx.snap | 4 ++ .../src/i18n_eui_mapping.tsx | 14 ++++++ .../__snapshots__/index.test.tsx.snap | 48 +++++++++++++++---- .../__snapshots__/header_menu.test.tsx.snap | 2 +- .../__snapshots__/list_header.test.tsx.snap | 2 +- .../__snapshots__/menu_items.test.tsx.snap | 4 +- .../src/user_profiles_popover.test.tsx | 1 + .../impl/user_profiles_popover.test.tsx | 1 + src/dev/license_checker/config.ts | 2 +- .../shard_failure_table.test.tsx.snap | 1 + .../__snapshots__/indices_list.test.tsx.snap | 6 +++ .../table/__snapshots__/table.test.tsx.snap | 1 + .../table/__snapshots__/table.test.tsx.snap | 1 + .../table/__snapshots__/table.test.tsx.snap | 1 + .../warning_call_out.test.tsx.snap | 5 +- .../not_found_errors.test.tsx.snap | 20 ++++++-- .../__snapshots__/flyout.test.tsx.snap | 1 + .../__snapshots__/relationships.test.tsx.snap | 6 +++ .../__snapshots__/table.test.tsx.snap | 2 + .../__snapshots__/settings.test.tsx.snap | 10 ++-- .../extend_index_management.test.tsx.snap | 5 +- .../upload_license.test.tsx.snap | 20 ++++++-- .../pipelines_table.test.js.snap | 1 + .../__snapshots__/icon_select.test.js.snap | 2 + .../add_tooltip_field_popover.test.tsx.snap | 2 + .../metrics_expression.test.tsx.snap | 2 + .../tooltip_popover.test.tsx.snap | 2 + .../toc_entry_actions_popover.test.tsx.snap | 6 +++ .../__snapshots__/tools_control.test.tsx.snap | 2 + .../condition_expression.test.js.snap | 4 ++ .../scope_expression.test.js.snap | 3 ++ .../__snapshots__/events_table.test.js.snap | 2 + .../table/__snapshots__/table.test.js.snap | 1 + .../add_item_popover.test.js.snap | 3 ++ .../edit_description_popover.test.js.snap | 3 ++ .../filter_list_usage_popover.test.js.snap | 3 ++ .../list/__snapshots__/table.test.js.snap | 2 + .../ccr/__snapshots__/ccr.test.js.snap | 1 + .../__snapshots__/checker_errors.test.js.snap | 5 +- .../cypress/e2e/all/alerts_liked_apps.cy.ts | 2 +- .../all/alerts_response_actions_form.cy.ts | 4 +- ...screen_capture_panel_content.test.tsx.snap | 15 ++++-- .../__snapshots__/index.test.tsx.snap | 5 +- .../action_connectors_warning.test.tsx.snap | 30 +++++++++--- .../markdown_editor/plugins/index.ts | 6 +-- .../__snapshots__/anomaly_score.test.tsx.snap | 1 + .../groups_filter_popover.test.tsx.snap | 1 + .../__snapshots__/index.test.tsx.snap | 1 + .../scripts/run_cypress/parallel.ts | 2 +- .../components/resolve_all_conflicts.test.tsx | 1 + .../__snapshots__/expanded_row.test.tsx.snap | 2 +- .../add_filter_btn.test.tsx | 3 ++ .../functional/page_objects/security_page.ts | 6 +-- .../test/functional/services/rules/common.ts | 6 +-- .../alert_create_flyout.ts | 7 +-- .../stack_alerting/es_query_rule.ts | 7 +-- .../stack_alerting/index_threshold_rule.ts | 6 +-- .../alerts/changing_alert_status.cy.ts | 4 +- .../investigations/timelines/creation.cy.ts | 2 +- .../timelines/discover/discover_state.cy.ts | 2 +- .../timelines/search_or_filter.cy.ts | 2 +- yarn.lock | 8 ++-- 64 files changed, 243 insertions(+), 84 deletions(-) diff --git a/package.json b/package.json index 39ca8426fd0e6..1394e14a8373e 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.4.0", - "@elastic/eui": "88.3.0", + "@elastic/eui": "88.5.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap b/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap index 1966b609894a0..cb10255eb9998 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap +++ b/packages/core/apps/core-apps-browser-internal/src/status/components/__snapshots__/status_table.test.tsx.snap @@ -60,6 +60,7 @@ exports[`StatusTable renders when statuses is provided 1`] = ` } responsive={true} rowProps={[Function]} + searchFormat="eql" sorting={ Object { "sort": Object { diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 2351704688777..49797f086e998 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -25,6 +25,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiBreadcrumb.collapsedBadge.ariaLabel": "See collapsed breadcrumbs", "euiBreadcrumb.popoverAriaLabel": "Clicking this button will toggle a popover dialog.", "euiBreadcrumbs.nav.ariaLabel": "Breadcrumbs", + "euiCallOut.dismissAriaLabel": "Dismiss this callout", "euiCardSelect.select": "Select", "euiCardSelect.selected": "Selected", "euiCardSelect.unavailable": "Unavailable", @@ -298,6 +299,9 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiResizablePanel.toggleButtonAriaLabel": "Press to toggle this panel", "euiSaturation.ariaLabel": "HSV color mode saturation and value 2-axis slider", "euiSaturation.screenReaderInstructions": "Arrow keys to navigate the square color gradient. Coordinates will be used to calculate HSV color mode \\"saturation\\" and \\"value\\" numbers, in the range of 0 to 1. Left and right to change the saturation. Up and down change the value.", + "euiSearchBox.ariaLabel": "This is a search bar. After typing your query, hit enter to filter the results lower in the page.", + "euiSearchBox.incrementalAriaLabel": "This is a search bar. As you type, the results lower in the page will automatically filter.", + "euiSearchBox.placeholder": "Search...", "euiSelectable.loadingOptions": "Loading options", "euiSelectable.noAvailableOptions": "No options available", "euiSelectable.noMatchingOptions": [Function], diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index 68c3db6e42660..e90889ceef612 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -119,6 +119,9 @@ export const getEuiContextMapping = (): EuiTokensObject => { defaultMessage: 'Breadcrumbs', description: 'Label on the breadcrumbs nav element', }), + 'euiCallOut.dismissAriaLabel': i18n.translate('core.euiCallOut.dismissAriaLabel', { + defaultMessage: 'Dismiss this callout', + }), 'euiCardSelect.select': i18n.translate('core.euiCardSelect.select', { defaultMessage: 'Select', description: 'Displayed button text when a card option can be selected.', @@ -1509,6 +1512,17 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiSaturation.ariaLabel': i18n.translate('core.euiSaturation.ariaLabel', { defaultMessage: 'HSV color mode saturation and value 2-axis slider', }), + 'euiSearchBox.ariaLabel': i18n.translate('core.euiSearchBox.ariaLabel', { + defaultMessage: + 'This is a search bar. After typing your query, hit enter to filter the results lower in the page.', + }), + 'euiSearchBox.incrementalAriaLabel': i18n.translate('core.euiSearchBox.incrementalAriaLabel', { + defaultMessage: + 'This is a search bar. As you type, the results lower in the page will automatically filter.', + }), + 'euiSearchBox.placeholder': i18n.translate('core.euiSearchBox.placeholder', { + defaultMessage: 'Search...', + }), 'euiSelectable.loadingOptions': i18n.translate('core.euiSelectable.loadingOptions', { defaultMessage: 'Loading options', description: 'Placeholder message while data is asynchronously loaded', diff --git a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap index 19cbc17bac8fd..5225cbc31debf 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap +++ b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap @@ -24,7 +24,11 @@ Object { class="euiComboBoxPill euiComboBoxPill--plainText" data-test-subj="euiComboBoxPill" > - machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +
- machine.os.raw + + machine.os.raw +