diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c2744590a..75706511e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,6 +15,11 @@ jobs: python-version: - "3.11" - "3.12" + exclude: + - platform: "macos-latest" + python-version: "3.11" + - platform: "windows-latest" + python-version: "3.11" uses: lars-reimann/.github/.github/workflows/poetry-codecov-reusable.yml@main with: working-directory: . diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 79f765b3b..31d6109a7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -19,6 +19,11 @@ jobs: python-version: - "3.11" - "3.12" + exclude: + - platform: "macos-latest" + python-version: "3.11" + - platform: "windows-latest" + python-version: "3.11" uses: lars-reimann/.github/.github/workflows/poetry-codecov-reusable.yml@main with: working-directory: . diff --git a/docs/tutorials/data_processing.ipynb b/docs/tutorials/data_processing.ipynb index eb32d7caf..e5803137f 100644 --- a/docs/tutorials/data_processing.ipynb +++ b/docs/tutorials/data_processing.ipynb @@ -2,6 +2,9 @@ "cells": [ { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "# Data Processing\n", "\n", @@ -13,480 +16,873 @@ " All operations on a Table return a new Table. The original Table will not be changed.\n", "

\n", "" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "### Create & Load data\n", "\n", "1. Load your data into a `Table`:" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "source": [ - "from safeds.data.tabular.containers import Table\n", - "\n", - "titanic = Table.from_csv_file(\"data/titanic.csv\")" - ], + "execution_count": 1, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.418025600Z", "start_time": "2024-05-24T11:02:33.358365Z" - } + }, + "collapsed": false }, "outputs": [], - "execution_count": 1 + "source": [ + "from safeds.data.tabular.containers import Table\n", + "\n", + "titanic = Table.from_csv_file(\"data/titanic.csv\")" + ] }, { "cell_type": "markdown", - "source": [ - "2. Create a `Table` containing only the first 10 rows:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "2. Create a `Table` containing only the first 10 rows:" + ] }, { "cell_type": "code", - "source": [ - "titanic_slice = titanic.slice_rows(length=10)\n", - "\n", - "titanic_slice # just to show the output" - ], + "execution_count": 2, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.426370200Z", "start_time": "2024-05-24T11:02:33.419030500Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | str | f64 | | f64 | str | str | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | null | Southampton | 0 |\n| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | null | Southampton | 0 |\n| | Eugene Joseph | | | | | | | |\n| 2 | Abbott, Mr. Rossmore | male | 16.00000 | … | 20.25000 | null | Southampton | 0 |\n| | Edward | | | | | | | |\n| 3 | Abbott, Mrs. Stanton | female | 35.00000 | … | 20.25000 | null | Southampton | 1 |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | null | Southampton | 1 |\n| | Karen Marie | | | | | | | |\n| 5 | Abelseth, Mr. Olaus | male | 25.00000 | … | 7.65000 | F G63 | Southampton | 1 |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, Mr. Samuel | male | 30.00000 | … | 24.00000 | null | Cherbourg | 0 |\n| 7 | Abelson, Mrs. Samuel | female | 28.00000 | … | 24.00000 | null | Cherbourg | 1 |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsson, Mr. | male | 20.00000 | … | 7.92500 | null | Southampton | 1 |\n| | Abraham Augus… | | | | | | | |\n| 9 | Abrahim, Mrs. Joseph | female | 18.00000 | … | 7.22920 | null | Cherbourg | 1 |\n| | (Sophie H… | | | | | | | |\n+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"42.000"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.002"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.011"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.011"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.000"348125"37.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"25.000"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"30.010"P/PP 3381"224.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"28.010"P/PP 3381"224.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"20.000"SOTON/O2 3101284"37.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"18.000"2657"37.2292null"Cherbourg"1
" + "text/html": [ + "
\n", + "shape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"42.000"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.002"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.011"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.011"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.000"348125"37.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"25.000"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"30.010"P/PP 3381"224.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"28.010"P/PP 3381"224.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"20.000"SOTON/O2 3101284"37.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"18.000"2657"37.2292null"Cherbourg"1
" + ], + "text/plain": [ + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | str | f64 | | f64 | str | str | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | null | Southampton | 0 |\n", + "| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Eugene Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. Rossmore | male | 16.00000 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. Stanton | female | 35.00000 | … | 20.25000 | null | Southampton | 1 |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | null | Southampton | 1 |\n", + "| | Karen Marie | | | | | | | |\n", + "| 5 | Abelseth, Mr. Olaus | male | 25.00000 | … | 7.65000 | F G63 | Southampton | 1 |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, Mr. Samuel | male | 30.00000 | … | 24.00000 | null | Cherbourg | 0 |\n", + "| 7 | Abelson, Mrs. Samuel | female | 28.00000 | … | 24.00000 | null | Cherbourg | 1 |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsson, Mr. | male | 20.00000 | … | 7.92500 | null | Southampton | 1 |\n", + "| | Abraham Augus… | | | | | | | |\n", + "| 9 | Abrahim, Mrs. Joseph | female | 18.00000 | … | 7.22920 | null | Cherbourg | 1 |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 2 + "source": [ + "titanic_slice = titanic.slice_rows(length=10)\n", + "\n", + "titanic_slice # just to show the output" + ] }, { "cell_type": "markdown", - "source": [ - "3. Extract a `Column` from your `Table`:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "3. Extract a `Column` from your `Table`:" + ] }, { "cell_type": "code", - "source": [ - "titanic_slice.get_column(\"name\")" - ], + "execution_count": 3, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.431877400Z", "start_time": "2024-05-24T11:02:33.426370200Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+---------------------------------+\n| name |\n| --- |\n| str |\n+=================================+\n| Abbing, Mr. Anthony |\n| Abbott, Master. Eugene Joseph |\n| Abbott, Mr. Rossmore Edward |\n| Abbott, Mrs. Stanton (Rosa Hun… |\n| Abelseth, Miss. Karen Marie |\n| Abelseth, Mr. Olaus Jorgensen |\n| Abelson, Mr. Samuel |\n| Abelson, Mrs. Samuel (Hannah W… |\n| Abrahamsson, Mr. Abraham Augus… |\n| Abrahim, Mrs. Joseph (Sophie H… |\n+---------------------------------+", - "text/html": "
\nshape: (10,)
name
str
"Abbing, Mr. Anthony"
"Abbott, Master. Eugene Joseph"
"Abbott, Mr. Rossmore Edward"
"Abbott, Mrs. Stanton (Rosa Hun…
"Abelseth, Miss. Karen Marie"
"Abelseth, Mr. Olaus Jorgensen"
"Abelson, Mr. Samuel"
"Abelson, Mrs. Samuel (Hannah W…
"Abrahamsson, Mr. Abraham Augus…
"Abrahim, Mrs. Joseph (Sophie H…
" + "text/html": [ + "
\n", + "shape: (10,)
name
str
"Abbing, Mr. Anthony"
"Abbott, Master. Eugene Joseph"
"Abbott, Mr. Rossmore Edward"
"Abbott, Mrs. Stanton (Rosa Hun…
"Abelseth, Miss. Karen Marie"
"Abelseth, Mr. Olaus Jorgensen"
"Abelson, Mr. Samuel"
"Abelson, Mrs. Samuel (Hannah W…
"Abrahamsson, Mr. Abraham Augus…
"Abrahim, Mrs. Joseph (Sophie H…
" + ], + "text/plain": [ + "+---------------------------------+\n", + "| name |\n", + "| --- |\n", + "| str |\n", + "+=================================+\n", + "| Abbing, Mr. Anthony |\n", + "| Abbott, Master. Eugene Joseph |\n", + "| Abbott, Mr. Rossmore Edward |\n", + "| Abbott, Mrs. Stanton (Rosa Hun… |\n", + "| Abelseth, Miss. Karen Marie |\n", + "| Abelseth, Mr. Olaus Jorgensen |\n", + "| Abelson, Mr. Samuel |\n", + "| Abelson, Mrs. Samuel (Hannah W… |\n", + "| Abrahamsson, Mr. Abraham Augus… |\n", + "| Abrahim, Mrs. Joseph (Sophie H… |\n", + "+---------------------------------+" + ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 3 + "source": [ + "titanic_slice.get_column(\"name\")" + ] }, { "cell_type": "markdown", - "source": [ - "4. Combine a list of `Column`s to a `Table` (make sure the `Column`s have the same amount of rows):" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "4. Combine a list of `Column`s to a `Table` (make sure the `Column`s have the same amount of rows):" + ] }, { "cell_type": "code", - "source": [ - "Table.from_columns([\n", - " titanic_slice.get_column(\"name\"),\n", - " titanic_slice.get_column(\"age\")\n", - "])" - ], + "execution_count": 4, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.436929600Z", "start_time": "2024-05-24T11:02:33.430880700Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+---------------------------------+----------+\n| name | age |\n| --- | --- |\n| str | f64 |\n+============================================+\n| Abbing, Mr. Anthony | 42.00000 |\n| Abbott, Master. Eugene Joseph | 13.00000 |\n| Abbott, Mr. Rossmore Edward | 16.00000 |\n| Abbott, Mrs. Stanton (Rosa Hun… | 35.00000 |\n| Abelseth, Miss. Karen Marie | 16.00000 |\n| Abelseth, Mr. Olaus Jorgensen | 25.00000 |\n| Abelson, Mr. Samuel | 30.00000 |\n| Abelson, Mrs. Samuel (Hannah W… | 28.00000 |\n| Abrahamsson, Mr. Abraham Augus… | 20.00000 |\n| Abrahim, Mrs. Joseph (Sophie H… | 18.00000 |\n+---------------------------------+----------+", - "text/html": "
\nshape: (10, 2)
nameage
strf64
"Abbing, Mr. Anthony"42.0
"Abbott, Master. Eugene Joseph"13.0
"Abbott, Mr. Rossmore Edward"16.0
"Abbott, Mrs. Stanton (Rosa Hun…35.0
"Abelseth, Miss. Karen Marie"16.0
"Abelseth, Mr. Olaus Jorgensen"25.0
"Abelson, Mr. Samuel"30.0
"Abelson, Mrs. Samuel (Hannah W…28.0
"Abrahamsson, Mr. Abraham Augus…20.0
"Abrahim, Mrs. Joseph (Sophie H…18.0
" + "text/html": [ + "
\n", + "shape: (10, 2)
nameage
strf64
"Abbing, Mr. Anthony"42.0
"Abbott, Master. Eugene Joseph"13.0
"Abbott, Mr. Rossmore Edward"16.0
"Abbott, Mrs. Stanton (Rosa Hun…35.0
"Abelseth, Miss. Karen Marie"16.0
"Abelseth, Mr. Olaus Jorgensen"25.0
"Abelson, Mr. Samuel"30.0
"Abelson, Mrs. Samuel (Hannah W…28.0
"Abrahamsson, Mr. Abraham Augus…20.0
"Abrahim, Mrs. Joseph (Sophie H…18.0
" + ], + "text/plain": [ + "+---------------------------------+----------+\n", + "| name | age |\n", + "| --- | --- |\n", + "| str | f64 |\n", + "+============================================+\n", + "| Abbing, Mr. Anthony | 42.00000 |\n", + "| Abbott, Master. Eugene Joseph | 13.00000 |\n", + "| Abbott, Mr. Rossmore Edward | 16.00000 |\n", + "| Abbott, Mrs. Stanton (Rosa Hun… | 35.00000 |\n", + "| Abelseth, Miss. Karen Marie | 16.00000 |\n", + "| Abelseth, Mr. Olaus Jorgensen | 25.00000 |\n", + "| Abelson, Mr. Samuel | 30.00000 |\n", + "| Abelson, Mrs. Samuel (Hannah W… | 28.00000 |\n", + "| Abrahamsson, Mr. Abraham Augus… | 20.00000 |\n", + "| Abrahim, Mrs. Joseph (Sophie H… | 18.00000 |\n", + "+---------------------------------+----------+" + ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 4 + "source": [ + "Table.from_columns([\n", + " titanic_slice.get_column(\"name\"),\n", + " titanic_slice.get_column(\"age\")\n", + "])" + ] }, { "cell_type": "markdown", - "source": [ - "5. Drop columns from a `Table`:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "5. Drop columns from a `Table`:" + ] }, { "cell_type": "code", - "source": [ - "titanic_slice.remove_columns([\n", - " \"id\",\n", - " \"name\",\n", - " \"ticket\",\n", - " \"cabin\",\n", - " \"port_embarked\",\n", - " \"survived\"\n", - "])" - ], + "execution_count": 5, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.457085600Z", "start_time": "2024-05-24T11:02:33.436929600Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+--------+----------+------------------+------------------+--------------+----------+\n| sex | age | siblings_spouses | parents_children | travel_class | fare |\n| --- | --- | --- | --- | --- | --- |\n| str | f64 | i64 | i64 | i64 | f64 |\n+===================================================================================+\n| male | 42.00000 | 0 | 0 | 3 | 7.55000 |\n| male | 13.00000 | 0 | 2 | 3 | 20.25000 |\n| male | 16.00000 | 1 | 1 | 3 | 20.25000 |\n| female | 35.00000 | 1 | 1 | 3 | 20.25000 |\n| female | 16.00000 | 0 | 0 | 3 | 7.65000 |\n| male | 25.00000 | 0 | 0 | 3 | 7.65000 |\n| male | 30.00000 | 1 | 0 | 2 | 24.00000 |\n| female | 28.00000 | 1 | 0 | 2 | 24.00000 |\n| male | 20.00000 | 0 | 0 | 3 | 7.92500 |\n| female | 18.00000 | 0 | 0 | 3 | 7.22920 |\n+--------+----------+------------------+------------------+--------------+----------+", - "text/html": "
\nshape: (10, 6)
sexagesiblings_spousesparents_childrentravel_classfare
strf64i64i64i64f64
"male"42.00037.55
"male"13.002320.25
"male"16.011320.25
"female"35.011320.25
"female"16.00037.65
"male"25.00037.65
"male"30.010224.0
"female"28.010224.0
"male"20.00037.925
"female"18.00037.2292
" + "text/html": [ + "
\n", + "shape: (10, 6)
sexagesiblings_spousesparents_childrentravel_classfare
strf64i64i64i64f64
"male"42.00037.55
"male"13.002320.25
"male"16.011320.25
"female"35.011320.25
"female"16.00037.65
"male"25.00037.65
"male"30.010224.0
"female"28.010224.0
"male"20.00037.925
"female"18.00037.2292
" + ], + "text/plain": [ + "+--------+----------+------------------+------------------+--------------+----------+\n", + "| sex | age | siblings_spouses | parents_children | travel_class | fare |\n", + "| --- | --- | --- | --- | --- | --- |\n", + "| str | f64 | i64 | i64 | i64 | f64 |\n", + "+===================================================================================+\n", + "| male | 42.00000 | 0 | 0 | 3 | 7.55000 |\n", + "| male | 13.00000 | 0 | 2 | 3 | 20.25000 |\n", + "| male | 16.00000 | 1 | 1 | 3 | 20.25000 |\n", + "| female | 35.00000 | 1 | 1 | 3 | 20.25000 |\n", + "| female | 16.00000 | 0 | 0 | 3 | 7.65000 |\n", + "| male | 25.00000 | 0 | 0 | 3 | 7.65000 |\n", + "| male | 30.00000 | 1 | 0 | 2 | 24.00000 |\n", + "| female | 28.00000 | 1 | 0 | 2 | 24.00000 |\n", + "| male | 20.00000 | 0 | 0 | 3 | 7.92500 |\n", + "| female | 18.00000 | 0 | 0 | 3 | 7.22920 |\n", + "+--------+----------+------------------+------------------+--------------+----------+" + ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 5 + "source": [ + "titanic_slice.remove_columns([\n", + " \"id\",\n", + " \"name\",\n", + " \"ticket\",\n", + " \"cabin\",\n", + " \"port_embarked\",\n", + " \"survived\"\n", + "])" + ] }, { "cell_type": "markdown", - "source": [ - "6. Keep only specified columns of a `Table`:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "6. Keep only specified columns of a `Table`:" + ] }, { "cell_type": "code", - "source": [ - "titanic_slice.remove_columns_except([\"name\", \"survived\"])" - ], + "execution_count": 6, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.458084900Z", "start_time": "2024-05-24T11:02:33.441438800Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+---------------------------------+----------+\n| name | survived |\n| --- | --- |\n| str | i64 |\n+============================================+\n| Abbing, Mr. Anthony | 0 |\n| Abbott, Master. Eugene Joseph | 0 |\n| Abbott, Mr. Rossmore Edward | 0 |\n| Abbott, Mrs. Stanton (Rosa Hun… | 1 |\n| Abelseth, Miss. Karen Marie | 1 |\n| Abelseth, Mr. Olaus Jorgensen | 1 |\n| Abelson, Mr. Samuel | 0 |\n| Abelson, Mrs. Samuel (Hannah W… | 1 |\n| Abrahamsson, Mr. Abraham Augus… | 1 |\n| Abrahim, Mrs. Joseph (Sophie H… | 1 |\n+---------------------------------+----------+", - "text/html": "
\nshape: (10, 2)
namesurvived
stri64
"Abbing, Mr. Anthony"0
"Abbott, Master. Eugene Joseph"0
"Abbott, Mr. Rossmore Edward"0
"Abbott, Mrs. Stanton (Rosa Hun…1
"Abelseth, Miss. Karen Marie"1
"Abelseth, Mr. Olaus Jorgensen"1
"Abelson, Mr. Samuel"0
"Abelson, Mrs. Samuel (Hannah W…1
"Abrahamsson, Mr. Abraham Augus…1
"Abrahim, Mrs. Joseph (Sophie H…1
" + "text/html": [ + "
\n", + "shape: (10, 2)
namesurvived
stri64
"Abbing, Mr. Anthony"0
"Abbott, Master. Eugene Joseph"0
"Abbott, Mr. Rossmore Edward"0
"Abbott, Mrs. Stanton (Rosa Hun…1
"Abelseth, Miss. Karen Marie"1
"Abelseth, Mr. Olaus Jorgensen"1
"Abelson, Mr. Samuel"0
"Abelson, Mrs. Samuel (Hannah W…1
"Abrahamsson, Mr. Abraham Augus…1
"Abrahim, Mrs. Joseph (Sophie H…1
" + ], + "text/plain": [ + "+---------------------------------+----------+\n", + "| name | survived |\n", + "| --- | --- |\n", + "| str | i64 |\n", + "+============================================+\n", + "| Abbing, Mr. Anthony | 0 |\n", + "| Abbott, Master. Eugene Joseph | 0 |\n", + "| Abbott, Mr. Rossmore Edward | 0 |\n", + "| Abbott, Mrs. Stanton (Rosa Hun… | 1 |\n", + "| Abelseth, Miss. Karen Marie | 1 |\n", + "| Abelseth, Mr. Olaus Jorgensen | 1 |\n", + "| Abelson, Mr. Samuel | 0 |\n", + "| Abelson, Mrs. Samuel (Hannah W… | 1 |\n", + "| Abrahamsson, Mr. Abraham Augus… | 1 |\n", + "| Abrahim, Mrs. Joseph (Sophie H… | 1 |\n", + "+---------------------------------+----------+" + ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 6 + "source": [ + "titanic_slice.remove_columns_except([\"name\", \"survived\"])" + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## Process data\n", "\n", "1. Filter rows with a given query:" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "source": [ - "titanic.remove_rows(\n", - " lambda row: row.get_value(\"age\") < 1\n", - ")" - ], + "execution_count": 7, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.502602800Z", "start_time": "2024-05-24T11:02:33.446034800Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+------+---------------------+--------+----------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | str | f64 | | f64 | str | str | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | null | Southampton | 0 |\n| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | null | Southampton | 0 |\n| | Eugene Joseph | | | | | | | |\n| 2 | Abbott, Mr. | male | 16.00000 | … | 20.25000 | null | Southampton | 0 |\n| | Rossmore Edward | | | | | | | |\n| 3 | Abbott, Mrs. | female | 35.00000 | … | 20.25000 | null | Southampton | 1 |\n| | Stanton (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | null | Southampton | 1 |\n| | Karen Marie | | | | | | | |\n| … | … | … | … | … | … | … | … | … |\n| 1303 | Yrois, Miss. | female | 24.00000 | … | 13.00000 | null | Southampton | 0 |\n| | Henriette ('Mrs H… | | | | | | | |\n| 1304 | Zabour, Miss. | female | 14.50000 | … | 14.45420 | null | Cherbourg | 0 |\n| | Hileni | | | | | | | |\n| 1306 | Zakarian, Mr. | male | 26.50000 | … | 7.22500 | null | Cherbourg | 0 |\n| | Mapriededer | | | | | | | |\n| 1307 | Zakarian, Mr. Ortin | male | 27.00000 | … | 7.22500 | null | Cherbourg | 0 |\n| 1308 | Zimmerman, Mr. Leo | male | 29.00000 | … | 7.87500 | null | Southampton | 0 |\n+------+---------------------+--------+----------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (1_034, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"42.000"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.002"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.011"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.011"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.000"348125"37.65null"Southampton"1
1303"Yrois, Miss. Henriette ('Mrs H…"female"24.000"248747"213.0null"Southampton"0
1304"Zabour, Miss. Hileni""female"14.510"2665"314.4542null"Cherbourg"0
1306"Zakarian, Mr. Mapriededer""male"26.500"2656"37.225null"Cherbourg"0
1307"Zakarian, Mr. Ortin""male"27.000"2670"37.225null"Cherbourg"0
1308"Zimmerman, Mr. Leo""male"29.000"315082"37.875null"Southampton"0
" + "text/html": [ + "
\n", + "shape: (1_034, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"42.000"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.002"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.011"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.011"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.000"348125"37.65null"Southampton"1
1303"Yrois, Miss. Henriette ('Mrs H…"female"24.000"248747"213.0null"Southampton"0
1304"Zabour, Miss. Hileni""female"14.510"2665"314.4542null"Cherbourg"0
1306"Zakarian, Mr. Mapriededer""male"26.500"2656"37.225null"Cherbourg"0
1307"Zakarian, Mr. Ortin""male"27.000"2670"37.225null"Cherbourg"0
1308"Zimmerman, Mr. Leo""male"29.000"315082"37.875null"Southampton"0
" + ], + "text/plain": [ + "+------+---------------------+--------+----------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | str | f64 | | f64 | str | str | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | null | Southampton | 0 |\n", + "| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Eugene Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. | male | 16.00000 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Rossmore Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. | female | 35.00000 | … | 20.25000 | null | Southampton | 1 |\n", + "| | Stanton (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | null | Southampton | 1 |\n", + "| | Karen Marie | | | | | | | |\n", + "| … | … | … | … | … | … | … | … | … |\n", + "| 1303 | Yrois, Miss. | female | 24.00000 | … | 13.00000 | null | Southampton | 0 |\n", + "| | Henriette ('Mrs H… | | | | | | | |\n", + "| 1304 | Zabour, Miss. | female | 14.50000 | … | 14.45420 | null | Cherbourg | 0 |\n", + "| | Hileni | | | | | | | |\n", + "| 1306 | Zakarian, Mr. | male | 26.50000 | … | 7.22500 | null | Cherbourg | 0 |\n", + "| | Mapriededer | | | | | | | |\n", + "| 1307 | Zakarian, Mr. Ortin | male | 27.00000 | … | 7.22500 | null | Cherbourg | 0 |\n", + "| 1308 | Zimmerman, Mr. Leo | male | 29.00000 | … | 7.87500 | null | Southampton | 0 |\n", + "+------+---------------------+--------+----------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 7 + "source": [ + "titanic.remove_rows(\n", + " lambda row: row.get_value(\"age\") < 1\n", + ")" + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## Transform table\n", "1. Transform table using `Imputer`. `Imputer`s replace missing values with other values (e.g. a constant, the mean or the median of the column etc.) depending on the chosen startegy, for example, the following `Imputer` will replace missing values in the given columns of the table with the constant 0:" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "source": [ - "from safeds.data.tabular.transformation import SimpleImputer\n", - "\n", - "imputer = SimpleImputer(SimpleImputer.Strategy.constant(0), column_names=[\"age\", \"fare\", \"cabin\", \"port_embarked\"]).fit(titanic)\n", - "imputer.transform(titanic_slice)" - ], + "execution_count": 8, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.520628800Z", "start_time": "2024-05-24T11:02:33.453086900Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | str | f64 | | f64 | str | str | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | 0 | Southampton | 0 |\n| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | 0 | Southampton | 0 |\n| | Eugene Joseph | | | | | | | |\n| 2 | Abbott, Mr. Rossmore | male | 16.00000 | … | 20.25000 | 0 | Southampton | 0 |\n| | Edward | | | | | | | |\n| 3 | Abbott, Mrs. Stanton | female | 35.00000 | … | 20.25000 | 0 | Southampton | 1 |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | 0 | Southampton | 1 |\n| | Karen Marie | | | | | | | |\n| 5 | Abelseth, Mr. Olaus | male | 25.00000 | … | 7.65000 | F G63 | Southampton | 1 |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, Mr. Samuel | male | 30.00000 | … | 24.00000 | 0 | Cherbourg | 0 |\n| 7 | Abelson, Mrs. Samuel | female | 28.00000 | … | 24.00000 | 0 | Cherbourg | 1 |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsson, Mr. | male | 20.00000 | … | 7.92500 | 0 | Southampton | 1 |\n| | Abraham Augus… | | | | | | | |\n| 9 | Abrahim, Mrs. Joseph | female | 18.00000 | … | 7.22920 | 0 | Cherbourg | 1 |\n| | (Sophie H… | | | | | | | |\n+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"42.000"C.A. 5547"37.55"0""Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.002"C.A. 2673"320.25"0""Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.011"C.A. 2673"320.25"0""Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.011"C.A. 2673"320.25"0""Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.000"348125"37.65"0""Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"25.000"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"30.010"P/PP 3381"224.0"0""Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"28.010"P/PP 3381"224.0"0""Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"20.000"SOTON/O2 3101284"37.925"0""Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"18.000"2657"37.2292"0""Cherbourg"1
" + "text/html": [ + "
\n", + "shape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"42.000"C.A. 5547"37.55"0""Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.002"C.A. 2673"320.25"0""Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.011"C.A. 2673"320.25"0""Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.011"C.A. 2673"320.25"0""Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.000"348125"37.65"0""Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"25.000"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"30.010"P/PP 3381"224.0"0""Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"28.010"P/PP 3381"224.0"0""Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"20.000"SOTON/O2 3101284"37.925"0""Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"18.000"2657"37.2292"0""Cherbourg"1
" + ], + "text/plain": [ + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | str | f64 | | f64 | str | str | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | 0 | Southampton | 0 |\n", + "| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | 0 | Southampton | 0 |\n", + "| | Eugene Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. Rossmore | male | 16.00000 | … | 20.25000 | 0 | Southampton | 0 |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. Stanton | female | 35.00000 | … | 20.25000 | 0 | Southampton | 1 |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | 0 | Southampton | 1 |\n", + "| | Karen Marie | | | | | | | |\n", + "| 5 | Abelseth, Mr. Olaus | male | 25.00000 | … | 7.65000 | F G63 | Southampton | 1 |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, Mr. Samuel | male | 30.00000 | … | 24.00000 | 0 | Cherbourg | 0 |\n", + "| 7 | Abelson, Mrs. Samuel | female | 28.00000 | … | 24.00000 | 0 | Cherbourg | 1 |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsson, Mr. | male | 20.00000 | … | 7.92500 | 0 | Southampton | 1 |\n", + "| | Abraham Augus… | | | | | | | |\n", + "| 9 | Abrahim, Mrs. Joseph | female | 18.00000 | … | 7.22920 | 0 | Cherbourg | 1 |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 8 + "source": [ + "from safeds.data.tabular.transformation import SimpleImputer\n", + "\n", + "imputer = SimpleImputer(SimpleImputer.Strategy.constant(0), column_names=[\"age\", \"fare\", \"cabin\", \"port_embarked\"]).fit(titanic)\n", + "imputer.transform(titanic_slice)" + ] }, { "cell_type": "markdown", - "source": [ - "2. Transform table using `LabelEncoder`, this will encode categorical features in the chosen `Column`s as integers:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "2. Transform table using `LabelEncoder`, this will encode categorical features in the chosen `Column`s as integers:" + ] }, { "cell_type": "code", - "source": [ - "from safeds.data.tabular.transformation import LabelEncoder\n", - "\n", - "encoder = LabelEncoder(column_names=[\"sex\", \"port_embarked\"]).fit(titanic)\n", - "encoder.transform(titanic_slice)" - ], + "execution_count": 9, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.584654300Z", "start_time": "2024-05-24T11:02:33.461597400Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+-------------------------+-----+----------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | u32 | f64 | | f64 | str | u32 | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | 0 | 42.00000 | … | 7.55000 | null | 0 | 0 |\n| 1 | Abbott, Master. Eugene | 0 | 13.00000 | … | 20.25000 | null | 0 | 0 |\n| | Joseph | | | | | | | |\n| 2 | Abbott, Mr. Rossmore | 0 | 16.00000 | … | 20.25000 | null | 0 | 0 |\n| | Edward | | | | | | | |\n| 3 | Abbott, Mrs. Stanton | 1 | 35.00000 | … | 20.25000 | null | 0 | 1 |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. Karen | 1 | 16.00000 | … | 7.65000 | null | 0 | 1 |\n| | Marie | | | | | | | |\n| 5 | Abelseth, Mr. Olaus | 0 | 25.00000 | … | 7.65000 | F G63 | 0 | 1 |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, Mr. Samuel | 0 | 30.00000 | … | 24.00000 | null | 1 | 0 |\n| 7 | Abelson, Mrs. Samuel | 1 | 28.00000 | … | 24.00000 | null | 1 | 1 |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsson, Mr. | 0 | 20.00000 | … | 7.92500 | null | 0 | 1 |\n| | Abraham Augus… | | | | | | | |\n| 9 | Abrahim, Mrs. Joseph | 1 | 18.00000 | … | 7.22920 | null | 1 | 1 |\n| | (Sophie H… | | | | | | | |\n+-----+-------------------------+-----+----------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64stru32f64i64i64stri64f64stru32i64
0"Abbing, Mr. Anthony"042.000"C.A. 5547"37.55null00
1"Abbott, Master. Eugene Joseph"013.002"C.A. 2673"320.25null00
2"Abbott, Mr. Rossmore Edward"016.011"C.A. 2673"320.25null00
3"Abbott, Mrs. Stanton (Rosa Hun…135.011"C.A. 2673"320.25null01
4"Abelseth, Miss. Karen Marie"116.000"348125"37.65null01
5"Abelseth, Mr. Olaus Jorgensen"025.000"348122"37.65"F G63"01
6"Abelson, Mr. Samuel"030.010"P/PP 3381"224.0null10
7"Abelson, Mrs. Samuel (Hannah W…128.010"P/PP 3381"224.0null11
8"Abrahamsson, Mr. Abraham Augus…020.000"SOTON/O2 3101284"37.925null01
9"Abrahim, Mrs. Joseph (Sophie H…118.000"2657"37.2292null11
" + "text/html": [ + "
\n", + "shape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64stru32f64i64i64stri64f64stru32i64
0"Abbing, Mr. Anthony"042.000"C.A. 5547"37.55null00
1"Abbott, Master. Eugene Joseph"013.002"C.A. 2673"320.25null00
2"Abbott, Mr. Rossmore Edward"016.011"C.A. 2673"320.25null00
3"Abbott, Mrs. Stanton (Rosa Hun…135.011"C.A. 2673"320.25null01
4"Abelseth, Miss. Karen Marie"116.000"348125"37.65null01
5"Abelseth, Mr. Olaus Jorgensen"025.000"348122"37.65"F G63"01
6"Abelson, Mr. Samuel"030.010"P/PP 3381"224.0null10
7"Abelson, Mrs. Samuel (Hannah W…128.010"P/PP 3381"224.0null11
8"Abrahamsson, Mr. Abraham Augus…020.000"SOTON/O2 3101284"37.925null01
9"Abrahim, Mrs. Joseph (Sophie H…118.000"2657"37.2292null11
" + ], + "text/plain": [ + "+-----+-------------------------+-----+----------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | u32 | f64 | | f64 | str | u32 | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | 0 | 42.00000 | … | 7.55000 | null | 0 | 0 |\n", + "| 1 | Abbott, Master. Eugene | 0 | 13.00000 | … | 20.25000 | null | 0 | 0 |\n", + "| | Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. Rossmore | 0 | 16.00000 | … | 20.25000 | null | 0 | 0 |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. Stanton | 1 | 35.00000 | … | 20.25000 | null | 0 | 1 |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. Karen | 1 | 16.00000 | … | 7.65000 | null | 0 | 1 |\n", + "| | Marie | | | | | | | |\n", + "| 5 | Abelseth, Mr. Olaus | 0 | 25.00000 | … | 7.65000 | F G63 | 0 | 1 |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, Mr. Samuel | 0 | 30.00000 | … | 24.00000 | null | 1 | 0 |\n", + "| 7 | Abelson, Mrs. Samuel | 1 | 28.00000 | … | 24.00000 | null | 1 | 1 |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsson, Mr. | 0 | 20.00000 | … | 7.92500 | null | 0 | 1 |\n", + "| | Abraham Augus… | | | | | | | |\n", + "| 9 | Abrahim, Mrs. Joseph | 1 | 18.00000 | … | 7.22920 | null | 1 | 1 |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+-------------------------+-----+----------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 9 + "source": [ + "from safeds.data.tabular.transformation import LabelEncoder\n", + "\n", + "encoder = LabelEncoder(column_names=[\"sex\", \"port_embarked\"]).fit(titanic)\n", + "encoder.transform(titanic_slice)" + ] }, { "cell_type": "markdown", - "source": [ - "3. Transform table using `OneHotEncoder`, this will create new `Column`s based on unique values in each chosen `Column`:\n" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "3. Transform table using `OneHotEncoder`, this will create new `Column`s based on unique values in each chosen `Column`:\n" + ] }, { "cell_type": "code", - "source": [ - "from safeds.data.tabular.transformation import OneHotEncoder\n", - "\n", - "encoder = OneHotEncoder(column_names=[\"sex\", \"port_embarked\"]).fit(titanic)\n", - "encoder.transform(titanic_slice)" - ], + "execution_count": 10, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.597162600Z", "start_time": "2024-05-24T11:02:33.472105400Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+------------+----------+------------+---+------------+------------+------------+------------+\n| id | name | age | siblings_s | … | sex__femal | port_embar | port_embar | port_embar |\n| --- | --- | --- | pouses | | e | ked__South | ked__Cherb | ked__Queen |\n| i64 | str | f64 | --- | | --- | ampton | ourg | stown |\n| | | | i64 | | u8 | --- | --- | --- |\n| | | | | | | u8 | u8 | u8 |\n+==================================================================================================+\n| 0 | Abbing, | 42.00000 | 0 | … | 0 | 1 | 0 | 0 |\n| | Mr. | | | | | | | |\n| | Anthony | | | | | | | |\n| 1 | Abbott, | 13.00000 | 0 | … | 0 | 1 | 0 | 0 |\n| | Master. | | | | | | | |\n| | Eugene | | | | | | | |\n| | Joseph | | | | | | | |\n| 2 | Abbott, | 16.00000 | 1 | … | 0 | 1 | 0 | 0 |\n| | Mr. | | | | | | | |\n| | Rossmore | | | | | | | |\n| | Edward | | | | | | | |\n| 3 | Abbott, | 35.00000 | 1 | … | 1 | 1 | 0 | 0 |\n| | Mrs. | | | | | | | |\n| | Stanton | | | | | | | |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, | 16.00000 | 0 | … | 1 | 1 | 0 | 0 |\n| | Miss. | | | | | | | |\n| | Karen | | | | | | | |\n| | Marie | | | | | | | |\n| 5 | Abelseth, | 25.00000 | 0 | … | 0 | 1 | 0 | 0 |\n| | Mr. Olaus | | | | | | | |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, | 30.00000 | 1 | … | 0 | 0 | 1 | 0 |\n| | Mr. Samuel | | | | | | | |\n| 7 | Abelson, | 28.00000 | 1 | … | 1 | 0 | 1 | 0 |\n| | Mrs. | | | | | | | |\n| | Samuel | | | | | | | |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsso | 20.00000 | 0 | … | 0 | 1 | 0 | 0 |\n| | n, Mr. | | | | | | | |\n| | Abraham | | | | | | | |\n| | Augus… | | | | | | | |\n| 9 | Abrahim, | 18.00000 | 0 | … | 1 | 0 | 1 | 0 |\n| | Mrs. | | | | | | | |\n| | Joseph | | | | | | | |\n| | (Sophie H… | | | | | | | |\n+-----+------------+----------+------------+---+------------+------------+------------+------------+", - "text/html": "
\nshape: (10, 15)
idnameagesiblings_spousesparents_childrentickettravel_classfarecabinsurvivedsex__malesex__femaleport_embarked__Southamptonport_embarked__Cherbourgport_embarked__Queenstown
i64strf64i64i64stri64f64stri64u8u8u8u8u8
0"Abbing, Mr. Anthony"42.000"C.A. 5547"37.55null010100
1"Abbott, Master. Eugene Joseph"13.002"C.A. 2673"320.25null010100
2"Abbott, Mr. Rossmore Edward"16.011"C.A. 2673"320.25null010100
3"Abbott, Mrs. Stanton (Rosa Hun…35.011"C.A. 2673"320.25null101100
4"Abelseth, Miss. Karen Marie"16.000"348125"37.65null101100
5"Abelseth, Mr. Olaus Jorgensen"25.000"348122"37.65"F G63"110100
6"Abelson, Mr. Samuel"30.010"P/PP 3381"224.0null010010
7"Abelson, Mrs. Samuel (Hannah W…28.010"P/PP 3381"224.0null101010
8"Abrahamsson, Mr. Abraham Augus…20.000"SOTON/O2 3101284"37.925null110100
9"Abrahim, Mrs. Joseph (Sophie H…18.000"2657"37.2292null101010
" + "text/html": [ + "
\n", + "shape: (10, 15)
idnameagesiblings_spousesparents_childrentickettravel_classfarecabinsurvivedsex__malesex__femaleport_embarked__Southamptonport_embarked__Cherbourgport_embarked__Queenstown
i64strf64i64i64stri64f64stri64u8u8u8u8u8
0"Abbing, Mr. Anthony"42.000"C.A. 5547"37.55null010100
1"Abbott, Master. Eugene Joseph"13.002"C.A. 2673"320.25null010100
2"Abbott, Mr. Rossmore Edward"16.011"C.A. 2673"320.25null010100
3"Abbott, Mrs. Stanton (Rosa Hun…35.011"C.A. 2673"320.25null101100
4"Abelseth, Miss. Karen Marie"16.000"348125"37.65null101100
5"Abelseth, Mr. Olaus Jorgensen"25.000"348122"37.65"F G63"110100
6"Abelson, Mr. Samuel"30.010"P/PP 3381"224.0null010010
7"Abelson, Mrs. Samuel (Hannah W…28.010"P/PP 3381"224.0null101010
8"Abrahamsson, Mr. Abraham Augus…20.000"SOTON/O2 3101284"37.925null110100
9"Abrahim, Mrs. Joseph (Sophie H…18.000"2657"37.2292null101010
" + ], + "text/plain": [ + "+-----+------------+----------+------------+---+------------+------------+------------+------------+\n", + "| id | name | age | siblings_s | … | sex__femal | port_embar | port_embar | port_embar |\n", + "| --- | --- | --- | pouses | | e | ked__South | ked__Cherb | ked__Queen |\n", + "| i64 | str | f64 | --- | | --- | ampton | ourg | stown |\n", + "| | | | i64 | | u8 | --- | --- | --- |\n", + "| | | | | | | u8 | u8 | u8 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, | 42.00000 | 0 | … | 0 | 1 | 0 | 0 |\n", + "| | Mr. | | | | | | | |\n", + "| | Anthony | | | | | | | |\n", + "| 1 | Abbott, | 13.00000 | 0 | … | 0 | 1 | 0 | 0 |\n", + "| | Master. | | | | | | | |\n", + "| | Eugene | | | | | | | |\n", + "| | Joseph | | | | | | | |\n", + "| 2 | Abbott, | 16.00000 | 1 | … | 0 | 1 | 0 | 0 |\n", + "| | Mr. | | | | | | | |\n", + "| | Rossmore | | | | | | | |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, | 35.00000 | 1 | … | 1 | 1 | 0 | 0 |\n", + "| | Mrs. | | | | | | | |\n", + "| | Stanton | | | | | | | |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, | 16.00000 | 0 | … | 1 | 1 | 0 | 0 |\n", + "| | Miss. | | | | | | | |\n", + "| | Karen | | | | | | | |\n", + "| | Marie | | | | | | | |\n", + "| 5 | Abelseth, | 25.00000 | 0 | … | 0 | 1 | 0 | 0 |\n", + "| | Mr. Olaus | | | | | | | |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, | 30.00000 | 1 | … | 0 | 0 | 1 | 0 |\n", + "| | Mr. Samuel | | | | | | | |\n", + "| 7 | Abelson, | 28.00000 | 1 | … | 1 | 0 | 1 | 0 |\n", + "| | Mrs. | | | | | | | |\n", + "| | Samuel | | | | | | | |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsso | 20.00000 | 0 | … | 0 | 1 | 0 | 0 |\n", + "| | n, Mr. | | | | | | | |\n", + "| | Abraham | | | | | | | |\n", + "| | Augus… | | | | | | | |\n", + "| 9 | Abrahim, | 18.00000 | 0 | … | 1 | 0 | 1 | 0 |\n", + "| | Mrs. | | | | | | | |\n", + "| | Joseph | | | | | | | |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+------------+----------+------------+---+------------+------------+------------+------------+" + ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 10 + "source": [ + "from safeds.data.tabular.transformation import OneHotEncoder\n", + "\n", + "encoder = OneHotEncoder(column_names=[\"sex\", \"port_embarked\"]).fit(titanic)\n", + "encoder.transform(titanic_slice)" + ] }, { "cell_type": "markdown", - "source": [ - " 4. Transform table using `RangeScaler`, this will scale the values in the chosen `Column`s to a given range:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + " 4. Transform table using `RangeScaler`, this will scale the values in the chosen `Column`s to a given range:" + ] }, { "cell_type": "code", - "source": [ - "from safeds.data.tabular.transformation import RangeScaler\n", - "\n", - "scaler = RangeScaler(0.0, 1.0, column_names=\"age\").fit(titanic)\n", - "scaler.transform(titanic_slice)" - ], + "execution_count": 11, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.599165800Z", "start_time": "2024-05-24T11:02:33.479893800Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+-----------------------+--------+---------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | str | f64 | | f64 | str | str | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | male | 0.52401 | … | 7.55000 | null | Southampton | 0 |\n| 1 | Abbott, Master. | male | 0.16075 | … | 20.25000 | null | Southampton | 0 |\n| | Eugene Joseph | | | | | | | |\n| 2 | Abbott, Mr. Rossmore | male | 0.19833 | … | 20.25000 | null | Southampton | 0 |\n| | Edward | | | | | | | |\n| 3 | Abbott, Mrs. Stanton | female | 0.43633 | … | 20.25000 | null | Southampton | 1 |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. Karen | female | 0.19833 | … | 7.65000 | null | Southampton | 1 |\n| | Marie | | | | | | | |\n| 5 | Abelseth, Mr. Olaus | male | 0.31106 | … | 7.65000 | F G63 | Southampton | 1 |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, Mr. Samuel | male | 0.37369 | … | 24.00000 | null | Cherbourg | 0 |\n| 7 | Abelson, Mrs. Samuel | female | 0.34864 | … | 24.00000 | null | Cherbourg | 1 |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsson, Mr. | male | 0.24843 | … | 7.92500 | null | Southampton | 1 |\n| | Abraham Augus… | | | | | | | |\n| 9 | Abrahim, Mrs. Joseph | female | 0.22338 | … | 7.22920 | null | Cherbourg | 1 |\n| | (Sophie H… | | | | | | | |\n+-----+-----------------------+--------+---------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"0.52400800"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"0.16075102"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"0.1983311"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"0.43632511"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"0.1983300"348125"37.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"0.31106400"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"0.37369510"P/PP 3381"224.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"0.34864310"P/PP 3381"224.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"0.24843400"SOTON/O2 3101284"37.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"0.22338200"2657"37.2292null"Cherbourg"1
" + "text/html": [ + "
\n", + "shape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64stri64f64strstri64
0"Abbing, Mr. Anthony""male"0.52400800"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"0.16075102"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"0.1983311"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"0.43632511"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"0.1983300"348125"37.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"0.31106400"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"0.37369510"P/PP 3381"224.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"0.34864310"P/PP 3381"224.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"0.24843400"SOTON/O2 3101284"37.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"0.22338200"2657"37.2292null"Cherbourg"1
" + ], + "text/plain": [ + "+-----+-----------------------+--------+---------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | str | f64 | | f64 | str | str | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | male | 0.52401 | … | 7.55000 | null | Southampton | 0 |\n", + "| 1 | Abbott, Master. | male | 0.16075 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Eugene Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. Rossmore | male | 0.19833 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. Stanton | female | 0.43633 | … | 20.25000 | null | Southampton | 1 |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. Karen | female | 0.19833 | … | 7.65000 | null | Southampton | 1 |\n", + "| | Marie | | | | | | | |\n", + "| 5 | Abelseth, Mr. Olaus | male | 0.31106 | … | 7.65000 | F G63 | Southampton | 1 |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, Mr. Samuel | male | 0.37369 | … | 24.00000 | null | Cherbourg | 0 |\n", + "| 7 | Abelson, Mrs. Samuel | female | 0.34864 | … | 24.00000 | null | Cherbourg | 1 |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsson, Mr. | male | 0.24843 | … | 7.92500 | null | Southampton | 1 |\n", + "| | Abraham Augus… | | | | | | | |\n", + "| 9 | Abrahim, Mrs. Joseph | female | 0.22338 | … | 7.22920 | null | Cherbourg | 1 |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+-----------------------+--------+---------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 11 + "source": [ + "from safeds.data.tabular.transformation import RangeScaler\n", + "\n", + "scaler = RangeScaler(column_names=\"age\", min_=0.0, max_=1.0).fit(titanic)\n", + "scaler.transform(titanic_slice)" + ] }, { "cell_type": "markdown", - "source": [ - "5. Transform table using `StandardScaler`, this will standardize values of chosen `Column`s:" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "5. Transform table using `StandardScaler`, this will standardize values of chosen `Column`s:" + ] }, { "cell_type": "code", - "source": [ - "from safeds.data.tabular.transformation import StandardScaler\n", - "\n", - "scaler = StandardScaler(column_names=[\"age\", \"travel_class\"]).fit(titanic)\n", - "scaler.transform(titanic_slice)" - ], + "execution_count": 12, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.604030100Z", "start_time": "2024-05-24T11:02:33.486926500Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | str | f64 | | f64 | str | str | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | male | 0.84120 | … | 7.55000 | null | Southampton | 0 |\n| 1 | Abbott, Master. | male | -1.17176 | … | 20.25000 | null | Southampton | 0 |\n| | Eugene Joseph | | | | | | | |\n| 2 | Abbott, Mr. Rossmore | male | -0.96353 | … | 20.25000 | null | Southampton | 0 |\n| | Edward | | | | | | | |\n| 3 | Abbott, Mrs. Stanton | female | 0.35531 | … | 20.25000 | null | Southampton | 1 |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. | female | -0.96353 | … | 7.65000 | null | Southampton | 1 |\n| | Karen Marie | | | | | | | |\n| 5 | Abelseth, Mr. Olaus | male | -0.33881 | … | 7.65000 | F G63 | Southampton | 1 |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, Mr. Samuel | male | 0.00825 | … | 24.00000 | null | Cherbourg | 0 |\n| 7 | Abelson, Mrs. Samuel | female | -0.13057 | … | 24.00000 | null | Cherbourg | 1 |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsson, Mr. | male | -0.68588 | … | 7.92500 | null | Southampton | 1 |\n| | Abraham Augus… | | | | | | | |\n| 9 | Abrahim, Mrs. Joseph | female | -0.82470 | … | 7.22920 | null | Cherbourg | 1 |\n| | (Sophie H… | | | | | | | |\n+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64strf64f64strstri64
0"Abbing, Mr. Anthony""male"0.84120200"C.A. 5547"0.8419167.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"-1.17176302"C.A. 2673"0.84191620.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"-0.96352611"C.A. 2673"0.84191620.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"0.35531411"C.A. 2673"0.84191620.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"-0.96352600"348125"0.8419167.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"-0.33881200"348122"0.8419167.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"0.00825110"P/PP 3381"-0.35209124.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"-0.13057410"P/PP 3381"-0.35209124.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"-0.68587500"SOTON/O2 3101284"0.8419167.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"-0.824700"2657"0.8419167.2292null"Cherbourg"1
" + "text/html": [ + "
\n", + "shape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64i64strf64f64strstri64
0"Abbing, Mr. Anthony""male"0.84120200"C.A. 5547"0.8419167.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"-1.17176302"C.A. 2673"0.84191620.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"-0.96352611"C.A. 2673"0.84191620.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"0.35531411"C.A. 2673"0.84191620.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"-0.96352600"348125"0.8419167.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"-0.33881200"348122"0.8419167.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"0.00825110"P/PP 3381"-0.35209124.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"-0.13057410"P/PP 3381"-0.35209124.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"-0.68587500"SOTON/O2 3101284"0.8419167.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"-0.824700"2657"0.8419167.2292null"Cherbourg"1
" + ], + "text/plain": [ + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | str | f64 | | f64 | str | str | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | male | 0.84120 | … | 7.55000 | null | Southampton | 0 |\n", + "| 1 | Abbott, Master. | male | -1.17176 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Eugene Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. Rossmore | male | -0.96353 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. Stanton | female | 0.35531 | … | 20.25000 | null | Southampton | 1 |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. | female | -0.96353 | … | 7.65000 | null | Southampton | 1 |\n", + "| | Karen Marie | | | | | | | |\n", + "| 5 | Abelseth, Mr. Olaus | male | -0.33881 | … | 7.65000 | F G63 | Southampton | 1 |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, Mr. Samuel | male | 0.00825 | … | 24.00000 | null | Cherbourg | 0 |\n", + "| 7 | Abelson, Mrs. Samuel | female | -0.13057 | … | 24.00000 | null | Cherbourg | 1 |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsson, Mr. | male | -0.68588 | … | 7.92500 | null | Southampton | 1 |\n", + "| | Abraham Augus… | | | | | | | |\n", + "| 9 | Abrahim, Mrs. Joseph | female | -0.82470 | … | 7.22920 | null | Cherbourg | 1 |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 12 + "source": [ + "from safeds.data.tabular.transformation import StandardScaler\n", + "\n", + "scaler = StandardScaler(column_names=[\"age\", \"travel_class\"]).fit(titanic)\n", + "scaler.transform(titanic_slice)" + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## Transform column\n", "\n", "1. Transform values of \"parents_children\" `Column` into true or false, depending on whether passenger travelled with parents or children:" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "source": [ - "titanic_slice.transform_column(\"parents_children\", lambda cell: cell > 0)" - ], + "execution_count": 13, "metadata": { - "collapsed": false, "ExecuteTime": { "end_time": "2024-05-24T11:02:33.615541800Z", "start_time": "2024-05-24T11:02:33.494976800Z" - } + }, + "collapsed": false }, "outputs": [ { "data": { - "text/plain": "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n| --- | --- | --- | --- | | --- | --- | --- | --- |\n| i64 | str | str | f64 | | f64 | str | str | i64 |\n+==================================================================================================+\n| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | null | Southampton | 0 |\n| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | null | Southampton | 0 |\n| | Eugene Joseph | | | | | | | |\n| 2 | Abbott, Mr. Rossmore | male | 16.00000 | … | 20.25000 | null | Southampton | 0 |\n| | Edward | | | | | | | |\n| 3 | Abbott, Mrs. Stanton | female | 35.00000 | … | 20.25000 | null | Southampton | 1 |\n| | (Rosa Hun… | | | | | | | |\n| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | null | Southampton | 1 |\n| | Karen Marie | | | | | | | |\n| 5 | Abelseth, Mr. Olaus | male | 25.00000 | … | 7.65000 | F G63 | Southampton | 1 |\n| | Jorgensen | | | | | | | |\n| 6 | Abelson, Mr. Samuel | male | 30.00000 | … | 24.00000 | null | Cherbourg | 0 |\n| 7 | Abelson, Mrs. Samuel | female | 28.00000 | … | 24.00000 | null | Cherbourg | 1 |\n| | (Hannah W… | | | | | | | |\n| 8 | Abrahamsson, Mr. | male | 20.00000 | … | 7.92500 | null | Southampton | 1 |\n| | Abraham Augus… | | | | | | | |\n| 9 | Abrahim, Mrs. Joseph | female | 18.00000 | … | 7.22920 | null | Cherbourg | 1 |\n| | (Sophie H… | | | | | | | |\n+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+", - "text/html": "
\nshape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64boolstri64f64strstri64
0"Abbing, Mr. Anthony""male"42.00false"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.00true"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.01true"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.01true"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.00false"348125"37.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"25.00false"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"30.01false"P/PP 3381"224.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"28.01false"P/PP 3381"224.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"20.00false"SOTON/O2 3101284"37.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"18.00false"2657"37.2292null"Cherbourg"1
" + "text/html": [ + "
\n", + "shape: (10, 12)
idnamesexagesiblings_spousesparents_childrentickettravel_classfarecabinport_embarkedsurvived
i64strstrf64i64boolstri64f64strstri64
0"Abbing, Mr. Anthony""male"42.00false"C.A. 5547"37.55null"Southampton"0
1"Abbott, Master. Eugene Joseph""male"13.00true"C.A. 2673"320.25null"Southampton"0
2"Abbott, Mr. Rossmore Edward""male"16.01true"C.A. 2673"320.25null"Southampton"0
3"Abbott, Mrs. Stanton (Rosa Hun…"female"35.01true"C.A. 2673"320.25null"Southampton"1
4"Abelseth, Miss. Karen Marie""female"16.00false"348125"37.65null"Southampton"1
5"Abelseth, Mr. Olaus Jorgensen""male"25.00false"348122"37.65"F G63""Southampton"1
6"Abelson, Mr. Samuel""male"30.01false"P/PP 3381"224.0null"Cherbourg"0
7"Abelson, Mrs. Samuel (Hannah W…"female"28.01false"P/PP 3381"224.0null"Cherbourg"1
8"Abrahamsson, Mr. Abraham Augus…"male"20.00false"SOTON/O2 3101284"37.925null"Southampton"1
9"Abrahim, Mrs. Joseph (Sophie H…"female"18.00false"2657"37.2292null"Cherbourg"1
" + ], + "text/plain": [ + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+\n", + "| id | name | sex | age | … | fare | cabin | port_embarked | survived |\n", + "| --- | --- | --- | --- | | --- | --- | --- | --- |\n", + "| i64 | str | str | f64 | | f64 | str | str | i64 |\n", + "+==================================================================================================+\n", + "| 0 | Abbing, Mr. Anthony | male | 42.00000 | … | 7.55000 | null | Southampton | 0 |\n", + "| 1 | Abbott, Master. | male | 13.00000 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Eugene Joseph | | | | | | | |\n", + "| 2 | Abbott, Mr. Rossmore | male | 16.00000 | … | 20.25000 | null | Southampton | 0 |\n", + "| | Edward | | | | | | | |\n", + "| 3 | Abbott, Mrs. Stanton | female | 35.00000 | … | 20.25000 | null | Southampton | 1 |\n", + "| | (Rosa Hun… | | | | | | | |\n", + "| 4 | Abelseth, Miss. | female | 16.00000 | … | 7.65000 | null | Southampton | 1 |\n", + "| | Karen Marie | | | | | | | |\n", + "| 5 | Abelseth, Mr. Olaus | male | 25.00000 | … | 7.65000 | F G63 | Southampton | 1 |\n", + "| | Jorgensen | | | | | | | |\n", + "| 6 | Abelson, Mr. Samuel | male | 30.00000 | … | 24.00000 | null | Cherbourg | 0 |\n", + "| 7 | Abelson, Mrs. Samuel | female | 28.00000 | … | 24.00000 | null | Cherbourg | 1 |\n", + "| | (Hannah W… | | | | | | | |\n", + "| 8 | Abrahamsson, Mr. | male | 20.00000 | … | 7.92500 | null | Southampton | 1 |\n", + "| | Abraham Augus… | | | | | | | |\n", + "| 9 | Abrahim, Mrs. Joseph | female | 18.00000 | … | 7.22920 | null | Cherbourg | 1 |\n", + "| | (Sophie H… | | | | | | | |\n", + "+-----+----------------------+--------+----------+---+----------+-------+---------------+----------+" + ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 13 + "source": [ + "titanic_slice.transform_column(\"parents_children\", lambda cell: cell > 0)" + ] } ], "metadata": { diff --git a/docs/tutorials/data_visualization.ipynb b/docs/tutorials/data_visualization.ipynb index 73e97b861..edc2d7b32 100644 --- a/docs/tutorials/data_visualization.ipynb +++ b/docs/tutorials/data_visualization.ipynb @@ -25,8 +25,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:35.238409500Z", - "start_time": "2024-05-24T11:02:35.164169700Z" + "end_time": "2024-06-20T18:48:39.232324800Z", + "start_time": "2024-06-20T18:48:39.160577Z" } }, "outputs": [], @@ -49,8 +49,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:35.250954600Z", - "start_time": "2024-05-24T11:02:35.232426Z" + "end_time": "2024-06-20T18:48:39.242848700Z", + "start_time": "2024-06-20T18:48:39.232324800Z" } }, "outputs": [ @@ -85,8 +85,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:35.251956200Z", - "start_time": "2024-05-24T11:02:35.240927200Z" + "end_time": "2024-06-20T18:48:39.243853500Z", + "start_time": "2024-06-20T18:48:39.241097400Z" } }, "outputs": [], @@ -115,14 +115,14 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:38.570910500Z", - "start_time": "2024-05-24T11:02:35.242438900Z" + "end_time": "2024-06-20T18:48:42.497644100Z", + "start_time": "2024-06-20T18:48:39.243853500Z" } }, "outputs": [ { "data": { - "text/plain": "", + "text/plain": "", "image/png": "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" }, "execution_count": 4, @@ -166,15 +166,15 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:38.796294400Z", - "start_time": "2024-05-24T11:02:38.569407500Z" + "end_time": "2024-06-20T18:48:42.586133100Z", + "start_time": "2024-06-20T18:48:42.497644100Z" } }, "outputs": [ { "data": { - "text/plain": "", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAABn8ElEQVR4nO3dd3yV9fn/8dfZ2QHChrA3AQdajCIOENyAWK2j1mptbdFWqFZRQYaKtXXV1lFrHd9Kbe1PQKSKyKyzilIII0BkypSRQMY5577vz++Pk0TCkJFx1vv5ePCoOefknCt3T5J3Ptd1f26XMcYgIiIiIknDHe0CRERERKRhKQCKiIiIJBkFQBEREZEkowAoIiIikmQUAEVERESSjAKgiIiISJJRABQRERFJMgqAIiIiIklGAVBEREQkySgAioiIiCQZBUARERGRJKMAKCIiIpJkFABFREREkow32gVEg+M4bNmyhczMTFwuV7TLERERETkuxhj27dtH69atcbuPfz0vKQPgli1byM3NjXYZIiIiIrWyadMm2rZte9yfl5QBMDMzE4gctKysrChXIyIiInJ8SkpKyM3Nrc40xyspA2BV2zcrK0sBUEREROLWiY6y6SQQERERkSSjACgiIiKSZBQARURERJKMAqCIiIhIklEAFBEREUkyCoAiIiIiSUYBUERERCTJKACKiIiIJBkFQBEREZEkowAoIiIikmQUAEVERESSjAKgiIiISJJRABQRERFJMgqAIiIiIkkm5gLghAkTcLlcNf716NGj+v5zzz33kPtvvfXWKFYsIiIix8tyHCzHRLuMpOWNdgGH07t3b95///3qj73emmXecsstTJo0qfrjtLS0BqtNRERETpwxhqDtUBq2SfW48fpjMookvJg86l6vl5YtWx7x/rS0tO+8X0RERGKPYwzlYZsyy8YYwBPtipJXzLWAAdasWUPr1q3p1KkT1113HRs3bqxx/2uvvUbTpk3Jy8tj7NixlJWVfefzBYNBSkpKavwTERGRhhN2HPYFLcrDNn6PG7cr2hUlt5hbAezfvz8vv/wy3bt3Z+vWrUycOJGzzz6bgoICMjMzufbaa2nfvj2tW7dm6dKl3H333RQWFvLmm28e8TmnTJnCxIkTG/CrEBEREfi25VsWtnEM+L1uXC6lv2hzGWNiegJz7969tG/fnscff5ybb775kPvnzZvHoEGDWLt2LZ07dz7scwSDQYLBYPXHJSUl5ObmUlxcTFZWVr3VLiIiksyqWr7llo3b7cLn/rbxGLRs0rwe0jQDeEJKSkrIzs4+4SwT80e9UaNGdOvW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IVAOtWbNGoYOHcrIkSOZNm0aK1euZOnSpbz44ovRLi1uuFwu0tPT6dGjBz6fj0ceeYQ5c+ZU3ydH9/zzzzNkyBCefPJJ0tPTef3113n66af5v//7P0Dfw9/lm2++4frrr+emm27in//8J2+++SYtW7akvLy8+jHqhny3VatWkZ+fz759+8jJyeGDDz7g2muv5cknn4x2aXGjoKCAAQMG8MUXX7Bjxw4eeughnnnmGYLBYP11Q0yc2rJli+nXr5+56667qm9buXKl6dWrl5kxY0YUK4svGzZsMN26dTMfffRR9W379u0z//znP0337t3N97///ShWF9vKysrMz372M3PzzTebYDBoLMsyxhjz3HPPmd69e5uKigrjOE6Uq4wPU6dONY888oj59NNPzdChQ82QIUPMl19+aX7729+aDRs2RLu8mHfllVeap556yhhjzBlnnGHOPvts07lzZ9O5c2fTv39/Y9u2Mcbo/XgYixcvNj169DBr166tvu3HP/6xueKKK8y1115rfv7zn1ffXnUcpabRo0ebESNGVH+8YcMGM2XKFONyucwjjzwSxcriw6ZNm0yvXr3MPffcU33byy+/bBo3bmzWrVtXb68bt8tkS5YswefzcfPNN1ff1qNHD7xeL+vWrYtiZfElMzOTcDjMRx99VH1bRkYGl19+Offeey+FhYU8//zzUawwdtm2TSgUYsCAAfj9fjweDwAtW7Zk9+7dhEKhKFcYPzIzM3nrrbf43ve+x1133UV6ejqXXnop99xzT/V1Lo1mAo/IsiyWLFnCc889R1ZWFtOmTePTTz/ltddeo6SkhOHDhwNaUT2c9PR0ysrK+Nvf/oZlWUyePJn/+7//o2vXrjRv3px58+Zx9tlnA5oJPBxjDOvXr8fv91ff1q5dO26//XYee+wxxo0bx0svvRTFCmObMYZ58+bRs2dPfvazn1WvNF9zzTW0atWK9evX19trx+27uV+/fvz85z+ne/fuAITDYQCaNm1a/d9ydGlpaQwcOJD333+fZcuWVd8eCAS48sor6dChAwsWLIhegTEsIyODhx56iBtvvBH4dgC6ZcuW5OTkkJGRUf0Ld9WqVdEqMy5069at+vgNGjSIffv2sWfPHvr378+aNWsAhZfDqfplMWLECDZt2sSbb77JGWecQU5ODjk5OfTv358HHniAoqIi/WF8BK1ateIHP/gBL7zwAhdffDGTJk3iH//4B4888ghPPPEEzz77LGvXrmXhwoXRLjUmuVwuBg4cyP/+9z9WrlxZfXt6ejo33ngjo0aN4oUXXmDLli1RrDJ2uVwuWrZsyYABA+jQoUP1HxmO41BWVsa2bdvq7bXjNgA2b96cG264AYgcKJ/PB0QCzb59+6of99RTT9UINlJTIBDgzjvv5Msvv+TBBx+ssYVEWloa55xzDqtXr9aZrUfQqlUrIPIerFoBdByHkpKS6mN233338atf/Yri4uKo1RnrunTpQiAQYNOmTdxwww2sWLGC3//+97Rs2ZIxY8awaNGiaJcYk6p+WZx77rmEw2Hef//9Q4Jeq1atsG1bq1dHkJWVxf33389//vMf7r//fnr06MHAgQNr3J+RkUFmZmYUq4xtp512GpmZmbz88sts3ry5+vbGjRtzySWXUFBQwNatW6NYYWwbMmQId9xxB/BtpyMQCNC4cePqbAPw97//nc8//7zOXjchfiK43e7qg1a1FQzA+PHjGT16tH7wfQfHccjLy2PGjBnMmjWLe+65h/nz51ffv2rVKtq2bYvXG/cnjNerA99joVCIffv24fV6eeCBB3j00Ud56KGHyM7OjmKFscsYg2VZGGPIz89nwYIFzJo1i5///OfccsstdOrUiQ4dOkS7zJhljKFdu3b8+c9/5uSTT2bWrFlMmTIFiOytOHfuXHJycsjKyopypbErMzOTjh070qZNGwKBQI2VrBkzZpCRkUGbNm2iWGFsGzBgANdccw3/+Mc/+POf/8xXX31VfV+fPn1o165djX0+5ciq8kvVyXGpqakAjB07lp///Oc0bty47l7LJMhgjWVZeL1eBg8ezLBhwzDGcPfdd/Phhx9y6qmnRru8qHMcB2NM9SpV1W1utxvbtvF4PCxevJif/OQn1bd16NCB+fPns2jRIk466aQoVh9933X8DvbJJ5/wy1/+knPOOYenn36aDz/8kH79+jVkuTHnWI7fa6+9xtNPP82f/vSnGsertLSU9PT0Bq03Fn3XMaz639WrV3Pffffx6aefYlkWXbt2paCggLlz53LyySdHr/gYcCzvwR07dnDJJZfQuHFjGjduTEZGBtOmTWPevHlJf/yO5MBj+PDDD/Pqq6/Sr18/brzxRrp06cKzzz7L3//+dz777DNatmwZ5WrjRzgc5qSTTuLhhx+moKCAhx9+mEWLFnHaaafV2WskTACsctVVV/HWW2/h8/mYN28ep59+erRLiroVK1bw8MMPs23bNrp27cqll17KJZdcAlAd/qr+d+PGjSxevJh58+aRm5vL5ZdfTo8ePaL8FUTXsRy/A3300UcMGDCAxo0bM2fOnKT/A+RYj184HKa0tJRGjRoB2nvtQMdyDKt+Ee/atYvNmzfzzjvv0K5dO/r370/nzp2j/BVE17Ecv6r328qVK/nDH/7A+vXrad++Pb/61a/o2bNnlL+C6Dvcz7oqB4bAV155henTp/PWW2/Ru3dvSkpKmDZtGqecckpDlhuTvusYHsyyLM455xz27NnD+vXr6zz8QYwHwLVr1/Lqq68SCoVo06YNt99+e/V9Vd+sB/+S+OEPf8jUqVNZunQpvXv3jkbZMaWwsJD+/ftz0UUX0aFDB9555x18Ph8DBgzgiSeeACItS7/fr1+4h3E8x6/K+vXrueqqq3j55Zfp1atXtEqPCcdy/ILBYPWZvqBNiw92Iu9B+dbxHL+q9155eTmpqamEw+EaM1jJavXq1cycOZNrr722eu75YFVdOIis2q9btw63201OTg4tWrRoyHJj0rEcwwN/B5eXlzN48GBWr17N3Llz6du3b90XVW8bzNRSQUGBycrKMkOHDjXnnHOOyc7ONvn5+WbevHkmHA4bY2ruyVReXm6MMaawsFD7hlVyHMfce++95qqrrqq+raSkxDz44IPm5JNPNrfcckuNx0+fPt1s3769ocuMWcd7/GbMmGG2bt1qjDGmoqKiQWuNRSdy/Hbs2NHQZcY0HcPaqe3PQO2baMyaNWtMkyZNjMvlMmPHjjU7d+485DE6Tt/tRI/hK6+8YgoLC+utrpgMgBUVFWbYsGHV35yhUMhs377d9OvXz5x66qlm5syZNcLfmDFjzJgxY6pDoHzrxhtvNAMHDqxxW0lJifn9739vTjvtNDNlyhRjjDFvv/22adu2rbnvvvu02ekBjvf43XvvvcayLP1ArKT3X+3pGNaOjt+J279/v7npppvMjTfeaP70pz8Zl8tl7rrrrsMGGGOMefTRR82kSZMauMrYdiLHcMKECQ1SW0z2WQKBAPv3769eJnW5XDRv3pxFixaRnp7O+PHja2xX0rZtW15++eUa278kO1PZ2T/11FOxbZvCwsLq+zIzM7nppps45ZRTmDlzJqFQiEsuuYSbbrqJm266Se03Tvz43XzzzXg8nqRvpev9V3s6hrWj41d7brebfv36ceGFF/KLX/yC119/nd///vc8+uijfPPNNzUeu3v3bhYvXsysWbPYvXt3lCqOPSdyDN955x127dpV/8U1SMw8TrZtm/POO6/GZciCwaAxJtLq7dChg7n66qtrfM6ePXsassS4sXbtWtO0aVNz0003mX379hljvl1q3rhxo3G5XGbmzJnRLDGm6fjVjo5f7ekY1o6OX+3s37+/xsevv/66cblc5s477zTffPONMcYYy7LMnj17zK5du8yWLVuiUWZMi9VjGHMBsOobc968eSY9Pd08/vjj1feVlZUZY4yZOXOmadOmjVm1apVabcdg3rx5JhAImFGjRtVYdt66das56aSTalwHWA6l41c7On61p2NYOzp+tXfgaMvf//736lbm119/be644w4zfPhwzT4fRawdw5jb3beqdXbaaadxxx138PTTT+Pz+bjtttuqN0RMSUkhJSWlxqW25MjOO+883njjDb7//e+zdetWrrrqKvr27curr77Kjh07yM3NjXaJMU3Hr3Z0/GpPx7B2dPxqr2qrHMdx+MEPfoDL5eKHP/whb731FkVFRfz3v/+tcTa/HCrWjmFMbgNTdTp5UVERzzzzDFOnTuUnP/kJd911F5Zl8cQTTzB9+nQWLFhATk5OtMuNG1988QVjxoxh/fr1eL1ePB4Pr7/+uvZnOkY6frWj41d7Ooa1o+NXe1WRweVyMWjQIJYsWcKCBQvo06dPlCuLH7FyDGMuAFZtlLh+/Xo+++wz+vfvz8yZM7nvvvvIysoiKyuLXbt2MWvWrKTfYPdElJSUsHv3bvbt20erVq1o2rRptEuKKzp+taPjV3s6hrWj41d7tm1z11138eSTT7JkyZL62aMuwcXCMYypAFi18rd+/Xq6du3KtddeyyuvvALAli1bWLRoERkZGfTt25d27dpFuVoREZHkY9s2L7/8Mv369dMl8k5QLBzDmAmAB4a/U089lREjRvDcc8/h8/l0ZQAREZEYYnTlqFqL9jGMiQB4cPi7/PLL+ctf/lJ9WRkRERERqTtRX1azbVvhT0RERKQBRT0AejweNmzYQO/evRk+fDgvvviiwp+IiIhIPYp6C9i2bX7605/icrl47rnnFP5ERERE6lnUAyDAnj17yM7O1okeIiIiIg0gJgKgiIiIiDQcLbmJiIiIJBkFQBEREZEkowAoIiIikmQUAEVERESSjAKgiIiISJJRABQRERFJMgqAIiIiIklGAVBEREQkySgAioiIiCQZBUARkXrSoUMHnnzyyXp9jQULFuByudi7d2+9vo6IJBZvtAsQEUlUn332Genp6dEuQ0TkEAqAIiLHKRQK4ff7j/q4Zs2aNUA1IiLHTy1gEUkK//rXv+jTpw+pqank5OQwePBgSktLOffcc7njjjtqPHb48OHceOON1R936NCByZMnc8MNN5CVlcVPf/pTzjzzTO6+++4an7dz5058Ph+LFi2q/ryqFvC1117L1VdfXePx4XCYpk2b8uqrrwLgOA5TpkyhY8eOpKamctJJJ/Gvf/2rxuf8+9//plu3bqSmpnLeeeexfv362h8cEUk6CoAikvC2bt3KNddcw0033cTKlStZsGABV1xxBcaYY36O3//+95x00kl8+eWXjBs3juuuu47XX3+9xnP84x//oHXr1px99tmHfP51113HzJkz2b9/f/Vts2fPpqysjBEjRgAwZcoUXn31VZ577jmWL1/O6NGjuf7661m4cCEAmzZt4oorruCyyy5jyZIl/OQnP+Gee+450cMiIklMLWARSXhbt27FsiyuuOIK2rdvD0CfPn2O6znOP/98fv3rX1d/fNVVV3HHHXfwwQcfVAe+qVOncs011+ByuQ75/KFDh5Kens60adP44Q9/WP34yy+/nMzMTILBIA8//DDvv/8++fn5AHTq1IkPPviA559/nnPOOYdnn32Wzp0789hjjwHQvXt3li1bxm9/+9vjPygiktS0AigiCe+kk05i0KBB9OnTh+9///u88MIL7Nmz57ie47TTTqvxcbNmzRgyZAivvfYaAOvWrePjjz/muuuuO+zne71errrqqurHl5aWMmPGjOrHr127lrKyMi644AIyMjKq/7366qsUFRUBsHLlSvr371/jeavCoojI8dAKoIgkPI/Hw5w5c/joo4947733ePrpp7nvvvv49NNPcbvdh7SCw+HwIc9xuLN5r7vuOn75y1/y9NNPM3XqVPr06fOdK4vXXXcd55xzDjt27GDOnDmkpqZy4YUXAlS3hmfNmkWbNm1qfF4gEDjur1lE5LtoBVBEkoLL5eKss85i4sSJfPnll/j9fqZNm0azZs3YunVr9eNs26agoOCYnnPYsGFUVFTw7rvvMnXq1COu/lU588wzyc3N5R//+AevvfYa3//+9/H5fAD06tWLQCDAxo0b6dKlS41/ubm5APTs2ZP//ve/NZ7zk08+OZ7DICICaAVQRJLAp59+yty5cxkyZAjNmzfn008/ZefOnfTs2ZP09HTGjBnDrFmz6Ny5M48//vgxb6qcnp7O8OHDGTduHCtXruSaa6456udce+21PPfcc6xevZr58+dX356Zmcmdd97J6NGjcRyHAQMGUFxczIcffkhWVhY/+tGPuPXWW3nssce46667+MlPfsLixYt5+eWXT/CoiEgyUwAUkYSXlZXFokWLePLJJykpKaF9+/Y89thjXHTRRYTDYf73v/9xww034PV6GT16NOedd94xP/d1113HxRdfzMCBA2nXrt0xPf6hhx6iffv2nHXWWTXumzx5Ms2aNWPKlCl89dVXNGrUiFNPPZV7770XgHbt2vH//t//Y/To0Tz99NN873vf4+GHH+amm246vgMiIknPZY5nHwQRERERiXuaARQRERFJMgqAIiIiIklGAVBEREQkySgAioiIiCQZBUARERGRJKMAKCIiIpJkFABFREREkowCoIiIiEiSUQAUERERSTIKgCIiIiJJRgFQREREJMkoAIqIiIgkGQVAERERkSSjACgiIiKSZBQARURERJKMAqCIiIhIklEAFBEREUky/x8KcPzqA6iFXQAAAABJRU5ErkJggg==" + "text/plain": "", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAABrbklEQVR4nO3deXxU5dn/8c+ZNXuAsEPYkSURF6iIIi4guIOitqK1VmurtVbg0SouIFRFbatYW/fn59JKbesjIFJ3RKqiIooQ9h2UVZYEMsnMnHPu3x9ZJAIK2Wb7vl+vvDQzk8mVwyT55lz3dR/LGGMQERERkZThiXUBIiIiItK4FABFREREUowCoIiIiEiKUQAUERERSTEKgCIiIiIpRgFQREREJMUoAIqIiIikGAVAERERkRSjACgiIiKSYhQARURERFKMAqCIiIhIilEAFBEREUkxCoAiIiIiKcYX6wJiwXVdNm/eTHZ2NpZlxbocERERkSNijGHv3r20bdsWj+fIz+elZADcvHkz+fn5sS5DREREpE42bdpE+/btj/jjUjIAZmdnAxUHLScnJ8bViIiIiByZkpIS8vPzqzPNkUrJAFjV9s3JyVEAFBERkYRV26VsGgIRERERSTEKgCIiIiIpRgFQREREJMWk5BpAERERiQ3HcYhGo7EuI+75/X68Xm+DPb8CoIiIiDQ4Ywxbt25lz549sS4lYTRp0oTWrVs3yJ7FCoAiIiLS4KrCX8uWLcnIyNCFGL6HMYZQKMT27dsBaNOmTb1/DgVAERERaVCO41SHv7y8vFiXkxDS09MB2L59Oy1btqz3drCGQERERKRBVa35y8jIiHEliaXqeDXEmkkFQBEREWkUavsemYY8XgqAIiIiIodgjOGXv/wlzZo1w7IsFi5cGOuS6oXWAIqIiIgcwhtvvMFzzz3HnDlz6NKlC82bN491SfVCAVBERETkENasWUObNm046aSTav0c0WgUv99fj1XVnVrAIiIiIgdx1VVXceONN7Jx40Ysy6JTp0688cYbDBw4kCZNmpCXl8d5553HmjVrqj9m/fr1WJbFP//5T0499VTS0tJ48cUXAXjmmWfo1asXaWlp9OzZk8ceeyxWX1p8BsCvv/6aK664gry8PNLT0zn66KP57LPPqu83xjB+/HjatGlDeno6Q4YMYdWqVTGsWERERJLNI488wqRJk2jfvj1btmxh/vz5lJaWMnbsWD777DPeffddPB4PF154Ia7r1vjY2267jZtuuolly5YxbNgwXnzxRcaPH8+9997LsmXLuO+++7jrrrt4/vnnY/K1xV0LePfu3Zx88smcfvrpvP7667Ro0YJVq1bRtGnT6sc8+OCD/PnPf+b555+nc+fO3HXXXQwbNoylS5eSlpYWw+pFRETkcLiuS1nUiclkcLrfe1ifNzc3l+zsbLxeL61btwZg5MiRNR7z//7f/6NFixYsXbqUwsLC6ttHjx7NRRddVP3+hAkT+NOf/lR9W+fOnVm6dClPPvkkP/vZz+rjyzoicRcAH3jgAfLz83n22Werb+vcuXP1/xtjmDJlCnfeeSfDhw8H4IUXXqBVq1ZMnz6dn/zkJ41es4iIiBweYwwG2Bex6XP32zGpYemkYWQEaheBVq1axfjx4/nkk0/45ptvqs/8bdy4sUYA7NevX/X/l5aWsmbNGq655hquvfba6ttt2yY3N7eWX0XdxF0AfPXVVxk2bBiXXHIJ77//Pu3atePXv/519QFbt24dW7duZciQIdUfk5ubS//+/Zk3b95BA2A4HCYcDle/X1JS0vBfiIiIiNRgjME1BteAMbGupnbOP/98OnbsyNNPP03btm1xXZfCwkIikUiNx2VmZlb//759+wB4+umn6d+/f43H1fcVPg5X3AXAtWvX8vjjjzN27Fhuv/125s+fz29/+1sCgQA/+9nP2Lp1KwCtWrWq8XGtWrWqvu+7Jk+ezMSJExu8dhERETk4YwxOZfizrIo27OK7h+L1xKYFXBs7d+5kxYoVPP3005xyyikAfPDBBz/4ca1ataJt27asXbuWyy+/vFafu77FXQB0XZd+/fpx3333AXDcccdRVFTEE088Uese+bhx4xg7dmz1+yUlJeTn59dLvSIiInJoxhjCtlNx1g+oyHsWlgUZAV9MAmBtNW3alLy8PJ566inatGnDxo0bue222w7rYydOnMhvf/tbcnNzOeusswiHw3z22Wfs3r27RkZpLHE3BdymTRt69+5d47ZevXqxceNGgOpFmNu2bavxmG3btlXf913BYJCcnJwabyIiItKwHNewL2pTGnWwLPBgAYkT+L7L4/Hw0ksvsWDBAgoLCxkzZgx/+MMfDutjf/GLX/DMM8/w7LPPcvTRR3Pqqafy3HPP1ZhzaExxdwbw5JNPZsWKFTVuW7lyJR07dgQqBkJat27Nu+++y7HHHgtUnNH75JNPuP766xu7XBERETmIqONSGrWJOga/N3FD3+jRoxk9enT1+0OGDGHp0qU1HmP2W9DYqVOnGu/vb9SoUYwaNapB6jxScRcAx4wZw0knncR9993HpZdeyqeffspTTz3FU089BVRcGHn06NHcc889dO/evXobmLZt2zJixIjYFi8iIpLijDGU2w6hqAsWBH0eok7iBsBkFXcB8Ec/+hHTpk1j3LhxTJo0ic6dOzNlypQaiyZ/97vfUVpayi9/+Uv27NnDwIEDeeONN7QHoIiISAw5riFk25TbLj6Phc8TdyvNpJJlDnWeMomVlJSQm5tLcXGx1gOKiIjUg4jjEoraRF1DwOvBs99Gy5HycrZ+tZFOnTpXn6xxjcFjWQk1BNLYysvLWbduHZ07dz7gJFdds0zcnQEUERGRxGGMocx2KIs6YFkEvZ6YXN1DjowCoIiIiNRKzZavB5/O5iUMBUARERE5Yt/X8j1A5X0puOqsThryeGl1poiIiBw2YwyhiE1JOIpjIPhD4Q/w+irON5WFQo1RYtIIVR4vv99f78+tM4AiIiJyWBzXEIrahJ2Klu/hDnB4vV4yc3LZsWM7AOkZGZVXBdEQyMEYYwiFQmzfvp0mTZo0yPWCFQBFRETkB0UqN3Z2XIP/MM76fVezFi0B2F4ZAk3lNYGP9HlSSZMmTQ55lbO6UgAUERGRQzLGUBZ1CNkOlmURqOWUr2VZ5LVsRdO85ti2TcR2CHo9ZAQURQ7G7/c3yJm/KjrqIiIiclC2ayirRcv3+3i8XgJeL8brEvR5SFMAjAkddRERETlA2HEJRWwcU7uWr8Q3BUARERGp5hpD+X4t36Cv4dqQEjsKgCIiIgJUtHxDEZuw6+Kvp5avxCcFQBERkRRnjCHiVGzx4hijy7mlAAVAERGRFOZWTvmW2Q4etXxThgKgiIhIirJdl1DEUcs3BSkAioiIpJiKlq9LadTBVcs3JSkAioiIpBC1fAUUAEVERFJGdcvXcfF71fJNZQqAIiIiSe6Alq9PLd9UpwAoIiKSxNTylYNRABQREUlS0cqWb0QtX/kOBUAREZEkY4ypuJZv1MGo5SsHoQAoIiKSRGq0fD0WAa9avnIgBUAREZEkUdXyjToufp8Hj876ySEoAIqIiCS4/Vu+roGAWr7yAxQARUREElhVyzdkO3g9FkGvJ9YlSQJQABQREUlQ0cq9/WzHJaCWrxwBBUAREZEEU9XyLY06GLV8pRYUAEVERBKI4xpCtk257eLzWPjU8pVaUAAUERFJEBUtX5uoY9TylTpRABQREYlzxhjKbYdQ1MVYaGNnqTMFQBERkTh2QMvXo5av1J0CoIiISJyKOC4htXylASgAioiIxBljDGW2Q1nUActSy1fqnQKgiIhIHKnZ8vXg8yj4Sf1TABQREYkT1S1f1xDwquUrDSfuVpLefffdWJZV461nz57V95922mkH3H/dddfFsGIREZG6McYQitqUhKM4BoIKf9LA4vIMYEFBAe+88071+z5fzTKvvfZaJk2aVP1+RkZGo9UmIiJSnxy3IvyFnYqWr1ctX2kEcRkAfT4frVu3PuT9GRkZ33u/iIhIIohUbuzsuAa/zvpJI4q7FjDAqlWraNu2LV26dOHyyy9n48aNNe5/8cUXad68OYWFhYwbN45QKPS9zxcOhykpKanxJiIiEivGGEKRipava9B6P2l0cXcGsH///jz33HP06NGDLVu2MHHiRE455RSKiorIzs5m1KhRdOzYkbZt27Jo0SJuvfVWVqxYwSuvvHLI55w8eTITJ05sxK9CRETk4NTylXhgGWNMrIv4Pnv27KFjx4489NBDXHPNNQfcP3v2bAYPHszq1avp2rXrQZ8jHA4TDoer3y8pKSE/P5/i4mJycnIarHYREZH9RRyX0oiNY9TyDdsu6T4PmYG4OxeVEEpKSsjNza11lon7o96kSROOOuooVq9efdD7+/fvD/C9ATAYDBIMBhusRhERke/jGkN51CFkO1iWRcCrjZ0ltuJyDeD+9u3bx5o1a2jTps1B71+4cCHAIe8XERGJJds1lEZsSm0Hn8ej8CdxIe7OAN58882cf/75dOzYkc2bNzNhwgS8Xi+XXXYZa9asYerUqZxzzjnk5eWxaNEixowZw6BBg+jTp0+sSxcREalmjCHiVgx7OMYQVPCTOBJ3AfCrr77isssuY+fOnbRo0YKBAwfy8ccf06JFC8rLy3nnnXeYMmUKpaWl5OfnM3LkSO68885Yly0iIlLNNYayqEOZ7eCxLII+b6xLEqkh7odAGkJdF06KiIgciu26hCIOYdfFrynfQ9IQSN0k/RCIiIhIIjDGEHEqtnhRy1finQKgiIhIHanlK4lGAVBERKQOqlu+jovfq5avJAYFQBERkVqoaPm6lEYdXGMI+tTylcShACgiInKE1PKVRKcAKCIicgRs16U04hBRy1cSmAKgiIjIYTDGEHZcQmr51gs39Xahiytxfyk4ERGRWHONIRR12BexAQj6vAp/dbDk62KueOpjPlu/K9alpCydARQREfke0cop34jjEvB58Cj41Vp51OGx91bz/IfrcQ08/PYqTj2qZazLSkkKgCIiIgexf8vXqOVbZ5+t38XdM5awYWcIgKEFrbjrvN4xrip1KQCKiIh8R9WUb8h28HosAl5N+dZWadjm4bdX8s9PNwHQMjvInef35qRuzUn3aSVarCgAioiI7CdaubefrZZvnX2wagcTX13K1uJyAEb2bcfYoT3ISfcTtt0YV5faFABFRET4tuVbGnUwBgJq+dZacSjCg2+s4NWFmwFo1zSduy8o4MSueTGuTKooAIqISMpzjaE0alNuu/g8Fj6vWpO19daSrdz72jJ2lUawLLj8xI7cOLgbGQFFjniifw0REUlpVS3fqFq+dfLN3jD3zlrKO0u3A9ClRSaTRhRyTH6T2BYmB6UAKCIiKam65RtxMBaa8q0lYwwzFm7mD28sp6TMxuexuPqUzvzq1K4ENOQRtxQARUQk5TiuIWTv1/L1KKjUxuY9ZUx6dQkfrt4JQK82Ofz+wgJ6tM6JcWXyQxQARUQkpUQcl1DUJuoYtXxryXUNL83fyJS3V1EWcQj4PPz69K787KROWj+ZIBQARUQkJRhjKLcdQlEHLEst31pa900pd08v4vONewA4vkMT7h5RSOfmmbEtTI6IAqCIiCQ9tXzrznZcnv9oPY+9t4aI7ZIR8DL6zKP48Y/y8XgUpBONAqCIiCS16pavawh41fKtjRVbS7hr2hKWbSkB4ORueYy/oIC2TdJjXJnUlgKgiIgkJWMMZZUtX8uyCHrV8j1SEdvliTlrePaDddiuISfdx+/O6skFx7bVsUxwCoAiIpJ0HNcQitqEHRevx4NPLcojtnDjHibMKGLtjlIAhvRuyR3n9qZ5djDGlUl9UAAUEZGkEnFcSqM2tlq+tRKK2Dz6zipe/GQjxkBeVoA7zu3FmQWtY12a1CMFQBERSQrGGMqiDiFbLd/a+njNTu5+dQlf7y4D4IJj2/K7s3qQmxGIcWVS3xQARUQk4e3f8vV5PHjV8j0iJWVRHnprBf+34GsA2uSmMf6C3gzs3iLGlUlDUQAUEZGEFnFcSiM2jjH41fI9Yu8t3849M5eyfW8YgJ+ckM/oM48iM6iIkMz0rysiIgnpuy3fgFq+R2RXaYTJs5bxRtFWADrmZTBxeCF9OzWNcWXSGBQARUQk4diuoUwt31oxxvCfxVu4/z/L2ROK4rHgZyd34tendyPN7411edJIFABFRCShhB2XkFq+tbK1uJx7Zi7l/ZU7ADiqVRaTRhRS0C43xpVJY1MAFBGRhOAaQ/n+U74+na06XMYYXl7wFQ+9uZJ9YRu/1+JXp3bl6oGd8ft0WbxUpAAoIiJxz3YNoYhN2HXxq+V7RDbtCnH3jCV8um4XAH3a5zJpRCFdW2bFuDKJJQVAERGJW8YYIk7FFi+OMdrb7wg4ruHv8zbwl9mrKI+6pPk93Di4O5ef2FEBWhQARUQkPrmVU75ltoNHLd8jsnr7PsZPK2Lx18UA9O/cjAnDC8hvlhHjyiReKACKiEjcsV2XUMQh7Lj4vWr5Hq6o7fLMf9fy1Ny12I4hK+jjf4Ydxci+7XXmVGqIu5Wfd999N5Zl1Xjr2bNn9f3l5eXccMMN5OXlkZWVxciRI9m2bVsMKxYRkfpijCFsO5SEbSKuS9Cn8He4lnxdzI+fnMdj763Bdgyn9WjB9BtP5uJ++Qp/coC4PANYUFDAO++8U/2+z/dtmWPGjGHWrFn8+9//Jjc3l9/85jdcdNFFfPjhh7EoVURE6olavrVTHnV4bPZqnv9oPa6Bphl+xp3bi7MKWyv4ySHFZQD0+Xy0bt36gNuLi4v53//9X6ZOncoZZ5wBwLPPPkuvXr34+OOPOfHEExu7VBERqQe261IacYio5XtEPlu/i7tnLGHDzhAAZx/dmtvO6UWzzECMK5N4F3ctYIBVq1bRtm1bunTpwuWXX87GjRsBWLBgAdFolCFDhlQ/tmfPnnTo0IF58+bFqlwREaklYwzllS3fqFq+h21fuc09ry3l5/9vPht2hmiZHeTRUcfx4CXHKPzJYYm7M4D9+/fnueeeo0ePHmzZsoWJEydyyimnUFRUxNatWwkEAjRp0qTGx7Rq1YqtW7ce8jnD4TDhcLj6/ZKSkoYqX0REDpNavrXz35U7mDRzKVuLywEY2bc9Y4ceRU66P8aVSSKJuwB49tlnV/9/nz596N+/Px07duRf//oX6enptXrOyZMnM3HixPoqUURE6ihaOeUbcVwCPl3O7XDsCUV48PUVzPxyMwDtmqYzcXgB/bvkxbgySURx2QLeX5MmTTjqqKNYvXo1rVu3JhKJsGfPnhqP2bZt20HXDFYZN24cxcXF1W+bNm1q4KpFRORgqlq+e8M2dmXLV+Hvh721ZCvDH/2QmV9uxrLgpwM68soNJyn8Sa3F3RnA79q3bx9r1qzhpz/9KX379sXv9/Puu+8ycuRIAFasWMHGjRsZMGDAIZ8jGAwSDAYbq2QRETmIGi1fj0XAq5bvD9mxN8x9s5byztLtAHRtkcnEEYUck98ktoVJwou7AHjzzTdz/vnn07FjRzZv3syECRPwer1cdtll5Obmcs011zB27FiaNWtGTk4ON954IwMGDNAEsIhIHIs6LqGoQ9Rx8eus3w8yxjBj4WYefH05e8ttfB6La07pzC9P7UrAF/fNO0kAcRcAv/rqKy677DJ27txJixYtGDhwIB9//DEtWrQA4OGHH8bj8TBy5EjC4TDDhg3jsccei3HVIiJyMMYYwo5LadTBGAj4dC3fH/L17jImvbqEj9bsBKB32xwmjSigR+ucGFcmycQyxphYF9HYSkpKyM3Npbi4mJwcfUOJiDQE1xhKozbltovPY+Hz6MzV93Fdw0vzNzLl7VWURRwCPg83nN6NK0/qiM+bfMcubLuk+zxkBuLuXFRCqGuW0VEXEZF6F6086xfVlO9hWfdNKROmF/HFxj0AHN+hCRNHFNKpeWZsC5OkpQAoIiL1prrlG3EwFgTV8v1etuPy3IfreXzOGiK2S0bAy5ihR3Fpv3w82hBbGpACoIiI1AvHNYRstXwP1/ItJYyfvoRlWyouTnBytzzGX1BA2ya12/NW5EgoAIqISJ1VtHxtoo5Ry/cHRGyXJ+as4dkP1mG7hpx0H7ee3ZPzj2mrs6XSaBQARUSk1qo2dg5FXVDL9wct3LiHCTOKWLujFIAze7fi9nN70Txbe9VK41IAFBGRWlHL9/CFIjaPvrOKFz/ZiDGQlxXgjnN7cWbBoa9iJdKQFABFROSIRRyXUNQm6hoCXrV8v8+8NTuZOGMJX+8pA+CCY9vyu7N6kJsRiHFlksoUAEVE5LAZYyizHcqiDlgWQa9avodSUhblT2+u4JXPvwagTW4aEy4o4OTuzWNcmYgCoIiIHKaaLV8PPm1TckjvLd/OPTOXsn1vGICfnJDP6DOPIjOoX7sSH/RKFBGRH6SW7+HZVRph8qxlvFG0FYCOeRlMHF5I305NY1yZSE0KgCIickjGGMqiDiHbwVLL95CMMfxn8Rbu/89y9oSieD0WPzupE9ef3pU0vzfW5YkcQAFQREQOynENoahN2Klo+XrV8j2orcXl/H7mUuau3AHAUa2ymHRhIQVtc2NcmcihKQCKiMgBIpUbOzuuwa+W70G5ruH/Pv+Kh95cyb6wjd9r8atTu3L1wM74fdoSR+KbAqCIiFT7bss3oJbvQW3aFWLC9CLmr98NQJ/2uUwaUUjXllkxrkzk8CgAiogIALZrKFPL93s5ruHv8zbwl9mrKI+6pPu93Di4G6NO7KjjJQlFAVBERAg7LqGIjWPU8j2U1dv3MX5aEYu/Lgagf+dmTBheQH6zjBhXJnLkFABFRFKYawzl+0/5+jSx+l1R2+WZ/67lqblrsR1DVtDHzWf14KLj26k9LglLAVBEJEXZriEUsQm7Ln61fA+q6Otixk8vYtW2fQCc1qMFd57fm1Y5aTGuTKRuFABFRFKMMYaIU7HFi2OM9vY7iPKow2OzV/P8R+txDTTN8DPu3F6cVdhax0qSggKgiEgKcSunfMtsB49avgf12fpdTJi+hI27QgCc06cNt57dk2aZgRhXJlJ/FABFRFKE7bqEIo5avoewr9xmytsr+ef8TQC0zAly13m9Oa1nyxhXJlL/FABFRJJcRcvXpTTq4Krle1D/XbmDSTOXsrW4HICRfdvzP8OOIjvNH+PKRBqGAqCISBJTy/f77QlFePD1Fcz8cjMA7Zumc/fwAvp3yYtxZSINSwFQRCRJVbd8HRe/Vy3f/RljeGvJNu6btYxdpREsC644sSO/GdyNjIB+NUry06tcRCTJHNDy9anlu78de8Pc+9pS3l22HYCuLTKZOKKQY/KbxLYwkUakACgikkTU8j00YwzTv9jMH95Yzt5yG5/H4ppTOvPLU7sS8HliXZ5Io1IAFBFJEtHKlm9ELd8DfL27jEmvLuGjNTsB6N02h0kjCunROjvGlaUmxzUYY9ArNHYUAEVEEpwxpuJavlEHo5ZvDa5reGn+Rqa8vYqyiEPQ5+HXp3fjypM64vPqrF9jc40h6rhYlkWG30uaX2eoY0UBUEQkgdVo+XosAl79Qq2y7ptSJkwv4ouNewA4vmNTJg4voFPzzNgWloJcY4i6Bir/QEn3efF5FMBjSQFQRCRBVbV8o46L3+fBo7N+AEQdl+c/XM/jc9YQsV0yAl7GDD2KS/vl41FbvFGZyuDnGkPQ4yEt4MPvsXSGOg4oAIqIJJj9W76ugYBavtWWbylh/PQilm3ZC8DJ3fIYf0EBbZukx7iy1GO7LrZr8Hsssvw+AtqAPK4oAIqIJJCqlm/IdvB6LIJaxwZAOOrw5PtrefaDddiuISfdx61n9+T8Y9oqdDQyx61Y5+f1WGT5vQR9Xp2djkMKgCIiCSJaubef7bgE1PKttnDjHsZPL2LdN6UAnFnQitvP7UXzrGCMK0st1QMeVA54+LyaRI9jCoAiInGuquVbGnUwavlWC0VsHn1nFS9+shFjIC8rwJ3n9WZI71axLi2lGGOI7Dfgkebz4teAR9xTABQRiWOOawjZNuW2i89jaeuSSvPW7GTijCV8vacMgOHHteWWYT3IzQjEuLLUYYzBdg2OBjwSkgKgiEicqmj52kQdo5ZvpZKyKH98cwXTPv8agDa5aUy4oICTuzePcWWpxXZdbMfg91pkasAjIcX1n5L3338/lmUxevTo6ttOO+00LMuq8XbdddfFrkgRkXpmjKEsalMStrENBBX+AJi9bDsj/vJhdfj7yQn5TPvNyQp/jchxDeV2xVKEzICXnKCfoM+r8JeA4vYM4Pz583nyySfp06fPAfdde+21TJo0qfr9jIyMxixNRKTBHNDy1Voqdu4Lc/9/lvNG0VYAOuVlcPfwQvp2ahrjylLHtwMekOHTgEcyiMsAuG/fPi6//HKefvpp7rnnngPuz8jIoHXr1jGoTESk4UQcl5BavtWMMcxatIUHXl/OnlAUr8fiqpM7cd1pXXUJsUZStZGz0YBH0onLf8UbbriBc889lyFDhhz0/hdffJHmzZtTWFjIuHHjCIVC3/t84XCYkpKSGm8iIvGiquW7NxzFUcsXgK3F5fzmxS8Y93+L2ROK0qN1Ni/+sj+jzzxK4a8RmMozfmHHxWdZ5AT9ZPl9Cn9JJO7OAL700kt8/vnnzJ8//6D3jxo1io4dO9K2bVsWLVrErbfeyooVK3jllVcO+ZyTJ09m4sSJDVWyiEit1Wz5evCleFvNdQ0vL/iKh95aQWnYwe+1+NWpXbn6lM74NQHdKKoGPHxei2y/j6AGPJKSZYwxsS6iyqZNm+jXrx9vv/129dq/0047jWOPPZYpU6Yc9GNmz57N4MGDWb16NV27dj3oY8LhMOFwuPr9kpIS8vPzKS4uJicnp96/DhGRw1Hd8nUNAa/O+m3cWcrdM5Ywf/1uAPq0z2XSiEK6tsyKcWWpwXENUdfFa1mkeT2k+XUFj3hWUlJCbm5urbNMXJ0BXLBgAdu3b+f444+vvs1xHObOnctf/vIXwuEwXm/NU//9+/cH+N4AGAwGCQa1I7yIxAdjDGW2QyjqYFlWyp9hcVzD3+dt4C+zV1EedUn3e7lxcDdGndhRgwaNwDUG23ExVAx4BH3elD8TnQriKgAOHjyYxYsX17jt5z//OT179uTWW289IPwBLFy4EIA2bdo0RokiInXiuIZQ1K5YW+XxpHzAWbVtLxOmL2Hx18UA9O/SjAkXFJDfTLs7NLQaAx7eygEPtdlTRlwFwOzsbAoLC2vclpmZSV5eHoWFhaxZs4apU6dyzjnnkJeXx6JFixgzZgyDBg066HYxIiLxJFK5sbPjGvwp3vKN2i7P/HctT81di+0YsoI+bj6rBxcd3y6lz4Y2hqoreLjG4PN4yNAVPFJSXAXAHxIIBHjnnXeYMmUKpaWl5OfnM3LkSO68885YlyYickgVU74OIbui5ZvqV00o+rqY8dOLWLVtHwCn9WzBnef1plVOWowrS362W9Hu9XkssgI+rT1NYXE1BNJY6rpwUkTkcKnl+62yiMPj763m+Y/W4xpomuFn3Lm9OKuwdUoH4sbguAbbdfFUDngEtZFzwkuqIRARkWQScVxKIzaOUct3/rpd3D1jCRt3Vezbek6fNtx6dk+aZQZiXFlyq7iChwEM6RrwkP0oAIqI1DPXGMr3a/kGfam7cfG+cpuH317Jv+ZvAqBlTpC7zuvNaT1bxriy5HbggIdPAx5SgwKgiEg9st2Kq3qUOy7+FG/5/nflDibNXMrW4nIALu7XnrFDjyI7zR/jypLXdwc80gM+AhrwkINQABQRqSdhxyVU2fJN5b399oQiPPj6CmZ+uRmA9k3TmTi8gBO65MW4suTmVA54eDXgIYdBAVBEpI7cyinfMtvBk8ItX2MMby3Zxn2zlrGrNILHgisGdOQ3Z3QnPZCax6QxuJXX7bUsiwy/VwMeclgUAEVE6sB2XUIRh7Cb2i3fHXvD3PvaUt5dth2Ari0ymTSikD75TWJbWBLbf8Aj6POQ7vPi82idnxweBUARkVowxhBxKrZ4SeWWrzGG6V9s5g9vLGdvuY3PY3HNKZ355aldCfgURhpC1YCHawxBj4c0vzZyliOnACgicoTU8q3w9e4yJr66hHlrdgLQu20Ok0YU0qN1dowrS15R1624kozHIsvvJ+BV8JPaUQAUETkC1S1fx8XvTc2Wr+sa/vHpRh55ZxVlEYegz8MNZ3TjpwM64tNWIw3CcSvW+fk8Ftka8JB6oAAoInIYKlq+LqVRp6L15kvNlu+6b0qZML2ILzbuAeD4jk2ZOLyATs0zY1tYkqoe8KBiwCNNAx5STxQARUR+gFq+EHVcnv9wPY/PWUPEdskIeBk79Cgu6ZePR4Gk3rmV6/wwGvCQhqEAKCLyPWzXpTTiEEnhlu+yLSVMmF7Esi17ATi5W3MmXNCbNk3SY1xZ8qnayNmpGvAIaMBDGoYCoIjIQRhjKjZ2jjoVl9NKwZZvOOrw5Ptr+X8frMNxDTnpPm49uyfnH9M25Y5FY7BdF7tywCPTX7HOT8dZGooCoIjId3y35RtIwZbvwo27GT99Ceu+KQXgzIJW3H5uL5pnBWNcWfKpGvDweiyyKjdy1oCHNDQFQBGR/UQrp3yjjovfl3qTlqGwzZ/fXcXUTzZiDORlBbjzvN4M6d0q1qUlnW8HPNCAhzQ6BUAREQ5s+QZSsOU7b81OJs5Ywtd7ygAYflxbbjmrJ7np/hhXllyqNnKuWlqQ5vPi14CHNLJ6e8X97W9/4+STT6Zt27Zs2LABgClTpjBjxoz6+hQiIg3CNYZQ1GFvxAYLAj5vSoW/krIo46cX8cvnP+PrPWW0yU3jiZ/25Z4Lj1b4q0em8oxf2HHxWRY5QT9Zfp/Cn8REvbzqHn/8ccaOHcs555zDnj17cBwHgCZNmjBlypT6+BQiIg0i6riUhG3Kog4BryflfhnPXradEX/5kGmffw3AZf07MO03J3Ny9+Yxriy52K5L2HaxLMgO+MgJashDYqteftI9+uijPP3009xxxx14vd8ulu7Xrx+LFy+uj08hIlKvjDGU2w4lERvbrWj5ptJ6v537wtz8ry+56R9fsGNvmE55GTx/zQncfm4vMoNaHVRfHLfidWYMZAa85Ab9pKXYGWaJT/XyXb5u3TqOO+64A24PBoOUlpbWx6cQEak3rjGURm3K7YpLa6XS5cuMMcxatIUHXl/OnlAUr8fiqpM7cd1pXUnzp960c0OpMeDh04CHxJ96CYCdO3dm4cKFdOzYscbtb7zxBr169aqPTyEiUi+ilZdzizpuyp3121pcxu9nLmPuyh0A9GidzcQRBRS0zY1xZcmjxoCHt3LAI4X+wJDEUS8BcOzYsdxwww2Ul5djjOHTTz/lH//4B5MnT+aZZ56pj08hIlInVVO+pREHY5FSGzu7ruHlBV/x0FsrKA07+L0W153WlZ8P7KxwUk/2v4JHwOMhXVfwkDhXLwHwF7/4Benp6dx5552EQiFGjRpF27ZteeSRR/jJT35SH59CRKTWHNcQsvdr+abQoMfGnaXcPWMJ89fvBqBP+1wmjSika8usGFeWPGzXxXYMPq9Ftt9HUMMdkgDqHABt22bq1KkMGzaMyy+/nFAoxL59+2jZsmV91CciUicRxyUUtYk6qTXo4biGv8/bwF9mr6I86pLu9/LbId25rH8HrUWrJ45rsF0Xj2WR6feS5tcVPCRx1DkA+nw+rrvuOpYtWwZARkYGGRkZdS5MRKQuqqZ8Q1EHLCulWr6rtu1l/PQiir4uAaB/l2ZMuKCA/Gb62VwfXGOwHRcDpPsqLt3mU6iWBFMvLeATTjiBL7744oAhEBGRWKjZ8vWkzC/nqO3yzH/X8tTctdiOISvo4+azenDR8e1SJvw2JA14SDKplwD461//mv/5n//hq6++om/fvmRmZta4v0+fPvXxaUREflB1y9c1BLyp0/It+rqYu6YVsXr7PgBO69mCO8/rTauctBhXlviqBjxcY/BVDngENOAhCc4yxpi6PonnIAuqLcvCGINlWdVXBokXJSUl5ObmUlxcTE5OTqzLEZF6YIyhrLLla1lWykxglkUcHntvNS98tB7XQLPMAOPO6cmwwtYp8fU3NNs1OI6L12OR7vem1B8VEt/qmmXqbSNoEZFYqWr5hm0Xbwq1fOev28XdM5awcVcIgHP6tOG2s3vSNDMQ48oSX9WAh2VZZPgr1vlpeEaSSb0EQK39E5FYiTgupdHKy7mlyNmZfeU2D7+9kn/N3wRAy5wg48/vzak9tPtCXVVcwcMAhqDPQ7rPm1LbBknqqNcLPi5dupSNGzcSiURq3H7BBRfU56cREalo+UYdQnZFyzdV9l6bu3IHk15dyraScgAu7teesUOPIjvNH+PKEtv+Ax4Bj4d0vw9fiiwjkNRULwFw7dq1XHjhhSxevLh67R9Q/Y0Tb2sARSSxOa4hFLUJOxVTvqnQmtsTivDA68t57cstALRvms7E4QWc0CUvxpUlNmMMtjG4rsHnsUj3+wl4Ffwk+dXLee2bbrqJzp07s337djIyMliyZAlz586lX79+zJkzpz4+hYgIUNHyLQlHCTsufm/yhz9jDG8UbWX4ox/y2pdb8Fhw5UkdeeWGkxX+6shxDRHbxTKQFfCRE/Sn1H6Rktrq5QzgvHnzmD17Ns2bN8fj8eDxeBg4cCCTJ0/mt7/9LV988UV9fBoRSWHfbfkGUqDlu2NvmHteW8rsZdsB6NYyi4nDC+iT3yS2hSW4inV+FQMe6X4vaRrwkBRULwHQcRyys7MBaN68OZs3b6ZHjx507NiRFStW1MenEJEUZruGsqhNuePiT4GWrzGG6V9s5g9vLGdvuY3PY/GLQV24dlAXAj4NJNSWW7nOD6MBD5F6eeUXFhby5ZdfAtC/f38efPBBPvzwQyZNmkSXLl1q/bz3338/lmUxevTo6tvKy8u54YYbyMvLIysri5EjR7Jt27a6fgkiEqfCjsveypZvIAVavl/vLuNXLyxg/PQi9pbb9G6bw0vXDeCGM7op/NWSMYaI4xJxXAKWRU7QT5bfp/AnKa3Wr/5Fixbhui4Ad955Z/Xgx6RJk1i3bh2nnHIK//nPf/jzn/9cq+efP38+Tz755AFXERkzZgwzZ87k3//+N++//z6bN2/moosuqu2XISJxyjWGUMRmbziKCwR93qTe4sV1DS9+vIEL//oh89bsJOjzMHboUbx4bX96tM6OdXkJy3Zdwo6L14KcgI/soC8llg+I/JBaXwnE6/WyZcsWWrZsSZcuXZg/fz55ed8uSN61axdNmzat1TfZvn37OP7443nssce45557OPbYY5kyZQrFxcW0aNGCqVOncvHFFwOwfPlyevXqxbx58zjxxBMP6/l1JRCR+Ga7FeEv7KZGy3ftjn1MmL6EhZv2AHB8x6ZMHF5Ap+aZ3/+BckiOW7HOz+uxSPd5kv4PCEk9dc0ytT4D2KRJk+orgKxfv776bGCVZs2a1fovrBtuuIFzzz2XIUOG1Lh9wYIFRKPRGrf37NmTDh06MG/evFp9LhGJH8YYwnZFyzfiugSTvOUbdVyembuWSx6fx8JNe8gIeLnzvF48+/MfKfzVkmsMYdvBcQ0Zfi+5QT/pfp/Cn8h31HoIZOTIkZx66qm0adMGy7Lo168fXq/3oI9du3btYT/vSy+9xOeff878+fMPuG/r1q0EAgGaNGlS4/ZWrVqxdevWQz5nOBwmHA5Xv19SUnLY9YhI43Arp3zLbAePZRH0HfznSbJYtqWECdOLWLZlLwAnd2vOhAt606ZJeowrS0zGGCL7DXik+bz4tcZP5JBqHQCfeuopLrroIlavXs1vf/tbrr322upJ4NratGkTN910E2+//TZpaWl1eq79TZ48mYkTJ9bb84lI/bJdl1DESYm9/cJRhyffX8v/+2AdjmvITfdz69k9Oe+YNlqXVgvGGGzX4FRdwSPgw68reIj8oFqvAdzfz3/+c/785z/XOQBOnz6dCy+8sMaZRMep2PPL4/Hw5ptvMmTIEHbv3l3jLGDHjh0ZPXo0Y8aMOejzHuwMYH5+vtYAisRY1XRmadTBNSbpF+cv3Lib8dOXsO6bUgDOLGjF7ef2onlWMMaVJSbbdbEdg99rke7zJv3rR2R/dV0DWC/7AD777LP18TQMHjyYxYsX17jt5z//OT179uTWW28lPz8fv9/Pu+++y8iRIwFYsWIFGzduZMCAAYd83mAwSDCoH7Ai8SSVWr6hsM2f313F1E82Ygw0zwpwx3m9GdK7VaxLS0iOa4i6Ll7LIjNQsZGz1viJHJl6CYD1JTs7m8LCwhq3ZWZmkpeXV337Nddcw9ixY2nWrBk5OTnceOONDBgw4LAngEUk9mzXpTTiEEmBlu9Hq79h0qtL+XpPGQAjjmvHzWf1IDfdH+PKEk/1FTyADJ+u4CFSF3EVAA/Hww8/jMfjYeTIkYTDYYYNG8Zjjz0W67JE5DAYYwg7LqHKlm8yX3e1pCzKH99cwbTPvwagbZM0JlxQwEndmse4ssRjKq/gYTTgIVJv6mUNYKLRPoAije+7LV+/N3l/gb+7bBv3vraMHXvDWBZcdkIHbhrSnYxgwv3NHVMHDHj4vRrwEKkUF2sARUS+T7RyyjfiuAR8nqRdr/XNvjD3/2c5bxZVbEvVqXkmE4cXcHzHpjGuLPFUDXj4vBbZfh9BDXiI1CsFQBFpMPu3fE0St3yNMby2aAsP/Gc5xWVRvB6Lq07uxPWndSXoT97hloZQY8DD7yXNrwEPkYagACgiDaJGy9djETjERvGJbmtxGZNeXcp/V30DQI/W2UwaUUjvtlpeciRcY7AdF0PFgEfQ58WnAQ+RBqMAKCL1Llp51i/quPiTtOXruoaXF3zFQ2+toDTs4PdaXH9aN64a2Cmp1zfWtxoDHt7KAQ8dP5EGpwAoIvWmquVbGnUwBgJJ2vLduLOUCTOW8Nn63QAck9+ESSMK6NIiK8aVJY6qAQ/XGHweDxm6godIo1IAFJF64RpDadSm3HbxeSx8SXgWx3ENf/toPX+ZvZqw7ZLu9/LbId25rH8H7Ud3BGy3ot3r81hkBXwEvMl5llgknikAikidRSvP+kWTeMp31ba9jJ9eRNHXJQD079KMu4cX0L5pRowrSxyOa7BdF0/lgEdQGzmLxIwCoIjUWnXLN+JgLJJyyjdquzw9dy1P/3cttmPITvNx87AeXHh8u6T7WhtKxRU8DGBI14CHSFxQABSRWnFcQ8jer+WbhFdmKPq6mLumFbF6+z4ATuvZgrvO603LnLQYV5YYDhzw8GnAQyROKACKyBGraPnaRB2TlC3fsojDX2ev5m/z1uMaaJYZYNw5PRlW2Fpn/Q7Ddwc80gM+AhrwEIkrCoAictiMMZTbDqGoC0na8p2/bhd3z1jCxl0hAM7t04Zbz+5J08xAjCtLDE7lgIdXAx4icU0BUEQOS7K3fPeV2zz89kr+NX8TAC1zgkw4v4BBPVrEuLLEULHOz8WyLDI04CES9xQAReQHRRyXUNQm6pqkPKMzd+UOJr26lG0l5QBc0q89Y4YeRXaaP8aVxb/9BzyCPg/pPm/S/XEgkowUAEXkkIwxlNkOZVEHLIugN7lavrtLIzzw+nJmLdoCQH6zdO6+oIATuuTFuLL4VzXg4RpD0OMhza+NnEUSiQKgiBxUzZavJ6m27TDG8OaSbUyetYxdpRE8FlwxoCO/OaM76YHkvGZxfYq6Lo5r8Hsssvx+Al4FP5FEowAoIgdI5pbv9pJy7p21jNnLtgPQrWUWE4cX0Ce/SWwLSwCOW7HOr+oKHsEke22IpBIFQBGpZoyhLOoQsh2sJGv5GmOY/sXX/OGNFewtt/F5LK4d1IVrB3XB79Oate9TPeBBxYBHmgY8RBKeAqCIAJUt36hN2Klo+SbTL/ivd5cx8dUlzFuzE4CCtjlMurCQo1plx7iy+OZWrvPDaMBDJNkoAIoIkcqNnR3X4E+itp7jGl76dCOPvLOKsohD0OfhN2d044oBHfHpihSHVLWRs1M14BHQgIdIslEAFElh3235BpKo5bt2xz4mTF/Cwk17AOjbsSkTRxTQMS8ztoXFOdt1sSsHPDL9vqR6TYjItxQARVJUsrZ8o47Lcx+s5/E5q4k6hoyAl7FDj+KSfvl4kuRrbAhVAx5ej0VW5UbOyXImWEQOpAAokoLCjksoYuOY5Gr5LttSwvhpRSzfuheAgd2bM/783rRpkh7jyuLXtwMeaMBDJIUoAIqkENcYyvef8vUlx5534ajDE3PW8OyH63FcQ266n1vP6cl5fdqofXkIVRs5m8oBjzSfF78GPERShgKgSIqwXUMoYhN2XfxJ1PJduHE346cvYd03pQAMLWjFuHN70TwrGOPK4tP+Ax4Bj4d0DXiIpCQFQJEkZ4wh4lSs93OMSZq9/UJhm0feWcU/Pt2IMdA8K8Cd5/VmcO9WsS4tbtmui+0YfF6LbL8vaV4LInLkFABFkphbOeVbZjt4kqjl+9Hqb5j46hI27ykHYMRx7bj5rB7kpvtjXFl8clxD1HXxWhaZgYp1fsmy7lNEakcBUCRJ2a5LKOIkVcu3uCzKH99YwfQvvgagbZM0JlxQwEndmse4svhUY8DDpwEPEfmWAqBIkqlo+bqURh3cJGr5vrtsG/fMXMo3+yJYFlx2QgduGtKdjKB+jH1XjQEPb+WAhza+FpH96CenSBJJxpbvN/vCTJ61jLeWbAOgU/NMJg0v4LiOTWNcWfzRgIeIHC4FQJEkUd3ydVz83sRv+RpjeG3RFh74z3KKy6J4PRY/P7kT153WlaA/8YNtfdOAh4gcCQVAkQR3QMvXl/i/+LcWlzHp1aX8d9U3APRsnc3EEYX0bpsT48rij+MabNfFY1lk+r2k+TXgISI/TAFQJIElW8vXdQ0vL/iKh95aQWnYwe+1uP60blw1sJPWsH2Hawy242KAdF/Fpdt8CX7WV0QajwKgSIKKVrZ8I0nS8t2ws5S7Zyzhs/W7ATgmvwmTRhTQpUVWjCuLLxrwEJH6oAAokmCMMRXX8o061ZfxSuSWr+24/H3eBv4yezVh2yXd7+WmM7vzkxM6JHyorU9VAx6uMfgqBzwCGvAQkVpSABRJIDVavh6LgDexW74rt+1lwvQiir4uAeDELnlMGN6b9k0zYlxZfLFdg+O4eD0WWQEfAa9H6/xEpE7irm/w+OOP06dPH3JycsjJyWHAgAG8/vrr1fefdtppWJZV4+26666LYcUijSPquuwN25RFHfxeD35P3H37Hrao7fLY7NX8+Il5FH1dQnaaj0kjCnjqZ30V/vbjuIawXTHck+H3khP06yoeIlIv4u4MYPv27bn//vvp3r07xhief/55hg8fzhdffEFBQQEA1157LZMmTar+mIwM/cKQ5LV/y9c1EEjwlu/ir/YwfvoSVm/fB8DpPVty53m9aJmTFuPK4kfFFTwMUNHiT/d58SVw4BeR+BN3AfD888+v8f69997L448/zscff1wdADMyMmjdunUsyhNpVFUt35Dt4PVYBBN4sX9ZxOGvs1fzt3nrcQ00ywww7pyeDCtsndCBtj7tP+AR8HhI9/vwaZ2fiDSAuP5t4jgOL730EqWlpQwYMKD69hdffJHmzZtTWFjIuHHjCIVCMaxSpGFEHZeSypZvIMFbvvPX7WLkYx/y/EcV4e/cPm2Y/puTOevoNgo3VAU/l4jj4rUgO+AnO+jDr82cRaSBxN0ZQIDFixczYMAAysvLycrKYtq0afTu3RuAUaNG0bFjR9q2bcuiRYu49dZbWbFiBa+88sohny8cDhMOh6vfLykpafCvQaS2qlq+pVEHk+At333lNg+9tYJ/f/YVAK1y0hh/fm8G9WgR48rih+Maoo6LTwMeItKILGOMiXUR3xWJRNi4cSPFxcW8/PLLPPPMM7z//vvVIXB/s2fPZvDgwaxevZquXbse9PnuvvtuJk6ceMDtxcXF5OToygISPxzXELJtyu2KQJDI677mrtzBpFeXsq2kHIBL+rVn7NAeZKXF5d+dja5inZ+LhUWar2I/P217IyKHq6SkhNzc3FpnmbgMgN81ZMgQunbtypNPPnnAfaWlpWRlZfHGG28wbNiwg378wc4A5ufnKwBKXIk6LqVRm6hjCPgS9yzQ7tIID7y+nFmLtgCQ3yydicML+VHnZjGuLD64lev8MBrwEJHaq2sATIg/xV3XrRHg9rdw4UIA2rRpc8iPDwaDBIPBhihNpM6MMZTbDqGoi7FI2I2djTG8uWQbk2ctY1dpBI8FPx3QiRvO6EZ6ILH3K6wPVQMerjEEPR7SAj78GvAQkRiJuwA4btw4zj77bDp06MDevXuZOnUqc+bM4c0332TNmjVMnTqVc845h7y8PBYtWsSYMWMYNGgQffr0iXXpIkcsWVq+20vKuee1Zby3fDsA3VpmMWlEAUe3bxLbwuKE7brYrsHvscjyV6zzU/ATkViKuwC4fft2rrzySrZs2UJubi59+vThzTff5Mwzz2TTpk288847TJkyhdLSUvLz8xk5ciR33nlnrMsWOWIRxyWU4C1fYwzTPv+aP765gr3lNj6PxbWDunDtoC74fYkZZutT1YCH12OR5fcS1CbOIhInEmINYH2ra99cpC6+bfk6YFkJ2wb8aneIiTOW8vHanQAUtM1h0oWFHNUqO8aVxZ4GPESkoaXEGkCRZFGz5evBl4ChwHENL326kUfeXkVZ1CHo8/CbM7pxxYCO+BJ4o+r6YIwhst+AR5rPm9D7N4pI8lIAFGkk1S1f1yTsXm9rd+xjwvQlLNy0B4C+HZsycUQBHfMyY1tYjBljsF2DU3UFDw14iEicUwAUaWDGGMoqW76WVXE5t0QLBlHH5bkP1vP4nNVEHUNm0MvYoT24uG97PAl4FrM+2a6L7Rj8XotMDXiISIJQABRpQI5rCEVtwk5FyzcR14Et21LC+GlFLN+6F4CB3Zsz4YLetM5Nj3FlseW4FZdv81oWmQEvaRrwEJEEogAo0kAilRs7O67Bn4At33DU4Yk5a3j2w/U4riE33c+t5/TkvD6pff3ebwc8IMPn1YCHiCQkBUCRemaMoSzqELIrWr6J2BL8YsNuxs9YwvpvSgEYVtia287pSfOs1N1QvWojZ2MMQa+HNL8GPEQkcSkAitSjRG/5hsI2j7yzin98uhFjoHlWgDvP783gXq1iXVrMaMBDRJKRAqBIPYk4LqURG8ckZsv3o9XfMPHVJWzeUw7AiOPacfNZPchN98e4stipGvDweS2y/b6EHOARETkYBUCROvpuyzfoS6zr3haXRfnjGyuY/sXXALRtksaECwo4qVvzGFcWOzUGPPxe0vwa8BCR5KIAKFIHtmsoi9qUOy7+BGz5vrt0G/e8tpRv9kWwLLjshA7cNKQ7GcHU/NHgGoPtuBgqBjyCPm9CbtYtIvJDUvOnvEg9CDsuocqWb6K1Br/ZF2byrGW8tWQbAJ2aZzJpeAHHdWwa48pi44ABD58Xf4pf1UREkpsCoMgRcitbvmW2gyfBWr7GGF77cgsPvL6c4rIoXo/Fz0/uxHWndSXoT5yvo75UDXi4xuDzeMjQgIeIpAgFQJEjYLsuoYhD2E28lu/W4jImvrqUD1Z9A0DP1tlMurCQXm2O/CLiycB2K9q9Po9FVsCXsJfnExGpDQVAkcNgjCHiVGzxkmgtX9c1vLzgKx56awWlYQe/1+L607px1cBOKdnmdFyD7bp4Kgc8gtrIWURSkAKgyA9I5Jbvhp2l3D1jCZ+t3w3AsflNmDiigC4tsmJcWeOruoIHQLrPS9DnwaeNnEUkRSkAinyP6pav4+L3Jk7L13Zc/jZvA3+dvZqw7ZLu93LTmd35yQkdEuZrqC8a8BAROZACoMhBVLR8XUqjDq4xBH2J0/JduW0v46cVsWRzCQAndsljwvDetG+aEePKGtd3BzzSAz4CGvAQEQEUAEUOkKgt36jt8tTctTwzdy22a8hO83HLWT0YcVy7lAs9TuWAh1cDHiIiB6UAKLIf23UpjThEEqzlu/irPYyfvoTV2/cBcEavltxxbi9a5qTFuLLGVbXOz7IsMjTgISJySAqAIlS0C8OOSyjqVKwVS5CWb1nE4a+zV/O3eetxDTTLDDDu3F4MK2iVEPXXl4rgZ4CKf7t0n1cDHiIi30MBUFLed1u+gQRp+c5ft4sJM4rYtKsMgPOOacPvzupJ08xAjCtrPFUDHq4xBD0e0vzayFlE5HAoAEpKi1ZO+UYdF78vMdaJ7S2P8tBbK3n5s68AaJWTxvjzezOoR4sYV9a4oq6L4xr8Hossv5+AV8FPRORwKQBKSvpuyzeQIC3fuSt2MHHmEraXhAG4pF97xg7tQVZa6nwrO27FOr+qK3gENeAhInLEUue3hkilqpZvyHbweiwC3vhv+e4ujfDA68uZtWgLAPnN0pk4vJAfdW4W48oaT/WABxUDHmka8BARqTUFQEkp0cq9/WzHJZAALV9jDG8WbWXyf5azqzSCx4IrT+rEr0/vRnog/oNrfXAr1/lhNOAhIlJfFAAlJVS1fEujDsaQEC3f7SXl3PPaMt5bvh2Abi2zmDSigKPbN4ltYY2kaiNnp2rAI6ABDxGR+qIAKEnPNYbSqE25XbFuzBfnlwEzxjDt86/545sr2Ftu4/NaXHtKF64d1AW/L75rry+262JXDnhk+is2clbwExGpPwqAktSqWr7RBGn5frU7xN0zlvDJ2l0AFLbLYeKIQo5qlR3jyhpH1YCH12ORVbmRc7z/m4mIJCIFQElK1S3fiIOxiPuNnR3X8I9PNvLnd1ZRFnUI+jz85oxuXDGgY9yfsawP3w54oAEPEZFGoAAoScdxDSF7v5ZvnA8MrN2xj/HTl/Dlpj0A9OvUlInDC+iQlxnbwhpB1UbOVVdfSfN58cf5v5eISDJQAJSkEnFcQlGbqGPivuUbdVye/WAdT8xZQ9QxZAa9jB3ag4v7tseT5Ge/9h/wCHg8pGvAQ0SkUSkASlIwxlBuO4SiDlhW3Ld8l20pYfy0IpZv3QvAKd2bM/6C3rTOTY9xZQ3Pdl1sx+DzWmT7KzZyjud/KxGRZKQAKAmvZsvXgy+Oz56Fow6Pz1nDcx+ux3ENuel+bj2nJ+f1aZP0IchxDVHXxWtZZAYq1vnF8xlaEZFkpgAoCa265esaAnF+SbDPN+xmwvQi1u8MATCssDXjzulJXlYwxpU1rBoDHj4NeIiIxAMFQElIxhjKKlu+lmXFdRsxFLaZ8s4qXvp0I8ZA86wAd57fm8G9WsW6tAZVY8DDWzngkQITzSIiiUABUBJOVcs3bLt447zl+9Hqb5j46hI27ykH4MLj2/E/w3qQm+6PcWUNRwMeIiLxL+7+HH/88cfp06cPOTk55OTkMGDAAF5//fXq+8vLy7nhhhvIy8sjKyuLkSNHsm3bthhWLI0p4riURKKU2y5+b/yGv+KyKHdOW8yvXljA5j3ltGuSzpNX9mXSiMKkDn+26xK2XSwLsgM+coK6ioeISDyKuwDYvn177r//fhYsWMBnn33GGWecwfDhw1myZAkAY8aMYebMmfz73//m/fffZ/PmzVx00UUxrloamjGGUMSmJBzFNRCM4/V+7y7dxohHP2DGF5uxLLj8xA68csNJnNSteaxLazCOawjbFddZzvR7yQ36SfN5FfxEROKUZYwxsS7ihzRr1ow//OEPXHzxxbRo0YKpU6dy8cUXA7B8+XJ69erFvHnzOPHEEw/r+UpKSsjNzaW4uJicnJyGLF3qgeMaQlGbsFMx5RuvAwTf7AszedYy3lpScUa6U/NMJg0v4LiOTWNcWcNxjcF2XAyQ7qu4dFu8npUVEUkmdc0ycb0G0HEc/v3vf1NaWsqAAQNYsGAB0WiUIUOGVD+mZ8+edOjQ4XsDYDgcJhwOV79fUlLS4LVL/Yg4LqURG8cY/HF61s8Yw2tfbuGB15dTXBbF67G4emBnfnVqF4J+b6zLaxAa8BARSWxxGQAXL17MgAEDKC8vJysri2nTptG7d28WLlxIIBCgSZMmNR7fqlUrtm7desjnmzx5MhMnTmzgqqU+GWMoizqE7Iop33hdR7ZlTxmTZi7lg1XfANCzdTaTLiykV5vkPLNcNeDhGoOvcsAjoAEPEZGEE5cBsEePHixcuJDi4mJefvllfvazn/H+++/X+vnGjRvH2LFjq98vKSkhPz+/PkqVBmC7hrKoTbnj4o/Tlq/rGv792SYeemsloYhDwOfh+tO68rOTOyXtmTDbNTiOi9djkRXwxf2+iyIicmhxGQADgQDdunUDoG/fvsyfP59HHnmEH//4x0QiEfbs2VPjLOC2bdto3br1IZ8vGAwSDCb3ZrvJIuy4hCpbvvEaMDbsLGXC9CUs2LAbgGPzmzBxRAFdWmTFuLKG4bgG23WxLIsMf8U6v3gM5SIicvjiMgB+l+u6hMNh+vbti9/v591332XkyJEArFixgo0bNzJgwIAYVyl14RpD+X4t36Av/tbO2Y7L3+Zt4K+zVxO2XdIDXm4a0p2fnNAhKQNRxRU8DGAI+jyk+7z4PMl5dlNEJNXEXQAcN24cZ599Nh06dGDv3r1MnTqVOXPm8Oabb5Kbm8s111zD2LFjadasGTk5Odx4440MGDDgsCeAJf7YbsUWL2E3flu+K7buZcL0IpZsrhggOrFLHncPL6Bd0/QYV1b/9h/wCHg8pPt9+LTOT0QkqcRdANy+fTtXXnklW7ZsITc3lz59+vDmm29y5plnAvDwww/j8XgYOXIk4XCYYcOG8dhjj8W4aqkNYwwRp2KLF6dymjTeQkbEdnl67lqembsW2zVkp/m45awejDiuXdzVWlfGGGxjcF2Dz2OR7vcT8Cr4iYgko4TYB7C+aR/A2HMrp3zLbAePZcXl4MSiTXuYMGMJq7fvA+CMXi2549xetMxJi3Fl9c9xDVHHrQx+3rhdfykiIhWSeh9ASU626xKKOISdisu5xVvLtyzi8JfZq/j7vA24BpplBrj93F4MLWiVdGfDKtb5uVhUDHikacBDRCQlKABKo6lo+bqURh1cUzFYEG+Bav66XUyYUcSmXWUAnHdMG249uydNMgIxrqx+uZXr/DAa8BARSUUKgNIovtvyjbcp373lUR56ayUvf/YVAK1y0hh/QW8GHdUixpXVr6oBD9cYgh4PaQEffg14iIikHAVAaXC261IacYjEacv3/RXbmTRzKdtLKi4XeOmP8hlz5lFkpSXXt4ftutiuwe+xyPL74vbqKiIi0vCS6zecxBVjTMXGznHa8t1dGuH+15fzn0VbAMhvls7E4YX8qHOzGFdWv6oGPLwei6zKjZw14CEiktoUAKVBxHPL1xjDG0VbmTxrGbtDUTwWXHlSJ359ejfSA/FTZ11pwENERA5FAVDqXbRyyjfiuAR88bWdyPaScn7/2lLmLN8BQLeWWfz+wkIK2+XGuLL6Y4whst+AR5rPi18DHiIish8FQKk3+7d8TZy1fI0xTPv8a/745gr2ltv4vBa/HNSFX5zSBb8vOcKRMQbbNRXXUfZ4SNeAh4iIHIICoNSLGi1fj0XAGz+t1E27Qkx8dQmfrN0FQGG7HCaNKKR7q+wYV1Z/bNfFdgx+r0WmBjxEROQHKABKnUUrz/pFHRd/HLV8Hdcw9eMNPPruasqiDkGfhxsHd+eKAR2TZi2c4xqirovXssgMVKzzi5fjLyIi8UsBUGqtquVbGnUwBgJx1PJdu2Mf46cv4ctNewDo16kpE4cX0CEvM7aF1ZNvBzwgw6cBDxEROTIKgFIrrjGURm3K7Yrrx/ri5Fq+Ucfl2Q/W8cScNUQdQ2bQy9ihPbi4b3s8SRCQqjZyNsYQ9HpI82vAQ0REjpwCoNRKWdShPBpfU75LN5cwfnoRK7buBeCU7s0Zf0FvWuemx7iyutOAh4iI1CcFQKkVF4PHY8VF+AtHHR6fs4bnPlyP4xqaZPi59eyenNunTVIEpKoBD5/XItvvI6gBDxERqSMFQElon2/YzYTpRazfGQJgWGFrxp3Tk7ysYIwrq7saAx5+L2l+DXiIiEj9UACUhFQatnnknVW89OlGjIEW2UHuOK8Xg3u1inVpdeYag+24GCoGPII+L74kWL8oIiLxQwFQEs5Hq7/h7hlL2FJcDsCFx7fjf4b1IDfdH+PK6uaAAQ+fF3+cDNeIiEhyUQCUhFFcFuUPbyxnxhebAWjXJJ0JwwsY0DUvxpXVTdWAh2sMvsoBj4AGPEREpAEpAEpCeGfpNu59bSnf7ItgWXB5/w7cOLg7GcHEfgnbbkW71+exyApUXMFD6/xERKShJfZvT0l63+wLc9+sZby9ZBsAnZtnMmlEAcd2aBrjyurGcQ226+KpHPAIaiNnERFpRAqAEpeMMcz8cjMPvL6ckjIbr8fi6oGd+dWpXQj64+c6w0eq6goeAOk+L0GfB582chYRkUamAChxZ8ueMia+upQPV38DQM/W2Uy6sJBebXJiXFntacBDRETiiQKgxA3XNfzrs008/NZKQhGHgM/D9ad15Wcnd0rYsKQBDxERiUcKgBIXNuwsZcL0JSzYsBuAY/ObMHFEAV1aZMW4stpzKgc8vBrwEBGROKMAKDFlOy5/m7eBv85eTdh2SQ94uWlIdy47oQOeBB2KqFrnZ1kWGRrwEBGROKQAKDGzYuteJkwvYsnmEgAGdM1jwgUFtGuaHuPKaqci+BnAEPR5SPd5NeAhIiJxSQFQGl3Ednl67lqembsW2zVkp/m45ayejDiubUKujasa8HCNIejxkOb34dc6PxERiWMKgNKoFm3aw/jpRazZUQrAGb1acud5vWmRHYxxZbUTdV0c1+D3WGT5/QS8Cn4iIhL/FAClUZRFHB59dxV//3gDxkCzzAC3n9uLoQWtEjIwOW7FOr+qK3gENeAhIiIJRAFQGtyna3cyYcYSvtpdBsD5x7Tld2f3oElGIMaVHbnqAQ8qBjzSNOAhIiIJSAFQGsze8igPvbWSlz/7CoBWOWmMv6A3g45qEePKjpxbuc4PowEPERFJfAqA0iDeX7GdSTOXsr0kDMCPf5TP6DOPIistsV5yVRs5O1UDHgENeIiISOJLrN/GEvd2lUZ44PXl/GfRFgA6NMvg7uEF/KhzsxhXduRs18WuHPDI9Fds5KzgJyIiyUABUOqFMYY3irYyedYydoeieCy48qRO/Pr0bqQHvLEu74hUDXh4PRZZlRs5a8BDRESSiQKg1Nm2knLueW0pc5bvAKBbyyx+f2Ehhe1yY1zZkfl2wAMNeIiISFKLu1XskydP5kc/+hHZ2dm0bNmSESNGsGLFihqPOe2007Asq8bbddddF6OKU5cxhv9b8BUX/uVD5izfgc9r8evTu/Kv6wYkVPgzxhBxXKKOS9DnISfNT2bAp/AnIiJJK+7OAL7//vvccMMN/OhHP8K2bW6//XaGDh3K0qVLyczMrH7ctddey6RJk6rfz8jIiEW5KWvTrhB3z1jKp+t2AXB0u1wmjiige6vsGFd2+PYf8Ah4PKRrwENERFJE3AXAN954o8b7zz33HC1btmTBggUMGjSo+vaMjAxat27d2OWlPNc1PPvRev745nLKoi5pfg+/OaM7VwzomFBnzGzXxXYMPq9Ftr9iI2cFPxERSRVx1wL+ruLiYgCaNas5Rfriiy/SvHlzCgsLGTduHKFQKBblpRzLgneWbqMs6tK3U1P+79cn8bOTOyVM+HNcQ7ntYAxkBrzkBv2k+bwKfyIiklLi7gzg/lzXZfTo0Zx88skUFhZW3z5q1Cg6duxI27ZtWbRoEbfeeisrVqzglVdeOejzhMNhwuFw9fslJSUNXnuysiyL+0cezTvLt3HBce1I8yXGhG+NAQ9fxWSvL0FCq4iISH2zjDEm1kUcyvXXX8/rr7/OBx98QPv27Q/5uNmzZzN48GBWr15N165dD7j/7rvvZuLEiQfcXlxcTE5OTr3WnCr2RqJEHEPAG98nkU3lFTyMMQS9HtJ8XvxxXrOIiMgPKSkpITc3t9ZZJm5/E/7mN7/htdde47333vve8AfQv39/AFavXn3Q+8eNG0dxcXH126ZNm+q9XokvpvKMX9hx8VkWOUE/WQGfwp+IiAhx2AI2xnDjjTcybdo05syZQ+fOnX/wYxYuXAhAmzZtDnp/MBgkGAzWZ5kSxzTgISIi8v3iLgDecMMNTJ06lRkzZpCdnc3WrVsByM3NJT09nTVr1jB16lTOOecc8vLyWLRoEWPGjGHQoEH06dMnxtVLLDmuwXZdPJZFpt9Lml9X8BARETmYuFsDeKgzNc8++yxXXXUVmzZt4oorrqCoqIjS0lLy8/O58MILufPOOw+7B17XvrnE1xpA1xhsx8UA6RrwEBGRFFDXLBN3ZwB/KI/m5+fz/vvvN1I1Es804CEiIlI7cRcARX5I1RU8XGPwVV7BI6AreIiIiBw2BUBJKLZrcBwXr8ciK+Aj4PVonZ+IiMgRUgCUhFA14GFZFhn+inV+iXL1ERERkXijAChxreIKHgYwBH0e0n1efB6t8xMREakLBUCJS1UDHq4xBD0e0v0+fFrnJyIiUi8UACWuGGOwjcF1DT6PRZbfT8Cr4CciIlKfFAAlbjhuxeXbfBrwEBERaVAKgBJzbuV1ey0qBjzSNOAhIiLSoBQAJWbcynV+GA14iIiINCYFQGl03x3wSAv48GvAQ0REpNEoAEqjsl0X2zX4PRZZ/op1fgp+IiIijUsBUBpF1YCH12ORVbmRswY8REREYkMBUBqUBjxERETijwKgNAhjDJH9BjzSfF78GvAQERGJCwqAUq+MMdiuwTGGgMdDugY8RERE4o4CoNQb23WxHYPfa5GpAQ8REZG4pQAodea4hqjr4rUsMgMV6/w04CEiIhK/FACl1owxhG0HC8jwacBDREQkUSgASp0EvR7S/BrwEBERSSQKgFIrQa+XoNerAQ8REZEEpAAotRLw6oyfiIhIotJvcREREZEUowAoIiIikmIUAEVERERSjAKgiIiISIpRABQRERFJMQqAIiIiIilGAVBEREQkxSgAioiIiKQYBUARERGRFKMAKCIiIpJiFABFREREUowCoIiIiEiKUQAUERERSTEKgCIiIiIpxhfrAmLBGANASUlJjCsREREROXJVGaYq0xyplAyAO3fuBCA/Pz/GlYiIiIjU3s6dO8nNzT3ij0vJANisWTMANm7cWKuDlupKSkrIz89n06ZN5OTkxLqchKRjWDc6fnWnY1g3On51p2NYN8XFxXTo0KE60xyplAyAHk/F0sfc3Fy96OogJydHx6+OdAzrRsev7nQM60bHr+50DOumKtMc8cfVcx0iIiIiEucUAEVERERSTEoGwGAwyIQJEwgGg7EuJSHp+NWdjmHd6PjVnY5h3ej41Z2OYd3U9fhZprbzwyIiIiKSkFLyDKCIiIhIKlMAFBEREUkxCoAiIiIiKUYBUERERCTFKACKiIiIpJikDIAabK4fOo7S2MLhcPX/6/V35LZv386aNWtiXUbC+u5rznXdGFUi0vCSJgDatg2A4zhYlqVv3CP01Vdf8eabb/Lvf/+bDRs2AOg4HoFt27axYMEC3n77bUKhUKzLSUhLly5l5MiRvPvuu0DF608h8PAtWrSIU045hTfffJMdO3bEupyEs2rVKn73u9/x61//mgcffBCo/SW2UpXjOLEuQY5AUlwLeOXKlfzpT39i69at+P1+Hn/8cVq0aIHruvoGPgyLFy/mzDPPpEOHDnz++eccd9xxDBgwgD//+c94PB4dxx+wePFifvzjHxMIBFi0aBFnn302DzzwAIWFhbEuLWEYY3jwwQf54IMPsCwLgMGDB1eHwKrb5OBWrVrFGWecwRVXXMGVV15JVlZWjfv1Pfz9Fi9ezBlnnMHpp5/Ozp07+fjjj8nJyeG6664D0GvwMCxbtoxHH32UNWvWcNJJJzFgwACGDh0a67ISyurVq3nppZdYsmQJQ4cOZeDAgXTv3r3BPl/C/0QoKiripJNOwnEc2rRpw9atWznppJMoLS3VD7zDUFxczE9/+lMuu+wy3n77bTZs2MDw4cN57733OO+88wCqQ6AcaNWqVQwbNoyRI0cybdo0li1bxqJFi/jf//3fWJeWUCzLIjMzk549e+L3+7n//vt5++23q++T7/fkk08ydOhQpkyZQmZmJi+99BKPPvoof/vb3wB9D3+fb775hiuuuIKrr76af/3rX7zyyiu0bt2asrKy6seoG/L9li9fzoABA9i7dy95eXl88MEHjBo1iilTpsS6tIRRVFTEwIED+fzzz9m+fTv33nsvjz32GOFwuOE6ISaBbd682fTt29fccsst1bctW7bM9O7d28yYMSOGlSWODRs2mKOOOsp89NFH1bft3bvX/Otf/zI9evQwl1xySQyri2+hUMj86le/Mtdcc40Jh8PGtm1jjDFPPPGEKSgoMOXl5cZ13RhXmTimTp1q7r//fvPJJ5+YYcOGmaFDh5ovvvjCPPDAA2bDhg2xLi+uXXzxxeaRRx4xxhhz4oknmlNOOcV07drVdO3a1fTv3984jmOMMXo9HsSCBQtMz549zerVq6tv+/nPf24uuugiM2rUKHP99ddX3151HKWmMWPGmAsvvLD6/Q0bNpjJkycby7LM/fffH8PKEsOmTZtM7969zW233VZ923PPPWeaNm1q1q1b12CfN6FPkS1cuBC/388111xTfVvPnj3x+XysW7cuhpUljuzsbKLRKB999FH1bVlZWVxwwQXcfvvtrFixgieffDKGFcYvx3GIRCIMHDiQQCCA1+sFoHXr1uzatYtIJBLjChNLdnY2r776KieccAK33HILmZmZnHfeedx2223V17o0WhN4ULZts3DhQp544glycnKYNm0an3zyCS+++CIlJSWMGDEC0NnUg8nMzCQUCvH3v/8d27b5/e9/z9/+9je6d+9Oy5YtmT17NqeccgqgNYEHY4xh/fr1BAKB6ts6dOjAjTfeyJ/+9Cfuuusunn322RhWGN+MMcyePZtevXrxq1/9qvpM82WXXUabNm1Yv359g33uhH419+3bl+uvv54ePXoAEI1GAWjevHn1/8v3y8jIYNCgQbzzzjssXry4+vZgMMjFF19Mp06dmDNnTuwKjGNZWVnce++9XHXVVcC3C6Bbt25NXl4eWVlZ1b9wly9fHqsyE8ZRRx1VfQwHDx7M3r172b17N/3792fVqlWAAsx3Vf2yuPDCC9m0aROvvPIKJ554Inl5eeTl5dG/f38mTJjAmjVr9EfxIbRp04af/OQnPP3005xzzjlMmjSJf/7zn9x///08/PDDPP7446xevZr3338/1qXGJcuyGDRoEF9++SXLli2rvj0zM5OrrrqKG264gaeffprNmzfHsMr4ZVkWrVu3ZuDAgXTq1Kn6jwzXdQmFQmzdurXBPndCB8CWLVty5ZVXAhUHy+/3AxWhZu/evdWPe+SRR2qEG/lWMBjk5ptv5osvvuCee+6psYVERkYGp556KitXrtRk6yG0adMGqHj9VZ0BdF2XkpKS6mN2xx13cNNNN1FcXByzOhNBt27dCAaDbNq0iSuvvJKlS5fyxz/+kdatWzN27Fjmzp0b6xLjTtUvi9NOO41oNMo777xzQNBr06YNjuPo7NUh5OTkcOedd/Lf//6XO++8k549ezJo0KAa92dlZZGdnR3DKuNbv379yM7O5rnnnuOrr76qvr1p06ace+65FBUVsWXLlhhWGN+GDh3K6NGjgW+7HMFgkKZNm1bnGoB//OMffPbZZ/X2eZPmJ4LH46k+cFVbwQCMHz+eMWPG6IffIbiuS2FhITNmzGDWrFncdtttvPfee9X3L1++nPbt2+PzJcXAeIPZ//UViUTYu3cvPp+PCRMm8OCDD3LvvfeSm5sbwwrjmzEG27YxxjBgwADmzJnDrFmzuP7667n22mvp0qULnTp1inWZcckYQ4cOHXjqqac49thjmTVrFpMnTwYq9lV89913ycvLIycnJ8aVxq/s7Gw6d+5Mu3btCAaDNc5kzZgxg6ysLNq1axfDCuPbwIEDueyyy/jnP//JU089xdq1a6vvO/roo+nQoUONPT7l0KqyS9VgXHp6OgDjxo3j+uuvp2nTpvX3uUwSLaqxbRufz8eQIUMYPnw4xhhuvfVWPvzwQ44//vhYlxdTrutijKk+S1V1m8fjwXEcvF4vCxYs4Be/+EX1bZ06deK9995j7ty5HHPMMTGsPva+7/h918cff8xvf/tbTj31VB599FE+/PBD+vbt25jlxqXDOYYvvvgijz76KH/9619rHLPS0lIyMzMbtd54833Hr+q/K1eu5I477uCTTz7Btm26d+9OUVER7777Lscee2zsio8Dh/P62759O+eeey5NmzaladOmZGVlMW3aNGbPnp3yx+9Q9j+G9913Hy+88AJ9+/blqquuolu3bjz++OP84x//YP78+bRu3TrG1SaOaDTKMcccw3333UdRURH33Xcfc+fOpV+/fvX2OZIqAFa59NJLefXVV/H7/cyePZsf/ehHsS4pppYuXcp9993H1q1b6d69O+eddx7nnnsuQHX4q/rvxo0bWbBgAbNnzyY/P58LLriAnj17xvgriK3DOX77++ijjxg4cCBNmzbl7bffTvk/PuDwj2E0GqW0tJQmTZoA2n+tyuEcv6pfxDt37uSrr77i9ddfp0OHDvTv35+uXbvG+CuIrcM5flWvtWXLlvHnP/+Z9evX07FjR2666SZ69eoV468g9g72s67K/iHw+eefZ/r06bz66qsUFBRQUlLCtGnTOO644xqz3Lj0fcfwu2zb5tRTT2X37t2sX7++3sMfJEAAXL16NS+88AKRSIR27dpx4403Vt9X9Q373V8SP/3pT5k6dSqLFi2ioKAgFmXHjRUrVtC/f3/OPvtsOnXqxOuvv47f72fgwIE8/PDDQEXLMhAI6JftQRzJ8auyfv16Lr30Up577jl69+4dq9LjxuEcw3A4XD3pC9q4eH+1eQ3Kt47k+FW97srKykhPTycajdZYg5WqVq5cycyZMxk1alT1uufvqurAQcUZ+3Xr1uHxeMjLy6NVq1aNWW5cOpxjuP/v4LKyMoYMGcLKlSt599136dOnT/0X1WAbzNSDoqIik5OTY4YNG2ZOPfVUk5ubawYMGGBmz55totGoMabmvkxlZWXGGGNWrFihfcNMxZ5ft99+u7n00kurbyspKTH33HOPOfbYY821115b4/HTp08327Zta+wy49aRHr8ZM2aYLVu2GGOMKS8vb9Ra41VtjuH27dsbu8y4peNXN3X9Gah9E41ZtWqVadasmbEsy4wbN87s2LHjgMfoOH2/2h7D559/3qxYsaLB6orbAFheXm6GDx9e/Q0aiUTMtm3bTN++fc3xxx9vZs6cWSP8jR071owdO7Y6BEqFq666ygwaNKjGbSUlJeaPf/yj6devn5k8ebIxxpjXXnvNtG/f3txxxx3a7HQ/R3r8br/9dmPbtn4g7kevwbrR8asbHb/a27dvn7n66qvNVVddZf76178ay7LMLbfcctAAY4wxDz74oJk0aVIjVxnfanMM77777kapLW57LMFgkH379lWfKrUsi5YtWzJ37lwyMzMZP358jS1L2rdvz3PPPVdj+5dUZio7+8cffzyO47BixYrq+7Kzs7n66qs57rjjmDlzJpFIhHPPPZerr76aq6++Wq03an/8rrnmGrxer1rp6DVYVzp+daPjV3cej4e+ffty1lln8etf/5qXXnqJP/7xjzz44IN88803NR67a9cuFixYwKxZs9i1a1eMKo4/tTmGr7/+Ojt37mz44holZtaC4zjm9NNPr3EpsnA4bIypaPV26tTJ/PjHP67xMbt3727MEhPC6tWrTfPmzc3VV19t9u7da4z59lTzxo0bjWVZZubMmbEsMa7p+NWdjmHd6PjVjY5f3ezbt6/G+y+99JKxLMvcfPPN5ptvvjHGGGPbttm9e7fZuXOn2bx5cyzKjGvxegzjMgBWfXPOnj3bZGZmmoceeqj6vlAoZIwxZubMmaZdu3Zm+fLlarf9gNmzZ5tgMGhuuOGGGqedt2zZYo455pga1wGWA+n41Z2OYd3o+NWNjl/d7b+05R//+Ed1K/Prr782o0ePNiNGjNDa5x8Qb8cwLnf3rWqf9evXj9GjR/Poo4/i9/v5zW9+U70pYlpaGmlpaTUutyUHd/rpp/Pvf/+bSy65hC1btnDppZfSp08fXnjhBbZv305+fn6sS4xrOn51p2NYNzp+daPjV3dVW+W4rstPfvITLMvipz/9Ka+++ipr1qzh008/rTHJLweKt2MYt9vAVI2Ur1mzhscee4ypU6fyi1/8gltuuQXbtnn44YeZPn06c+bMIS8vL9blJoTPP/+csWPHsn79enw+H16vl5deekn7Mx0mHb+60zGsGx2/utHxq7uqyGBZFoMHD2bhwoXMmTOHo48+OsaVJY54OYZxGQCrNktcv3498+fPp3///sycOZM77riDnJwccnJy2LlzJ7NmzdImu0eopKSEXbt2sXfvXtq0aUPz5s1jXVJC0fGrOx3DutHxqxsdv7pzHIdbbrmFKVOmsHDhwobZoy7JxcMxjLsAWHXmb/369XTv3p1Ro0bx/PPPA7B582bmzp1LVlYWffr0oUOHDjGuVkREJLU4jsNzzz1H3759dYm8WoqHYxhXAXD/8Hf88cdz4YUX8sQTT+D3+3VlABERkThhdOWoOov1MYybAPjd8HfBBRfwzDPPVF9aRkRERETqR1ycUnMcR+FPREREpJHERQD0er1s2LCBgoICRowYwf/+7/8q/ImIiIg0kLhoATuOwy9/+Ussy+KJJ55Q+BMRERFpQHERAAF2795Nbm6uBj1EREREGljcBEARERERaRw63SYiIiKSYhQARURERFKMAqCIiIhIilEAFBEREUkxCoAiIiIiKUYBUERERCTFKACKiIiIpBgFQBEREZEUowAoIiIikmIUAEVEGkinTp2YMmVKg36OOXPmYFkWe/bsadDPIyLJxRfrAkREktX8+fPJzMyMdRkiIgdQABQROUKRSIRAIPCDj2vRokUjVCMicuTUAhaRlPDyyy9z9NFHk56eTl5eHkOGDKG0tJTTTjuN0aNH13jsiBEjuOqqq6rf79SpE7///e+58sorycnJ4Ze//CUnnXQSt956a42P27FjB36/n7lz51Z/XFULeNSoUfz4xz+u8fhoNErz5s154YUXAHBdl8mTJ9O5c2fS09M55phjePnll2t8zH/+8x+OOuoo0tPTOf3001m/fn3dD46IpBwFQBFJelu2bOGyyy7j6quvZtmyZcyZM4eLLroIY8xhP8cf//hHjjnmGL744gvuuusuLr/8cl566aUaz/HPf/6Ttm3bcsoppxzw8ZdffjkzZ85k37591be9+eabhEIhLrzwQgAmT57MCy+8wBNPPMGSJUsYM2YMV1xxBe+//z4AmzZt4qKLLuL8889n4cKF/OIXv+C2226r7WERkRSmFrCIJL0tW7Zg2zYXXXQRHTt2BODoo48+ouc444wz+J//+Z/q9y+99FJGjx7NBx98UB34pk6dymWXXYZlWQd8/LBhw8jMzGTatGn89Kc/rX78BRdcQHZ2NuFwmPvuu4933nmHAQMGANClSxc++OADnnzySU499VQef/xxunbtyp/+9CcAevToweLFi3nggQeO/KCISErTGUARSXrHHHMMgwcP5uijj+aSSy7h6aefZvfu3Uf0HP369avxfosWLRg6dCgvvvgiAOvWrWPevHlcfvnlB/14n8/HpZdeWv340tJSZsyYUf341atXEwqFOPPMM8nKyqp+e+GFF1izZg0Ay5Yto3///jWetyosiogcCZ0BFJGk5/V6efvtt/noo4946623ePTRR7njjjv45JNP8Hg8B7SCo9HoAc9xsGneyy+/nN/+9rc8+uijTJ06laOPPvp7zyxefvnlnHrqqWzfvp23336b9PR0zjrrLIDq1vCsWbNo165djY8LBoNH/DWLiHwfnQEUkZRgWRYnn3wyEydO5IsvviAQCDBt2jRatGjBli1bqh/nOA5FRUWH9ZzDhw+nvLycN954g6lTpx7y7F+Vk046ifz8fP75z3/y4osvcskll+D3+wHo3bs3wWCQjRs30q1btxpv+fn5APTq1YtPP/20xnN+/PHHR3IYREQAnQEUkRTwySef8O677zJ06FBatmzJJ598wo4dO+jVqxeZmZmMHTuWWbNm0bVrVx566KHD3lQ5MzOTESNGcNddd7Fs2TIuu+yyH/yYUaNG8cQTT7By5Uree++96tuzs7O5+eabGTNmDK7rMnDgQIqLi/nwww/JycnhZz/7Gddddx1/+tOfuOWWW/jFL37BggULeO6552p5VEQklSkAikjSy8nJYe7cuUyZMoWSkhI6duzIn/70J84++2yi0ShffvklV155JT6fjzFjxnD66acf9nNffvnlnHPOOQwaNIgOHToc1uPvvfdeOnbsyMknn1zjvt///ve0aNGCyZMns3btWpo0acLxxx/P7bffDkCHDh34v//7P8aMGcOjjz7KCSecwH333cfVV199ZAdERFKeZY5kHwQRERERSXhaAygiIiKSYhQARURERFKMAqCIiIhIilEAFBEREUkxCoAiIiIiKUYBUERERCTFKACKiIiIpBgFQBEREZEUowAoIiIikmIUAEVERERSjAKgiIiISIpRABQRERFJMQqAIiIiIilGAVBEREQkxSgAioiIiKQYBUARERGRFKMAKCIiIpJi/j9nrZk3A9FrCAAAAABJRU5ErkJggg==" }, "execution_count": 5, "metadata": {}, @@ -214,14 +214,14 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:38.865399800Z", - "start_time": "2024-05-24T11:02:38.656409400Z" + "end_time": "2024-06-20T18:48:42.662529500Z", + "start_time": "2024-06-20T18:48:42.586133100Z" } }, "outputs": [ { "data": { - "text/plain": "", + "text/plain": "", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAsPUlEQVR4nO3de3TU9Z3/8dckmYQkkKEEzEWSEIkSrKFA2kIkKLCRLF5+pARbFGzqYdvfEYoNobLGIyiuEkG5WbkUl41HlLqFDdmKFdCsIqzhYoBdqUohErDmImCTAUImk2R+f/hj2hiEJN8hQ/g8H+dwwny+3/l+3/Ec5zz5zs3m8Xg8AgAAgDEC/D0AAAAAuhYBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQgJGOHz+uGTNmaNCgQQoNDVVkZKTuvfdeVVRUtNn3f//3f3X77bcrNDRU/fv319NPP63CwkLZbLY2+7/11lsaPXq0wsPD1atXL911113605/+1DW/FAC0U5C/BwAAf9i3b58++OADTZkyRf3791dFRYVWr16tMWPG6OOPP1ZYWJgk6YsvvtDYsWNls9mUn5+v8PBw/eu//qtCQkLaHHP9+vXKyclRZmamFi1apPr6eq1evVrp6ek6cOCABgwY0MW/JQBcnM3j8Xj8PQQAdLXz588rNDS01dru3buVlpamV155RQ888IAk6eGHH9aLL76o/fv3a+jQoZKkr776SjfeeKO++uorHTt2TAMGDNDZs2cVFxene++9V2vXrvUes6amRoMGDdKPf/zjVusA4E88BQzASH8ff263W6dPn1ZSUpJ69+6t/fv3e7dt3bpVaWlp3viTpD59+mjq1Kmtjvf222+rtrZW9913n06dOuX9ExgYqBEjRujdd9+94r8TALQXTwEDMNL58+dVUFCgwsJCffHFF/r7J0Pq6uq8fz9+/LjS0tLa3D8pKanV7SNHjkiSxo0bd9HzRURE+GJsAPAJAhCAkWbNmqXCwkLl5uYqLS1NDodDNptNU6ZMUUtLS4ePd+E+69evV3R0dJvtQUE83AK4evCIBMBImzZtUk5OjpYsWeJda2hoUG1tbav9EhISdPTo0Tb3/+bawIEDJUnXXXedMjIyfD8wAPgQrwEEYKTAwEB98z1wv/nNb9Tc3NxqLTMzU6WlpTp48KB37auvvtJrr73WZr+IiAgtXLhQbre7zflOnjzpu+EBwCKuAAIw0t13363169fL4XDo5ptvVmlpqd555x1FRka22m/u3Ll69dVXdccdd2jWrFnej4GJj4/XV199JZvNJunr1/itXr1aDzzwgIYPH64pU6aoX79+OnHihN58802NGjVKL774oj9+VQBogwAEYKQVK1YoMDBQr732mhoaGjRq1Ci98847yszMbLVfXFyc3n33XT388MNauHCh+vXrp5kzZyo8PFwPP/ywevTo4d33/vvvV2xsrJ599lk999xzcrlcuv766zV69Gg9+OCDXf0rAsC34nMAAaATcnNz9dvf/lZnz55VYGCgv8cBgA7hNYAAcBnnz59vdfv06dNav3690tPTiT8A3RJPAQPAZaSlpWnMmDEaPHiwampqtG7dOjmdTs2bN8/fowFApxCAAHAZd955pzZt2qS1a9fKZrNp+PDhWrdunW677TZ/jwYAncJrAAEAAAzDawABAAAMQwACAAAYplu8BrClpUWVlZXq1auX90NXAQAATOXxeHTmzBnFxsYqIKDj1/O6RQBWVlYqLi7O32MAAABcVT7//HP179+/w/frFgHYq1cvSV//khEREX6eBgAAwL+cTqfi4uK8jdRR3SIA//67NglAAACAr3X2pXG8CQQAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhrEcgM3NzZo3b54SExMVGhqqgQMH6l/+5V/k8Xi8+3g8Hs2fP18xMTEKDQ1VRkaGjhw5YvXUANClmpub9d577+l3v/ud3nvvPTU3N/t7JADoFMsBuGjRIq1evVovvviiPvnkEy1atEiLFy/Wb37zG+8+ixcv1gsvvKA1a9Zoz549Cg8PV2ZmphoaGqyeHgC6RFFRkZKSkjR27Fjdf//9Gjt2rJKSklRUVOTv0QCgwywH4AcffKCJEyfqrrvu0oABAzR58mSNHz9ee/fulfT11b/ly5fr8ccf18SJEzVkyBC98sorqqysVHFxsdXTA8AVV1RUpMmTJyslJUWlpaU6c+aMSktLlZKSosmTJxOBALodywF46623qqSkRH/+858lSf/zP/+jXbt2acKECZKkY8eOqbq6WhkZGd77OBwOjRgxQqWlpVZPDwBXVHNzs+bMmaO7775bxcXFGjlypHr27KmRI0equLhYd999t37961/zdDCAbiXI6gEeffRROZ1OJScnKzAwUM3NzXrmmWc0depUSVJ1dbUkKSoqqtX9oqKivNu+yeVyyeVyeW87nU5JktvtltvttjoyALTbjh07VFFRofXr16u5ublN6D3yyCO67bbb9O677+r222/305QATGO1hywH4O9//3u99tpr2rBhg7773e/q4MGDys3NVWxsrHJycjp1zIKCAi1YsKDN+vbt2xUWFmZ1ZABot/fff1+S9Je//EWnT59us/38+fOSpLfeekvnzp3r0tkAmKu+vt7S/S0H4COPPKJHH31UU6ZMkSSlpKTo+PHjKigoUE5OjqKjoyVJNTU1iomJ8d6vpqZGQ4cOvegx8/PzlZeX573tdDoVFxen8ePHKyIiwurIANBu4eHhWrp0qfr3768RI0a02b57925J0oQJE7gCCKDLXHh2tLMsB2B9fb0CAlq/lDAwMFAtLS2SpMTEREVHR6ukpMQbfE6nU3v27NFDDz100WOGhIQoJCSkzbrdbpfdbrc6MgC029ixYzVgwAAtXrxYxcXFrR7vWlpa9NxzzykxMVFjx45VYGCgHycFYBKrPWT5TSD33HOPnnnmGb355puqqKjQ5s2btXTpUv3oRz+SJNlsNuXm5urpp5/WH/7wB3300Uf66U9/qtjYWGVlZVk9PQBcUYGBgVqyZIm2bNmirKysVu8CzsrK0pYtW/T8888TfwC6FZvn7z+xuRPOnDmjefPmafPmzfryyy8VGxur++67T/Pnz1dwcLCkrz8K5oknntDatWtVW1ur9PR0rVq1SjfddFO7zuF0OuVwOFRXV8dTwAD8oqioSHPmzFFFRYV3LTExUc8//7wmTZrkv8EAGMlqG1kOwK5AAAK4GjQ3N2vnzp2qqqpSTEyMRo8ezZU/AH5htY0svwYQAEwRGBioMWPG+HsMALDM8msAAQAA0L0QgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwfA4gALQTHwQN4FrBFUAAaIeioiIlJSVp7Nixuv/++zV27FglJSWpqKjI36MBQIcRgABwGUVFRZo8ebJSUlJUWlqqM2fOqLS0VCkpKZo8eTIRCKDb4buAAeASmpublZSUpJSUFBUXFysg4G//bm5paVFWVpYOHTqkI0eO8HQwgC5jtY24AggAl7Bz505VVFToscceaxV/khQQEKD8/HwdO3ZMO3fu9NOEANBxBCAAXEJVVZUk6ZZbbrno9gvrF/YDgO6AAASAS4iJiZEkHTp06KLbL6xf2A8AugMCEAAuYfTo0RowYIAWLlyolpaWVttaWlpUUFCgxMREjR492k8TAkDHEYAAcAmBgYFasmSJtmzZoqysrFbvAs7KytKWLVv0/PPP8wYQAN0KHwQNAJcxadIkbdq0SXPmzNGtt97qXU9MTNSmTZs0adIkP04HAB3Hx8AAQDs1NjZq1apVKi8v18CBAzVjxgwFBwf7eywABrLaRlwBBIB2KCoq0pw5c1RRUeFdW7FihZYsWcIVQADdDq8BBIDL4JtAAFxreAoYAC6BbwIBcDXim0AA4Arim0AAXIsIQAC4BL4JBMC1iAAEgEvgm0AAXIsIQAC4BL4JBMC1iAAEgEvgm0AAXIv4HEAAuAy+CQTAtYaPgQGAdmpubtbOnTtVVVWlmJgYjR49mit/APyCbwIBgC4SGBioMWPG+HsMALCM1wACAAAYhgAEAAAwDAEIAABgGF4DCADt1NjYqFWrVqm8vFwDBw7UjBkzFBwc7O+xAKDDCEAAaIe5c+dq2bJlampq8q498sgjmj17thYvXuzHyQCg4whAALiMuXPn6rnnnlNUVJQeeOAB3XDDDfrss8+0fv16Pffcc5JEBALoVvgcQAC4hMbGRoWHhys8PFy9e/fW8ePHvdsSEhJUW1urc+fO6dy5czwdDKDL8DmAAHAFrVq1Sk1NTaqrq1N6erqysrJ0/vx5hYaG6ujRo3rzzTe9++Xm5vp3WABoJ8vvAh4wYIBsNlubPzNnzpQkNTQ0aObMmYqMjFTPnj2VnZ2tmpoay4MDQFc4cuSIpK+v9m3btk0rVqzQ2rVrtWLFCm3btk0JCQmt9gOA7sByAO7bt09VVVXeP2+//bYk6d5775UkzZ49W2+88YY2btyoHTt2qLKyku/NBNBt2Gw2SdLx48cVGRmpl156SVVVVXrppZcUGRnpfUr4wn4A0B1Yfgq4X79+rW4/++yzGjhwoG6//XbV1dVp3bp12rBhg8aNGydJKiws1ODBg7V7926NHDnS6ukB4IpKTU2V9HXgVVRUqEePHpKkf/qnf9K0adMUFhYmj8fj3Q8AugOfvgawsbFRr776qvLy8mSz2VRWVia3262MjAzvPsnJyYqPj1dpaem3BqDL5ZLL5fLedjqdkiS32y232+3LkQHgkvbu3StJ8ng8SkhI0JNPPqk777xTf/zjH/Xkk0/qwvvo9u7dq2nTpvlzVAAGsdpDPg3A4uJi1dbW6mc/+5kkqbq6WsHBwerdu3er/aKiolRdXf2txykoKNCCBQvarG/fvl1hYWG+HBkALqmiokLS1892nDp1SjNmzPBuCwgIUL9+/XTy5ElVVFToj3/8o5+mBGCa+vp6S/f3aQCuW7dOEyZMUGxsrKXj5OfnKy8vz3vb6XQqLi5O48eP52NgAHSpo0ePauvWrTp58qTuvPNO3XDDDd53AX/22Wfe6MvIyNCdd97p52kBmOLCs6Od5bMAPH78uN555x0VFRV516Kjo9XY2Kja2tpWVwFramoUHR39rccKCQlRSEhIm3W73S673e6rkQHgsmbNmqVHH31U4eHhOnToUKurfAkJCXI4HDp37pxmzZrF4xOALmP18cbyu4AvKCws1HXXXae77rrLu5aamiq73a6SkhLv2uHDh3XixAmlpaX56tQAcMUEBwdr9uzZqqurk8vlUl5enl588UXl5eWpoaFBdXV1mj17Nh8CDaBb8ckVwJaWFhUWFionJ0dBQX87pMPh0PTp05WXl6c+ffooIiJCs2bNUlpaGu8ABtBtXPiat2XLlmnp0qXe9aCgID3yyCN8DRyAbscnXwW3fft2ZWZm6vDhw7rppptabWtoaNCcOXP0u9/9Ti6XS5mZmVq1atUlnwL+Jr4KDsDVoLGxUatWrVJ5ebkGDhyoGTNmcOUPgF9YbSO+CxgAAKCbsdpGPnsNIAAAALoHAhAAAMAwBCAAAIBhfPpB0ABwLWtubtbOnTtVVVWlmJgYjR49WoGBgf4eCwA6jCuAANAORUVFSkpK0tixY3X//fdr7NixSkpKavXh9wDQXRCAAHAZRUVFmjx5slJSUlRaWqozZ86otLRUKSkpmjx5MhEIoNvhY2AA4BKam5uVlJSklJQUFRcXKyDgb/9ubmlpUVZWlg4dOqQjR47wdDCALsPHwADAFbRz505VVFToscceaxV/khQQEKD8/HwdO3ZMO3fu9NOEANBxBCAAXEJVVZUk6ZZbbrno9gvrF/YDgO6AAASAS4iJiZEkHTp06KLbL6xf2A8AugMCEAAuYfTo0RowYIAWLlyolpaWVttaWlpUUFCgxMREjR492k8TAkDHEYAAcAmBgYFasmSJtmzZoqysrFbvAs7KytKWLVv0/PPP8wYQAN0K7wIGcE2qr6/Xp59+6rPj/dd//ZeWLVumyspK79r111+v3NxcjRs3zmfnSU5OVlhYmM+OB+DaZLWNCEAA16T9+/crNTXV32N0WFlZmYYPH+7vMQBc5ay2EV8FB+CalJycrLKyMp8f95NPPtG0adP06quvavDgwT4/fnJyss+PCQDfRAACuCaFhYVd0StpgwcP5kodgG6LN4EAAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADD+CQAv/jiC02bNk2RkZEKDQ1VSkqKPvzwQ+92j8ej+fPnKyYmRqGhocrIyNCRI0d8cWoAAAB0kOUA/Otf/6pRo0bJbrfrrbfe0scff6wlS5boO9/5jnefxYsX64UXXtCaNWu0Z88ehYeHKzMzUw0NDVZPDwAAgA4KsnqARYsWKS4uToWFhd61xMRE7989Ho+WL1+uxx9/XBMnTpQkvfLKK4qKilJxcbGmTJlidQQAAAB0gOUA/MMf/qDMzEzde++92rFjh66//nrNmDFDP//5zyVJx44dU3V1tTIyMrz3cTgcGjFihEpLSy8agC6XSy6Xy3vb6XRKktxut9xut9WRAaDTmpqavD95PALgL1YffywH4GeffabVq1crLy9Pjz32mPbt26eHH35YwcHBysnJUXV1tSQpKiqq1f2ioqK8276poKBACxYsaLO+fft2hYWFWR0ZADqtvLxckrRr1y5VVVX5eRoApqqvr7d0f8sB2NLSou9///tauHChJGnYsGE6dOiQ1qxZo5ycnE4dMz8/X3l5ed7bTqdTcXFxGj9+vCIiIqyODACdduDAAUlSenq6hg0b5udpAJjqwrOjnWU5AGNiYnTzzTe3Whs8eLD+4z/+Q5IUHR0tSaqpqVFMTIx3n5qaGg0dOvSixwwJCVFISEibdbvdLrvdbnVkAOi0oKAg708ejwD4i9XHH8vvAh41apQOHz7cau3Pf/6zEhISJH39hpDo6GiVlJR4tzudTu3Zs0dpaWlWTw8AAIAOsnwFcPbs2br11lu1cOFC/fjHP9bevXu1du1arV27VpJks9mUm5urp59+WjfeeKMSExM1b948xcbGKisry+rpAQAA0EGWA/AHP/iBNm/erPz8fD311FNKTEzU8uXLNXXqVO8+c+fO1blz5/SLX/xCtbW1Sk9P19atW9WjRw+rpwcAAEAH2Twej8ffQ1yO0+mUw+FQXV0dbwIB4Ff79+9XamqqysrKNHz4cH+PA8BQVtuI7wIGAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMNYDsAnn3xSNput1Z/k5GTv9oaGBs2cOVORkZHq2bOnsrOzVVNTY/W0AAAA6CSfXAH87ne/q6qqKu+fXbt2ebfNnj1bb7zxhjZu3KgdO3aosrJSkyZN8sVpAQAA0AlBPjlIUJCio6PbrNfV1WndunXasGGDxo0bJ0kqLCzU4MGDtXv3bo0cOdIXpwcAAEAH+OQK4JEjRxQbG6sbbrhBU6dO1YkTJyRJZWVlcrvdysjI8O6bnJys+Ph4lZaW+uLUAAAA6CDLVwBHjBihl19+WYMGDVJVVZUWLFig0aNH69ChQ6qurlZwcLB69+7d6j5RUVGqrq7+1mO6XC65XC7vbafTKUlyu91yu91WRwaATmtqavL+5PEIgL9YffyxHIATJkzw/n3IkCEaMWKEEhIS9Pvf/16hoaGdOmZBQYEWLFjQZn379u0KCwvr9KwAYFV5ebkkadeuXaqqqvLzNABMVV9fb+n+PnkN4N/r3bu3brrpJh09elR33HGHGhsbVVtb2+oqYE1NzUVfM3hBfn6+8vLyvLedTqfi4uI0fvx4RURE+HpkAGi3AwcOSJLS09M1bNgwP08DwFQXnh3tLJ8H4NmzZ1VeXq4HHnhAqampstvtKikpUXZ2tiTp8OHDOnHihNLS0r71GCEhIQoJCWmzbrfbZbfbfT0yALRbUFCQ9yePRwD8xerjj+UA/PWvf6177rlHCQkJqqys1BNPPKHAwEDdd999cjgcmj59uvLy8tSnTx9FRERo1qxZSktL4x3AAAAAfmI5AP/yl7/ovvvu0+nTp9WvXz+lp6dr9+7d6tevnyRp2bJlCggIUHZ2tlwulzIzM7Vq1SrLgwMAAKBzLAfg66+/fsntPXr00MqVK7Vy5UqrpwIAAIAP8F3AAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwPg/AZ599VjabTbm5ud61hoYGzZw5U5GRkerZs6eys7NVU1Pj61MDAACgHXwagPv27dNvf/tbDRkypNX67Nmz9cYbb2jjxo3asWOHKisrNWnSJF+eGgAAAO3kswA8e/aspk6dqpdeeknf+c53vOt1dXVat26dli5dqnHjxik1NVWFhYX64IMPtHv3bl+dHgAAAO3kswCcOXOm7rrrLmVkZLRaLysrk9vtbrWenJys+Ph4lZaW+ur0AAAAaKcgXxzk9ddf1/79+7Vv374226qrqxUcHKzevXu3Wo+KilJ1dfVFj+dyueRyuby3nU6nJMntdsvtdvtiZADolKamJu9PHo8A+IvVxx/LAfj555/rV7/6ld5++2316NHD6uEkSQUFBVqwYEGb9e3btyssLMwn5wCAzigvL5ck7dq1S1VVVX6eBoCp6uvrLd3f5vF4PFYOUFxcrB/96EcKDAz0rjU3N8tmsykgIEDbtm1TRkaG/vrXv7a6CpiQkKDc3FzNnj27zTEvdgUwLi5Op06dUkREhJVxAcCSAwcOaMSIEdqzZ4+GDRvm73EAGMrpdKpv376qq6vrVBtZvgL4D//wD/roo49arT344INKTk7WP//zPysuLk52u10lJSXKzs6WJB0+fFgnTpxQWlraRY8ZEhKikJCQNut2u112u93qyADQaUFBQd6fPB4B8Berjz+WA7BXr1665ZZbWq2Fh4crMjLSuz59+nTl5eWpT58+ioiI0KxZs5SWlqaRI0daPT2Aa8CJEyd06tQpf4/RLp988kmrn1e7vn37Kj4+3t9jALjK+ORNIJezbNkyBQQEKDs7Wy6XS5mZmVq1alVXnBrAVe7EiRMalDxYDeetvZ6lq02bNs3fI7RLj9AwHf70EyIQQCuWXwPYFZxOpxwOR6ef5wZw9dq/f79SU1MVefcc2SPj/D3OZXmaGtVUV6MgR5RsQcH+HueS3Kc/1+ktS1RWVqbhw4f7exwAPmS1jbrkCiAAXI49Mk4h0Un+HqN9+t/s7wkAwBKffxcwAAAArm4EIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMYzkAV69erSFDhigiIkIRERFKS0vTW2+95d3e0NCgmTNnKjIyUj179lR2drZqamqsnhYAAACdZDkA+/fvr2effVZlZWX68MMPNW7cOE2cOFF/+tOfJEmzZ8/WG2+8oY0bN2rHjh2qrKzUpEmTLA8OAACAzgmyeoB77rmn1e1nnnlGq1ev1u7du9W/f3+tW7dOGzZs0Lhx4yRJhYWFGjx4sHbv3q2RI0daPT0AAAA6yHIA/r3m5mZt3LhR586dU1pamsrKyuR2u5WRkeHdJzk5WfHx8SotLf3WAHS5XHK5XN7bTqdTkuR2u+V2u305MgA/a2pq8vcI17ympiYeO4FrjNX/p30SgB999JHS0tLU0NCgnj17avPmzbr55pt18OBBBQcHq3fv3q32j4qKUnV19bcer6CgQAsWLGizvn37doWFhfliZABXifLycn+PcM3btWuXqqqq/D0GAB+qr6+3dH+fBOCgQYN08OBB1dXVadOmTcrJydGOHTs6fbz8/Hzl5eV5bzudTsXFxWn8+PGKiIjwxcgArhIHDhzw9wjXvPT0dA0bNszfYwDwoQvPjnaWTwIwODhYSUlJkqTU1FTt27dPK1as0E9+8hM1Njaqtra21VXAmpoaRUdHf+vxQkJCFBIS0mbdbrfLbrf7YmQAV4mgIJ++EgUXERQUxGMncI2x+v/0FfkcwJaWFrlcLqWmpsput6ukpMS77fDhwzpx4oTS0tKuxKkBAABwGZb/6Z2fn68JEyYoPj5eZ86c0YYNG/Tee+9p27Ztcjgcmj59uvLy8tSnTx9FRERo1qxZSktL4x3AAAAAfmI5AL/88kv99Kc/VVVVlRwOh4YMGaJt27bpjjvukCQtW7ZMAQEBys7OlsvlUmZmplatWmV5cAAAAHSO5QBct27dJbf36NFDK1eu1MqVK62eCgAAAD7AdwEDAAAYhgAEAAAwDJ+/AMDvonvalBJcKbst0N+jXFPcwZVST5u/xwBwFSIAAfjd/00N1pOxa/w9xrUnVnoyNdjfUwC4ChGAAPzut2WN+uCmX8keGefvUa4p7tOf66Oy5/R//D0IgKsOAQjA76rPeqTGWIV4Ev09yjXF1dj89X9bAPgG3gQCAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADBPk7wEAQJLcpz/39wjt4mlqVFNdjYIcUbIFBft7nEvqLv9NAXQ9ywFYUFCgoqIiffrppwoNDdWtt96qRYsWadCgQd59GhoaNGfOHL3++utyuVzKzMzUqlWrFBUVZfX0ALq5vn37qkdomE5vWeLvUa5JPULD1LdvX3+PAeAqY/N4PB4rB/jHf/xHTZkyRT/4wQ/U1NSkxx57TIcOHdLHH3+s8PBwSdJDDz2kN998Uy+//LIcDod++ctfKiAgQP/93//drnM4nU45HA7V1dUpIiLCyrgArkInTpzQqVOn/D1Gu3zyySeaNm2aXn31VQ0ePNjf41xW3759FR8f7+8xAPiY1TayHIDfdPLkSV133XXasWOHbrvtNtXV1alfv37asGGDJk+eLEn69NNPNXjwYJWWlmrkyJGXPSYBCOBqsX//fqWmpqqsrEzDhw/39zgADGW1jXz+JpC6ujpJUp8+fSRJZWVlcrvdysjI8O6TnJys+Ph4lZaW+vr0AAAAuAyfvgmkpaVFubm5GjVqlG655RZJUnV1tYKDg9W7d+9W+0ZFRam6uvqix3G5XHK5XN7bTqdTkuR2u+V2u305MgB0SFNTk/cnj0cA/MXq449PA3DmzJk6dOiQdu3aZek4BQUFWrBgQZv17du3KywszNKxAcCK8vJySdKuXbtUVVXl52kAmKq+vt7S/X0WgL/85S+1ZcsWvf/+++rfv793PTo6Wo2NjaqtrW11FbCmpkbR0dEXPVZ+fr7y8vK8t51Op+Li4jR+/HheAwjArw4cOCBJSk9P17Bhw/w8DQBTXXh2tLMsB6DH49GsWbO0efNmvffee0pMTGy1PTU1VXa7XSUlJcrOzpYkHT58WCdOnFBaWtpFjxkSEqKQkJA263a7XXa73erIANBpQUFB3p88HgHwF6uPP5YDcObMmdqwYYP+8z//U7169fK+rs/hcCg0NFQOh0PTp09XXl6e+vTpo4iICM2aNUtpaWntegcwAAAAfMtyAK5evVqSNGbMmFbrhYWF+tnPfiZJWrZsmQICApSdnd3qg6ABAADQ9XzyFPDl9OjRQytXrtTKlSutng4AAAAW+fxzAAEAAHB1IwABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDA+CcD3339f99xzj2JjY2Wz2VRcXNxqu8fj0fz58xUTE6PQ0FBlZGToyJEjvjg1AAAAOsgnAXju3Dl973vf08qVKy+6ffHixXrhhRe0Zs0a7dmzR+Hh4crMzFRDQ4MvTg8AAIAOCPLFQSZMmKAJEyZcdJvH49Hy5cv1+OOPa+LEiZKkV155RVFRUSouLtaUKVN8MQIAAADa6Yq/BvDYsWOqrq5WRkaGd83hcGjEiBEqLS290qcHAADAN/jkCuClVFdXS5KioqJarUdFRXm3fZPL5ZLL5fLedjqdkiS32y23232FJgWAy2tqavL+5PEIgL9Yffy54gHYGQUFBVqwYEGb9e3btyssLMwPEwHA18rLyyVJu3btUlVVlZ+nAWCq+vp6S/e/4gEYHR0tSaqpqVFMTIx3vaamRkOHDr3offLz85WXl+e97XQ6FRcXp/HjxysiIuKKzgsAl3LgwAFJUnp6uoYNG+bnaQCY6sKzo511xQMwMTFR0dHRKikp8Qaf0+nUnj179NBDD130PiEhIQoJCWmzbrfbZbfbr+S4AHBJQUFB3p88HgHwF6uPPz4JwLNnz+ro0aPe28eOHdPBgwfVp08fxcfHKzc3V08//bRuvPFGJSYmat68eYqNjVVWVpYvTg8AAIAO8EkAfvjhhxo7dqz39oWnb3NycvTyyy9r7ty5OnfunH7xi1+otrZW6enp2rp1q3r06OGL0wMAAKADfBKAY8aMkcfj+dbtNptNTz31lJ566ilfnA4AAAAW8F3AAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwXRqAK1eu1IABA9SjRw+NGDFCe/fu7crTAwAAQF0YgP/+7/+uvLw8PfHEE9q/f7++973vKTMzU19++WVXjQAAAAB1YQAuXbpUP//5z/Xggw/q5ptv1po1axQWFqZ/+7d/66oRAAAAICmoK07S2NiosrIy5efne9cCAgKUkZGh0tLSNvu7XC65XC7vbafTKUlyu91yu91XfmAA3V59fb0OHz7s8+N++umnkqRDhw6pqanJ58cfNGiQwsLCfH5cANcWqz3UJQF46tQpNTc3KyoqqtV6VFSU98H07xUUFGjBggVt1rdv384DI4B2KS8v15w5c67Y8XNycq7IcZcsWaKBAwdekWMDuHbU19dbun+XBGBH5efnKy8vz3vb6XQqLi5O48ePV0REhB8nA9Bd1NfXKz093efHPX/+vI4fP66EhASFhob6/PhcAQTQHheeHe2sLgnAvn37KjAwUDU1Na3Wa2pqFB0d3Wb/kJAQhYSEtFm32+2y2+1XbE4A1w6Hw6Ef/vCH/h4DAK4Iqz3UJW8CCQ4OVmpqqkpKSrxrLS0tKikpUVpaWleMAAAAgP+vy54CzsvLU05Ojr7//e/rhz/8oZYvX65z587pwQcf7KoRAAAAoC4MwJ/85Cc6efKk5s+fr+rqag0dOlRbt25t88YQAAAAXFk2j8fj8fcQl+N0OuVwOFRXV8ebQAAAgPGsthHfBQwAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYYL8PUB7XPi6YqfT6edJAAAA/O9CE11opI7qFgF45swZSVJcXJyfJwEAALh6nDlzRg6Ho8P3s3k6m45dqKWlRZWVlerVq5dsNpu/xwEAAPArj8ejM2fOKDY2VgEBHX9FX7cIQAAAAPgObwIBAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGH+H5MPpRZ8kSboAAAAAElFTkSuQmCC" }, "execution_count": 6, @@ -258,14 +258,14 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:39.414609500Z", - "start_time": "2024-05-24T11:02:38.735053600Z" + "end_time": "2024-06-20T18:48:43.237603700Z", + "start_time": "2024-06-20T18:48:42.659478500Z" } }, "outputs": [ { "data": { - "text/plain": "", + "text/plain": "", "image/png": "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Xq1atTRhwgSNHz9eS5cu1dGjR7Vr1y69/fbbWrp0aanjatSokZKTk7V79279+eefysrKUkxMjBYvXqx9+/bpl19+0Ycffig3Nzc1bNiwxGMNGTJEw4cP1+rVq5WcnKz4+Hh9+umnpY6nOO7u7hoxYoSeffZZffvtt+YcZ29fcqkxceJEbd26VWPGjDGP9lqzZk2BSWVQfigIUeHs7e21fPlyJSYm6vbbb9f48eP12muvmds9PDy0du1a7d69W61bt9YLL7ygKVOmSJL5uUI/Pz9t2bJFubm56tatm1q2bKlx48apdu3apUo+ACqGh4eHNm/erH/84x9q0qSJJk2apNmzZ6tHjx6F9h88eLAuXLigu+66S+Hh4XrmmWfM05KXhY4dOyo6Olpz5sxRq1attHHjRo0fP96cWxwcHHT69GkNHjxYTZo00cMPP6wePXpo2rRpJR47NzdX4eHhatasmbp3764mTZro3Xfftejz8ssv65lnnlHbtm2VmpqqtWvXmt/B1aZNG3366adavny5br/9dk2ZMkXTp0+3mNFw9uzZ8vf317333qtHH31UEyZMUI0aNczttWrV0quvvqp27drpzjvv1LFjx7R+/XrZ29vLzs5O69evV6dOnTRs2DA1adJEjzzyiH799Vd5e3vf0LUDVVlReadu3bqKiYnRihUr1Lx5c7388svmL6hLMmPGDE2ePFlRUVHmnPDll18qICCg1HH1799f3bt31/3336+6devq448/Vu3atbVo0SJ17NhRQUFB+uabb7R27Vp5eXmVeLz58+froYce0lNPPaXAwEA9+eSTFq92uFGvvfaa7r33XvXu3VshISG655571LZt2xL3CwoK0qZNm3To0CHde++9uuOOOzRlyhT5+fmVWWwonp1x9cMIQCX00UcfadiwYUpPTy/1OHgAKI0nn3xSBw8e1H//+99yO0d8fLzuv/9+/fXXXxbvPARgXZ07d1br1q01d+5ca4cCWA0PX6FS+uCDD9S4cWPdfPPN+umnnzRx4kQ9/PDDFIMAbtjrr7+url27qmbNmtqwYYOWLl1a4E4eAAC2grF1qJRSU1P12GOPqVmzZho/frzCwsK0cOFCa4cFoBr44Ycf1LVrV7Vs2VLR0dF666239MQTT5S4X48ePSymRb9yeemllyogcgAo3H//+98i89PVL58HrsaQUQAA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" }, "execution_count": 7, @@ -312,14 +312,14 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:39.517011500Z", - "start_time": "2024-05-24T11:02:39.415608100Z" + "end_time": "2024-06-20T18:48:43.336423700Z", + "start_time": "2024-06-20T18:48:43.238602500Z" } }, "outputs": [ { "data": { - "text/plain": "", + "text/plain": "", "image/png": "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kt555x1FRkbq008/VefOnbVx40bNmzdPK1asUJ06dSRJ06ZN06233qrJkycrOjpas2fPVlpammbNmqX8+fOrWrVqio+P1wsvvOAVFAEAAHB+V/wawO3btysxMVEtWrRwloWFhalevXpaunSpJGnp0qUqWrSoE/4kqUWLFgoICNCyZcucNo0bN1b+/PmdNq1atdKmTZt06NChsz53amqqkpOTvR4AAABud8UDYGJioiQpMjLSa3lkZKSzLjExUREREV7r8+XLp/DwcK82Z/sb2Z/jdBMmTFBYWJjzKFOmzN/vEAAAQC6Xp0cBDx8+XEeOHHEeu3bt8nVJAAAAPnfFA2BUVJQkae/evV7L9+7d66yLiorSvn37vNafPHlSSUlJXm3O9jeyP8fpgoODFRoa6vUAAABwuyseAGNiYhQVFaUFCxY4y5KTk7Vs2TLFxsZKkmJjY3X48GHFxcU5bb777jtlZmaqXr16TptFixYpPT3dafPNN9/o2muvVbFixa50NwAAAPKMyxIAjx07pvj4eMXHx0s6NfAjPj5eO3fulMfj0YABAzRu3DjNmTNH69atU7du3RQdHa0OHTpIkqpUqaLWrVurd+/eWr58uX788Uf1799fnTt3VnR0tCTpvvvuU/78+dWrVy8lJCToo48+0j//+U8NGjTocnQBAADANS7LNDArV65U06ZNnZ+zQln37t311ltvaciQITp+/Lj69Omjw4cPq2HDhpo3b54KFCjg/M7s2bPVv39/NW/eXAEBAerYsaNeeuklZ31YWJjmz5+vfv36qXbt2ipRooRGjRrFFDAAAACXyGNm5usickpycrLCwsJ05MiRK3o94KpVq1S7dm1FdZ+q4Khrrtjz/B2piVuU+PYAxcXFqVatWr4uBwAAXIK/m2ny9ChgAAAAnIkACAAA4DIEQAAAAJchAAIAALgMARAAAMBlCIAAAAAuQwAEAABwGQIgAACAyxAAAQAAXIYACAAA4DIEQAAAAJchAAIAALgMARAAAMBlCIAAAAAuQwAEAABwGQIgAACAyxAAAQAAXIYACAAA4DIEQAAAAJchAAIAALgMARAAAMBlCIAAAAAuQwAEAABwGQIgAACAyxAAAQAAXIYACAAA4DIEQAAAAJchAAIAALgMARAAAMBlCIAAAAAuQwAEAABwGQIgAACAyxAAAQAAXIYACAAA4DIE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b8eOHRYREWGDBw+2Dz74wF577TUrUqSINW/e3BYuXOi0y34asWXLlla0aFFbt26dL0o+rw0bNlixYsVs8ODB9u6779rkyZOtQIEC9vHHHzttsu/nkpOTbdSoURYZGelc6+yPVq9ebXfffbctXbrUwsLCrHv37k6QPXjwoG3bts169uxphQoVssqVK9t1113nl/s4s4vfjrKcPHnSuaTHH/cLvkQAvEL69u1rd911l5mZNWnSxBo3bmzt27e3unXrWs2aNW3mzJlO21tvvdU8Ho9ffzMZOXKkderUyfk5MzPTmjdvbvPnz7fFixc73/gzMjLso48+sjvvvNMiIiJs1apVvir5gn788UerUKGC13VI+/bts/79+9uNN95oU6ZMMbNT1zIOHz7cWrdubf3797eNGzf6quRzSkpKsrZt23pNjWJm1rp1a/vkk09s9uzZXh9QixcvNo/HY4UKFfLbHf3TTz9tHo/H/vWvf9mBAwesWbNmFhsba9dcc42VLVvWypcv77wWu3btsvHjx9stt9xia9as8XHlZ9erVy8nzGYFovfee8+KFy9uP/zwwxntk5KSbO/evZacnJyjdV6KDz74wG644QY7fvy4s2zHjh1WtWpVa9q0qdcX2pMnT9rQoUP99oM4KSnJWrVqZQMHDnSWHT9+3Nq1a+c1dVeWhQsX2r333muRkZF+vZ8zMzt69KjVrFnTdu/ebV9++aUVKlTI+vbtaz169LB//OMfZnYqSMXHx9vKlStt3759Pq743C51O0pLS7Nnn33WL79w+BoB8Ap566237LbbbrNXX33VbrnlFud01ObNm61fv37WtGlTJ3isXr3atm/f7sNqL2zgwIFWv35955Tv2LFjLSAgwKpWrWrVqlWza665xjldsG7dOnvggQf89vRBlri4OCtdurQtWrTIzMwZYXnw4EHr1auXxcbGeh15OXnypN9eEH348GGbMmWK1wfrM888YwEBAdakSROLioqyunXrOkcy9u7da7169bKEhARflXxR+vXrZ1dffbVde+211q5dO9u2bZsdOnTI9uzZY02bNrVq1ao5r9vevXtzxcjs7NavX2+VKlWyyZMnm9mfpxf98TTi2cycOdOuueYaZ47CrMtAduzYYeXLl/eah83s1Ohgfw3o27dvt1atWtlnn33mtXzIkCHWtm1bMzOvUdjLli2z5557zn7++eccrfNSZWRk2B9//GF16tRxzj7FxcVZ/vz5LSgoKNfP0Wh27u0oS27ZnnIaAfAK+fbbby0yMtIaNmxo999/v9e6pUuXWoECBZzgkRvMmDHD6tata40bN7aePXtaYGCgffLJJ3bw4EFbvXq1tWnTxnr06OF8EOSG6Sr2799vFSpUsD59+jjLsnYcBw4csOjoaBs+fLivyrtoWTu3rBGjZmYLFiywsLAw+/TTT+348eOWnp5usbGxdvfddzttsh+18TfZd+D9+vWzOnXqnPGFYtGiRRYeHn7WU9z+5nwfQEOGDLGIiIhcOTXFunXrLCgoyJnyxezP6a3Wrl1rQUFBfj0aO7uTJ096XZOY9R4cOXKktWvX7qy/kxv2c1keeugh+/DDD83MrFu3blaiRAkrWLCg9enTx44dO+bj6i5OXt2OfIVRwFdI8+bN9fjjj+vHH3/UmjVrvO6RW7lyZd1www25ahTSQw89pAcffFC33nqr0tPTNWDAAHXo0EHh4eGqUaOGSpYsqcTERBUoUECS/P7erGamEiVKaPr06Zo1a5aeffZZSacmCzUzFS9eXO3atdMvv/zi40ovLGvUYfYRohUrVtSKFSvUvn17BQcHK1++fGrcuLF+++03paWlSTo1WtZfZZ+09eWXX9bkyZMVExMj6c/RvmlpaSpRooSioqJ8VufFOtvI0KxZALp27aqSJUvqgw8+kJR7biuWmZmp6667Tk8++aRGjx6t//znP5L+vP/qtddeq5o1a/r9LABZAgMDdeONN0o61besEaUFCxZ0thlJGjp0qMaOHSvJ//dz0p/vp/DwcC1btkwPP/yw5s+fr0WLFunrr7/WzJkzNXTo0FzxvsuL25Ev+f+7Nxew/z+9RpbMzEwFBARo8ODBSklJ0ejRo/Xcc8+pW7duqlatmiZPnqy9e/eqbNmyPqz64mX1p0+fPpKkQYMGKTk52atNcHCwSpcurfT09Fxxd4ms+lq1aqV//vOfevTRR3XixAkNHTpURYoUkXTqTieRkZG+LPMvK1OmjPPvrFC7Z88e1a5dO1d8aEmn6s567zVp0sRZnvXaff311ypVqpTCw8N9VeLfkjVVRbVq1VSpUiW99dZbeuyxx/x+28mSVf+9996rXbt2aejQocrIyNDdd9+twMBABQYGKiQkJNe837LLfo/soKAgJwA+9dRTmjRpkn766SdflfaXNWjQQPfdd59KliypL7/80rmf8cKFC1WyZEm/ft+d/hmbXW7fjnwp922ZfuTw4cMqWrToGW+07DuPkSNHqlixYpoxY4Y+/vhjxcTEKCkpSZ999lmuOHIhefdHkooWLar58+drzpw5ioiI0Ny5c/Xvf/9bixcvVlBQkI+qvLBz7UT69OmjwoUL66GHHtLKlSsVHh6ukJAQzZ8/X8uWLfNBpReW9e32YndyI0eO1Lfffqvvv//+jNfT32R/nc5W66pVq/TBBx9o5syZWrRokYoVK5bTJV5QRkaGcwTpfLIC7sCBA3X//fdr7969ioiIyFUfXtdee60ee+wxBQcHq1u3blq6dKliYmK0bds2rV69WjNnzvR1iX9J1vswJSVFJUqU0JQpUzRlyhStXLlStWrV8nV5Xvbv3y8zU0RExBnrst5LdevWVb9+/XTfffepevXqzvpGjRrlWJ2XYvv27dq2bZuaN29+we0hL2xHPuGD0855wurVq61hw4bnvaA5+/UKW7ZsscWLF9vChQv9cn4yM7OtW7d6Td1wPs2bN7dSpUrZ1VdfbTVr1vTbkaRJSUm2efNm27lz5wXbrl+/3h555BHr0KGD9erVyy9HjWVdZH+xN2r/97//bffcc4+VKlXKL0cqbt++3V5//XX7v//7vzPu6HE2W7dutccff9yqVKnilyNJs98h4lzzf57tOqZDhw55/a4/yXqvZb33ztWv/fv32/vvv2833HCD1a9f35o1a+aXr9Hu3bsvaR88YcIE83g8VqxYMb+cpisuLs4iIyPPOgI2S9ZrlluuWcyap7R3797nfK1y23bkjwiAf0F8fLwFBQXZ4MGDz1iXNUr0XDtJf7VmzRorVaqU9erV65wX0WZmZnqNgl20aJGtXr3aby+6XbdundWqVcuqVatm+fLlc+63nH3Hcfqtg7IuYPfHHWVCQoJ17NjR2rZtazfffLN9+eWXduTIEa82p7/vEhIS7B//+IdfTl2zdu1aK168uNWvX98qVKhghQsXtgcffNBrh396f1JTU23Lli32+++/53S5F7RhwwYrUKCA13xk59sPnP7a+aONGzfa/fffb23atLHbbrvtrLduO31bOXbsmGVkZPjlIKNff/3VAgICrFmzZue89eHpI/0//fRTu+qqq/zyC2F8fLwVLlzYmf7pdBkZGbluBOy2bdssMjLSnnjiiXO2yb5d5YbtyF8RAC/R+vXrLSQkxEaNGmVmp8JE1kSaZ/Pqq6/65SS72W3bts2ioqJs8ODB59xZZN/J++OH7+k2bdpkJUuWtCFDhtjKlStt9OjRFhISYklJSWZ25rfHdevWOSOYz7be1zZu3Gjh4eHWv39/e+GFF+yhhx4yj8djgwYNOmu4W7dunTMq2B/D7NGjRy02NtYeeeQRMzv1nvrqq68sPDzcWrdu7XXnFTOzJ554whnB6I9+++03u/HGG61WrVoWHR191pHl2Q0YMMAeeughv96W1q5da8WKFbM+ffrY448/bs2bN7fbb7/d+ZJ0+jaS9X7LClD+tg2ZnfqiW65cOStZsqTFxsZ6fdk4vd7ffvvNzE71yx/vwbx27VoLCwtzDkRkZGTYunXrbOnSpV7TO2X1a/DgwfbRRx/5pNZLMWvWLGfO2fT0dHvuueesb9++NmzYMIuLi/N6nXLDduTPCICXIGvG8Zo1azrLevToYbVr17ZSpUpZ48aNbfXq1c4bdO/evebxeKx9+/Z+fePpd955x7llWFpamj333HPWs2dPGzFihH333XdebUePHm09e/b027t7mJ3a4fXv39+ZiNvsVMBo27atbdq0yX7++Wc7fPiws+7ll1+2/Pnz2xdffOGLci/o5MmT1qNHD3vggQe8lrdu3doKFy5sjzzyiNeRmenTp1v+/Plt7ty5OV3qRTtx4oTVqlXrjFC3adMmK1GihHXo0MEJTkePHrX77rvPIiMjvW5m7y8yMzPtjTfesDvvvNO+//57e/PNNy0yMtIrBJ4ewqdNm2ZhYWF+eTtBs1NfCitWrOg1DdKkSZPswQcfNDPz+rJkdmrOyerVq/v1PIyZmZm2detWu/XWW+3nn3+2qlWr2k033eSEu+zz+U2ePNlKlSrlt3dgSU9Pt8qVK1uhQoUsJSXFMjIy7Pbbb7fatWtboUKFrGzZsvb000877f19G8ruiSeesNtvv93MzBo1amSxsbF2zz33WNmyZe2mm26y2bNnO21ffvllv96O/B0B8BL179/fGjZsaKNHj7a6deta69at7fXXX7dPPvnEYmNjrVy5crZ582anfVbg8GePPfaYtWnTxszMbr75ZmvQoIHde++9du2119pNN91kr776qtP2+eeft2uvvdbvN7hOnTpZjx49nDA+ZswYCwoKsuuvv96KFi16xkTVt99+u9/eyiktLc2aNWtmY8eONTNzduBPPPGE3XLLLRYaGur1Gpn5d3/MTp0mLF26tI0ZM8ZZlnVkac2aNVaoUCF75plnnHVJSUl+/S1///799u9//9vMToWjWbNmWWRkpPXu3dtpc/LkSa+jF/4clj766CO75557vO4I8fjjj1ulSpWsfv36VrNmTZs/f76ZnerX4sWLrUaNGn4/ob3ZqeuX16xZY5s2bbJrrrnGbr75ZrvnnnvsnnvucebD27NnjzVp0uSMI9H+JCEhwUqUKGG33XabNWzY0Fq2bGmLFi2yxYsX2z//+U8LDAx0JkY28/9tKOvI8Ysvvmjt27e3r7/+2lq2bOkE9KNHj9ptt91mTZo08ZrzNPuXeVwaAuBFyn5dyKBBgywyMtLatm17RhCqVq2ade/e3cz889Rbll27dllcXJyZmb355pt255132ocffmgtWrRw+vT7779b9+7drUWLFl4fBFmnUf3ZmDFjLCQkxAYMGGA9e/a04OBg+/jjj23fvn02d+5ci4mJsenTp/u6zPPKPjlr165drWbNms77cM+ePVa8eHFbvny5cy/SpKQkv71TydlMmTLFrrrqKvv888+dZVkhcNy4cVavXj07cOCAr8q7ZNnD3dGjR50jgdlD4LvvvuuEJH88RZolPT3d69KCF1980YKCgmzq1Kk2e/Zse+ihh6xgwYJeX25PPyrob06ePGknT560Zs2aOdcDHzlyxMLCwiwgIMAJtNnb+7uEhAQrVKiQ1ahRw+uzKCUlxQYMGOB1hDO3SEhIsPz581v16tXtjjvu8Hoddu/ebYGBgTZv3jxn+/Hn7cjfMQ3MBRw/flyZmZkyM4WGhkqSpkyZoujoaMXExDjD7rOmfahcubKOHz8uyX8nCU1ISFCbNm3UqVMn1apVS5UrV1bfvn21fft2xcTEOHPfRUVFafjw4apSpYpWr16tli1bSjo1DYy/GzVqlDIzM3Xs2DFt375djz32mO666y5JUtu2bfXKK6/o66+/Vt++ff1yqoBNmzZp3LhxevbZZ1W2bFl1795dI0aMUOnSpdWyZUv95z//0X333ae6desqODhYb775pvbt2+eXU6JI0u7du7Vhwwbt2bNHXbp0Ub58+dSqVSstX75cEydOVP78+dWyZUtnGqESJUooOTnZa3Jrf7Jt2zbNmTNHu3btUocOHVSnTh2vWgsXLqyOHTtKkoYNGyaPx6PChQvrxRdf1K+//irp4qfw8YV8+fKpcuXKkk7tA3/99Vd9/fXXatq0qSSpTZs2mjNnjhYsWKBrr71WkpxJ4P1FWlqa0tPTVahQIUlypuVp2rSpUlJSJEn9+/dXcHCwwsLCNH78eFWpUkVXXXWVV3t/cbZtqGrVqtqwYYO+++47r/kwg4ODnQmssz63/NHp21GNGjVUtWpVvfDCC3ryySdVuHBhHTp0SCVKlHB+p1atWl5TvPjzduT3fJ1A/VlCQoK1bNnSatasadHR0fbee+95fRs5fSqOzMxMu+uuu7wGiPib+Ph4K1iwoMXExFhUVJRzEfRrr71m+fLlsxo1anhd33fgwAFr0KCBX05/kGXbtm32wgsv2KBBg846UKBTp042bdo0M/vzCNOdd95pw4cP99vXKCQkxDwej82aNcvMTh2Bjo+Pt8GDB9vAgQNt5syZTvuFCxdapUqV7Ndff/VVyee1du1aq1SpktWqVcs5WpF1dHzBggV2++23W926dZ1bhqWlpdmQIUOsSZMmlpyc7MvSz2rt2rUWERFhbdq0sauvvtrKly9/xnRQWe+ro0eP2htvvGEej8fCw8P9dkDY5s2bbeTIkXb//ffb66+/7izP6sfpAz+2bt1qderUsQULFuR8sRdhw4YN1rlzZ6tbt6717t3b6/V57bXX7O6777auXbtaZGSkJSQk2G+//eYMQPLHI3+nb0O1atVyXpNz6dOnj/Xq1euip4zKaefbjnbv3u1cttOjRw+Lj4+3PXv22NNPP20VKlQ45whuXBoC4DkkJCRY8eLFbeDAgTZ79mwbNGiQBQUFnXO+u/T0dBsxYoSVKlXK6xpAf5IVLJ588knbv3+/VatWzZ555hnLyMiww4cP28SJEy0gIMAeeOABW7RokSUmJtqIESOsfPnyfrvBrV271q666ipr3ry5NWjQwAICAmzixIlebR599FGLjo627du3288//2xjxoyxkiVL+uXUKFmv0ZAhQ+yJJ56wRo0aOaMRs5x+mnfgwIHWoEEDv7wWZuPGjVaiRAkbMWKE7dixw7Zt22YlSpSwOXPmOG2WLl1qDz/8sOXLl8+ZQ65YsWJ+Obfknj17rEqVKvb00087QaFq1ar2yiuveLXL/hr16NHDChcu7DUy059kTQHVtm1ba9++vQUGBjqnSM3OnP7JzOypp56yG264wS/nNF2/fr2Fh4dbjx49bNy4cRYdHW2PPvqos/7HH3+0kiVLWqVKlZzLYMzMduzY4Zf77nNtQ+ca5PX777/bU089ZcWLF/fb99y5tqPsl+WkpKTY22+/beHh4XbVVVdZ5cqVrVy5cn45n2luRQA8i4MHD1rLli29dhpmpwZIZE1bkf3I0fz58+22226zqKgov31zrlmzxoKDg+3JJ580s1MfUHfddZfVqVPHaXPy5EmbPXu2RUdHW6lSpaxKlSp+vcH9+uuvds0119iQIUOcD6g33njDIiMj7ZdffnGWbdy40Zo1a2Yej8eqVatmlStX9stwsXLlSgsNDXVeow8++MDCwsJs8eLFZnbmNaXfffedPfroo1akSBG/nHD38OHDduutt9qAAQO8lrdq1cpmzpxpkyZNckJ4amqqLVmyxJ555hmbMWOGX34Qm5ktXrzYrrvuOvvll1+cZffcc4898cQTdv/999usWbOcScczMzPtv//9r5UrV86vj/yVLVvWhg8f7mwvvXv3thEjRpy1/dq1a23QoEFWtGhRv9yGkpOTrUWLFl5ztM6cOdO6devmHE3OyMiwV1999byT+PuLQ4cOnXcbeuGFF2zDhg3OnIuLFy+2bt26WXR0tF++PlnOtx116dLFZs2aZbt27TKzU9PxLFiwwL7//nu/PRCRWxEAzyIxMdFuvPFGW7RokZn9+W2+R48e1qVLF6+2mZmZtnnzZhs6dKhfHlHKsnz5chs5cqSZ/dmfn3/+2cLCws4YDLFjxw5bunSpX9+1JCMjw5577jlr3bq115GvrCOCp4+8TklJsU8//dQWL17sl306duyYFSpUyAYOHOi1vHnz5tasWbOzDiiaN2+e3XHHHX47VYWZ2YwZM2zJkiXOz88884zly5fPmjZtalWqVLGSJUvav/71Lx9WeGm++OILi4iIsK+++spSUlJs4sSJFhQUZI888oi1adPG6tata4888ojzgXzw4MEzjuD6i/T0dHv88cftwQcf9BrAkTXxc+vWre2pp55yvlz8/PPPNnr0aKtTp47fhqejR49a3bp1vS6R6N+/v1133XV29dVXW/v27e2tt97yYYWX7pVXXjnvNhQZGenM77dlyxb74IMP/HqaLjOzzz///LzbUZ06deyRRx5hkucrjAB4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" }, "execution_count": 8, @@ -355,14 +355,14 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:40.087544200Z", - "start_time": "2024-05-24T11:02:39.513012300Z" + "end_time": "2024-06-20T18:48:43.660060600Z", + "start_time": "2024-06-20T18:48:43.327907Z" } }, "outputs": [ { "data": { - "text/plain": "", + "text/plain": "", "image/png": "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q4bff/8dHTp0eKUyZ8yYgcmTJyvPExISGBQSERERERG9hGIbMvq8qlWronz58vj3338BADY2NoiOjtbKk56ejtjY2BzvO1Sr1TA1NdV6EBERERERUf6VSED433//4eHDh7C1tQUAuLq6Ii4uDoGBgUqe48ePQ6PRoFmzZiXRRCIiIiIiordeoQwZTUxMVK72AcDt27dx6dIlWFhYwMLCAvPnz0efPn1gY2ODmzdvYtq0aahevTo8PDwAAE5OTujUqRNGjhyJ9evXIy0tDT4+PvD09OQMo0REREREREWkUK4Qnj9/Hg0bNkTDhg0BAJMnT0bDhg0xZ84c6Orq4sqVK+jRowdq1qyJ4cOHo3Hjxvjjjz+gVquVMrZv347atWujQ4cO6NKlC1q2bIkNGzYURvOIiIiIiIgoG4VyhbBt27YQkRy3Hz58OM8yLCwssGPHjsJoDhEREREREeVDidxDSERERERERCWPASEREREREVEpxYCQiIiIiIiolGJASEREREREVEoxICQiIiIiIiqlGBASERERERGVUgwIiYiIiIiISikGhERERERERKUUA0IiKnU+/fRTqFQqTJw4UUlLTk6Gt7c3LC0tUbZsWfTp0wdRUVFarwsLC0PXrl1hZGQEKysrTJ06Fenp6cXceiIiIqLCw4CQiEqVc+fO4euvv8Y777yjlT5p0iT88ssv2LNnD06ePIn79++jd+/eyvaMjAx07doVqampOHPmDLZs2YLNmzdjzpw5xb0LRERERIWGASERlRqJiYnw8vLCN998g3Llyinp8fHx2LhxI1asWIH27dujcePG2LRpE86cOYO//voLAHDkyBEEBwdj27ZtaNCgATp37oyFCxdizZo1SE1NLaldIiIiIioQBoREVGp4e3uja9eucHNz00oPDAxEWlqaVnrt2rVRuXJlBAQEAAACAgJQr149WFtbK3k8PDyQkJCAoKCgbOtLSUlBQkKC1oOIiIjodaJX0g0gIioOO3fuxIULF3Du3Lks2yIjI1GmTBmYm5trpVtbWyMyMlLJ83wwmLk9c1t2fH19MX/+/EJoPREREVHR4BVCInrrhYeH46OPPsL27dthYGBQbPXOmDED8fHxyiM8PLzY6iYiIiLKDwaERPTWCwwMRHR0NBo1agQ9PT3o6enh5MmTWLVqFfT09GBtbY3U1FTExcVpvS4qKgo2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o8LCwmBubq4sDg4OFT8gIiIiokrEhJCIqIoEBgYiIyNDWRISEqq7SkREREQamBASUa1mZ2cHAEhOTtZYn5ycrGyzs7NDSkqKxvb8/HykpaVplCkuxsP7eJShoSHMzMw0FiIiIqKahAkhEdVqTk5OsLOzw759+5R1mZmZOHr0KNRqNQBArVYjPT0dkZGRSpn9+/ejsLAQXbt2VcocPHgQeXl5Spm9e/eiRYsWqFev3jM6GiIiIqLKxYSQiJ57WVlZiIqKQlRUFIAHA8lERUUhPj4eKpUKU6ZMwbx587B9+3ZER0dj9OjRsLe3x+DBgwEArVq1gqenJyZMmIBjx47hr7/+gp+fH0aMGAF7e3sAwNtvvw0DAwOMHz8eMTEx+Oabb/B///d/mDp1ajUdNREREVHFcdoJInrunThxAn379lVeFyVpY8aMwYYNGzB9+nTcvXsXPj4+SE9PR8+ePbFr1y4YGRkp79m0aRP8/PzQv39/6OjoYNiwYVi2bJmy3dzcHHv27IGvry86deoEa2trhISEcMoJIiIieq4xISSi516fPn0gIiVuV6lUCA0NRWhoaIllLC0tsXnz5lL307ZtW/z5559PXU8iIiKimoa3jBIREREREWkpJoRERERERERaigkhERERERGRlmJCSEREREREpKWYEBIREREREWkpJoRERERERERaqlISwhs3bmDkyJGwsrKCsbExXFxccOLECWW7iCAkJAQNGjSAsbEx3NzccPHiRY0YaWlp8Pb2hpmZGSwsLDB+/HhkZWVVRvWIiIiIiIioGBVOCP/55x/06NED+vr6+PXXXxEbG4vFixejXr16SpkFCxZg2bJlWLVqFY4ePQoTExN4eHggOztbKePt7Y2YmBjs3bsXO3bswMGDBznhMxERERERURWq8MT0n332GRwcHLB+/XplnZOTk/KziGDp0qUICgrCoEGDAABfffUVbG1t8eOPP2LEiBE4d+4cdu3ahePHj8PV1RUAsHz5crzyyitYtGgR7O3tK1pNIiIiIiIiekSFewi3b98OV1dXvPHGG7CxsUGHDh2wdu1aZfuVK1eQlJQENzc3ZZ25uTm6du2KiIgIAEBERAQsLCyUZBAA3NzcoKOjg6NHjxa735ycHGRmZmosREREREREVHYVTggvX76MlStXolmzZti9ezcmTpyIDz74ABs3bgQAJCUl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kZZiQkhERERERKSlmBASERERERFpKSaEREREREREWooJIRERERERkZZiQkhERERERKSlmBASERERERFpKSaEREREREREWooJIRERERERkZZiQkhERERERKSlmBASERERERFpKSaEREREREREWooJIRERERERkZZiQkhERERERKSl9Kq7AkREREREVPPEx8cjNTW1uquhtaytreHo6Fjl+2FCSEREREREGuLj49GiZStk379X3VXRWkbGdRB3/lyVJ4VMCImIiIiISENqaiqy79+D1cBp0LdyqO7qaJ282wm4vWMxUlNTmRASEREREVH10LdygKFd0+quBlUhDipDRERERESkpZgQEhERERERaSkmhERERERERFqq0hPCTz/9FCqVClOmTFHWZWdnw9fXF1ZWVqhbty6GDRuG5ORkjffFx8fDy8sLderUgY2NDQICApCfn1/Z1SMiLXXjxg2MHDkSVlZWMDY2houLC06cOKFsFxGEhISgQYMGMDY2hpubGy5evKgRIy0tDd7e3jAzM4OFhQXGjx+PrKysZ30oRERERJWmUhPC48ePY/Xq1Wjbtq3Gen9/f/z888/Ytm0bDhw4gMTERAwdOlTZXlBQAC8vL+Tm5uLw4cPYuHEjNmzYgJCQkMqsHhFpqX/++Qc9evSAvr4+fv31V8TGxmLx4sWoV6+eUmbBggVYtmwZVq1ahaNHj8LExAQeHh7Izs5Wynh7eyMmJgZ79+7Fjh07cPDgQfj4+FTHIRERERFVikpLCLOysuDt7Y21a9dqXGRlZGRg3bp1WLJkCfr164dOnTph/fr1OHz4MI4cOQIA2LNnD2JjY/H111+jffv2GDBgAObOnYvw8HDk5uZWVhWJSEt99tlncHBwwPr169GlSxc4OTnB3d0dTZo0AfCgd3Dp0qUICgrCoEGD0LZtW3z11VdITEzEjz/+CAA4d+4cdu3ahX//+9/o2rUrevbsieXLl2Pr1q1ITEysxqMjIiIienqVlhD6+vrCy8sLbm5uGusjIyORl5ensb5ly5ZwdHREREQEACAiIgIuLi6wtbVVynh4eCAzMxMxMTHF7i8nJweZmZkaCxFRcbZv3w5XV1e88cYbsLGxQYcOHbB27Vpl+5UrV5CUlKRxnjI3N0fXrl01zlMWFhZwdXVVyri5uUFHRwdHjx59dgdDREREVIkqJSHcunUrTp48ibCwsMe2JSUlwcDAABYWFhrrbW1tkZSUpJR5OBks2l60rThhYWEwNzdXFgcHTphJRMW7fPkyVq5ciWbNmmH37t2YOHEiPvjgA2zcuBHA/84zxZ2HHj5P2djYaGzX09ODpaVliecpfnFFRERENV2FE8KEhARMnjwZmzZtgpGRUWXUqUwCAwORkZGhLAkJCc9s30T0fCksLETHjh0xf/58dOjQAT4+PpgwYQJWrVpVpfvlF1dERERU01U4IYyMjERKSgo6duwIPT096Onp4cCBA1i2bBn09PRga2uL3NxcpKena7wvOTkZdnZ2AAA7O7vHRh0tel1U5lGGhoYwMzPTWIiIitOgQQM4OztrrGvVqhXi4+MB/O88U9x56OHzVEpKisb2/Px8pKWllXie4hdXREREVNNVOCHs378/oqOjERUVpSyurq7w9vZWftbX18e+ffuU98TFxSE+Ph5qtRoAoFarER0drXGxtXfvXpiZmT12EUdEVF49evRAXFycxroLFy6gUaNGAAAnJyfY2dlpnKcyMzNx9OhRjfNUeno6IiMjlTL79+9HYWEhunbtWux++cUVERER1XR6FQ1gamqKNm3aaKwzMTGBlZWVsn78+PGYOnUqLC0tYWZmhkmTJkGtVqNbt24AAHd3dzg7O2PUqFFYsGABkpKSEBQUBF9fXxgaGla0ikSk5fz9/dG9e3fMnz8fw4cPx7Fjx7BmzRqsWbMGAJS5U+fNm4dmzZrByckJwcHBsLe3x+DBgwE86FH09PRUbjXNy8uDn58fRowYAXt7+2o8OiIiIqKnV+GEsCw+//xz6OjoYNiwYcjJyYGHhwdWrFihbNfV1cWOHTswceJEqNVqmJiYYMyYMQgNDX0W1SOiWq5z58744YcfEBgYiNDQUDg5OWHp0qXw9vZWykyfPh13796Fj48P0tPT0bNnT+zatUvj2ehNmzbBz88P/fv3V85py5Ytq45DIiIiIqoUVZIQ/vHHHxqvjYyMEB4ejvDw8BLf06hRI+zcubMqqkNEhIEDB2LgwIElblepVAgNDS31iyhLS0ts3ry5KqpHREREVC0qbR5CIiIiIiIier4wISQiIiIiItJSTAiJiIiIaphPP/1UGfCqSHZ2Nnx9fWFlZYW6deti2LBhj02XEx8fDy8vL9SpUwc2NjYICAhAfn7+M649ET1PmBASERER1SDHjx/H6tWr0bZtW431/v7++Pnnn7Ft2zYcOHAAiYmJGDp0qLK9oKAAXl5eyM3NxeHDh7Fx40Zs2LABISEhz/oQiOg5woSQiIiIqIbIysqCt7c31q5di3r16inrMzIysG7dOixZsgT9+vVDp06dsH79ehw+fBhHjhwBAOzZswexsbH4+uuv0b59ewwYMABz585FeHg4cnNzq+uQiKiGY0JIREREVEP4+vrCy8sLbm5uGusjIyORl5ensb5ly5ZwdHREREQEACAiIgIuLi6wtbVVynh4eCAzMxMxMTHP5gCI6LnzTOYhJCIiIqLSbd26FSdPnsTx48cf25aUlAQDAwNYWFhorLe1tUVSUpJS5uFksGh70bbi5OTkICcnR3mdmZlZkUMgoucQewiJiIiIqllCQgImT56MTZs2wcjI6JntNywsDObm5sri4ODwzPZNRDUDE0IiIiKiahYZGYmUlBR07NgRenp60NPTw4EDB7Bs2TLo6enB1tYWubm5SE9P13hfcnIy7OzsAAB2dnaPjTpa9LqozKMCAwORkZGhLAkJCZV/cERUozEhJCIiIqpm/fv3R3R0NKKiopTF1dUV3t7eys/6+vrYt2+f8p64uDjEx8dDrVYDANRqNaKjo5GSkqKU2bt3L8zMzODs7Fzsfg0NDWFmZqaxEJF24TOERERERNXM1NQUbdq00VhnYmICKysrZf348eMxdepUWFpawszMDJMmTYJarUa3bt0AAO7u7nB2dsaoUaOwYMECJCUlISgoCL6+vjA0NHzmx0REzwcmhERERETPgc8//xw6OjoYNmwYcnJy4OHhgRUrVijbdXV1sWPHDkycOBFqtRomJiYYM2YMQkNDq7HWRFTTMSEkIiIiqoH++OMPjddGRkYIDw9HeHh4ie9p1KgRdu7cWcU1I6LaRGsTwvj4eKSmplZ3NZ45a2trODo6Vnc1iIiIiIioBtDKhDA+Ph4tWrZC9v171V2VZ87IuA7izp9jUkhERERERNqZEKampiL7/j1YDZwGfSvtmW8n73YCbu9YjNTUVCaERERERESknQlhEX0rBxjaNa3uahAREREREVULzkNIRERERESkpZgQEhERERERaSkmhERERERERFqKCSEREREREZGWYkJIRERERESkpZgQEhERERERaSkmhERERERERFqKCSEREREREZGWYkJIRERE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" }, "execution_count": 9, @@ -405,19 +405,23 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-05-24T11:02:40.169174900Z", - "start_time": "2024-05-24T11:02:39.926927500Z" + "end_time": "2024-06-20T18:48:43.776868800Z", + "start_time": "2024-06-20T18:48:43.661565100Z" } }, "outputs": [ { - "data": { - "text/plain": "", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAACm4ElEQVR4nOzdeXwU9f0/8NfskU2yua9NgCQQEJJwJSQKoR4cAQRsq4CoBfTb2iqItoKIgIqttYjUamtVxLa/2uKBRapWBQ8ubQURAuFMuEk4ct8JOXZ3Pr8/NjPsvTPJ7maP9/Px8NGymcx+Zj6zmfd+5vN5vznGGAMhhBBCCAkair5uACGEEEII8S4KAAkhhBBCggwFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkKEAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQUfV1A3wVz/O4cuUKIiMjwXFcXzeHEEIIIUTEGENLSwv69esHhUL+eB4FgA5cuXIFqampfd0MQgghhBCHLl68iAEDBsj+PQoAHYiMjARgOrFRUVF93BpCCCGEkGuam5uRmpoqxityUQDogPDYNyoqigJAQgghhPiknk5To0UghBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQoQCQEEIIISTIUABICCGEEBJkKAAkhBBCCAkyFAASQgghhAQZCgAJIYQQQoIMBYCEEEIIIUGGAkBCSNAyGHm7rxt55uWWkL5A/UyCGZWCI4QEFYORh0qpwIEL9aho6kBKdCjyB8aJrxeV1eNKYwf6xYQiL/3a6yQwUD8TYkIBICEkaDDGsOtkNdZsLcX52jbx9UEJWqyakYnCLB32nK3DH748ZfN6T+ttEt8hpf+pn0mwoK87hJCgYDDy2F5ShQc3Flnc/AHgfG0bHtxYhO0lVVh4y2BEhqpsXjfw9h8XE/8gtf+pn0mwoACQEBIUVEoF1mwthaNpXzwDnt9aCrVSgeXTMm1eVynoz6U/k9r/1M8kWNCVTggJCgcu1NuM/Fg7V9uGorJ6TMlOsvN6gyebRzysqExq/1M/k+BAASAhJOAZjDwqmjokbVvR2AGNSmnn9XZaNeqnjDzDlUap/U/9TIIDBYCEkICnUiqQEh0qaduUmFB0Gox2Xg+DUkELBPyRUsGhX4zU/qd+JsGBAkBCSFDIHxiHQQlap9tkJGiRlx6Hr05U23k91pPNIx6Wly61/6mfSXCgAJAQEhQMRh6rZmTC0eCOggNWzsiE3shj3RelNq/T6lD/JrX/qZ9JsPC5APDXv/41OI6z+C8z89qKvI6ODixevBjx8fGIiIjA7NmzUVVVZbGP8vJyzJw5E+Hh4UhKSsLjjz8Og8Hg7UMhhPgQlVKBwiwdNizIsxkJykjQYsOCPBRm6bB+9xm0dBhsXqfVof5Nav9TP5Ng4ZOJoIcPH47t27eL/1aprjVzyZIl+Oyzz7B582ZER0fj4YcfxqxZs/Dtt98CAIxGI2bOnInk5GTs2bMHFRUVuPfee6FWq7FmzRqvHwshxHdwHIeJw5IwJTsZRWX1qGjsQIpZJQiO4/CDIYnISIhASkwY8tJjYeB5Sg4cIDiOw8RMof8bUNHYTv1MghbHGPOp5U6//vWv8dFHH6G4uNjmZ01NTUhMTMS7776LOXPmAABKS0uRlZWFvXv3Yty4cdi2bRtuu+02XLlyBTqdDgDwxhtv4IknnkBNTQ1CQkIktaO5uRnR0dFoampCVFSU246PEOI7jDwPpZ0RHyPPaCFAEKB+Jv6st3GKT451nz59Gv369UNGRgbmzZuH8vJyAEBRURH0ej0KCwvFbTMzM5GWloa9e/cCAPbu3YuRI0eKwR8ATJs2Dc3NzTh+/LjD9+zs7ERzc7PFf4SQwGYv+DO9TkFBMKB+JsHM5wLAsWPH4q233sLnn3+O9evX4/z587jpppvQ0tKCyspKhISEICYmxuJ3dDodKisrAQCVlZUWwZ/wc+Fnjjz//POIjo4W/0tNTXXvgRFCCCGE+AifmwM4ffp08f+PGjUKY8eORXp6Ov71r38hLCzMY++7cuVKLF26VPx3c3MzBYGEEEIICUg+NwJoLSYmBkOHDsWZM2eQnJyMrq4uNDY2WmxTVVWF5ORkAEBycrLNqmDh38I29mg0GkRFRVn8RwghhBASiHw+AGxtbcXZs2eRkpKCvLw8qNVq7NixQ/z5yZMnUV5ejoKCAgBAQUEBjh49iurqa4lcv/rqK0RFRSE7O9vr7SeEEEII8TU+9wh42bJl+OEPf4j09HRcuXIFzzzzDJRKJe655x5ER0fj/vvvx9KlSxEXF4eoqCg88sgjKCgowLhx4wAAU6dORXZ2NhYsWIB169ahsrISTz31FBYvXgyNRtPHR0cIIYQQ0vd8LgC8dOkS7rnnHtTV1SExMRE33ngjvvvuOyQmJgIAXn75ZSgUCsyePRudnZ2YNm0aXn/9dfH3lUolPv30UyxatAgFBQXQarW477778Oyzz/bVIRFCCCGE+BSfywPoKygPICGEEEJ8VUDmASSEEEIIIZ5DASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBkKAAkhhBBCggwFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkKEAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQoQCQEEIIISTIUABICCGEEBJkKAAkhBBCCAkyFAASQgghhAQZCgAJIYQQQoIMBYCEEEIIIUGGAkBCCCGEkCBDASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBkKAAkhhBBCggwFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkKEAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQoQCQEEIIISTIUABICCGEEBJkKAAkhBBCCAkyFAASQgghhAQZCgAJIYQQQoIMBYCEEEIIIUGGAkBCCCGEkCBDASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBkKAAkhhBBCggwFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkPHpAHDt2rXgOA6PPvqo+FpHRwcWL16M+Ph4REREYPbs2aiqqrL4vfLycsycORPh4eFISkrC448/DoPB4OXWE0IIIYT4Jp8NAPfv348NGzZg1KhRFq8vWbIEn3zyCTZv3oyvv/4aV65cwaxZs8SfG41GzJw5E11dXdizZw/+8Y9/4K233sLq1au9fQiEEEIIIT7JJwPA1tZWzJs3D3/5y18QGxsrvt7U1IS//e1veOmllzBp0iTk5eXh73//O/bs2YPvvvsOAPDll1/ixIkTePvtt5GTk4Pp06fjt7/9LV577TV0dXX11SERQgghhPgMnwwAFy9ejJkzZ6KwsNDi9aKiIuj1eovXMzMzkZaWhr179wIA9u7di5EjR0Kn04nbTJs2Dc3NzTh+/LjD9+zs7ERzc7PFf4QQQgghgUjV1w2wtmnTJhw8eBD79++3+VllZSVCQkIQExNj8bpOp0NlZaW4jXnwJ/xc+Jkjzz//PH7zm9/0svWEEEIIIb7Pp0YAL168iF/96ld45513EBoa6tX3XrlyJZqamsT/Ll686NX3J4QQQgjxFp8KAIuKilBdXY0xY8ZApVJBpVLh66+/xiuvvAKVSgWdToeuri40NjZa/F5VVRWSk5MBAMnJyTargoV/C9vYo9FoEBUVZfEfIYQQQkgg8qkAcPLkyTh69CiKi4vF//Lz8zFv3jzx/6vVauzYsUP8nZMnT6K8vBwFBQUAgIKCAhw9ehTV1dXiNl999RWioqKQnZ3t9WMihBBCCPE1PjUHMDIyEiNGjLB4TavVIj4+Xnz9/vvvx9KlSxEXF4eoqCg88sgjKCgowLhx4wAAU6dORXZ2NhYsWIB169ahsrISTz31FBYvXgyNRuP1YyKEEEII8TU+FQBK8fLLL0OhUGD27Nno7OzEtGnT8Prrr4s/VyqV+PTTT7Fo0SIUFBRAq9Xivvvuw7PPPtuHrSaEEEII8R0cY4z1dSN8UXNzM6Kjo9HU1ETzAQkhhBDiU3obp/jUHEBCCCGEEOJ5FAASQgghhAQZCgAJIYQQQoIMBYCEEEIIIUGGAkBCCCGEkCBDASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBkKAAkhhBBCggwFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkKEAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQoQCQEEIIISTIUABICCGEEBJkKAAkhBBCCAkyFAASQgghhAQZCgAJIYQQQoIMBYCEEEIIIUGGAkBCCCGEkCBDASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBkKAAkhhBBCggwFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkKEAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQoQCQEEIIISTIUABICCGEEBJkKAAkhBBCCAkyFAASQgghhAQZCgAJIYQQQoIMBYCEEEIIIUGGAkBCCCGEkCBDASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBmfCwDXr1+PUaNGISoqClFRUSgoKMC2bdvEn3d0dGDx4sWIj49HREQEZs+ejaqqKot9lJeXY+bMmQgPD0dSUhIef/xxGAwGbx8KIYQQQohP8rkAcMCAAVi7di2Kiopw4MABTJo0CT/+8Y9x/PhxAMCSJUvwySefYPPmzfj6669x5coVzJo1S/x9o9GImTNnoqurC3v27ME//vEPvPXWW1i9enVfHRIhhBBCiE/hGGOsrxvhSlxcHH7/+99jzpw5SExMxLvvvos5c+YAAEpLS5GVlYW9e/di3Lhx2LZtG2677TZcuXIFOp0OAPDGG2/giSeeQE1NDUJCQiS9Z3NzM6Kjo9HU1ISoqCiPHRshhBBCiFy9jVN8bgTQnNFoxKZNm9DW1oaCggIUFRVBr9ejsLBQ3CYzMxNpaWnYu3cvAGDv3r0YOXKkGPwBwLRp09Dc3CyOIhJCCCGEBDNVXzfAnqNHj6KgoAAdHR2IiIjAhx9+iOzsbBQXFyMkJAQxMTEW2+t0OlRWVgIAKisrLYI/4efCzxzp7OxEZ2en+O/m5mY3HQ0hhBBCiG/xyRHAYcOGobi4GPv27cOiRYtw33334cSJEx59z+effx7R0dHif6mpqR59P0IIIYSQvuKTAWBISAiGDBmCvLw8PP/88xg9ejT+9Kc/ITk5GV1dXWhsbLTYvqqqCsnJyQCA5ORkm1XBwr+FbexZuXIlmpqaxP8uXrzo3oMihBBCCPERPhkAWuN5Hp2dncjLy4NarcaOHTvEn508eRLl5eUoKCgAABQUFODo0aOorq4Wt/nqq68QFRWF7Oxsh++h0WjE1DPCf4QQQgghgcjn5gCuXLkS06dPR1paGlpaWvDuu+9i9+7d+OKLLxAdHY37778fS5cuRVxcHKKiovDII4+goKAA48aNAwBMnToV2dnZWLBgAdatW4fKyko89dRTWLx4MTQaTR8fHSGEEEJI3/O5ALC6uhr33nsvKioqEB0djVGjRuGLL77AlClTAAAvv/wyFAoFZs+ejc7OTkybNg2vv/66+PtKpRKffvopFi1ahIKCAmi1Wtx333149tln++qQCCGEEEJ8il/kAewLlAeQEEIIIb4qoPMAEkIIIYQQ96MAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMr1aBXzkyBHZv5OdnQ2VyucWHxNCCCGEBI1eRWI5OTngOA5SFxIrFAqcOnUKGRkZvXlbQgghhBDSC70eitu3bx8SExNdbscYw4gRI3r7doQQQgghpJd6FQDecsstGDJkCGJiYiRtf/PNNyMsLKw3b0kIIYQQQnqJEkE7QImgCSGEEOKrKBE0IYQQQgiRpddzAK1r7K5evbq3uySEEEIIIR7U6wDw/Pnz4v/nOK63uyOEEEIIIR7W6wDw73//uzvaQQghhBBCvMTtcwDPnDmDL774Au3t7QAgOUcgIcSSkffcZ8fevj31fp48DkK8hT4fJNC4rSRHXV0d5s6di127doHjOJw+fRoZGRm4//77ERsbiz/84Q/ueitCPM7IMygV3pvSILyfkeehVChQVFaPK40d6BcTirz0OBiMPFRK59/XXLVZ2Ie9fV+oa0NJRYus93PG2Xv1Zr/e4u3+95TeHkegnIeecnQdC5/Tnp4ff/98kMDgtgBwyZIlUKvVKC8vR1ZWlvj6XXfdhaVLl1IASHyet/8oO3q/hqtdeH33WewoqQYADErQYtWMTBRm6Wzm2UptM2MMu05WY83WUpyvbRNfH5SgxcrpmZicpcPabaXYXlLt9P2kcPZevdmvpwXKTbm3xxEo56G37F3HhVlJ+P2dEYgND+nx+fHXzwcJPG7LA5icnIwvvvgCo0ePRmRkJA4fPoyMjAycO3cOo0aNQmtrqzvexmsoD2BwYYxhe0mV1/4oO3s/ISB7cOMBbO8OAhUcsGFBHiZmJkGlUMhqs8HIY9fJajy4sQj2njYpOOCN+XnIS4/F+LU70Wng7b6fFFLeqyf79TRv97+n9PY4AuU89Ja967gwKwkbFuRjR0kVnt/Ws/Pjr58P4pt8Jg9gW1sbwsPDbV6vr6+HRqNx19sQ4nYGI4/tJVV4cGORxR91ADhf24YHNxZhe0kVDDzvlfdb+HYRdpRU4YXZo6BRmT6iPAOe31oq3hTktFmlVGDN1lK7Nxxh32u3lSI+QoPpI1Lsvp9UUt6rJ/v1JG/3v6f09jgC5Ty4g/V1rFEp8MLsUdhRUoWFb/f8/Pjj54MELrddZTfddBP++c9/iv/mOA48z2PdunWYOHGiu96GELfz9h/lngRkAHCutg1FZQ2y23y+ttXmhmXtXG0b9l+ox7QROrvvJ1VRWb2k95K7X08KlJtyb48jUM6DO1hfxzNGpiA+QoPnt/Xu/Pjj54MELrd9ktetW4c333wT06dPR1dXF5YvX44RI0bgm2++wQsvvOCutyHE7bz9R1nq+1kHZABQ0dgOxpisNoeqlJLaVdXUgahQtc37SV2laOQZrjR2SNpWzn49LVBuyr09jkA5D71l7zqeOlyH78/37vz46+eDBC63BYAjRozAqVOncOONN+LHP/4x2traMGvWLBw6dAiDBw9219sQ4lbe/qMs5/3sBWQpMWHgGWS1OSxEWgCoiw5Fc4fe5v2krnJUKjj0iwmVtK2c/XpSoNyUe3scgXIe3MHedRwVqkZVc+/Ojz9+Pkhgc8sqYL1ej1tvvRVvvPEGnnzySXfskhCv8PYfZTnvp4sORW1rp/jvjAQt8tJjAUBWm2PCQzAoQet09CIjQYvrB8bh0U3Fdt9Pqrz0OEnvJXe/nhIoN+XeHkegnAd3sb6Omzv00EX1/vz42+eDBDa3jACq1WocOXLEHbsixOuEP8rOuPOPstT3u35gHL44VgXAtDpw5YxMcYK5nDYbeR6rZmTC0T1bwQErpmeirrUT245V2H0/qQxG1+/Vk/16krf731N6exyBch7cwfo6/vJ4FW4Y1Pvz44+fDxK43PYIeP78+fjb3/7mrt0R4jXe/qMs5f3MA7KMBC02LMhDYZbOYhWw1DYrFQoUZumwYUGezQ0sI0GLN+bnYXKWDsu3HEGngbf7flKplM7fq6f79aRAuSn39jgC5Ty4g/V1vPVoBepaO7Fyeu/Ojz9+PkjgclsewEceeQT//Oc/cd111yEvLw9areXF/dJLL7njbbyG8gAGF0f5zzIStFjpxTyAwvtNztLhwIV6KBUK5KXHmtK5WN0U5LZZ2EdRWQMqGtuREhMm7vtC7VWUVjRbvNaTm5BQGcHZe/nizc3b/e8pvT2O3vx+IFYNMb+OjTyP/IFx2OGG68TfPh/EN/U2TnFbAOgs1QvHcdi5c6c73sZrKAAMPt7+o+zq/aTcUHvaZuvScw1tXdAbeaiVCsRqQ2RVffBUuSxvC5Sbcm+PQ87vB1PVEE99ufGXzwfxPT4TAAYaCgCDW1/VAvbmPtxR9SFQK0cEyk3Zk7WAA7Xv5QiU64T4JwoAPYQCQBLI3FGSispaBS/qe0L6Xm/jFLekgREcOHAA//rXv1BeXo6uri6Ln/373/9251sRQnpBatWHKdnJHt0H8U/U94T4P7d9Ndu0aRPGjx+PkpISfPjhh9Dr9Th+/Dh27tyJ6Ohod70NIcQN3FH1gSpHBC/qe0L8n9sCwDVr1uDll1/GJ598gpCQEPzpT39CaWkp5s6di7S0NHe9DSGkl9xR9YEqRwQv6ntCAoPbAsCzZ89i5syZAICQkBC0tbWB4zgsWbIEb775prvehhDSS+6o+kCVI4IX9T0hgcFtAWBsbCxaWloAAP3798exY8cAAI2Njbh69aq73oYQ4gbuqPpAlSOCF/U9If7PbQHgzTffjK+++goAcOedd+JXv/oVfvGLX+Cee+7B5MmT3fU2hBA3cEfVB6ocEbyo7wnxf25LA1NfX4+Ojg7069cPPM9j3bp12LNnD6677jo89dRTiI31r2+ClAaGBDp3VL8IlAoaRD7qe0L6Vp/mAVy6dCl++9vfQqvV4ptvvsH48eOhUrk1s0yfoQCQBAN3VDUIlAoaRD7qe0L6Tp8GgGq1GpcuXYJOp4NSqURFRQWSkpJ6ujufQgEgCTZ9UY2EBA7qe0K8q08TQQ8cOBCvvPIKpk6dCsYY9u7d6/BR780339ybtyKEeJg7bt4UAAQv6ntC/EuvRgA/+ugjLFy4ENXV1eA4Do52xXEcjEZjjxvZF2gEkHgTjZ74L0/1nT/WoyaEeI9P1AJubW1FVFQUTp486fARsL9VA6EAkHiawchDpVSgqKweVxo70C8mFHnpceLrxHd5qu+8fU3QNUiI//KJWsARERHYtWsXBg0aFDCLQAjxJMYYdp2stllBOShBi1W0gtKnearvvH1N0DVISHBzWxqYQEMjgMRTDEYeu05W48GNRbBXJUvBARsW5GFiZhKtpPQxnuo7b18TdA0S4v96G6f0+pOtUCigVCrF/yWEOKdSKrBma6ndGy8A8Ax4fmtpwN94/bFGrKf6ztvXBF2D3ufJ690fP0uk7/X6033+/HmcO3dO/F9CiHNFZfUWj9zsOVfbhqKyBi+1yHsMRlNliKKyemw9WoGisnqL132dp/rO29dEMF+D3uTJ693fP0uk7/Vqwt6RI0cwYsQIKCR+Szx+/DiGDRtG8wRJ0DLyDFcaOyRtW9HYDmNqTMCszPT3OWee6jtvXxPBfA16kyevd3//LBHf0KsRwNzcXNTV1UnevqCgAOXl5b15S0L8mlLBoV9MqKRtU2LCAubGazDy2F5ShQc3FtmMPJ2vbcODG4uwvaTKp2vHeqrvvH1NBOs16E2evN4D4bNEfEOvhuIYY3j66acRHh4uafuurq7evB0hASEvPQ6DErROH8FlJGiRl+5f9bOdkTrnbEp2sncbJpOn+s7b10QwXoPe5MnrPVA+S6Tv9SoAvPnmm3Hy5EnJ2xcUFCAsLKw3b0mI3zMYeayakel0BebKGZkBVU9VzpwzXw46PNV33r4mgvEa9CZPXu+B8lkifa9XAeDu3bvd1AxCgodKqUBhlg4bFuTZzOHJSNBiZYDN4QmkOWee6jtvXxPBdg16kyev90D6LJG+R6sxCOmlnpTQ4jgOEzOTMCU7GUVlDahobEdKTBjy0mNh4Hm/vfHaOxfemHPW0zJm7u47Y3ff+dJ+e/J+PbkGqXqIiSevd5q/SdyJAkBCesAdJbSER2t56bEW39T97ZGblHPhiTlnPe0DT/WdL+9XzvuZv+6K0IYDF+pR0dSBlOhQ5A+kUnKenGNJ8zeJu1AASIhMnkjB4K/f1KWeC3fPOetpH3iq7/xpv87eTw5KReKYJ+dY0vxN4i5UCs4BKgVH7KESWtfIORccAzgFh+0nqvD8Nts5ZyumZ6IwWwfGGJQuzltP+8Dfyrj58rUmuW3DkoJ2JJAxhu0lVR6ZY+nJfRP/0ds4hQJABygAJI5MfHG3y8cvO5dN8F6D+pCcc/Hkh0exdMpQxEdosP9CPaqaOqCLDsX1A+NQ19qJl748hd/NGun293XH73mqPX21X3fw5bb5CmEUzt4cy94G7Z7cN/EPfV4LmJBgQiW0rpFzLhrauvDOvnKMX7sTj24qRm1rJ2K1Iaht7cSjm4oxfu1OvPN9uaTz1tM+8Lcybr58rR24ILVt9V5qkW8yn2M5fWSKOC/PHQGaJ/dNggPNASREIkrBcI3cc5Eaa8r/2Wng8VHxZXxUfNnhts7OW0/7wN/KuPnytWYw8qhoktq2DhhTeZeP9YOBJ/snUP/OEM+iTyUhElEKhmvkngu1xHlgrs5bT/vA38q4+fK1plIqkBIttW2hFPwR4qPok0mIDEIKBmeCJQWDnHMRqw1x23nraR94qu/8bb/ukD9QatvivNQiQohcPhcAPv/887j++usRGRmJpKQk3H777Tbl5jo6OrB48WLEx8cjIiICs2fPRlVVlcU25eXlmDlzJsLDw5GUlITHH38cBoPBm4dCApCQgsHRgIt5CoZAJ+dcuPO89XRfnuo7f9uvO0humzHwPweE+CufCwC//vprLF68GN999x2++uor6PV6TJ06FW1t1yYcL1myBJ988gk2b96Mr7/+GleuXMGsWbPEnxuNRsycORNdXV3Ys2cP/vGPf+Ctt97C6tWr++KQSAAxL6FlPQKSkaDFhgV5KMzSBcVEbDnnwp3nraf78lTf+dt+3UFy24I0BQwh/sDn08DU1NQgKSkJX3/9NW6++WY0NTUhMTER7777LubMmQMAKC0tRVZWFvbu3Ytx48Zh27ZtuO2223DlyhXodDoAwBtvvIEnnngCNTU1CAkJcfm+lAaGOEMpGK6Rcy7ced56ui9P9Z2/7dcdzKuUVDR2IMWNVUoIIc4FfB7AM2fO4LrrrsPRo0cxYsQI7Ny5E5MnT0ZDQwNiYmLE7dLT0/Hoo49iyZIlWL16Nf7zn/+guLhY/Pn58+eRkZGBgwcPIjc31+X7UgBIpHJnfVZ/J+dcuPO8ebMWcCDu1x2MPK32JcSbehun+HQaGJ7n8eijj+IHP/gBRowYAQCorKxESEiIRfAHADqdDpWVleI2wsif+c+Fn9nT2dmJzs5O8d/Nzc3uOgwS4Hz1htwX5Ba274v39VQb/Hm/7kDBHyH+xac/sYsXL8axY8ewadMmj7/X888/j+joaPG/1NRUj78nIYQQQkhf8NkA8OGHH8ann36KXbt2YcCAAeLrycnJ6OrqQmNjo8X2VVVVSE5OFrexXhUs/FvYxtrKlSvR1NQk/nfx4kU3Hg0hhBBCiO/wuQCQMYaHH34YH374IXbu3IlBgwZZ/DwvLw9qtRo7duwQXzt58iTKy8tRUFAAACgoKMDRo0dRXV0tbvPVV18hKioK2dnZdt9Xo9EgKirK4j9CCCGEkEDkc3MAFy9ejHfffRcff/wxIiMjxTl70dHRCAsLQ3R0NO6//34sXboUcXFxiIqKwiOPPIKCggKMGzcOADB16lRkZ2djwYIFWLduHSorK/HUU09h8eLF0Gg0fXl4hBBCCCF9zudWAXOc/UnOf//73/F///d/AEyJoB977DG899576OzsxLRp0/D6669bPN4tKyvDokWLsHv3bmi1Wtx3331Yu3YtVCppMS+tAiaEEEKIrwr4NDB9hQJAQgghhPiq3sYpPjcHkBBCCCGEeBYFgIQQQgghQYYCQEIIIYSQIEMBICGEEEJIkKEAkBBCCCEkyFAASAghhBASZCgAJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgQwEgIYQQQkiQoQCQEOIzjDyT9Tpxjs6bCZ0HQmyp+roBhJDgZjDyUCkVKCqrx5XGDvSLCUVeepzL14l9dN5M6DwQ4hwFgISQPsMYw66T1ViztRTna9sAAIVZSdiwINbmdQAYlKDFqhmZKMzSgeO4vmq2z7J3PoHgO290HghxjWOM0di4Hc3NzYiOjkZTUxOioqL6ujmEBByDkceuk9V4cGMRhCd0GpUCe1ZMQlFZAxa+fe11cwoO2LAgDxMzk6BS0EiOwN75NBcs543OAwkWvY1T6OonhPQJlVKBNVtLLW7SM0amID5Cg+e3ldq9eQMAz4Dnt5bSzduKvfNpLljOG50HQqShTwAhpE8UldVbPJ4DgKnDdfj+vO3r1s7VtqGorMGTzfM79s6ntWA4b3QeCJGGAkBCiNcZeYYrjR02r0eFqlHVbPu6PRWN7bS6s5uj82lPIJ83Og+ESEcBICHE65QKDv1iQm1eb+7QQxdl+7o9KTFhUCpoIj/g+HzaE8jnjc4DIdJRAEgI6RN56XEYlKC1eO3L41W4YZDt69YyErTIS4/1ZPMkkzOK5MkRJ3vn05ovnTdPkXMeeBoBJEGMAkAioiS8gccdfeep/jcYeayakQnzQZitRytQ19qJldMtXzen4ICVMzJh4Hm7P/fG9Wowmt67qKweW49WoKis3uL1nm7b2zZZn09zrs5boJB6Hjr1Rmw75rn+IMTXURoYB4IlDQwl4Q087ug7b/U/YwzbS6os8rVNzkrCmwvysbO0yiaPW0aCFivt5HHz5vVqr82A/Rxzcrb1ZNscnbdA5eo8TMrU4YGNB7CjpBoA5Qck/qm3cQoFgA4EQwBo74+kKQmv/Zsv/ZH0fe4IOLwZtDDG0GngEapWYv+FelQ1dUAXHYrrB5p/CWlARWM7UmLCkJceCwPPW6Tw8GZ75eSYA0Of5KMTzo+r8xboHJ2HutZOLN9yRAz+BJQfkPgbCgA9JNADQErCG3jckQDXm0l0hfd65L1DuHV4CqaN0CEqVI3mDj2+OFaFnSer8M7Px2J4v2gwBrsT9vsi6e/EF3c7TTOSkaDFzmUTZG/rCUae0UIHXDsPv/usBP/cewGdBvuPez3dH4S4U2/jFCoFF6R6m4R3SnaydxpKJJOaANdZ37ljH3Lb26Hn8VHxZXxUfNlmm1+9V2y6ITuIYbzZXkB6jrmGti6cq22VnI/OUwszKPi7pqGtC7WtnQhRKTBjZAqmDr/2hePL41XYerTC4/1BiC+hIZwgRUl4A487EuB6M4muv7VXTo45vZGnfHR9zHrxzdmaVrx8Vw4OPj0FL9+Vg3itBvVtXYjXavDyXTnYs2ISJmclUX+QoEEjgEHIbUl4U2NohMFHyE6Aa6fv3LEPqfytvYC8HHNqpYLy0fUhxhh2nax2OC90UqYOb35zFtvNFoGsnJ6JNxfk43xtG/UHCQo0AhiEKAlv4HFHAlxvJtH1t/YKpOaYi9WGUF6+PmIw8theUoUHNxbZjA6fr23DgxuLsKOkCi/MHgWNSiG+vvBt0+sDE8L7otmEeB0FgEEqUJLwkmvcEXB4M2jxt/YC8nLtUV6+viFlXujabaWIj9Bg+ogUm9dpcRsJFnSlBylPJeElfccdAYc3gxZ/ay9gCi4Ks3TYsCDPJvDMSNBiw4I8FGbpoFIoZG1L3EfqvND9F+oxbYTO5nWa30yCBaWBcSDQ08AA7kvCS3yHOxIBezOZsL+1VyAn1x7l5fMeI8+w9WgFHnnvkMttX70nF7HaEMz76z6b16ePTKEpLsTnUR5ADwmGABBwcnOSmISX+B53BByO9mHkeSgVCof55XqSd86T7fXG9SrnmCkvn+cVldVj9vq9LrfbvLAAta2dWPT2QYvXtywaT1NciF+gANBDgiUANOfOm3pv3o+4jztKoQn95I2yge64Bt2xrTeveU9+DgL5M+bs2KQm4H50U7FF/klKBE38CSWCJm7j6I+pO28gVGPY89x9jpUKTlJajfW7LdNq9KQMm/m11tPjcHW9erv+tbP9XqhrQ0lFi1s/B331GfNGsCnl2IR5oc6qw6yYnom61k5sO1Zh8bowX5SecpBgQCOADgTjCKCnebNma7DyxDmWUm7tjfl5yEuPxfi1O8UyW70pw+apa8Xb9a+dHcfK6ZmYnKXDgxsPYHtJtVs+B97+jHkz2JRzbK7mhU7K1OGBjQfEesA0v5n4I3oE7CEUALpXX9RsDTaePMfefKTmqePwdv3rngTOvekjb3/GvBls9uTYaH4zCXS9jVPoaideIbVmK/0B7jlPnWNvp9Xw1HH0tv61O97Per/W+eh68znw5mdMSrLl7SVVbk2/I/fYhP+flx6L6SNTxIUdwsikzev0t4cEGbriiVd4s2ZrsPLEOZZTbq2qqQNRoWqb1+XWVvXUteLt+tc9DZx7+jnw5mfM21/oents3pjfTIi/oQCQeJzsmq1UiF02T51jOeXWdNGhaO7Q27wupwybp47DbfWve/l+9tgLnOV+Drz9GfNmsEl/PwjxDAoAicf1Rc3WYOPJcyy13Nr1A+PwxbEqm9fl5FTz1HF4u/51bwNnuX3kzc+YtwMy+vtBiGdQAEi8wts1W4ORp86xlHJrrtJqyOGp4/B2/eueBs49/Rx46zPWFwEZ/f0gxP0oACRe4e2arcHIU+dYSk3byVk6LN9yREwB05tat546Dm/Xv+5J4Nybz4E3P2PeDsjo7wch7kdpYBygNDDu1xc1W825I1Gtr1dW8OQ59mZaDU8dh7frXzs7jhXdeQCFfHTu6CNvfcb6Iq1TX//9IMTXUB5AD6EA0DO8XbPVHYlq/a16iTfOsTdKqHnqOFwHsvWoaOxAirsqgTg5jgu1V1Fa0ezWPvLWZ6wvArK+rPlMiK+hANBDKAD0PE+PprkjUa2/Vy/x9RFLqTxdm5cxhp2lVfjuXAPGpMcgKlSN5g49DpY1YlxGLCZluqefA60WcF8GZIFybRPSUxQAeggFgP7NHY+oqHpJcJDcz8OSfHLE11dQQEaId1ElEELscEeiWqpeEhwk9zMFf05R8EeIf6G/aCQguSNRbSBXL/G3ZLmebO+BC1L7ud5jbSB9w98+B4S4EwWAJOC4I1FtIFYfMBhNKTKKyuqx9WiFGNAIr/sab7TXYORR0SS1nztgpDQjfs/fPgeEeIqqrxtAiLu5I1Gtp5Ld9tU8KcYYdp2s9pvFLN5qr0qpQEq01H4OhVLi4/5Anw/nr8fnb58DQjyJRgBJQHJHolp3JbuVMuLgyRFEg5HH9pIqPLixyOZR5/naNjy4sQjbS6p8Jomut9ubP1BqP8c53SbQR5b8/fj87XNAiKfRCCAJSELlAGcrO4XKAc5WAfd2H1JGHM7WtKKkosVj+QWlLnKYkp3stvfsDW+3V3I/O+mXQB9ZCoTj87fPASGeRiOAJCBJKV/mqkxZb/chdcQhKTIUyzYfxuz1ezHxxd3YdbIa7szO5E+LWRhjXm+v5H52EPwF8siSkWfSj8/HRwL96XNAiDfQCCAJWBzHYWJmEqZkJ9tNVCtlxKI3+5A64rBz2QT8aHQ/bC66JN5Q3ZVfUPZiltQYr8/tMq/AkRob3ift5TgOE4cJ/WxbCcQd/ewvI0vm/aHgOOSmxUo+vvO1rRiUEOFzVXL84XNAiLdRAEgCmhBA5aXHWvxRlxNY9XQfckYc5o9Lx+aiSwDcGzB4ajGLu1g/Wlw/fwx0UX3TXiFgyUuPgzGVFxd8uApk5PSzq/mifc1ef3x/Xtrx7b9Qj9rWTvzsrQM+91jY1z8HhPQF3/mKRoiHueOPupzVvnJGHKxvTu58FOWuxSzuZu/R4pfHq3DDoL5vr5zVvoGSLshef0SFqlHVLO34qpo6EBWq9tnH3r76OSCkr1AASIgHKDjISi9ib6TEXQGDsMjBUexqvpjFm+w9Ot16tAJ1rZ1YOd332uuoLXL62ZcHluz1R3OHXvKIrC46FM0degC+WSXHVz8HhPQV3/l0EhJAOI6TlV7kckO7zc/c9SjKHQtiPMHeo9NOA4/lW45gcpYOb8z3rfbaI7effeWRqD32+kPOiOz1A+PwxbEq8TVfW1Dhq58DQvqKz13p33zzDX74wx+iX79+4DgOH330kcXPGWNYvXo1UlJSEBYWhsLCQpw+fdpim/r6esybNw9RUVGIiYnB/fffj9bWVi8eBSGmEQdXI1krpptGHDbuLbP4mbsfRQmLWXYtm4Ati8bj1XtysWXReOxcNgETM5O8Hpg4e3S6o6QaD248gLz02O72FvR5e52R08++ylF/SB2RXTE9E3Wtndh2rMLiZ7722NvXPgeE9CWfCwDb2towevRovPbaa3Z/vm7dOrzyyit44403sG/fPmi1WkybNg0dHdf+eM2bNw/Hjx/HV199hU8//RTffPMNHnjgAW8dAiEAAA5AYbbjkaw35uehMFuHq51GfHLkivgzTz2KMl/MMn1kihhg9sWIh6tJ+dtLqjF+7U48uqkYGQkRfd5eZ6T2sy+HFo76Q8qI7Bvz8zA5S4flW46g02B5zfriggpf+hwQ0pc45s6EY27GcRw+/PBD3H777QBMo3/9+vXDY489hmXLlgEAmpqaoNPp8NZbb+Huu+9GSUkJsrOzsX//fuTn5wMAPv/8c8yYMQOXLl1Cv379JL13c3MzoqOj0dTUhKioKI8cHwl8jDF0GniEqpXYf6EeVU0d0EWH4vqBcejQG6FWKvDAxgPYUVINwHRDXeljKyg9aeKLu52uMM1I0GLnsgnea1APuepnjUrhF/3pqD8Ks5LwwuxRiI/QiOmQhOOra+3E8i1HxGtY4C99R4i/6m2c4ldpYM6fP4/KykoUFhaKr0VHR2Ps2LHYu3cv7r77buzduxcxMTFi8AcAhYWFUCgU2LdvH+644w67++7s7ERnZ6f47+bmZs8dCAkaHMdBpTTd+IckRiA9Lhzq7rQiKgUHpYLDQxOG4I6c/rJzFPaGL9RyFSblP/LeIUwfkYKpw3WIClWjuUOPL49XYduxCpeVVnyF035Wcn4R/DmriLK9pBo/eGEnNi8sQG5aDEYPiEZdWxeWvF+MrUcrbEb+XFXJccf15wvXMCH+zK8CwMrKSgCATqezeF2n04k/q6ysRFJSksXPVSoV4uLixG3sef755/Gb3/zGzS0m5NqjpVhtiMVN61reOfv5Bd19gzNP8HulsUNy6TlP3WiFSfnFq6ciVK3E9+frUdXcAV1UKF6+KwfPzxrpNyNngJN+9vHgVWC+SMK65JswMj2iXzQ4joNCySEpUoMZI5NRfLHR7rbWo9g9vf7MuWMfhBATvwoAPWnlypVYunSp+O/m5makpqb2YYtIIHIUSAmve+oGJ7eWqzdvtP89XeO0XXLJCVjdsa291709MuWuIF1O5Rs527qjlnAg1CMmxJf4VQCYnGyqjFBVVYWUlBTx9aqqKuTk5IjbVFdbzkUxGAyor68Xf98ejUYDjUbj/kYTIpGnbnAGI49dJ6vtPtqzV3rOWzdaue1ytS+pAas7t+3LkShPtUFK5Rsh4JSyrTv62Z3XCiHExK8CwEGDBiE5ORk7duwQA77m5mbs27cPixYtAgAUFBSgsbERRUVFyMvLAwDs3LkTPM9j7NixfdV0Qpzy5A1OTq1aI89jZ6l3brTuqqErJ2B157aTMnVYv/sstncvfvDmSJS3gnTzUUVXAaejEUh39HOg1VsmxBf43Fel1tZWFBcXo7i4GIBp4UdxcTHKy8vBcRweffRRPPfcc/jPf/6Do0eP4t5770W/fv3ElcJZWVm49dZb8Ytf/ALff/89vv32Wzz88MO4++67Ja8AJsQd5OQ/k3qD60nQJadWrVLhuXb0pl2OCOXLHnnvEHJSY7B+/hi88/OxWD9/DHJSY/DIe4fEkmT2Sp0JrMuXSdl2R0kVXpg9ChqVwu4+PEXOcbiLEHBOfHE3Zq/fi0feO4TZ6/di4ou7setkNZwlk3BHP7tjH4QQSz4XAB44cAC5ubnIzc0FACxduhS5ublYvXo1AGD58uV45JFH8MADD+D6669Ha2srPv/8c4SGXsth9c477yAzMxOTJ0/GjBkzcOONN+LNN9/sk+MhwcVgNN10i8rqsfVoBYrK6i1ed8RTNzi5tWobr3Z55Ubrrhq6KqUCu0/W4NsnJuHlu3IQr9Wgvq0L8VoNXr4rB98+MQm7S2ugUihkBdlStl27rRTxERpMH5Fidx+e4skvC/b0JuB0Rz8HUr1lQnyJzz0CnjBhgtNvkxzH4dlnn8Wzzz7rcJu4uDi8++67nmgeIQ719LGc7Buc2VwrV8wT/GpUCswYaZluZVdpNRgDJmUloSAjHpGhavzu9hFY+3kpWjoMbmuHs3a54iyZ8JnqFjz74xHYUVKF57fZnveV0zPx7O0jcKa6FfHaEEnBbUNbF87Vtkradv+FekwbocNHxZctXi8qa3BrJRdzcr4sjEmL6fWj4N48fnVHP0vZh3Bt/2BIgqT38iWUzob0FZ8bAST+LVi/ffdmlMRdwZAjeelxmDc2DXtWWI6SJWg1WDdnNJ6fNRKDEyLw39O1OFTegHnj0nHw6SlYOuU6t7TD0TWRly61hq79QMrIM/SPCceOkiosfNv+eV/4tulRbf+YMOhdjMIK9EZeckBe1dSBqFC1zevCaCrgevRXDrlfFmpaOiWPQjvS29FpOf3M27lWeJ453UdhVpJ4bZ+rbZU18t5XevqkgBB38rkRQOJ/fGFFZF/r7ST1nNRY/PNnN+DDQ5ftJtYFel4f2Gjk8dvbR2D7CcejZJOzdFj3RSm2l1SLI5aPTLoOHMfhD1+ekt0OKdeEUEN34du2C04Ayxq69h5nKhUcwkKUeH6b60e1U4cn2w0u7FErFTIC8lCkx2uxfv4Y7CypBscBEzNNo6kdeiPWbC3B2EGxmJTpvkUZUtumiw5FUXkDFr19sMeLQ9wxOi014Xen3ojtJVUYlhyJgfFa8fqpbOpAYZbObpLqwqwkbFiQ73AEuK/Swzgb1aN0NsRXBMfdmXhMbyaHB5KejJJYjwKEhyjx8l052LNiEiZnWSYzl1If2NFIGwMkjZIJCxrMRywX3jIYkaHXvieK7XAyUiH1mrhQ1yapxuyF2qsO30vOedeGqiSNRMVqQ2SMWsWhvO4qBidG4PlZI7FuzmgkRGjw39O1uNjQjlUzspCTGovii41uW5QhtW3XD4zDF8eqAABXGtux7Vglqls6ZY0yKTj0enSa4zgUZulw+JmpePmuHCRGmEagEyNM8zSLV0/FpEwdHnr3ID48dBmDEiKw+2Q11mwtQXVLJ2LCQ3DsShMmZ5qSVAvHrlEp8MLsUU6vbXcuiHH1dMPVqJ6RZ32ygMdfBOvTo75EI4Ckxyg3l0lPRkkUHByOAqycnok3F+TjwY0HsL2k2ml9YGFEraGtC3ojD7VSgVhtiMVIm9QFDTuXTcD0ESn4qPiyxYjl8mmZePrjY2I7JmfpcOBCPZQKzu6onqRrYlgSTla2YO22UrwwexR2LZtgU0O3rrUTD2w8gDty+mNQgtYmuJB73g0DoiWPOIJB0rZ1rZ34y3/P4dWfjHE6D3Fyls5t87yclWyzbtu2YxUWdXz3n6/H9+frkRIdivyBznMfNrR1QcGZAs4Hbs7Ae9+XozBLZzOCt/VoBfp3J4C23kdRWT2MPEP+wDh8c8pxwu/JmTqEKBV47vYROHKpEblpsSjMTkZ9W5e4L4WCw4Rh1xJPKzggPkLjcgS4N+lhpD7dcDWqNzlLhwt1bRicGEHpbMzQ06O+xbFgGaKRqbdFloOFo+LxgmApCF9UVo/Z6/e63O7fi8Zj1IBoh0ESYLqBb1iQhxuHJKKkohljuisrWAfRjDF0GnibMmo3DIpDh94ollE7cKEec95w3bbNCwtQ29qJRW8fFF/bsqgA2SnROFHRjLz0WDRc7cKyzYexozv33byxaXj6tmyEqpU4X9uKQQkRkq+J87WtmPji19CoFJg+IgXTRlwLLL44Zno02GngsWXReLuPnBljOFjeIOm8b1k0HsN0EQgLUdkN1DIStFjRHaidr22FLioU4RK2feidIqy5YySKyhqcBotvzM/DLUMToVErXbZVCsYYtpdU2S3ZJrTtgY0HwAGyHpHau6aEYFH4gmF9rdW1dqK8/ipGDogWE4kLbbvS2I79TxZi3/k6l9f7DwYnIFyjgpFn6DLyCHNwXYd0B4Ny+1/u9AnGGHaWVmHf+QbkpsWI1+ah8kaLx/rOvvQIx/fG/DzcNDQRxy434c439tpdkCUE086u+UDi6BqmR+HS9TZOoRFA0mNyHr8F+h8z4bGcq8BnTPd5kDIKsHNZsri9dfBnNPLgFBy+OVXjcNSpMFsH3sijokn6goZYbYjFaxWNHRg9IAYDYsOw5P1ii/mJhVlJFitwl986DDUt0tPI5KXHiufso+LLFitpBdbzDc1HDBQcJ/m856XH4mBZA17ffUbSiGNUqBpL3i+22VYodSZsGxWqljQKZT4PUeGxkm2m0ROhbf87XYs9KyaJj0hdjchygN1rqjArCRvSYrsfyzq/WVsHQ3PzByAqTC3xep8Ag5GHQsHhvy6ua73BCIVC4bHV8wYjj2OXm5CTGovJWckWgeiqGVmoa+1E8cVGjBoQLXmEferwZCg5zmJE1rr+9VMzs7B8y5Fer7L3dfT0yDdQAEh6xJOpS/yRlMdyK2dkgmcMh8obeh04MwA7Tji+sS98uwhvzM/DpKwkWYsGals7LV5LiQmFSqnA3W9+Z9Fm6/lXPAOiQtWoapb3SFbKORNGPxlj+PpUtTgiEx2mRrve6PJR7bW5kwzbS6oxfu1OccQxVhuC2tZOPLqpWBxxfGjCYKiUCpttx2bEQalQWGy7fv4YfH9e6heheuSlx0k6P1JYl2FrbtdbtO2O3P6yHpEaeR7bra4pe/1szvxmPSkzySYYmjc2XfIXxYNlDRg1INqmDebvZX5du2N+oiMqpQIjB8RIeqwv/YtwPYbqIp2OyArTP87XtgX030uq7OIbKLQmPeLp1CX+RqVUoDDLcpK6ICNBiw0LTAsamtv1bkuALGXUSaVQ9GjRgPBaXnocOrqMNje4GSNTbIKL5g49dFHSrwkp56wwSweVQgGDkcfhi43ISY3FqhlZiNdqUNfahYt1VzElW9o+xnSfh04Dj4+KL2PR2wcx76/7sOjtg/io+DI6Dbx4zDFhavzzZzdgxsgUbDtWgUVvH8SpqlZ8e6ZW3BaQG/R2eGyiu1LBIVYbgsOXGsW23ToiGQcuyKsCY31N2etna8LNWqlQ2ARD/WJCJV/vHCfvuubMRoCd6cnq+U69UdLCKb2RR6WMEfYwtVLSfgcmhMtqb295ewEGVXbxDTQCSHpMzuO3QGMvzYP9x3Jh4ty5X/zzAObkDUCyjCDJXuDMGENRmdRRxHrkpsXKWjQgvCas9m3u0Nv8ztThOpuRry+PV+Hlu3JkXRPOzpmB58U5QM5GZOaNTcNTt2Vj1zLn+5A6SiukI7F+LGcvwJUb9Hryi5D18Q2MD8epqlZJv1vR2I625EibfrPXz/acq21D49Uum2CP4zikREs7PwPjtbJG08akxcLIM1mjyFLwPINGLT29UHY/aXOvMlOiJAe4U4d7fuSrrxZg0NMj30EjgKTHhBuOo8+mlNQl/kRK8lbzx3K3jkgW586NW7MDO0qqsau0GtcP6t2oBc8geV5fRWMHGIPTkTYh3cryLUfEUTBhxJLBlBfPmr2Rr61HK1DX2omV0+VdE+bnbPrIFPG4zW/YzkZk3tlXjtxnv8TRS43ISY1xuA8pI45COpLF7x7CnDdMqWuKyhrw5oJ8XG5oxw1Wfffl8Sqb1+zxxhch6+OLDlNLDr5SYkKhsDPhXs4IZ3uX0eapwOXGduQPlHZ+osLUMgKDDvBMWp8KI8BSKRScjJHTegxKiJB0fBmJEdgvY0TWk/oyfRc9PfIdNAJIesz8j6+91YiOUpf4o54kb7U3d44x9yRA7skf0InDHI+0na1pxR05/bHwlsG4fmAc2vVGMAYxrYz1qJ69ka9OA4/lW47gzQX5eGN+nt3Vs0/OzBRXT9obRbX3x17KiEyHnsevNhVj57IJThM+OxtxFBZPCCucgWuP5TYsyMO8sek2o2xbj1bgqZlZ0uYheiG1hfnxtXUakD8wTOKIbBzaOm1L/8kZ4eww8DZPBd7eW4bhs6IkXe9cD+f0SR1FlsooY+FURWMHDAOkpeXp0BslPy725MiXLyzACOanR76ERgBJrwh/fHctm4Ati8bj1XtysWXReOxcNgETM5MCIvgzGHkcv9IEI8/w3O0jsH7+GNyR298mabL1SKe9x1mTspJwrkZqAmTHfxzlzH06X2v5GNB8dPLxDw5jxQdHcbam1WJBRO6zX2JHSRU69UbwjNmM9Doa+dpRUo0HNx5AXnosdi2bgM0LCyyuiVuGmq4JOSWw5I7IuFpla2/E8XeflWD82p0WwZ9AmOMWFqKESqnApMxrfScEva76c1Kmzmt5zYTj02pU6OxeJONsRHbFdNNjb63GlChbo1Lgjtz+WD9/DDIStLhhkCkPYGSoSnz9nZ+PtfgcZCRoMShBa/NU4D+Hr+BqlxGF2c7PT2G2zmXJN/PfsQ4MpIwiS6WUVQnG9VxW4fN8/EqTT0wXkLoAw5Orb4Pt6ZGvojyADlAewJ4JxMLmwsiNvfxny7ccwY7uZM3m+Q6NPMPWoxV45L1DFvt65+djUd/WhY+LL19LzmsnHcnyLUdwR05/TB+ZDKXCNlGvkWf45nSNy9xjeemxGL92J/rFhIkjlYyZgiqp+fp4noHjYJGzS6NSYM+KSQ7z3wl5zlZMz0R8RIhNfjg5eb8cnUt7Xr0nF9NHpsi6BqXmcDz09BScq23F+t1nbfpuWHIkBiVqoVIocOCCqXyZeVqW5VuO4KEJQ/pkRMPIM5f5DJUKDkaex9FLTUiNC7dIUdKbPIDna9swOSsJby7IF3P7WV/v5jkrpeTU81Z6ELk5ToURe3vzf5dtPoyoUDVeviunz3OnSr3ePZ2L0Fkuy0B6euRJlAeQ+JRAC/6cPfq1rthhnrbF0WNa4ZGa1HQk1sEfYPoGf762BZMyHT9+N08G3GngLR7tCJU85KYusX7M1nBVL67AtW5D/5gwzBiZjKRIjcsbu6vHTp6cMyRnQrreyONKY4fdvjtT04oNX58Dx5lGeW8YFAeFgrNMy5LT3+sT2oV8dsKIrL0vG0cuNYrB2+jUGKdB+qRMHd785iy2d4+U2gve7T2SPV/bJq5sHZIYgfS4cHFuqUrJWSz28YVpJVIXDFlU3LFKyyME1bHhIXhowhBUNbWjU2+UvV938qUFGO5+dE/koxFAB2gEkEjN8C+Msv3hztE2o0/W3/bvyO3vtlGAJz88isemDkWcViOWglMpFYjThliMTlrv96ult8gcUbMdhTQf6XU08mE9h7G3x+ypkRO5I4BStrVfVcU71R3slWHbVVqF7841YEy6WUWLskaMzZBf0UK43oV0M65G5ewFM66eFEi9pjzJ3SNUwjG72q+zUovu4CsjgNYC8emRp9EIICEeIreGrvXok71RBPNFA7/cdAjTR9iWg9p2rMLlKIDByOPOvAHiv8/WtKKiyfS4Lk4bB0f3pXO1bWhu14sjaq5KUpmOyf5CFPE82Rn5MH8d6H3VGMkjMj0IEKROSI/VhiBPK23b6wfG4dFNxRaveeNmam/EujArCb+/czQmZ1lWDVk1MwsGo2mkRSjjJ7dmtPC6ddJeVylGXN3oLa+paPEaNO9bTwcMHMeZLZyqR0Xjtcf6wnmTQ8qiFSFd1A4nI6y95asLMCj48z4aAXSARgCJ1G/KmxcWoL3LiJuHJlq8buQZFBxw/EoTlv7rCE5VtQCAOCdKb3Rdx9cZZ3PqhEoFwuNpcx8+NB65abF48sOjWDplqE1JKmFe10tfnsLvZo2UerocctccPk/MGTJ2z288caUJc97Yiw697aRz8xEuMMgeJfPGvDVXx2E+JzM6TI0TV5qRkxqDXSer8NxnpjJ+8VoN5m7o2egmcG3EyB01Xl0FkN7OXQcARp63+2WotwxGHnVtXVi7rdSi1KLA3dePL82zJL1DI4CEeICcuTJVTR0YlxFvWrHWnZvM+ga19Zc3okNvxNUuI8JDlFBwwH9P1zi9STrjak6dUDLrhdmjLB7XAddS0fz29hHYfsJxSarf3jECnXojVErO6SNgV+SV7ApFc7sesdoQi5u68H7umDPkKIgoXj0Vz35yAu9+Xy5uay+4dDZHzXrupSfnrTk6jm+fmGTz+L/TwOPDQ5dx+GIjdi6bgOt0EdjewzJ+9mpGm15vh8EY3esUI65SLk3K1GH9bufzED3BE8EfYD9dlDl3l0XzlXmWpO9RAEiIHfIWHoQiPsJ0Q9xe6njkY3KWDiWVzRjV3zTRvjc3SbmPp4XHdRkJWoxJj4XByDut7yrkvrtlaJKYIFjO6Iv5tgqzkl1S8tE9uqkYhy81ijf1szWtKKloEd/PyPMYpotAamzYtSTVEp9juAoufnfHCPzsxkEorWh2GFw6e4Rn5Hm0dxnx/B0joZ5jyqHozgnt5vPIvj5Vjec+c704yZz5Y/aelvEzrxltPoXg5usSe13jVfhi88h7pukRy28dZjE14ZH3DuGVu3Mtvth4K3edp/R2ekRP0AIMAlAeQEIckp6TLE587PXgRvs1Ph/cWITtJ6qQmRwFjVrZ6zxcUm8a+y/UY9oI02iikPOty8BLvlGHqBRo7tCDl1E5wLrKwN1vfiepQoh5OTrz/IpJkaFYtvmw+H47SqoRFqLCqg+PIve3X0muXmAw8q77qLsOq6tccvbyzhmMpkeEJ6uase98Pc4J+Rd7OcnGXgUajuOQkxqLjETL69O8nuwLs0dBo7Jte0VjO9o6DDZl/KRWNBFqRhdmJWHPikl4+a4cJGg1aG7Xy6o9bI9KqcDukzX49gnTfuO1GtS3dSFeq8HLd+Xg2ycm4euTNYiP0GD6iBTx97yRu84TZK/KdWPNXnfmTiT+iXqaEAfkJCtVKKSNyEWGqntdDkru4+moULVFQtpOg1HWqEOYWoXtJ1wHTgaetxtkSU2WbF6ODrh2U48KU+NHo/uJ72cd4Fi0oTtHoj1yEuDae7ztKFm1MCLn7tJaRiPvdL9CibrCrCSL31MrTatn4yM0+M/DP7BI2Ax0l33rPj4h6fOtI5LRoTdi0wPjMDd/AObmD7BJ+ByqVohBeqfBiA0L8lFU1oCJL+7GnRv24lxtm4wKGvaDmTPVLXj2xyPE/c7dYDrmuRuuHfOzt4/A6aoW8YuNwBsl1NzNV8qi0QKM4EQBICEOyKkzKjWgarzaJascVOPVLgCWwYfcx9NZKVHYuWwC8tJjsfqjYwgPUckadVAqOJcF7IXAyVGQZV0hRKgas3lhgdg26zJsGpUpL11DWxeeui1bDETUSgXWbiu1GAUS26BU4PDFRrsVRuQEvQLh9w9cqMe2Y5U4cMF2v1JHFh1VNTAPhMxH+7qMzkeV7Y30CaNyK2dk4cCFepyqahVHz/asmIR5N6QhLz0OPGMWI3ix4SH46kQVWjr0WHPHSKybMxoJVqNvxaunYnKWDqs+PIrnbh9hU5tZzmNke8GMkWfoHxPusOaz+TEPiA1HdJjaZr/uGCVz5yibFD2tfkJIb9EcQEKckDJXRs6IXHuXESnR0m6SydGh2HuuDus+P2kzyV3OnLrDFxvx7Ccn8PnxCrxydy4MPC/jRh2Kpna9pMCpvq0L52paHW5rnkB53ZxRSI0NQ1F5g0WyZEFhVpJYbePAhXpUNJlWKL98Vw6empmF5VuO4ED3421hfqPwyFtYoWq+OIBnkJ0AV8FBUv3nnsx7s55PmZUSicGJEeL75aTG4OW7cmTN82zt1GPDgny7VT/MF/boDaayb9bbFmYlYcZIx78vHPNvfjQc8REamy8FXx6vwst35chOMSKci47ucnSuvmys3VaKqcOToQ2xvX31dJSsL1cXezLFUW9Rbr7ARiOAhLjgaq6MnBG5doMR+QOlfePPHxiHnSXVdkeRpDyeFh7Xzd2wF0cuNeLP9+RicpYOG/eWSZ7vlZce57QmsTmDkXf5CLDTwOOj4sti+bBFbx/ER8WXbYI/88eLc96wfQz45oJ8MMYQYzUKJDzyBixH3zhZK5HDxNJ3rkb1eMZkjyxaP9ZdtvmwOAInvN/U4Tp8f176PM/pI5PxwuxRkkbPOAUHvZHHztJr22pUCpe//+DGInx1ogrxWo3dY956tELSXE/zGq/m5+JMdWuPRmkFPR0l88TjeznkPGnwBntzTs1fJ4GDAkBiwduPP3rLUXvtve7JY5P6GCcjIQIGIy9pQYSB5yHce6wnuUu6aWSbVtC+/fOx2LlsAiYMS4JSwWFMWqxYksrVjbpTb4RR4g1QpVRIHt3sMPB2A2EpgYgQyIwaEGMzCqSLDkVzh178t3DezFciOyMEEQqOkzSqx2SOLNp7XDxjZIrNiJrctCwD47V2R+XstVmlUEBtNWpprw32fn/ttlKoVQpwsL1wpMz1NA9mrM9Fu94o61xe7TKI/7YOLKXq7eN7dxGeNJhPj9iyaDx2LpuAiZlJXluV29fBMPEuCgCJ333jc9Vee6+fqW7p8bFJOT9SR+Q6DUacq2mTtCDiXE0bJmdfm+BvPfLh7KZRkJGAQ+UN0BsZals7seazEvz3VDV4xpCTGgOVgpPUBiNjuF7iiGWcNkTy6OagBK3dQFhOIKJRKxEdfm0E0HyFqrlztW3oMvDo1BslBd6deiO6utOLOGNdVcWVlJhQu4+L7Y32yU3LEh2mkjxi2NDWZbNaV86IY1FZPQY66GPbuZ4FDoMZ63MRplZKPpfJ0aFobDcF+ubXq9wwSc7CIE/r61W5vhIME++hOYBBzlVeNF9LCOqo1NWGBbEOj0OoirF2Wym2l1TLOjap50dqctWL9VdxsqoF674oxQuzR2HXsgnYf6EeVU0d0EWH4vqBpiocD2w8gDty+tsk3LUu0G5dhq2kohktHXpEhqrBM6ChrQu6aFPZr7rWTjz94bHu6h6cWAnEURuEbVs69Fg5PdNuzkDA8nEzx8HltsJIDQegMNvynMkLRBowMD7cpg3bjlXYbM8zhiOXGsWg13qOm3kS56KyeowaEOP0/QUX6tpkzcc8W207R9LeaJ+c+XTXD4zDqcoWySOGejuP6uWMOFY0diAnNdZh24S5nvcVDMSqmVkwpjJp5QE56XNb8wfG4VBZAzYvLLC5XuXoixx8UvTFvLve5nAk/odGAIOYv33js9de80eGUldLSj02OefHYORx+GIjxqSZRj42LyywWOU6Ji0WxeWN0EWHQhcVKt4kH91UjNrWTsRqQ1Db2olHNxVj/Nqd2FFSbfM4E3A+yb34YgNu+/P/kP/cdof7fef7cjS0daGorB7v7Ct32oZ3vi/H/gv1OFXVIjmFy+MfSEv3wgFQKhXgANx0XaJ4zvLSYmUEIu3gGXOYRsacguOg4DiL0SnrPhJWIisVnJj82hXGmOTR3w69EaWVzTY/tzfaJ2c+XafeiMhQleTH72o7j+rljjgaeOfTGPRGHtcPMi2Usne92ls41dZpQHuXtFFavYHHwAStzfUqJw1MX+bg80W9mX9J/BONAAYx4RufWnktm7951v2tRyucfuPz9goxe99Q5TwyNK+KIeXbrNxvxEv+dRhXGtsxfUQKpo3QWQRU245VoH9MGHYumyAuwDhf24aPii+Lq1jNCSM7j24qtnjN0SiE9c3MOn4x/7feyIvbCosy7LUBMM0v+8GQBBRfbMAPhiRg17IJNquhhRFLIYXLgxsP2IxupkSHIs9qpMa86sOtw03nbFCCVnIgkxIThvAQFXYum2DTBnMZCVqEqBTIHxiHsx8cEVciO+qjvPQ4AJA0EjWme1sp5eGKLzYgMdL22OyN9gnz6d5ckO98xDJTB4WCgy4qFCkxYZLaHKsNQb7WcqRN7ojj2eoWm9Fb821clROzt3CqqV2Pi/VXJY3Snq1pxdmaVpt6xNYj5M74Sg4+XyA7GJZ4jolvowAwiBWV1WNwohYfLCxAfIQp55eQ9mD6iBQ8++PhOFXVgsarXYgJNz2KdJUuwR1BoaN92PuGKne1pHXakKKyBoxJi7F7oxLez7zclXWALOwjo/vGGRmqwvUDY5GbGoMQlQJdBh71rV3YUVqFc7VtOFhWj5H9YyQ/UhUeZ7pKBSHczMzTp1j3p5A+Ra1UyJq31qE3gjFAq1HBYOTFx80cBxy93Ig739iLDv21UTdhdHPGyBSsmJ6J3NQY7DpZY5Hu5ec3Z2BQghZrtpaiQ38tCL0jt7+sVCI8Y3bbYH4uxcUBDGK6DXtBb6hagVfuyQHPGHieYdMD4/DC56X47EiFzaiiuN/u82s/XZDpsyEEp1GhavHYrjS2i9dUTJganQYjXrk7B3duuHYcwnw6IZguKqtHRaPlY/pfbDyAhyYMESuRSE0nYn4ueGYacXxqZpak69LA8xiYEAGFxHJijj7P1o97TUFoisupCas/Mn2BeH3XWZt9yg3UpD++jwXPMzGBdqChYDg40SPgIGXkGYw8w4YF+QjXmL4HnKluxb7zpjxqBiOPyO50Gv89XXtt4QPPsOrfR+2uEBNSYnhioYWjb6hyV0sKKUIEFY3tqGnpdPh+5slyrctS7VkxCZOzklDR2A69kcdjU4fi4NNTMG9cOi41tOPbM3W41NCOeePScfDpKVg65TpcaezA6epWWVUxpKaCyEuPs9ufZ6pNJcnCNSq8uSAfsdoQWWXuXvj8JOa8YbkSUHhMOqJfNP58T67NvvrHhGHGyGQkRWrw+u4z+MU/D1ikewlV2U+eLTeViLM2WJ83Zyun549NQ/HqqRjRPwYHyxqw7VglLjVcxUtzc/DdqsmYbFZtw2K/ZjniLCfxJ6NfdJjFI33h2F6aO9rimqpt7cKRi00YOSAGh1ZPxU9uSBP3ub2kGj/5yz4cvWyaXjBteDLq27os9is8npSTToQDLK5BySt4s7sf39uZg2q+cEEofydn4ZRwfm4ZmogfvGB/asIPXtiJW4Yl2p3r2ZM0MFKr/XTqjdh2zPcXyPUGJaQOPhyjdd12NTc3Izo6Gk1NTYiKiurr5niE3mCEUqnA9hOWyWBdJZOdnKWzKTSv4IA35uchLz0W49fuRL+YMFkLLbaXVDldaAEAB8sbMHv9XovfXT9/DOK1GszdYPm6PZsXFohJgu29Zr2w40x1CwYlRLg8F+drW9EvJgxhaqXL46hoasfhS03YUnRJHKkTRnaE0RMjz6O9i8fVLgPUSgVitSEWI3+ORlSMRh6cgrPoT+v2FmbrwHgGBlOSY2ejReb9KQRuCg7YsCAPEzOTxPaYjwqbjsM08qU38li/+wxe+uq0zf6LV0/Bf0/X4pH3Dtn8bHJWEt50cA06erwonB97I1HWQbN1ezO7kzA767vJWToUXaiHQsFJThBcVFZvc70unToUj0wc4vI6OVvTitKKFotzuWlfORaMH4hHNxVbjF5uWTTeMrGyxHMhjLTFR2jEkbZhyZEYlKiFSqHAgQv1qGzqQHJ0KPIHxqFDb4RGpXDL51nYh/W2rvpeeARs/bjf3nUplaP2CtfapEzL9/PVBXK9JUzJcPY3oafnmHhGb+MUCgAdCIYA0GDksbO0Wnzko1EpsGfFJBSVNTh9DGQvMABMfzB3Lpsg3qCk/MGQ+kfn5usSoVErMfHF3RZ/pIVHhtavW7Num6PXhPeblJkExmBxfhydi0lZSQBzHVBtWJCHicOS8NSHx7DpwEVoVIprKyW7gzpXj9idVSqw7k9n7VUpFLJvfNbn0h4jz6O+TY8vj1fi2JUm3Dw00eaxuTAX0l6AJHhs6lAsvGVwd11by8DSVfAlZxqCsTvXotS+k1sVwvy6lPr52rAgDxOGJqG104BOgxFfnajGui9K0dJhsPkS46wvhONT2vnsCedeo1KI8yGFftpxohocB0zKSkJBRjw69Eas3XYSnx+vwJ/vyXXL59niC4RVwJqZEoWBCeF2g9gOvRHPfnIC735fLu4zI0GLJ2earlehMo/cR5SOgua61k4s33LE5jMQqMEQYww7S6uw73wDctNixGuiuLwRNwyKFc8x8Q29jVNoDmAQUykVFosnerqgQmA9z86tCy2WJdtNRyJn7pL1nDp7aUOs2yy1LBUAyQtGRqdGY9OBi+A44Ec5KeC7v4P1JMWNdSoaOe0FhBW4yTZzrdr1RgCwm1fNWVoMxoDLDVdx64hkzBuXju/P16Oq2bKMW3n9VRh53uH8q8KsJDw0YQh2dd+IxqTHIFYbguqWTvzusxKMy3B+I5Jz8xeCI0+kvxDyHArXpdTPl/Bev/nghM08xaqmDjE1kKN5oVLm6TpbMGRkDFuPVGBz0SW8ek8uxmbEgeNMfevuhVOAbSoj8/6zfk2l5LBm1kjMzhtgObppNM057GkpN3tt+N1nJfjn3gs28z+FOcEaldJuQmx/xnEcbhmahMlZyWIJxpToUKyckSWeYxI4KAAMUowxHCxv6HEyWOsFFQLzG5SwreNgwbYNjt6vqKweGQkRNqstzVdLulqF+cDGA+KcOuvXrN+voa0L52od17W1Pr4MO4GMo+OYmJmE+WPT8NRt2QhVK3GwrB5ZKdH435kai5ET66oY1jdVIRWNMDp1+FKj5DbkpsViR0mVxQpc87lWQt3gF2aPshnpBRyvBFQpFRidGiPpEaC9RQt2j/m/lsfwt//1bPTF0ciQdVJkZ+dNWCEsxYW6NosVre74fOmiQ1Hb2unwUbiUvJX2FgzZC9SXbzmClJgwhKlVFq85y4nX27x69vrH/DV7gZq7c5kqFaZA8i//PWfzs8KsJKybMwpxWlON6q1HK7xaN9jT/C0vLOkdCgCDFM9sF1XIXVBhnaQYuHaDMlfR2A7DgGiolAqL0YnU2HAZqQc6MEwXCY6zP2qlVHCYOMzxisTztW24I6c/Hpow2GJlpr20IYBlqhTXbWtHamyY5OMY2T8Gv719hBgk5aTG4OW7cnqc4kYYUZE6GmFK5AubFbjWHI30Ao5XAjp7BGgRsGYmiYsW/nJvnvjIKSPBVNLsQFkD1EpFr0dfXI2GSalfLKho7IAx1faRqr3A0mDkUVLRgrXbriX8brzahf+erpX0XvY+X0IKlvO1bdi5bILFSlvhPaWc+8lZuu4FQ7FO57e+uSAfSgWHwxcb8ej7xeJrB8vq7R6zq1Qi5qvpU2PDwBjrdTBhnkpo+ogULL91mMWUg0feO+TysbU1R8chzI/eWSptfqO/kfXZDaDH3sGMAsAgpVQ4TwbrLPVJp4G3CPSEbe/I7Y8xabE4drkJd+T2F7dNiQlFc7seMdoQi2+X6+ePcfp+O0tMc5EmZprmIoWFqHDschPm/W0fJg3T2Yxa/e9MDT58aDzGpMXA2B1w8t2Px+K1IZiclYQOPW+RjsQRe8lyHUmJCYNa4jf/lJhQqJWcmGCaZ8DyW4fZHRmSW54rIyFCcnub2/U9HomyXgkoBFPna1sxKCFC8iNAIa2G+SOnU1WtaOkwYNWMLDx4c4bF/CvrEStXoy9SRjPk1C82Bb22C1/MA0ue58Ez0+PSacOT0dyux9Q/foObhiRixfRhkt/L+ouUedoZYaWm9U1YePyq1aiw4tZMTM5KElMR7SipxtrPS/H81lJMytTBwJtu9o5Glhe+fW1k+areIL72xvw83DI00eFInaNUItZ9t+98fY9GzszPu4LjkJsWi90na/DtE5McjmS+9OUpWblM7R2HRqXAS3NzsLO0KmADpECuBOLtnLX+ggLAIMXzDPkD4zBUF4nh/aIwdbgOGQlaDEuOwu/njMKkzCSHueRe+vKUmKTY/A97Q1sX6lo7kRoXLv7x3VlSjbz0OHQZjKhp6cS2Y5W40tgO4Fry2Xlj08TViMIf8GHJkZjSfYPef6Ee/z1dK94wdj02AR8eshyRGtE/Ck/fliW2Q2/kxRW0DVe7sOyDw2IetsOXGp0Gf46S5TraVgiGpJYDAyznnDkaeXVneS7r9h6UmM3feiTKPC3GxfqrGJwUIQZZpjmVXZID1kEJWsSEhzgM0p6ckYm/LMjHoYsNCFMrkZUShWOXm3DPX/bhVFWLxbZPzczExEwdFN2PlpUKDpcbruKxzYfR3G6weH/zm/WkzCSxfrF5bj57C1fy0mPFINfAM6z++Ki4GOGxqUMxakAM1EoFDprNnZo3Lh1zr09FaUUzQtVK5KTGYP+ThfjyeCXWfm5a2GGvj8yTgJtPWWAO7s5GnqG53TRHdmJmEtRKBRrauqDggDitBvfckIZ7xqZh+4lKdOiN0GpUkm/24WqV+Jowh9ReTjyeZ3bndbrKLGA9LcBRMGgd0K+fPwanqlrw7I9HOB3JfPb2EThT3YohSaYvSFIWVFkfx49z+iEqTB2wARLgu2XxekpKPwc7WgXsQDCsAtYbjDAwUxF2IfBK6U75IHxIzL9R3zDItDhAo1JAb+RxrqYNw5Ij0WngLfYhbCvs40D3Ks7kqFBcPyhOXFn3v9O12P9kISJCVZJT0czrnjsXplZi//l6VDZf26+zNocoFXj43YN47vYRklc5q5UK7DtfJ2mFslLBSV5J2tJhQO5vvxJ/tn7+GCRoNbhzw16LkdDrB8bhQm0b5rzhOMWNsP3Tt2UjOkyF2tYup8mLhTYcudSIWQ5W4Frv18jzOFDWgOLyRlw/MBaTsnQwdo90napswU/f2o8lhUMx9/pUU5m58gaL0WJ7+10+bRgSIzWoa7PfXvMvFuaT0fMHxtmszDTfVvhjL2yrN/IorWhGYqRGHA373+kaDIgNR25arCmfoYLDxfo2RIaqEafV2Fw/da2dKK+7ivSEcBQ8b0pxZJ4OaXRqDB52kNrltz8ejntuSDN9DqyOw16aHPM+YgCUnKl9Bp5He5cR7V3Ga6mBuq/3LgMPnjGolabcjJ0GHqFqpc256NQboVErwTOGQ3ZSKtmzZdF4DE7U4jefnMD2kioUZumw+rZsRIWpoFQoxFXGPM9gZAyq7sB7xp//h+Z2g6yVzzdfl4jtJVXQRVn+DRJy7ll/vt79xVjkpsbiv6drXH6eb7ouESEqBRQcJM9P3XWyGo9tPownpmXizvxUXO0yYO+5OpfXtvn5MedoFMpeQOLtESsjz7D1aIXdtEzWXr0nF9NHpvj0iJqcVET+jNLAeEigB4DG7iS6zj4kkzIt8/2Z55Iz8qZqCWqVwibvnKu5MsLN8+F3D+KF2aMsgixnNwwpIwnO2tzaYcDjHxzG6/PyXOYZe+idIvx+zmib4NR628JsHQxGHhfq2nBdUqTTtCqFWTqcrmpBTHgIblizQ/z53PwBWDdntEVetu/P10OtND3icpTixl7gI3zLbbjahWWbD4tBktAGoXQYAFn7Nf9iUNXcgYPljTbfqIUAxzxwchSoCdtafynYUVItKxclAEmjS2eqW1Fa2YLM5EgMStBatDczORJDkpznASzM0qG9y4hHNh3CjpJqMbDIHxiLyFA1dtsJ/h+bOtRhYGi+31d3ncEfvjxlcZ0I7TU/703teuw5W2f7Bav7OLKk5DPM1KGlQ49vHORgtPbqPbm48boExISHiKPqwvvlpccgKTLUbnBrMPJ4d185Dl1s7FGaJvP8i+drWzE4MdJmHx8//AOMHhAjed88Y2LNcCkpahhjYoJt4XMg59o2PxfVLR0oKnP8mTHf9kJdG0oqWrw+YuUsLZM567yTviaY8hlSAOghgR4ASvmQvDE/DzcNTcSh8gY0tZseh207ZlodKuS+21lajV9uMk3Anjpch+gwNXLTYvHfU66/lRcMjkdkqNriD7ijvH5SRhJC1QpsfrAAQ5MjcbCsAY122rzig6NobO8yC3BMC0bMS00t33JEfFxsL1mu+bYvfXkKv5s1EpVN7UiMDAVj124Y1rnrOI7D+do2xGtDLEYA78wbgLWzRtokce5tMGydvLi+rROPf3AEiycMwcgB0XaDFjnBl7ORL0eB2q7SKnx/wTLH2KHyRtzQPbJ4qrIFgxK1OFXZYlEWzd71k5ceC44DDlyQNqL75IdH8ZpV8C8n9+VNQxMRolSIXzDMc/BZX6+RoSocfHqK3XNsvl9htO/opSbkOshzZx4sfna0Ah8dumzzBUujUmD/k4WSRqwnDEvC4YuNTkeWBULewXWfn7T4guWq74X2duh5HL/SJOu9Fr19EBqVAjNHpeCJWzOREKFB8UXbEcuPF/8ABp6XFbRIDRYB56NIPfkS8uquMzh8sVHSl2PhGvP2iJWc8+PLAuU4XOltnOLf4S/pMSkTftduK0WYWolQlVIsf/btE5Pw9ckasbTW16dME7CFslZhaiXC1EpJ+egiQ9U4V2OZasXRwgdXK2ILs5Lw7ROTMHJADI5dbkJta5fdNi8oSBdr1T66qRjD+0XhhkFx4kISobyW0I539pWL21qXpRq/dife+b4cRWUNSIoKxY6SKox57its3FuG/jFh+MGQBPSPCcPGvWUY89xX2FFShYEJ4YjVhliUXJo63PS4T0h9Ihy7o/Jc1qlSrM+VMMdtR0kVRg6IEdtb8Lzp2Cqb2m1KgUnd78K3TftdN2cUFt4yWFzM4mzbF2aPwro5o3DkUiNy02KxakaWRVm9VTOykJsWi8MXG5Eer8Xxy6ayaN8+McmiBJv19RMfoUGcVlreyvgIDX5/52ibY5OT+zJMrcSJK014YfYoaFQKMV2QvblTK27NhFripHqVUoHRaTE4erkROc9+aRH8mffn9pIq3Do8Wewj8/MuZ46aWqkQ5z06I8xF/OJYlcU1tW7OaJd9L7RXreQkr7IWSjUK5RdfmpuD8rqraO3Q212V2643ylqp33RV2vzUg2UNMBh5Wde2q8/i9pIqLLxlsN2+c7RfjUph8fsG3rPl56SWxfN0O3pLzlzGYEeLQIIQYwxFZdLy7+2/UG9RKs18UnVylMZmAvb6+WNkrFxtQD+rVZGOFj44WxErZdTK1OYW9O9O19JpMKU/eeaH2bjYcNWiPJx1O4Rt7aVKAUw3l5zUGDy/rRTN7QY8/fExPP2x7XbCBHojb/pDK6SuuPG6JHAcB41KiR/n9LeYX7SjpBoPbjwgphIpKmuAgoP09DDLkpEcFWaR7Dern2mFtDC6uWvZBOy/UA+VgpOVCBxwnUDZfNvosBCXI4tKBQelQoE1W0swPiMWf1mQj6Z2PRiYxWrWc7VtqG/rsvkCYc+52jYcuFCP/IFxNsc2dbgO+yVerwcu1ONqlxEjB8SIqXEcpQuanJUkO7/gJ4crYO95jEXqG46zmyZn3th0yTe+g2UNGN4vyiYHozl7idLl9r2wIELOymfTKKXlZ/m7lZPs7iNMrXS46thaSkyYw7Za4zjpX5CFcyE1VVNPEu17a3GJeS1pZ9NYfHnunKtUROYc5TINJjQCGGQMRtPkfbnfygHLb6j9Y8KgUSttvvnKW7najrAQpcVr5qlozDnar5xRq/4x4dCGKHFHbn9oVApxta+w4k+jUuCO3P5YP38MhiVHykoPIjWtiimA4zA5S4dDq6fi5btycOJKE7YerUCoWomX78rBnhWWI1/mI5YZCVqMGhAtK7gQVmXvWTEJ825Iw6AELYrKTKObE17cjbe/K0NqbBiG94uSvN+Gti5Z23bqjZL6qFNvRGpcOFbNyMKN1yVBoeBwtqYV356pw6WGdswbl46DT0/B0inXycrhV9nUgUY7I0AxYWpUSrxeK5s6oFZyYmocwHG6oBCVQlZ+wU6DEatmZGHvSsu+F0bDXr4rB6FqJbYerUBRWT1WzciyuE76xYRKvvFdaWxHh96Iyd03e+uRwIwELd6Yb8oXuHzLEYvFDsI13NAmbTTtfG2rrNHGobpIm+ukucNgfx/ctdW6rvadlx6LEInz6AbGayVf2/UyPgdFZfXoMvCy0i9Z/r7nR6w4jsPEzCTsWjYBWxaNx6v35GLLovHYuWwCJmYm+XTwBzhPRWTNUS7TYEIjgEFESKOgUSntBln2WOcjsy4nZv1t1lEAZ09ydChiwkMs0i0IqWGsU0k42q+cR3hThyejo8toUZLMwPMAA16eOxqpceHiAoyL9VfFm46ctCqu8idWNLaDT40BB2DPmRoxAXKcNgR1bZ1Ys7UENwyMxZsL8i0WswijkIVZSZiSrZMVXHToeTz10TGsnJ6J394xAsbuUSvr3GwKTvrjOr2M4EupADQSpwVMHZ6M2tZOGMPUTnP4PTLpOnTojTKC9FC0dxltXg8PUaFfjNQcjmFQKThcrL+KWG2I03RBXQZeVtsa2rpwz1/2YdWMTLHvAedzy4TEzA9uPACO42S9n55nOFvdihu7k6rbmwvrKFG6nMTnJVeakRobLqlUY0uHHpGhapvr5HxtK9LjbPfR1mlAe5dR0r7bu4wIDVFK+jxHhaklX9tyE4kP7ydtGNJeInBvjVg5Ks3nLwsmHJWYNGedyzRY+UePkl4zn9Py4aHLuGGQvDlA5pzNffryeJXkfecPjBPr+wp/07YerUBda6fFa872Ky9ZcgNOV7dg4ou7cbC8ATmpMVApFOAAjE6NwcHyBkx8cTfmbtiLu9/8zm47zFnOiWEWozXmc9zMR/X6xYSBZwyHLzUiJ9XxfLgjFxvFeUDmUmJCwQBZo5OtnQaLUTYGICslEhsW5ONQeQPWbC1BXVsnFArpQYRaqZD8TTtUrcK5mlYsv3UY3vn5WKyfP0YchTUnjJIkR4c5nSclzIkKUUmfy5aXHoerdgJAuaNIgOlLUUuHHiumZ0Jv4NGpN9pcJztKqmW17asT1eKx7SytwktzcySPbL8wexSuNLbLer/alk5cp4vE0x8ew6ObijGyfzRuvC7BZi6sPXISn+uiTder9XxT8/YIo42nqlrsfpY/P1YFjVpps4+mdj0u1l+VtO/L3blHXX2eV0zPBMdJ/3zJ+RykxIRCIXEETRcdiuYOvdXve3/Eyh9HyAJlLqM3UAAYJMzntGwvqYJewofEeg6QOUdznxwFcI72vWzzYUzO0uHNBXl44OYM/PHuHFQ1d2BKtg4fL/4BhuoibfYbqr72qHbsoDhZj5w1aiWW3zoMWo0KzR16MMbAAFRbJam2twDD/BHxhw+Nx6HVU0xzYsBhTHoc3uwOqIQg8pH3DmHuhr2Y+OJuFJU14M0F+RjTnV9w1IAYFJU53nZUagziIzSYPiJFbL9w8zZ2J/GWGrRUN5tGcE0pPBqgUiowMF6Lo1aLMsxHPV3t19Gjc+sAb/7YNCg4ICMxwmFQbNlHpr6UMqdKqVBIvo5bOvQYnBRhc2zmo0iu9tHeZYSRZ7h+YBz6x4RhcpYO1S0ddoOTtZ+Xim0zv17f+8VYfLz4B/j44R/g3V+MxXsPjIOR59EvRoM7cvtDrVTg+a2liApTSx7Zjo/Q4NjlJhiMvKTjMPA8DEYeda2d+OJEJXRRphyJMeEhWPf5SXxUfNlhonThmhIWMjnre+F6PXC+Hg9uPIC89FjsWjYBmxcWWDxazEuPxQMbD6BDz9v9LAuf/SOXGi32kRwViqHJkVj98TGbfW9eWCDue/VHxzAkKQJKBScpWFRwXI8+B662zUuPQ4hK0aMv3jRiJZ35XEZ7/bxhQZ6pCpCfjGh6EqWBcSDQ0sCY53gSUq3wPMMOO+kIzPPhOXoMdOjpKThb02o3vcPkrCS86eDRlb19PzZ1KBbeMtgix5h5XqzztW04WdmCocmRuC4pQkx0+/35eqTGhuFyY7ukNBNCKohTVS1IjQ1HWMi1ZLnJVmlg7OX3EhLpCm0U8nS1dxlxufEqhiRF2vy+wDzlh5Fn+NpFmpwNC/Jwy9AkfH2qCr/450GL3zfwDBzgch9C2a7dp6qx+cAl8TjaOg0IVSuh4IDjl5vw2bFKjBoQjZgwNcakx+JUZQvm/W0fJmfq7Jbme2zqMCREhAAwJVCOCrOfQLm5XY+IUBV2SEilITzq3rJoPAYlaDHmt1+5fJz+70UFyE2LFVdQO7uOF79zEL+7wzYJ+Pr5YzA4IQKDkyJcXq9na1oRHaZGfEQImq7qsXzLEczNH4AJQ5NwoqIZ6fHhiNNqxBRAY9JjkBIdJl6vzq4b4doSrp+HJgwRz4MrmxcWoL6tEwUZCZLyVuqNpvKIr+0+g3k3pCE+QoODZfXISonG/87UuEwNlT8wDpGhKhy/3GQxbcImeXb9VYzsH42xz+9AXWsXIkNNJepm5w2ASsFBpTTl2tt9sgrPflqK5bcOQ7xWg7lWCdGjQtUIVSuQmxqL3SersPdcA8akx1iknPrlpkO4dXgKpo24dq18cawKnx+vMNUCHmb6onHMrM3WaZ1aOvQw8gwRGtPMKKmJ3aVuO2FYEprb9ZIT0Y9fuxOdBj6g8tZ5k6G7DKi92vCBch4pD6CHBFIAaJ3lfcuiAnAAhiRFQq1SmKpqdP8xFD4kjgIZwDKHkrRkwvZz7UlN+luYrcPJihZc1RuQmxZrcbN3lDfQUZv/tf8iZucNkJTnTghKpo9Ixqs/GeMyd9fqj4/hlqGJNr8v57xZb9tl4PGb/xzHhMxEFGbpUNHYDpVSgQt1bchLj3MZtBSV1SNSo8bQ5Eh0GU0VW8wTIAtJkV1VVRmWHImM7m2FoFlKAmXhXHx1wvY6sr7Z9Y8Jw85lE3CwrAGv7z5jMT/ROrh4d18Zfn7TYISFKE2ru2OEgN50rSV3f4Ewz6tn74uJcP1IzffIM4a//fc8XvzyJDoNvMWXqS6jKdATyieGhSgRoVG5TLZuft0cudSIUQNicLCsHunxWouE4Y68ek8uYrUh+H/fnsdfFuSL7bA+jo7uKj4tHQa8tfcCFk8YYnFNu/riJiQS/8XGA7g9px9uG9XPZR7A/RfqMXfDdyjMSsLv7xyN2PAQu8nFzWtJWydEN+97IRm10M/Cl0JnCdgnZ+nQ3K6HSsFBq1Fh98kq7DlrCiKF4HKYLgoRoSqxbc6SapuviOWZ6TGpo5yB5tv+eedpHL7UhDcd5AG09+XYX1bf+rpArQVMAaCHBFIACFwbAdSoFDjy66k4caUZuWmxmPryN8hOicK0ETqLESBXSXgnDEuCgjMlgnaVmHl4/2i0dxnxzekafHHMlJi508DLKhN145BEKDjgm9OWIxRy9jEmTV7i4PFrdwIA9q6cJPl3fvDCTrxyd67FN3hzWxaNR0aC1iIRtCObFxYgLS4cSZEatHYacKaqFWnx4ThQ1oDY8BC8+c1ZrJszymLUSUg8fS3p82CMGhADhYLDzpJrSZgHxmkxLCXS7miRedWIQxcbEK5W2WwrJ4Gyo3MBXAt0l7xfjOkjknHT0ERcqr+KjET7I3JCwD0lW4fDFxux5F+HxfZMH5GCWWP6IzslCvERIeA4TgwYhGBoWHIkBiVqoVIoxJrRsdoQ7D5ZjUfecz2KVFbXhskvfSO2R6NS4MgzUxGiUlgEABqVAgefnoI9Z2tdjgyNHRSPG9ZsF6+bQ+UNuOm6RFztMkq6TrYsKkC/aNNczyFmI+RCICqWjuN51LZ2obisHhMzdTafJcC2CkxFo20Aea6mFf1iwvG/MzViKiPrUdptx0zn7JahSThyqQFjur+suCrNZTTyNgnRrfveVImIx4ELpmTvl+rbMTuvf/fnwHa0Ryihp1IqEGdWQq+orAE8zyNvoP22zRubhqdvyxbL6lkkdud5XKi1X7HDXhL46pZOHCxruNYuR9vyPC7UXkVpRbPdEStPBTKBGiAFOgoAPSTQAkDANOqUnx6LF+aMQtNVPU5Xt2LuBstHp8IogKNvqOblxE5VtWCwgxu1+bfZ87VtGJIUYTPqJXf0TjgG622ljFxMytTh79+ex89vypBVlmpE/yjZv3PkUqNFWStzr96TixsGxcka2bnaZcDEYUl4//uLmFeQLt48zEdKhJu9cJNr7zKgy8igDVFCoeBQXnftUe3+C/UY0c/14z6hPivPYLOt3L6zdy4EQqCbEKHBP/dcwIKCdKdfLIS25aXH4vmtpZiUlWQ3+Lj5ukRMffkb5KbFikFdqFqBobpIRIaqbUqo7SytEldlC/srLm/EDYNiMTFTJ07gX7O1BP/YcwGdBh7xESHYt3KyzSPAe25IxfOzRkk+P49vPoyisgbsXDYBaz4rwaqZWQCkjxSfqmpBaly4w8ehO7tHo5dNMz2+VyoUmPjiblxpbLd5zL6rtBo8D/wopx9+MCQBxy434e/fXhAD4UmZSVAqFE5H6sxHTY08j52l7n2cOnZQPK7/3XbxS4XwBeCZH5rq8Co4DnojQ4jKcT1zAOB55vT9QtUKbF5YgOH9osEYg4LjcOxKEx771xGcqmoRtxuUoMWvf5iJm4fqwNAdUHXXceZ5HgqFwmFJN6GesuVr1wIy82DRvNxjb0vEeWq/xHt6G6dQGpggIayM0kWZVqJFh6mRGhuGd34+1mJulfAdUEgPYf0YqV1vBDigy2DEycoWrPu8VExSbO/R2QMbD+COnP4YGB9uk3hWzgpeZ0l/bZMlW45cdOqNeGDjAczJGyD5/Q5cqMeCgjSMSYuVnGBXyN31UfFli/9vTu4KytrWTvz+85OYkp2Mn4xLg5HnwZgppc9vbx+BPWeqMCA2AqlxWvDMdNMw8jzCQlQ44eBxVk5qDF6+K0daIt9lpnQ/1tveOsI0J275rcMQHaaGVqMCGHC1yyCW4Nt6tMLmvNib16dSmK7HBzYeQLw2BCqlQtIikJ3LJuD3d462uMELKX5e+vIUpmQnY8eyW7CzpBpGxhAbrkZWShSOXW7CY5stb+C//fFw3HNDGiZnJVvMQ105IwsGo+mcn6lpRUp0KFbNyMLCWzJw5FITCgbHAwDGDYrH7u5H9hGhKnFUVurq9Pnj0rG56BL2X6hHbrppgVBuWozTZM1RYSr842fXgzGGgfHhCFEp0aE3QqtRgeNMwVJipAaDE7XISNDiQt1V/L//ncfKGVk4cKEegxO1+GBhgU0At27OaHGaRliIErWtneJ1LCQkPlPdYpMEXjAoQYsnZ2Tit7ePQGuHAWEhSrtJzm2utWz715qjvv/R6H4w8MziWiqra8PI/tFgHLD7ZLXTUUR0l2109n4deh6/eq8YO5dNgLH7Ma+9/hicqMWI/rHgOA5F3dePvWkT9oIs6+DPnJC6y9XIqVye2q81Gln0bRQABgmuO/mw0ciLE84vN7ajvq1LvHE+fVsWVAoFdpRUWYwimJc/E0YBbr4uEcnRoWKS4ukjbLcVHvU+NGEwVEoFJmWaVuAJf5TlJI12lW/LvB1P3DoMowfEoK6tC6cqW3C6ugU7Sqrxsx8Mkvx+lU0dmDpcB55JzyxvnrvLXh4v85V8gxK0dkdfhMCpf0wYrh8YZ0r+nKgV++xQWYPFIplxGUkWReWFG0zj1S68vvss/ne6FntWTMJXJ6rEEbXltw6TlTonwyqnVmFWEm4ZmoRQtRJGnlksqKlt7UKyWSC2fMsR8VxY5x0UAo7cNFMNXACYmJkkuTJHUVk92jqNuPf/fS++bl755XRVC6LC1JiSrcOZ6laUVrbgapcR+QPj8N4vxlrMQ/3J2HSHczyFuYypsWFo7tDj3wcv4Z4b0jBhWJLNeRcWLcVrNbIqEozNiANw7bqpaGzHiH5RYrJm63Y99+PhuPuGNIu+T4kOxY9y+mPGyBSolAqbRUtCQKs38ogKVdnUZraXi/JgWb2YCF44701Xu9A/JlxMUWMvGMpNi4VCweFkVbM430/4G/P4B7Zzi4XUUudqpVd2ee6OEdColBbXUk6a6fHqkfJGu20T0ue8MT8Phdk6WUF6Xnos1nSX0rO3QGVnaRV+191PUmp1WwdZ5iNylU0dKMyy/5heOI4HNxb1aHGIszrw1vsFg+zRQBpZ9B8UAAYJpYLDlcarSIkOc1rgfEq2Dl+fqkGH3nH5M2Fk6HqzRMmOthXSH5yracWarSUWo4UDYsJscsE54qjigjkhWfKCgnSkxIQhKVIDAEiKNP2enCTV5iN1ckpZCUmzrRNoC7mn9EYeHGwTT1uPYJXXX4XeyMPIeLvF4wuzkvBmWqzTb/FvLsjH3789b5NORG61FvOkv8KNbWdpFXafrHE6CiQkKj5f24bmDr3LG+Jf7s1Hc7se/z1dK7FttkG2+Q3+pusScehiAw5fNKUPWbb5MDoNvEXbFr9ThHVzRmNnqf2RHesbYlSoGvPHpTv9DE3O0oFn8hJBC4GAcN2kxISipdOAFe8ewe/vHC2WAaxobMeY9FikRIc6bMPLc0djdGoMvj5V4zT4OFfbhty0WBRmJ1tcg6tmZJnSrlw0LUjZfcoyWFMpFQgLsZ/YW0rgY53kXOAotZQ9lU0dGBivxa0b/utwcc2kzCSb9wCupc+ZnKWTFaQ3JmrtjpqmRIdCoeCQmxaLjETTFzvzHI5SgjfrEbk7cvtj5qh+ksvtySGlzJ2w36OXGzGiX7Tk0UBvjSwS96BwPIgkRYa6LHC+vaQKS6cMdRqYCaMvRp5JysGmN/IoqWi2KGlW29qJlk4HJZ6siBUXZOS+A0yjngkRIbi+O4G0nCTVeemx4BnDsctNskpZfXGsyiaPl2WOMdMfYOvE0+Z5AIUk1WqlAmvuGGmTFFmjUuCluTnYUeo8WfLO0iosGJeO/ValquQFwqHit3bzsnuPvHcIS6cMlZSoeGBCODKTbUt8Wbd3R0kVIjQqyYl17SXLBa7d4MNClNCGqMRceUJORfO2/f7O0YgKU0u6IaoUCqiUnMvP0I6SKgDSc8nlpcfhckO7eN0cKmsUX9teUo1xa3ZgyfvFGBAbhltHJCMpUuOwDVca25EaF47tLs719pIqpMeFO81bOSo1Bhq1EtXNXRb70KgUdkfOpJRlNE90bf03Rm5S5QN22mB+LdlLpC44V9uG5na9zFrCDBsW5Nvk75zzhmWuz8enDZNcq1ulUMDI8zb9KTfBvRxyprSYrsEqSUmTzYsNOLvuKAGz76AAMIhI/eZnnYDYnorGDlztMkhKrKpWKsSAQxilW/T2Qfzwz/+TVW1DcoZ347U/MMruyderZmRi2zHpSaoNRtPE7Mc2H5GV2Prz4xVYOSMTnXojpmYnWSSkffrDY1AqTI/mvjrh/A/lVyeq0GXg7ZbG+nFOP8lBi0athNqq4fIC4TjEdSf9NS+7N32E9BJ8KoUC4SEqaTdEpUJyYl17VWoE5jdGe7VVhbZFhqplPQZUKlx/htZuMz0mNPLSEzO//V2ZeA3dMMi08nPj3jIAps/Mh4cu4543v4NKqXD6ORb6SFJAq1Tgs6OVTgPZTr0RydEa8WcZCVpwgN2RM6llGYVE1z8a3c9iv3KTKn/uoO/NE2Q7+zsmpFKS+oUwUqOW9IVnQUG6rODN3jUld5Te6OiEWzHy8qa0RIaqxUDVFan3l0DJwRcIqCeCiNzFDM7ookPxvzO1eOCf1zL8b1lkm4X/yMVG6A283dEQe9U2zFlnbZec4d1qnonwe3++Jxd/+PKUpKCV4zgcuFCPU1UtLtso/M5LX57CK3fnYlKmDseuNCE6PMSitNY735ejrdMguS5uSHfKDes+mzc2XVbQMiQp0uJ1OdVa2vVGdOiNWDUjE9PMRiXkjFA4Khtob9sDF+rRaZBWmcNRlRpBRWM7rnYZAJhuZuZz2YT369Ab5T0GvNoleX6iguNQmO38uinM1qFDb8S04TpMztKhvO4qJmXpcLXTiE+OXLHZb5eBx4ELjs+lnH7Zf6EeU4fb/5wL16BGrUR6nKntwnl3VDJQ7qjV/HHp4n6FL25Sv+S56nspf8cYMz12lnKt6Y081CrXi5OELzxygjd715Tc6SpSF1ooFZzsEXapo4xy/iYR30BzAIOE3G9+1nOrzAmjL49uKsb2kmr85C/78OKdozAmLRYl6maU1V/Fms9KxPQZSgUn1vy1nhNju4LXNo+XMGfEYORx7HITxqTFOlx1XHyxESMHRNt8y+Q4DhMzkzAlOxmnq1pw03WJmDo82SZxcF1rJ1Z/dAzP3j5CXHRi3cYDF0yTtIU2tncZcb62Db+bNVJc+eyojqqiO7CU+oeyn50bbb+YUHx3rt7p7wsqGtuRkxpjURxdCLzfXJBvsShHYJ589nRVKxrbuzA5S4f61i7sPVcHQN4Ihdy5XeEh10qrOUvr88DGAw5LlgFAcnQoahzMyTQnp65yu716wnZUNHagTWeAVqPCzUNN15q9xMwAEKFR46brEqFUcMjsFwXGgCX/KrZ7bDxjThdDyekXV59zIZDtHxNmcU3ojde+0Jn3jdxRq7EZcXYTHRc6WPhintj5F/903veuji8jQYsx6bE4V9Pq9FoTUlk1t3fhXG2bpM9tU7u+19fUl8er8PJdOTbn2N5xyC0RJ4x6utqv8Dce6B5lTI1xGGjKub+42hfxnoAOAF977TX8/ve/R2VlJUaPHo0///nPuOGGG/q6WX1Czje/lJhQ1LTYv1kK38CFR5wLCtLEBKanq1txrqYNuuhQrJp5bSJ5Wnw4nvzwGF6bN8buH9pzNW0ovtiASZk65KXHWvxxMA/kVEoFlvzrMK40tjtcdSxUk7BHmG8TFabGoYsN0IaooFJwiI8IQY3ZKudX7s4Fz5jF+bJe7RwfEQKVgsPhi41Ijw9HWly4xcpnR1zdwM1VNLZjcKLt4ymOsz8CY09K9zFYB9+OUucICWnb9UY8+eExvPt9OQDT5P7X5+WJ50TOCIWUBTwCXXQoyuqv4qWvTjlML2TgeTz90TGHQTZguoHlC6uorW5m5gxmdZWl3GjP1bRKOo6UmFB0GRn+vusMFt4yGAAwJDEC6XHh4uIilYLD1U4DOI4TX7vaacDDDirwAKYvEM7OpZx+cRYUCyoaO5CZHIWdyyaI18TEzETcfF2izTUld25pdFgIdi6bAIORt1gYYP5lzd4XwnM1rU773tXxmU8rabzaZbM4zV4qqz/cOVpygFNW1ybrmjpfa3tNbT1agadmZtn90mzvOOSuAnaWXsjeCLurUUZ59xfpI5bEswL2EfD777+PpUuX4plnnsHBgwcxevRoTJs2DdXVrv9wBCo582v6x4Y5fcyqUSsxbUQKxqTF4vjlRrz4xSmcrWkVA7I1n5Wg+GIDctJi0HBVj9tGpeB8bRsmZSV1Py4eb1EQ/pZhSeJNwNEfB+ERg/k8wnl/3YdFbx8UC9i7esSgVCiQFGmqh/vo+8X48Wvf4p6/mPZx5FIjXrk7F5OzdNi494LN+TJ/33v+sg8/fu1bLHm/GDHhIQhRKXD4UqPT4C8jQQutjEUOKTFhiAkPsemHy43tshYYlNe32X2ELYzeHr3UiDFpschNi0FuWiyOXmpE7rNfisGfsO1THx0Vz4mceYRyFvAI8/qsFwzFakPEkZL2LiMmDEuUPCfT0ePijAQtIjQqGCQ+BjTwPDISI2TNnfz3wcsY89uvsHFvGToNRqiVCnQajNi4twy5v/0KP3r1W2g1KoSoFPjdZyUYv3anw+AmI0GLEJXC6bmU0y/O5lAKUmLCEKpWWlwTW49WQqNW2lxTcueWhnQv0LCXGkQIaPLSYzF9ZIo4yqVSKDAkKVLy8R0sa7R53XxayZj0OJytabO51synbpyvaUNMeIjkz62RMbTrXU9jEIK3QQm215Tc6TFyuJpKI0xpWb7lCDoNvORRRjnzKYlvCNhKIGPHjsX111+PV199FQDA8zxSU1PxyCOPYMWKFS5/PxArgTjL/wRYFi3nOEgupC2l6La9hKBykoRa1zN25tV7cjF9ZIrTfdu22TTyJSTA/d/pWux/shD7zte5PF/jMuIRplZKOrdCFQWpFR5aOvTYe7bOYhTgzrwBeH7WSJfVMt6Yn4dJWUlY8cFRhKoVePK2bISplQ6POV4bgnVzRjtsm3n5t19uOoRvn5BWgm/soHgYukt3SSnXZ69snPnPhdFkVxVoVn90DLcMS7SorWq9vxuHJEKlAJRKhd3yY8L+CrN1YIyBMeflD4Xznj8wFoxBUqk8qduKn004rpYh9NHB8gaX12L+wDiMW7PD4ZcWRxV4hPcor7+KtO5URvsv1KOmuQOTneSuMz/mSVnycteZk/p3bOKwJLHkm6O/S1L3Jfdz+5dvzuFnNw5yWp1IeOztrA32aqo7+1ssx7W/gZaJ881rtYvnUkKuQcn9IjNvIXGMSsHZ0dXVhfDwcHzwwQe4/fbbxdfvu+8+NDY24uOPP7b5nc7OTnR2Xntc0NzcjNTU1IAKAAG4LFpuSlXCWZQnkhuoeWp4X6hn7MqWReNlfcs08gwKDjYlniZnJeEvC/Kxw0lZPGEu2u05/XDbqH4uC8JfaWxHYqQGX59yfZPMS4/Fqg+P4vV5eRZ5ADUqBfY/WYiIUJXLoEVv4HH0ShPy06/Vcj1b04ouA29TFWP9/DFI0Gpw5wbH59i8VOCu0hr89nb7eQDNr6cDF+oRpw2xqEZir71TsnUoLm/E0s2HXf58cKJWvDHam5N5ufEqhiRFokNvxLOfnLAYzTQ/P6UVLWjXG5CbGosuo6mGrr3qNyFKBdq7DKho6nBYp9g8+Hxg4wEAcFpWUc62wvXz552nMShB6/Ra+8Pc0chJjcFXDq4NYV/FFxsxe/0ep9fgTUMTcexyE+58w37JyF3d5fPGpMdYJEV29JkxD6adVcBwxdXfMet8c87+Lkndl9QA5+brErGjpApDk6MwMCFc0hdpZ214cqbp7wzHcR75+8oYQ11rF05UNOPfBy+L01gcnUtX+5LTL6R3KAC048qVK+jfvz/27NmDgoIC8fXly5fj66+/xr59+2x+59e//jV+85vf2LweaAEg4GTEzg8ytcupGyyXq/Ni74/4hdo2lFa0WBR+d1QQ3sgzNLXrERaiRIRG5TIQP3ChHkoFZ3e/md3l3ToN9oOWDr0RISoFmtv1YAyI1YbYHEdmiuUNKjU2DPvO17scZS3MSsKf7xmDsBAlzlS3on9MWHclENvzw5gQYHMIUSmcnsvq5k7EhofY3Vd7lxENV7uQFKURRy2qmjqQ1S8KgxIixP0ajDwMdt/Pqj+c9J11XWVhROT5O0Zi3/l6fFx82WHwablfy+tH6CNhwZFpPlsbTlXabmvdXr2Rx/rdZ/DSV6cBAG/9Xz5uvC7R4bVmXgnk2s8tgw8pXwaFxNz2rgnz0Snh2Bwds/l1qVEp3BIESHny4O59SQ1wevLEw53HI1dfnEvSexQA2tGTADBYRgCt+VOtRm8+YnB0Xuz/Ybct5m7+ulAMvqGty5ROQqmwG5AJfyj1Rl4cheUZcOBCA37zn+N45kfDMX5wvFjzVxiVUCnt7Lv7j61528xv/MJxMAYI92IG4FB5g6RR1n8vGo8x3aOs9vbLcZx43K7bwKBQKMDzDMbuY1NwnNUUAttzLLzGGMOh8ioMiItBYoRG3G9Tux6haiVC1UowxsAzBiMPVDa1IzpcjeiwEBh5Hhw47Dlbh8c/OIyxg+IxbcS10nxfHKsSR0QOPT0F52pbMXv9XmhUCnFBUEyYGuEhpvq7YSolIsNUiAxVI0ytxDv7yvHHHadw05BEi/3uLKkGY8Dk7CQUZMQjJtx2tar19eN8ioXtOW5o64JCAYSpVd19YlpEYs7VzZoxhqKyBsx5w/41YX4ezI/DvA32rkt3c+ffMV8I1Pry77I3zyXpHQoA7ejJI2BrgTgHMBD4+yMGZ4Hlt2dqLR7BWBNGN09VtuBsbSsOlTWiYHAsJgyT/3jI3rY8z6BQcL0aZe1tG3p6w5ByUxaOz/w9enLMntpWCrnnx13TN7x1TfibQD424vt6G6cE5HhsSEgI8vLysGPHDvE1nuexY8cOixFB4n+EFBH2VhJPzEzy6eAPcLzCmTGGToMR/zl82W7wZ55+50x1C5IiTal2bhrqevW01HYoFJz0aisOyjn1tg09vZk6WzUqUChsz5PcY5ay7Yrpmahv65RV5UYqueent/0BQPr5Mfb+mvA3gXxsJPAF5AggYEoDc99992HDhg244YYb8Mc//hH/+te/UFpaCp3OeZULgEYA/UUgfQPvzfyivmhHIJFzzM627cnCDn84l8F4TRDi6+gRsBOvvvqqmAg6JycHr7zyCsaOHSvpdykAJH3BVyZQ+0o7vEnOMTvb9kLtVZRWNEtaRORP59LZAidfXzxGSCCiANBDKAAkfc1XRjd9pR3e5Km5jIFyLh0tfCKEeA/NASQkQPlKoOAr7fAmT81lDJRzScEfIf6PPsWEEEIIIUGGAkBCCCGEkCBDASAhhBBCSJChAJAQQgghJMhQAEgIIYQQEmQoACSEEEIICTIUABJCCCGEBBkKAAkhhBBCggwFgIQQQgghQUbV1w3wVUKFvObm5j5uCSGEEEKIJSE+6WlFXwoAHairqwMApKam9nFLCCGEEELsq6urQ3R0tOzfowDQgbi4OABAeXl5j06sL2tubkZqaiouXrzYowLSvi6Qj4+OzX8F8vEF8rEBgX18gXxsQGAfX1NTE9LS0sR4RS4KAB1QdBc7j46ODriLRhAVFRWwxwYE9vHRsfmvQD6+QD42ILCPL5CPDQjs4xPiFdm/5+Z2EEIIIYQQH0cBICGEEEJIkKEA0AGNRoNnnnkGGo2mr5vidoF8bEBgHx8dm/8K5OML5GMDAvv4AvnYgMA+vt4eG8d6un6YEEIIIYT4JRoBJIQQQggJMhQAEkIIIYQEGQoACSGEEEKCDAWAhBBCCCFBhgJAQgghhJAgE3QBYCAveuZ5Hkajsa+bQXohkK/PQEd9RwjxJ0FTCq6jowOhoaFob29HeHh4XzfH7U6cOIE1a9agsrIS1113HRYsWIDx48f3dbM8ijEGjuP6uhm9UlFRgYsXL6KhoQGFhYVQKpV93SSPC4R+A6jv/NnFixdRUlKC6upqzJw5E1qtFiEhIX3dLI+ivvN93j62oMgDePz4cTz55JOorq5GbGws7rvvPsydO7evm+U2J0+exNixYzF9+nQMHDgQ27Ztg1qtxoIFC/DLX/6yr5vXa6dOncLf/vY3VFdXIycnBzNmzMB1110HwL//qB05cgQ/+tGPoNFoUFVVhZSUFKxevRrTpk3rcXFvX3LmzBl88MEHaGpqwqhRo/DDH/4QERERAPy73wDqO3/vu2nTpiExMRFlZWWIiYnBAw88gPvuuw8DBgzo6+b1GvWdf+qTY2MB7vTp0ywmJoYtXryYrVq1ij3wwAOM4zj26KOPsqqqqr5uXq/xPM9WrVrF5s6dK77W3NzMnnvuOZaTk8NeeOGFPmxd7x0/fpxFR0ezW2+9lc2ePZtFR0ezwsJC9pe//EXchuf5Pmxhz1RXV7PMzEy2atUqdvbsWXb58mV21113saysLPbMM8+w6urqvm5irxw7dozFxMSwW265hd18881MpVKx2bNns88//1zcxh/7jTHqO8b8t+/q6+vZmDFj2PLly1lVVRUzGo3sscceY2PHjmX33nsvu3DhQl83sVeo7/xTXx1bwAeAa9asYbfccovFa//+97+ZSqViDzzwAGtqauqbhrnR//3f/7Gbb77Z4rXm5mb24osvsvz8fPb222/3Uct6p7Ozk82fP5/94he/EF87ffo0u+uuu9i4cePYn/70pz5sXe8cP36cDRw4kB04cMDi9SeeeIKNHDmSrVu3jrW1tfVR63rn6tWr7LbbbmOLFy8WXysqKmL5+fmssLCQ/fvf/+7D1vUe9Z3/KisrY+np6Wz79u0Wr//5z39mBQUF7KGHHmI1NTV91Lreob7z377rq2ML+EUgdXV1UChMh8kYg9FoxB133IFPP/0U/+///T+89tprfdzCnmPdT+/HjBkDo9GIkydPij+LjIzEz372M+Tm5uL111/H1atX+6qZPRYSEoKqqirxkQVjDEOGDMG6deuQmZmJDz74AJ988kkft7Jn9Ho9DAaD2C/t7e0AgLVr12LixIlYv349zpw5A8D/FheEhYWhvr4eCQkJAEyLk8aMGYONGzfCYDDgzTffxOHDh/u4lT3X2dlJfeenFAoFwsPDceXKFQCAwWAAADz88MOYNWsWdu3ahW+//RaAf/ZdXV0d9R38r+84jkNYWJj3j83tIaWP2bRpE1OpVOy7775jjDFmNBqZwWBgjDG2fv16FhERwQ4dOtSHLey9M2fOsISEBPazn/2MtbS0MMauDfOXl5czjuPYtm3b+rKJshkMBtbV1cV++tOfsjlz5rCOjg7G8zwzGo2MMcbOnj3LCgoK2F133dXHLe2566+/nk2cOFH8d0dHh/j/8/Pz2d13390Xzeq1lpYWNnHiRLZw4ULGmKkv9Xo9Y8w0ejZgwAD2q1/9qg9bKN+VK1fY8ePHxX/n5+cHVN8Jn6vm5mY2ceJEtmjRIsZYYPRdW1sb6+zsFP/9ox/9iOXm5rLGxkbGGBOPjzHGpk+fbtGv/uDixYts//79zGAwBFzfWbvtttsCpu+MRqP4uWOMsTvvvJONHDnSq8cWkAGgEOAxxlhNTQ2bM2cOmzBhAjty5IjFz8+dO8fS0tL8fmicMcZ27tzJNBoNW7x4scVQcUVFBRs9ejTbs2dPH7ZOOvO+Y4yx3bt3M6VSafG4V9hm9+7dTKFQsGPHjnm1jT3R2trKmpubLaYcHDx4kCUlJbF77rlHfE340C9dupT98Ic/9Ho7e6quro6VlJSwkydPMsYY++STTxjHcWzLli2MMdMfu66uLsYYY++++y6LjY1lZWVlfdZeOS5dusTi4+PZHXfcwfbu3csYY+zQoUMsISEhIPru0KFD7LbbbmOtra2MMcY2b94cMH139OhRNnPmTPb111+Lx1dTU8MGDRrEpkyZYhEYMsbYH//4R3bTTTfZ/B3yVceOHWOpqalsyZIljDHG3nvvvYDpu4sXL7L333+fbdmyhR08eJAxFjh9d/z4cbZgwQI2ceJE9tOf/pRt3bqVVVdXs9GjR7OJEyd67dgC6hFwVVUVAECpVIpDqAkJCbj33nuhUCiwYsUKHDp0SEzX0K9fP8TGxqKrq6vP2uwuEydOxObNm/HXv/4VDz74IN5//32UlJTgT3/6E6qrq5GamtrXTXTp1KlT+OMf/4iKigrxtVtuuQUvvPAClixZgr/+9a8AIPZfZGQkhg0bBq1W2yftlerEiROYNWsWbrnlFmRlZeGdd94BAGRlZeFPf/oTvvrqK9x5553Q6/XidIXq6mpotVoYDAaff5xx7NgxFBYWYu7cuRgxYgSeffZZTJkyBQ8//DB+8pOf4NNPP4VCoYBarQYAxMTEIDk52ef7TXD69Gk0NTWhqakJ69evx6FDh5CTk4NXX30Vn3/+Oe644w6/7bvDhw9j/PjxGD58uNgft99+OxYvXoyf/OQn+OSTT/y2744fP46bbroJAwYMwKBBg8Q2JyQk4N1338Xx48cxdepUnD59Gh0dHQCAo0ePIjIy0i/yqR4+fBg33HADVCoV3n33XVRWVuLuu+8WP3efffaZ3/bd0aNHceONN+L3v/89HnroITzzzDM4deqU2HclJSV+23elpaW48cYbERISgttuuw1XrlzBww8/jN/97nd4/fXXUV1djUmTJnnn2NwaTvahkpISplarLb55m0fR77//Prv11lvZkCFD2Hvvvcd27NjBnnjiCZaYmOjXq4esFRUVsVtuuYWlp6ezwYMHs6FDh4rfnnzZ6dOnWVxcHOM4jq1cudJiFLOtrY395je/YRzHsaeeeoodPHiQ1dXVsRUrVrAhQ4b49KrL48ePs/j4eLZkyRL2zjvvsKVLlzK1Wi32SVtbG/vPf/7DBgwYwDIzM9ntt9/O5s6dy7RaLTt69Ggft9414fiWLVvGjh8/zl588UXGcRy7fPkyu3z5MvvFL37B1Go1W79+PauoqGDt7e1sxYoVbPTo0ay+vr6vmy9JXV0d+9GPfsQ2bNjAxowZw37yk5+wU6dOMcYY++ijj1h2djYbNmyY3/Xd4cOHmVarZY8//rjF6waDgdXW1rLFixf7bd+1trayqVOnio9DGTPdIw4dOsQuXrzIGDONnmVnZ7PrrruO3XDDDezHP/4xi4iIYIcPH+6rZktWXFzMwsLC2KpVq1hNTQ3Lzs5mzz33HGPM9GTrgQceYGq1mm3YsMHv+u7ChQusf//+bMWKFay1tZVt3bqVJScns3379onb+GvfdXR0sHnz5rFf/vKX4mvt7e0sJyeHcRzH7rnnHnbkyBE2duxYlpGR4fFjC4gA8MqVK2z8+PFs3LhxLCMjg82aNUv8mXkQ+N1337Ff/epXLCIigg0fPpyNHDnSL4IjuZqamtj58+fZkSNH/GJVVGtrK/vZz37G/u///o+99tprjOM49vjjj1sEdkajkf3jH/9gycnJrH///iwzM5P169ePFRUV9WHLnaurq2NTp061+LAzxtiECRPYI488YvFac3MzW758Ofv5z3/OHn74YYv5Zr6qpqaG3XzzzRbzinieZ9OmTWPfffcdO3LkCPv+++/Z66+/zkJCQtigQYPYqFGjWGJiot987gwGA6uurmZDhw5lly5dYv/+97/Z9ddfz+6//352yy23sLlz57Lm5ma2bNkyv+q7iooKlpyczKZNm8YYMx3no48+yqZPn86ys7PZn//8Z7Zr1y72yiuv+GXfdXR0sBtvvJEdPHiQGQwGNm3aNHb99deziIgINnbsWPbXv/5V3PaVV15hK1asYM888wwrLS3tw1ZLc/jwYabRaNiqVasYY6a/jXPmzGF5eXniNleuXGFr1qxhISEhLCMjw6/6bsOGDWzChAkW6WpmzJjBNmzYwN566y22a9cu8XV/6zvGGJs8eTL79a9/zRgzBX+MMbZ8+XI2a9YslpeXx1577TXGmGkFsKePLSACwHfffZfNmjWL7d69m33wwQds4MCBFkGg+QRtxkwLI2pqanz+m1CwuHr1KnvttdfYpk2bGGOm0Vp7QSBjjJ0/f559/fXXbNu2bezSpUt90VzJKisr2Q033MC++eYbxti1ifY//elP2bx58xhjzGJhi8D6376qtraWrVmzRhwNY4yxZ599lnEcx0aNGsXS0tLYrbfeyk6cOMFKS0vZ+++/zzZt2uRXI+7CTWjevHliLrXPPvuMJSQksIiICItAgjH/6buKigp2xx13sPz8fPbRRx+xW2+9lU2ePJk99thj7KGHHmKDBw9mP//5z1lrays7fPiw3/VdZWUlS0xMZF9++SVbsmQJmzZtGjt8+DDbtm0be/zxx1lycjJ79913+7qZPfL999+zp59+mjF27XorLS1l0dHR7NVXX7XY1h/77o033mAZGRlisPrcc88xjuNYYWEhy8/PZ0lJSezNN9/s41bKx/M8a2trYzfddBNbsGCBOGf40qVLLD09nf2///f/2Pz589lNN93ktTYFRADY1tbGPv74Y8aYaSL2v/71L5sgUJgI669JMAOdMEFbsGnTJsZxHFu2bJk4iqnX6/1mArPAPDgSrsGnnnqKLViwwGI788Uh/nSNNjc3i/9fmID+/vvvs7q6OrZ7926Wn5/PVq9e3YctdI97772XrVixgjHG2P33389iY2NZdnY2+9nPfiYuDGHMv/ruypUr7N5772VhYWFsypQprLa2VvzZ22+/zaKjo9knn3zShy3sOZ7n2d13380efvhhdtttt1kkQr548SKbP38+W7hwIdPr9WIQ5U99Z47nedbY2ChOQRCOyV++jFg7d+4cGz9+PBsyZAibPXs24ziOffTRR4zneVZVVcV++ctfsgkTJrCamhq/7Lv//e9/TKFQsJtvvpktWLCAabVa9vOf/5wxZlq0FBkZyUpKSsQFH548Nr8PAO1d5O3t7Wzz5s02QeCbb75p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" - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" + "ename": "ValueError", + "evalue": "there are missing values in column 'fare', use transformation to fill missing values or drop the missing values", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mValueError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[10], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[43mtitanic_numerical\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mplot\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mscatter_plot\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mage\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mfare\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[1;32m~\\PycharmProjects\\Library\\src\\safeds\\data\\tabular\\plotting\\_table_plotter.py:323\u001B[0m, in \u001B[0;36mTablePlotter.scatter_plot\u001B[1;34m(self, x_name, y_names)\u001B[0m\n\u001B[0;32m 289\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mscatter_plot\u001B[39m(\u001B[38;5;28mself\u001B[39m, x_name: \u001B[38;5;28mstr\u001B[39m, y_names: \u001B[38;5;28mlist\u001B[39m[\u001B[38;5;28mstr\u001B[39m]) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Image:\n\u001B[0;32m 290\u001B[0m \u001B[38;5;250m \u001B[39m\u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m 291\u001B[0m \u001B[38;5;124;03m Create a scatter plot for two columns in the table.\u001B[39;00m\n\u001B[0;32m 292\u001B[0m \n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 321\u001B[0m \u001B[38;5;124;03m >>> image = table.plot.scatter_plot(\"a\", [\"b\"])\u001B[39;00m\n\u001B[0;32m 322\u001B[0m \u001B[38;5;124;03m \"\"\"\u001B[39;00m\n\u001B[1;32m--> 323\u001B[0m \u001B[43m_plot_validation\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_table\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mx_name\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43my_names\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 325\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mmatplotlib\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mpyplot\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m \u001B[38;5;21;01mplt\u001B[39;00m\n\u001B[0;32m 327\u001B[0m fig, ax \u001B[38;5;241m=\u001B[39m plt\u001B[38;5;241m.\u001B[39msubplots()\n", + "File \u001B[1;32m~\\PycharmProjects\\Library\\src\\safeds\\data\\tabular\\plotting\\_table_plotter.py:437\u001B[0m, in \u001B[0;36m_plot_validation\u001B[1;34m(table, x_name, y_names)\u001B[0m\n\u001B[0;32m 435\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m name \u001B[38;5;129;01min\u001B[39;00m y_names:\n\u001B[0;32m 436\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m table\u001B[38;5;241m.\u001B[39mget_column(name)\u001B[38;5;241m.\u001B[39mmissing_value_count() \u001B[38;5;241m>\u001B[39m\u001B[38;5;241m=\u001B[39m \u001B[38;5;241m1\u001B[39m:\n\u001B[1;32m--> 437\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m 438\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mthere are missing values in column \u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mname\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m, use transformation to fill missing values \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m 439\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mor drop the missing values\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m 440\u001B[0m )\n\u001B[0;32m 441\u001B[0m y_names\u001B[38;5;241m.\u001B[39mremove(x_name)\n", + "\u001B[1;31mValueError\u001B[0m: there are missing values in column 'fare', use transformation to fill missing values or drop the missing values" + ] } ], "execution_count": 10 diff --git a/package-lock.json b/package-lock.json index cb2f96a6b..b653c966d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1055,12 +1055,12 @@ "dev": true }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1607,9 +1607,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -2457,9 +2457,9 @@ } }, "node_modules/npm": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz", - "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.1.tgz", + "integrity": "sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -2468,6 +2468,7 @@ "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/promise-spawn", + "@npmcli/redact", "@npmcli/run-script", "@sigstore/tuf", "abbrev", @@ -2476,8 +2477,6 @@ "chalk", "ci-info", "cli-columns", - "cli-table3", - "columnify", "fastest-levenshtein", "fs-minipass", "glob", @@ -2513,7 +2512,6 @@ "npm-profile", "npm-registry-fetch", "npm-user-validate", - "npmlog", "p-map", "pacote", "parse-conflict-json", @@ -2535,73 +2533,71 @@ "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.2.1", - "@npmcli/config": "^8.0.2", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.1", - "@npmcli/run-script": "^7.0.4", - "@sigstore/tuf": "^2.3.1", + "@npmcli/arborist": "^7.5.3", + "@npmcli/config": "^8.3.3", + "@npmcli/fs": "^3.1.1", + "@npmcli/map-workspaces": "^3.0.6", + "@npmcli/package-json": "^5.1.1", + "@npmcli/promise-spawn": "^7.0.2", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "@sigstore/tuf": "^2.3.4", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.2", + "cacache": "^18.0.3", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.3.10", + "glob": "^10.4.1", "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.1", - "ini": "^4.1.1", - "init-package-json": "^6.0.0", - "is-cidr": "^5.0.3", - "json-parse-even-better-errors": "^3.0.1", - "libnpmaccess": "^8.0.1", - "libnpmdiff": "^6.0.3", - "libnpmexec": "^7.0.4", - "libnpmfund": "^5.0.1", - "libnpmhook": "^10.0.0", - "libnpmorg": "^6.0.1", - "libnpmpack": "^6.0.3", - "libnpmpublish": "^9.0.2", - "libnpmsearch": "^7.0.0", - "libnpmteam": "^6.0.0", - "libnpmversion": "^5.0.1", - "make-fetch-happen": "^13.0.0", - "minimatch": "^9.0.3", - "minipass": "^7.0.4", + "hosted-git-info": "^7.0.2", + "ini": "^4.1.3", + "init-package-json": "^6.0.3", + "is-cidr": "^5.1.0", + "json-parse-even-better-errors": "^3.0.2", + "libnpmaccess": "^8.0.6", + "libnpmdiff": "^6.1.3", + "libnpmexec": "^8.1.2", + "libnpmfund": "^5.0.11", + "libnpmhook": "^10.0.5", + "libnpmorg": "^6.0.6", + "libnpmpack": "^7.0.3", + "libnpmpublish": "^9.0.9", + "libnpmsearch": "^7.0.6", + "libnpmteam": "^6.0.5", + "libnpmversion": "^6.0.3", + "make-fetch-happen": "^13.0.1", + "minimatch": "^9.0.4", + "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^10.0.1", - "nopt": "^7.2.0", - "normalize-package-data": "^6.0.0", + "node-gyp": "^10.1.0", + "nopt": "^7.2.1", + "normalize-package-data": "^6.0.1", "npm-audit-report": "^5.0.0", "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-profile": "^9.0.0", - "npm-registry-fetch": "^16.1.0", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-profile": "^10.0.0", + "npm-registry-fetch": "^17.0.1", + "npm-user-validate": "^2.0.1", "p-map": "^4.0.0", - "pacote": "^17.0.6", + "pacote": "^18.0.6", "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", + "proc-log": "^4.2.0", "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.6.0", - "spdx-expression-parse": "^3.0.1", - "ssri": "^10.0.5", + "read": "^3.0.1", + "semver": "^7.6.2", + "spdx-expression-parse": "^4.0.0", + "ssri": "^10.0.6", "supports-color": "^9.4.0", - "tar": "^6.2.0", + "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", + "validate-npm-package-name": "^5.0.1", "which": "^4.0.0", "write-file-atomic": "^5.0.1" }, @@ -2640,16 +2636,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -2724,7 +2710,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.1", + "version": "2.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -2733,49 +2719,51 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.4.0", + "version": "7.5.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.0.0", + "@npmcli/metavuln-calculator": "^7.1.1", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", + "@npmcli/package-json": "^5.1.0", "@npmcli/query": "^3.1.0", - "@npmcli/run-script": "^7.0.2", - "bin-links": "^4.0.1", - "cacache": "^18.0.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.1", - "json-parse-even-better-errors": "^3.0.0", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^10.0.5", + "ssri": "^10.0.6", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" }, @@ -2787,16 +2775,16 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.2.0", + "version": "8.3.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "ini": "^4.1.2", + "nopt": "^7.2.1", + "proc-log": "^4.2.0", "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^3.0.1" @@ -2805,35 +2793,8 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.0", + "version": "3.1.1", "dev": true, "inBundle": true, "license": "ISC", @@ -2845,7 +2806,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.4", + "version": "5.0.7", "dev": true, "inBundle": true, "license": "ISC", @@ -2853,7 +2814,7 @@ "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -2864,7 +2825,7 @@ } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", + "version": "2.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -2873,14 +2834,14 @@ "npm-normalize-package-bin": "^3.0.0" }, "bin": { - "installed-package-contents": "lib/index.js" + "installed-package-contents": "bin/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", + "version": "3.0.6", "dev": true, "inBundle": true, "license": "ISC", @@ -2895,14 +2856,15 @@ } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "7.0.0", + "version": "7.1.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", - "pacote": "^17.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", "semver": "^7.3.5" }, "engines": { @@ -2928,7 +2890,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.0.0", + "version": "5.1.1", "dev": true, "inBundle": true, "license": "ISC", @@ -2938,7 +2900,7 @@ "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.5.3" }, "engines": { @@ -2946,7 +2908,7 @@ } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.1", + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -2969,8 +2931,17 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "7.0.4", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -2979,6 +2950,7 @@ "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", "which": "^4.0.0" }, "engines": { @@ -2996,19 +2968,19 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.2.0", + "version": "2.3.2", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.0" + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/core": { - "version": "1.0.0", + "version": "1.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -3017,51 +2989,53 @@ } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.0", + "version": "0.3.2", "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.2.3", + "version": "2.3.2", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.2.0", + "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "make-fetch-happen": "^13.0.0" + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.3.1", + "version": "2.3.4", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.0", - "tuf-js": "^2.2.0" + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/verify": { - "version": "1.1.0", + "version": "1.2.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -3077,13 +3051,13 @@ } }, "node_modules/npm/node_modules/@tufjs/models": { - "version": "2.0.0", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.3" + "minimatch": "^9.0.4" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -3099,7 +3073,7 @@ } }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.0", + "version": "7.1.1", "dev": true, "inBundle": true, "license": "MIT", @@ -3156,15 +3130,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "dev": true, @@ -3172,7 +3137,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { - "version": "4.0.3", + "version": "4.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -3187,12 +3152,15 @@ } }, "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/brace-expansion": { @@ -3204,17 +3172,8 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/npm/node_modules/cacache": { - "version": "18.0.2", + "version": "18.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -3273,7 +3232,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.0.3", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -3306,32 +3265,8 @@ "node": ">= 10" } }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.2", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -3357,40 +3292,12 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", "dev": true, "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", "dev": true, @@ -3455,18 +3362,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm/node_modules/diff": { "version": "5.2.0", "dev": true, @@ -3565,42 +3460,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/gauge": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/glob": { - "version": "10.3.10", + "version": "10.4.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3612,14 +3488,8 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/hasown": { - "version": "2.0.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", @@ -3631,7 +3501,7 @@ } }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "7.0.1", + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -3688,7 +3558,7 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.4", + "version": "6.0.5", "dev": true, "inBundle": true, "license": "ISC", @@ -3718,7 +3588,7 @@ } }, "node_modules/npm/node_modules/ini": { - "version": "4.1.1", + "version": "4.1.3", "dev": true, "inBundle": true, "license": "ISC", @@ -3727,15 +3597,15 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.0", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^7.0.0", + "read": "^3.0.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" @@ -3757,12 +3627,6 @@ "node": ">= 12" } }, - "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ip-regex": { "version": "5.0.0", "dev": true, @@ -3776,12 +3640,12 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.0.3", + "version": "5.1.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "4.0.3" + "cidr-regex": "^4.1.1" }, "engines": { "node": ">=14" @@ -3821,7 +3685,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { - "version": "2.3.6", + "version": "3.1.2", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", @@ -3845,7 +3709,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "MIT", @@ -3884,52 +3748,50 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.2", + "version": "8.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0" + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.0.7", + "version": "6.1.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", + "@npmcli/arborist": "^7.5.3", + "@npmcli/installed-package-contents": "^2.1.0", + "binary-extensions": "^2.3.0", "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^11.0.1", - "pacote": "^17.0.4", - "tar": "^6.2.0" + "minimatch": "^9.0.4", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "tar": "^6.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "7.0.8", + "version": "8.1.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/run-script": "^7.0.2", + "@npmcli/arborist": "^7.5.3", + "@npmcli/run-script": "^8.1.0", "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.1", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", - "proc-log": "^3.0.0", - "read": "^2.0.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "proc-log": "^4.2.0", + "read": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^3.0.1" @@ -3939,112 +3801,112 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.5", + "version": "5.0.11", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1" + "@npmcli/arborist": "^7.5.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.1", + "version": "10.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.2", + "version": "6.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "6.0.7", + "version": "7.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/run-script": "^7.0.2", - "npm-package-arg": "^11.0.1", - "pacote": "^17.0.4" + "@npmcli/arborist": "^7.5.3", + "@npmcli/run-script": "^8.1.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.4", + "version": "9.0.9", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.0", - "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", "semver": "^7.3.7", "sigstore": "^2.2.0", - "ssri": "^10.0.5" + "ssri": "^10.0.6" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.1", + "version": "7.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.1", + "version": "6.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "5.0.2", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.3", - "@npmcli/run-script": "^7.0.2", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", + "@npmcli/git": "^5.0.7", + "@npmcli/run-script": "^8.1.0", + "json-parse-even-better-errors": "^3.0.2", + "proc-log": "^4.2.0", "semver": "^7.3.7" }, "engines": { @@ -4052,7 +3914,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "10.2.0", + "version": "10.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -4061,7 +3923,7 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "13.0.0", + "version": "13.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -4075,6 +3937,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", + "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" }, @@ -4083,7 +3946,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "9.0.3", + "version": "9.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -4098,7 +3961,7 @@ } }, "node_modules/npm/node_modules/minipass": { - "version": "7.0.4", + "version": "7.1.2", "dev": true, "inBundle": true, "license": "ISC", @@ -4119,7 +3982,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.4", + "version": "3.0.5", "dev": true, "inBundle": true, "license": "MIT", @@ -4291,7 +4154,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "10.0.1", + "version": "10.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -4314,8 +4177,17 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/nopt": { - "version": "7.2.0", + "version": "7.2.1", "dev": true, "inBundle": true, "license": "ISC", @@ -4330,7 +4202,7 @@ } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -4354,7 +4226,7 @@ } }, "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -4387,13 +4259,13 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "11.0.1", + "version": "11.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -4414,7 +4286,7 @@ } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "9.0.0", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -4429,38 +4301,39 @@ } }, "node_modules/npm/node_modules/npm-profile": { - "version": "9.0.0", + "version": "10.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0" + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18.0.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "16.1.0", + "version": "17.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/redact": "^2.0.0", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "proc-log": "^4.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.0", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -4468,21 +4341,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/npmlog": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", "dev": true, @@ -4499,32 +4357,31 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "17.0.6", + "version": "18.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", + "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -4554,23 +4411,23 @@ } }, "node_modules/npm/node_modules/path-scurry": { - "version": "1.10.1", + "version": "1.11.1", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.15", + "version": "6.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -4583,7 +4440,16 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "3.0.0", + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -4629,12 +4495,12 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", + "version": "1.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "read": "^2.0.0" + "read": "^3.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -4649,12 +4515,12 @@ } }, "node_modules/npm/node_modules/read": { - "version": "2.1.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "~1.0.0" + "mute-stream": "^1.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -4669,21 +4535,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/read-package-json": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", "dev": true, @@ -4714,13 +4565,10 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.6.0", + "version": "7.6.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4728,24 +4576,6 @@ "node": ">=10" } }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -4780,17 +4610,17 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "2.2.2", + "version": "2.3.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.2.0", + "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "@sigstore/sign": "^2.2.3", - "@sigstore/tuf": "^2.3.1", - "@sigstore/verify": "^1.1.0" + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -4807,7 +4637,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.0", + "version": "2.8.3", "dev": true, "inBundle": true, "license": "MIT", @@ -4816,17 +4646,17 @@ "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 16.0.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -4844,6 +4674,16 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.5.0", "dev": true, @@ -4851,7 +4691,7 @@ "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", @@ -4861,13 +4701,19 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.17", + "version": "3.0.18", "dev": true, "inBundle": true, "license": "CC0-1.0" }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" + }, "node_modules/npm/node_modules/ssri": { - "version": "10.0.5", + "version": "10.0.6", "dev": true, "inBundle": true, "license": "ISC", @@ -4945,7 +4791,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.2.0", + "version": "6.2.1", "dev": true, "inBundle": true, "license": "ISC", @@ -5016,14 +4862,14 @@ } }, "node_modules/npm/node_modules/tuf-js": { - "version": "2.2.0", + "version": "2.2.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/models": "2.0.0", + "@tufjs/models": "2.0.1", "debug": "^4.3.4", - "make-fetch-happen": "^13.0.0" + "make-fetch-happen": "^13.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -5069,14 +4915,21 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.0", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -5087,15 +4940,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/npm/node_modules/which": { "version": "4.0.0", "dev": true, @@ -5120,15 +4964,6 @@ "node": ">=16" } }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", "dev": true, @@ -7382,12 +7217,12 @@ "dev": true }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "callsites": { @@ -7777,9 +7612,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -8405,89 +8240,81 @@ "dev": true }, "npm": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz", - "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.1.tgz", + "integrity": "sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==", "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.2.1", - "@npmcli/config": "^8.0.2", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.1", - "@npmcli/run-script": "^7.0.4", - "@sigstore/tuf": "^2.3.1", + "@npmcli/arborist": "^7.5.3", + "@npmcli/config": "^8.3.3", + "@npmcli/fs": "^3.1.1", + "@npmcli/map-workspaces": "^3.0.6", + "@npmcli/package-json": "^5.1.1", + "@npmcli/promise-spawn": "^7.0.2", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "@sigstore/tuf": "^2.3.4", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.2", + "cacache": "^18.0.3", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.3.10", + "glob": "^10.4.1", "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.1", - "ini": "^4.1.1", - "init-package-json": "^6.0.0", - "is-cidr": "^5.0.3", - "json-parse-even-better-errors": "^3.0.1", - "libnpmaccess": "^8.0.1", - "libnpmdiff": "^6.0.3", - "libnpmexec": "^7.0.4", - "libnpmfund": "^5.0.1", - "libnpmhook": "^10.0.0", - "libnpmorg": "^6.0.1", - "libnpmpack": "^6.0.3", - "libnpmpublish": "^9.0.2", - "libnpmsearch": "^7.0.0", - "libnpmteam": "^6.0.0", - "libnpmversion": "^5.0.1", - "make-fetch-happen": "^13.0.0", - "minimatch": "^9.0.3", - "minipass": "^7.0.4", + "hosted-git-info": "^7.0.2", + "ini": "^4.1.3", + "init-package-json": "^6.0.3", + "is-cidr": "^5.1.0", + "json-parse-even-better-errors": "^3.0.2", + "libnpmaccess": "^8.0.6", + "libnpmdiff": "^6.1.3", + "libnpmexec": "^8.1.2", + "libnpmfund": "^5.0.11", + "libnpmhook": "^10.0.5", + "libnpmorg": "^6.0.6", + "libnpmpack": "^7.0.3", + "libnpmpublish": "^9.0.9", + "libnpmsearch": "^7.0.6", + "libnpmteam": "^6.0.5", + "libnpmversion": "^6.0.3", + "make-fetch-happen": "^13.0.1", + "minimatch": "^9.0.4", + "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^10.0.1", - "nopt": "^7.2.0", - "normalize-package-data": "^6.0.0", + "node-gyp": "^10.1.0", + "nopt": "^7.2.1", + "normalize-package-data": "^6.0.1", "npm-audit-report": "^5.0.0", "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-profile": "^9.0.0", - "npm-registry-fetch": "^16.1.0", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-profile": "^10.0.0", + "npm-registry-fetch": "^17.0.1", + "npm-user-validate": "^2.0.1", "p-map": "^4.0.0", - "pacote": "^17.0.6", + "pacote": "^18.0.6", "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", + "proc-log": "^4.2.0", "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.6.0", - "spdx-expression-parse": "^3.0.1", - "ssri": "^10.0.5", + "read": "^3.0.1", + "semver": "^7.6.2", + "spdx-expression-parse": "^4.0.0", + "ssri": "^10.0.6", "supports-color": "^9.4.0", - "tar": "^6.2.0", + "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", + "validate-npm-package-name": "^5.0.1", "which": "^4.0.0", "write-file-atomic": "^5.0.1" }, "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, "@isaacs/cliui": { "version": "8.0.2", "bundled": true, @@ -8537,7 +8364,7 @@ "dev": true }, "@npmcli/agent": { - "version": "2.2.1", + "version": "2.2.2", "bundled": true, "dev": true, "requires": { @@ -8545,84 +8372,68 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" } }, "@npmcli/arborist": { - "version": "7.4.0", + "version": "7.5.3", "bundled": true, "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.0.0", + "@npmcli/metavuln-calculator": "^7.1.1", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", + "@npmcli/package-json": "^5.1.0", "@npmcli/query": "^3.1.0", - "@npmcli/run-script": "^7.0.2", - "bin-links": "^4.0.1", - "cacache": "^18.0.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.1", - "json-parse-even-better-errors": "^3.0.0", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^10.0.5", + "ssri": "^10.0.6", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" } }, "@npmcli/config": { - "version": "8.2.0", + "version": "8.3.3", "bundled": true, "dev": true, "requires": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "ini": "^4.1.2", + "nopt": "^7.2.1", + "proc-log": "^4.2.0", "read-package-json-fast": "^3.0.2", "semver": "^7.3.5", "walk-up-path": "^3.0.1" } }, - "@npmcli/disparity-colors": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - } - } - }, "@npmcli/fs": { - "version": "3.1.0", + "version": "3.1.1", "bundled": true, "dev": true, "requires": { @@ -8630,14 +8441,14 @@ } }, "@npmcli/git": { - "version": "5.0.4", + "version": "5.0.7", "bundled": true, "dev": true, "requires": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -8645,7 +8456,7 @@ } }, "@npmcli/installed-package-contents": { - "version": "2.0.2", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { @@ -8654,7 +8465,7 @@ } }, "@npmcli/map-workspaces": { - "version": "3.0.4", + "version": "3.0.6", "bundled": true, "dev": true, "requires": { @@ -8665,13 +8476,14 @@ } }, "@npmcli/metavuln-calculator": { - "version": "7.0.0", + "version": "7.1.1", "bundled": true, "dev": true, "requires": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", - "pacote": "^17.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", "semver": "^7.3.5" } }, @@ -8686,7 +8498,7 @@ "dev": true }, "@npmcli/package-json": { - "version": "5.0.0", + "version": "5.1.1", "bundled": true, "dev": true, "requires": { @@ -8695,12 +8507,12 @@ "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.5.3" } }, "@npmcli/promise-spawn": { - "version": "7.0.1", + "version": "7.0.2", "bundled": true, "dev": true, "requires": { @@ -8715,8 +8527,13 @@ "postcss-selector-parser": "^6.0.10" } }, + "@npmcli/redact": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, "@npmcli/run-script": { - "version": "7.0.4", + "version": "8.1.0", "bundled": true, "dev": true, "requires": { @@ -8724,6 +8541,7 @@ "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", "which": "^4.0.0" } }, @@ -8734,51 +8552,53 @@ "optional": true }, "@sigstore/bundle": { - "version": "2.2.0", + "version": "2.3.2", "bundled": true, "dev": true, "requires": { - "@sigstore/protobuf-specs": "^0.3.0" + "@sigstore/protobuf-specs": "^0.3.2" } }, "@sigstore/core": { - "version": "1.0.0", + "version": "1.1.0", "bundled": true, "dev": true }, "@sigstore/protobuf-specs": { - "version": "0.3.0", + "version": "0.3.2", "bundled": true, "dev": true }, "@sigstore/sign": { - "version": "2.2.3", + "version": "2.3.2", "bundled": true, "dev": true, "requires": { - "@sigstore/bundle": "^2.2.0", + "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "make-fetch-happen": "^13.0.0" + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" } }, "@sigstore/tuf": { - "version": "2.3.1", + "version": "2.3.4", "bundled": true, "dev": true, "requires": { - "@sigstore/protobuf-specs": "^0.3.0", - "tuf-js": "^2.2.0" + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" } }, "@sigstore/verify": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "dev": true, "requires": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" } }, "@tufjs/canonical-json": { @@ -8787,12 +8607,12 @@ "dev": true }, "@tufjs/models": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.3" + "minimatch": "^9.0.4" } }, "abbrev": { @@ -8801,7 +8621,7 @@ "dev": true }, "agent-base": { - "version": "7.1.0", + "version": "7.1.1", "bundled": true, "dev": true, "requires": { @@ -8837,18 +8657,13 @@ "bundled": true, "dev": true }, - "are-we-there-yet": { - "version": "4.0.2", - "bundled": true, - "dev": true - }, "balanced-match": { "version": "1.0.2", "bundled": true, "dev": true }, "bin-links": { - "version": "4.0.3", + "version": "4.0.4", "bundled": true, "dev": true, "requires": { @@ -8859,7 +8674,7 @@ } }, "binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "bundled": true, "dev": true }, @@ -8871,16 +8686,8 @@ "balanced-match": "^1.0.0" } }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, "cacache": { - "version": "18.0.2", + "version": "18.0.3", "bundled": true, "dev": true, "requires": { @@ -8914,7 +8721,7 @@ "dev": true }, "cidr-regex": { - "version": "4.0.3", + "version": "4.1.1", "bundled": true, "dev": true, "requires": { @@ -8935,22 +8742,8 @@ "strip-ansi": "^6.0.1" } }, - "cli-table3": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, "cmd-shim": { - "version": "6.0.2", + "version": "6.0.3", "bundled": true, "dev": true }, @@ -8967,30 +8760,11 @@ "bundled": true, "dev": true }, - "color-support": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, "common-ancestor-path": { "version": "1.0.1", "bundled": true, "dev": true }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, "cross-spawn": { "version": "7.0.3", "bundled": true, @@ -9031,14 +8805,6 @@ } } }, - "defaults": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, "diff": { "version": "5.2.0", "bundled": true, @@ -9105,31 +8871,16 @@ "bundled": true, "dev": true }, - "gauge": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, "glob": { - "version": "10.3.10", + "version": "10.4.1", "bundled": true, "dev": true, "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" } }, "graceful-fs": { @@ -9137,13 +8888,8 @@ "bundled": true, "dev": true }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, "hasown": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { @@ -9151,7 +8897,7 @@ } }, "hosted-git-info": { - "version": "7.0.1", + "version": "7.0.2", "bundled": true, "dev": true, "requires": { @@ -9191,7 +8937,7 @@ } }, "ignore-walk": { - "version": "6.0.4", + "version": "6.0.5", "bundled": true, "dev": true, "requires": { @@ -9209,19 +8955,19 @@ "dev": true }, "ini": { - "version": "4.1.1", + "version": "4.1.3", "bundled": true, "dev": true }, "init-package-json": { - "version": "6.0.0", + "version": "6.0.3", "bundled": true, "dev": true, "requires": { + "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^7.0.0", + "read": "^3.0.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" @@ -9234,13 +8980,6 @@ "requires": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.3", - "bundled": true, - "dev": true - } } }, "ip-regex": { @@ -9249,11 +8988,11 @@ "dev": true }, "is-cidr": { - "version": "5.0.3", + "version": "5.1.0", "bundled": true, "dev": true, "requires": { - "cidr-regex": "4.0.3" + "cidr-regex": "^4.1.1" } }, "is-core-module": { @@ -9280,7 +9019,7 @@ "dev": true }, "jackspeak": { - "version": "2.3.6", + "version": "3.1.2", "bundled": true, "dev": true, "requires": { @@ -9294,7 +9033,7 @@ "dev": true }, "json-parse-even-better-errors": { - "version": "3.0.1", + "version": "3.0.2", "bundled": true, "dev": true }, @@ -9319,136 +9058,134 @@ "dev": true }, "libnpmaccess": { - "version": "8.0.2", + "version": "8.0.6", "bundled": true, "dev": true, "requires": { - "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0" + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" } }, "libnpmdiff": { - "version": "6.0.7", + "version": "6.1.3", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", + "@npmcli/arborist": "^7.5.3", + "@npmcli/installed-package-contents": "^2.1.0", + "binary-extensions": "^2.3.0", "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^11.0.1", - "pacote": "^17.0.4", - "tar": "^6.2.0" + "minimatch": "^9.0.4", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "tar": "^6.2.1" } }, "libnpmexec": { - "version": "7.0.8", + "version": "8.1.2", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/run-script": "^7.0.2", + "@npmcli/arborist": "^7.5.3", + "@npmcli/run-script": "^8.1.0", "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.1", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", - "proc-log": "^3.0.0", - "read": "^2.0.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "proc-log": "^4.2.0", + "read": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^3.0.1" } }, "libnpmfund": { - "version": "5.0.5", + "version": "5.0.11", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.2.1" + "@npmcli/arborist": "^7.5.3" } }, "libnpmhook": { - "version": "10.0.1", + "version": "10.0.5", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" } }, "libnpmorg": { - "version": "6.0.2", + "version": "6.0.6", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" } }, "libnpmpack": { - "version": "6.0.7", + "version": "7.0.3", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/run-script": "^7.0.2", - "npm-package-arg": "^11.0.1", - "pacote": "^17.0.4" + "@npmcli/arborist": "^7.5.3", + "@npmcli/run-script": "^8.1.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6" } }, "libnpmpublish": { - "version": "9.0.4", + "version": "9.0.9", "bundled": true, "dev": true, "requires": { "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.0", - "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", "semver": "^7.3.7", "sigstore": "^2.2.0", - "ssri": "^10.0.5" + "ssri": "^10.0.6" } }, "libnpmsearch": { - "version": "7.0.1", + "version": "7.0.6", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" } }, "libnpmteam": { - "version": "6.0.1", + "version": "6.0.5", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" } }, "libnpmversion": { - "version": "5.0.2", + "version": "6.0.3", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^5.0.3", - "@npmcli/run-script": "^7.0.2", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", + "@npmcli/git": "^5.0.7", + "@npmcli/run-script": "^8.1.0", + "json-parse-even-better-errors": "^3.0.2", + "proc-log": "^4.2.0", "semver": "^7.3.7" } }, "lru-cache": { - "version": "10.2.0", + "version": "10.2.2", "bundled": true, "dev": true }, "make-fetch-happen": { - "version": "13.0.0", + "version": "13.0.1", "bundled": true, "dev": true, "requires": { @@ -9461,12 +9198,13 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", + "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" } }, "minimatch": { - "version": "9.0.3", + "version": "9.0.4", "bundled": true, "dev": true, "requires": { @@ -9474,7 +9212,7 @@ } }, "minipass": { - "version": "7.0.4", + "version": "7.1.2", "bundled": true, "dev": true }, @@ -9487,7 +9225,7 @@ } }, "minipass-fetch": { - "version": "3.0.4", + "version": "3.0.5", "bundled": true, "dev": true, "requires": { @@ -9610,7 +9348,7 @@ "dev": true }, "node-gyp": { - "version": "10.0.1", + "version": "10.1.0", "bundled": true, "dev": true, "requires": { @@ -9624,10 +9362,17 @@ "semver": "^7.3.5", "tar": "^6.1.2", "which": "^4.0.0" + }, + "dependencies": { + "proc-log": { + "version": "3.0.0", + "bundled": true, + "dev": true + } } }, "nopt": { - "version": "7.2.0", + "version": "7.2.1", "bundled": true, "dev": true, "requires": { @@ -9635,7 +9380,7 @@ } }, "normalize-package-data": { - "version": "6.0.0", + "version": "6.0.1", "bundled": true, "dev": true, "requires": { @@ -9651,7 +9396,7 @@ "dev": true }, "npm-bundled": { - "version": "3.0.0", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { @@ -9672,12 +9417,12 @@ "dev": true }, "npm-package-arg": { - "version": "11.0.1", + "version": "11.0.2", "bundled": true, "dev": true, "requires": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" } @@ -9691,7 +9436,7 @@ } }, "npm-pick-manifest": { - "version": "9.0.0", + "version": "9.0.1", "bundled": true, "dev": true, "requires": { @@ -9702,44 +9447,34 @@ } }, "npm-profile": { - "version": "9.0.0", + "version": "10.0.0", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0" + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.0.0" } }, "npm-registry-fetch": { - "version": "16.1.0", + "version": "17.0.1", "bundled": true, "dev": true, "requires": { + "@npmcli/redact": "^2.0.0", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "proc-log": "^4.0.0" } }, "npm-user-validate": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true }, - "npmlog": { - "version": "7.0.1", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - } - }, "p-map": { "version": "4.0.0", "bundled": true, @@ -9749,25 +9484,24 @@ } }, "pacote": { - "version": "17.0.6", + "version": "18.0.6", "bundled": true, "dev": true, "requires": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", + "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" @@ -9789,16 +9523,16 @@ "dev": true }, "path-scurry": { - "version": "1.10.1", + "version": "1.11.1", "bundled": true, "dev": true, "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "postcss-selector-parser": { - "version": "6.0.15", + "version": "6.1.0", "bundled": true, "dev": true, "requires": { @@ -9807,7 +9541,12 @@ } }, "proc-log": { - "version": "3.0.0", + "version": "4.2.0", + "bundled": true, + "dev": true + }, + "proggy": { + "version": "2.0.0", "bundled": true, "dev": true }, @@ -9836,11 +9575,11 @@ } }, "promzard": { - "version": "1.0.0", + "version": "1.0.2", "bundled": true, "dev": true, "requires": { - "read": "^2.0.0" + "read": "^3.0.1" } }, "qrcode-terminal": { @@ -9849,11 +9588,11 @@ "dev": true }, "read": { - "version": "2.1.0", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { - "mute-stream": "~1.0.0" + "mute-stream": "^1.0.0" } }, "read-cmd-shim": { @@ -9861,17 +9600,6 @@ "bundled": true, "dev": true }, - "read-package-json": { - "version": "7.0.0", - "bundled": true, - "dev": true, - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, "read-package-json-fast": { "version": "3.0.2", "bundled": true, @@ -9893,25 +9621,7 @@ "optional": true }, "semver": { - "version": "7.6.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", + "version": "7.6.2", "bundled": true, "dev": true }, @@ -9934,16 +9644,16 @@ "dev": true }, "sigstore": { - "version": "2.2.2", + "version": "2.3.1", "bundled": true, "dev": true, "requires": { - "@sigstore/bundle": "^2.2.0", + "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "@sigstore/sign": "^2.2.3", - "@sigstore/tuf": "^2.3.1", - "@sigstore/verify": "^1.1.0" + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" } }, "smart-buffer": { @@ -9952,7 +9662,7 @@ "dev": true }, "socks": { - "version": "2.8.0", + "version": "2.8.3", "bundled": true, "dev": true, "requires": { @@ -9961,11 +9671,11 @@ } }, "socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.3", "bundled": true, "dev": true, "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", "socks": "^2.7.1" } @@ -9977,6 +9687,17 @@ "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } } }, "spdx-exceptions": { @@ -9985,7 +9706,7 @@ "dev": true }, "spdx-expression-parse": { - "version": "3.0.1", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { @@ -9994,12 +9715,17 @@ } }, "spdx-license-ids": { - "version": "3.0.17", + "version": "3.0.18", + "bundled": true, + "dev": true + }, + "sprintf-js": { + "version": "1.1.3", "bundled": true, "dev": true }, "ssri": { - "version": "10.0.5", + "version": "10.0.6", "bundled": true, "dev": true, "requires": { @@ -10048,7 +9774,7 @@ "dev": true }, "tar": { - "version": "6.2.0", + "version": "6.2.1", "bundled": true, "dev": true, "requires": { @@ -10101,13 +9827,13 @@ "dev": true }, "tuf-js": { - "version": "2.2.0", + "version": "2.2.1", "bundled": true, "dev": true, "requires": { - "@tufjs/models": "2.0.0", + "@tufjs/models": "2.0.1", "debug": "^4.3.4", - "make-fetch-happen": "^13.0.0" + "make-fetch-happen": "^13.0.1" } }, "unique-filename": { @@ -10138,29 +9864,29 @@ "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } } }, "validate-npm-package-name": { - "version": "5.0.0", + "version": "5.0.1", "bundled": true, - "dev": true, - "requires": { - "builtins": "^5.0.0" - } + "dev": true }, "walk-up-path": { "version": "3.0.1", "bundled": true, "dev": true }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, "which": { "version": "4.0.0", "bundled": true, @@ -10176,14 +9902,6 @@ } } }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "wrap-ansi": { "version": "8.1.0", "bundled": true, diff --git a/poetry.lock b/poetry.lock index 5a2dace53..69e7784f0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1224,39 +1224,40 @@ files = [ [[package]] name = "matplotlib" -version = "3.8.4" +version = "3.9.0" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, - {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, - {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, - {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, - {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, - {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, - {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, - {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, - {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, - {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, - {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, - {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, - {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, - {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, - {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, - {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, - {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, - {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, - {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, + {file = "matplotlib-3.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2bcee1dffaf60fe7656183ac2190bd630842ff87b3153afb3e384d966b57fe56"}, + {file = "matplotlib-3.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f988bafb0fa39d1074ddd5bacd958c853e11def40800c5824556eb630f94d3b"}, + {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe428e191ea016bb278758c8ee82a8129c51d81d8c4bc0846c09e7e8e9057241"}, + {file = "matplotlib-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf3978060a106fab40c328778b148f590e27f6fa3cd15a19d6892575bce387d"}, + {file = "matplotlib-3.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e7f03e5cbbfacdd48c8ea394d365d91ee8f3cae7e6ec611409927b5ed997ee4"}, + {file = "matplotlib-3.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:13beb4840317d45ffd4183a778685e215939be7b08616f431c7795276e067463"}, + {file = "matplotlib-3.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:063af8587fceeac13b0936c42a2b6c732c2ab1c98d38abc3337e430e1ff75e38"}, + {file = "matplotlib-3.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9a2fa6d899e17ddca6d6526cf6e7ba677738bf2a6a9590d702c277204a7c6152"}, + {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:550cdda3adbd596078cca7d13ed50b77879104e2e46392dcd7c75259d8f00e85"}, + {file = "matplotlib-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cce0f31b351e3551d1f3779420cf8f6ec0d4a8cf9c0237a3b549fd28eb4abb"}, + {file = "matplotlib-3.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c53aeb514ccbbcbab55a27f912d79ea30ab21ee0531ee2c09f13800efb272674"}, + {file = "matplotlib-3.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5be985db2596d761cdf0c2eaf52396f26e6a64ab46bd8cd810c48972349d1be"}, + {file = "matplotlib-3.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c79f3a585f1368da6049318bdf1f85568d8d04b2e89fc24b7e02cc9b62017382"}, + {file = "matplotlib-3.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bdd1ecbe268eb3e7653e04f451635f0fb0f77f07fd070242b44c076c9106da84"}, + {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d38e85a1a6d732f645f1403ce5e6727fd9418cd4574521d5803d3d94911038e5"}, + {file = "matplotlib-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a490715b3b9984fa609116481b22178348c1a220a4499cda79132000a79b4db"}, + {file = "matplotlib-3.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8146ce83cbc5dc71c223a74a1996d446cd35cfb6a04b683e1446b7e6c73603b7"}, + {file = "matplotlib-3.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:d91a4ffc587bacf5c4ce4ecfe4bcd23a4b675e76315f2866e588686cc97fccdf"}, + {file = "matplotlib-3.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:616fabf4981a3b3c5a15cd95eba359c8489c4e20e03717aea42866d8d0465956"}, + {file = "matplotlib-3.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd53c79fd02f1c1808d2cfc87dd3cf4dbc63c5244a58ee7944497107469c8d8a"}, + {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06a478f0d67636554fa78558cfbcd7b9dba85b51f5c3b5a0c9be49010cf5f321"}, + {file = "matplotlib-3.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81c40af649d19c85f8073e25e5806926986806fa6d54be506fbf02aef47d5a89"}, + {file = "matplotlib-3.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52146fc3bd7813cc784562cb93a15788be0b2875c4655e2cc6ea646bfa30344b"}, + {file = "matplotlib-3.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:0fc51eaa5262553868461c083d9adadb11a6017315f3a757fc45ec6ec5f02888"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bd4f2831168afac55b881db82a7730992aa41c4f007f1913465fb182d6fb20c0"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:290d304e59be2b33ef5c2d768d0237f5bd132986bdcc66f80bc9bcc300066a03"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff2e239c26be4f24bfa45860c20ffccd118d270c5b5d081fa4ea409b5469fcd"}, + {file = "matplotlib-3.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:af4001b7cae70f7eaacfb063db605280058246de590fa7874f00f62259f2df7e"}, + {file = "matplotlib-3.9.0.tar.gz", hash = "sha256:e6d29ea6c19e34b30fb7d88b7081f869a03014f66fe06d62cc77d5a6ea88ed7a"}, ] [package.dependencies] @@ -1264,12 +1265,15 @@ contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.3.1" -numpy = ">=1.21" +numpy = ">=1.23" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -2175,17 +2179,17 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "polars" -version = "0.20.26" +version = "0.20.31" description = "Blazingly fast DataFrame library" optional = false python-versions = ">=3.8" files = [ - {file = "polars-0.20.26-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:97d0e4b6ab6b47fa07798b447189ee9505d2085ec1a64a6aa8a65fdd429cd49f"}, - {file = "polars-0.20.26-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c270e366b4d8b672b204e7d48e39d255641d3d2b7bdc3a0ccd968cf53934657f"}, - {file = "polars-0.20.26-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db35d6eed508256a797c7f1b8e9dec4aae9c11b891797b2d38fac5627d072d34"}, - {file = "polars-0.20.26-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:25b00bd5cf44929722aa6389706559c5e8cedd6db2cfc38b27b706ed37e1b2af"}, - {file = "polars-0.20.26-cp38-abi3-win_amd64.whl", hash = "sha256:b22063acc815bc5c6d2e24292ff771ca0df306ecf97e8f6899924a1ec6d3f136"}, - {file = "polars-0.20.26.tar.gz", hash = "sha256:fa83d130562a5180a47f8763a7bb9f408dbbf51eafc1380e8a2951be8ce05a2c"}, + {file = "polars-0.20.31-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:86454ade5ed302bbf87f145cfcb1b14f7a5765a9440e448659e1f3dba6ac4e79"}, + {file = "polars-0.20.31-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:67f2fe842262b7e1b9371edad21b760f6734d28b74c78dda88dff1bf031b9499"}, + {file = "polars-0.20.31-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24b82441f93409e0e8abd6f427b029db102f02b8de328cee9a680f84b84e3736"}, + {file = "polars-0.20.31-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:87f43bce4d41abf8c8c5658d881e4b8378e5c61010a696bfea8b4106b908e916"}, + {file = "polars-0.20.31-cp38-abi3-win_amd64.whl", hash = "sha256:2d7567c9fd9d3b9aa93387ca9880d9e8f7acea3c0a0555c03d8c0c2f0715d43c"}, + {file = "polars-0.20.31.tar.gz", hash = "sha256:00f62dec6bf43a4e2a5db58b99bf0e79699fe761c80ae665868eaea5168f3bbb"}, ] [package.dependencies] @@ -2194,7 +2198,7 @@ pyarrow = {version = ">=7.0.0", optional = true, markers = "extra == \"pyarrow\" [package.extras] adbc = ["adbc-driver-manager", "adbc-driver-sqlite"] -all = ["polars[adbc,async,cloudpickle,connectorx,deltalake,fastexcel,fsspec,gevent,iceberg,numpy,pandas,plot,pyarrow,pydantic,sqlalchemy,timezone,torch,xlsx2csv,xlsxwriter]"] +all = ["polars[adbc,async,cloudpickle,connectorx,deltalake,fastexcel,fsspec,gevent,iceberg,numpy,pandas,plot,pyarrow,pydantic,sqlalchemy,timezone,xlsx2csv,xlsxwriter]"] async = ["nest-asyncio"] cloudpickle = ["cloudpickle"] connectorx = ["connectorx (>=0.3.2)"] @@ -2213,7 +2217,6 @@ pydantic = ["pydantic"] pyxlsb = ["pyxlsb (>=1.0)"] sqlalchemy = ["pandas", "sqlalchemy"] timezone = ["backports-zoneinfo", "tzdata"] -torch = ["torch"] xlsx2csv = ["xlsx2csv (>=0.8.0)"] xlsxwriter = ["xlsxwriter"] @@ -3386,31 +3389,31 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] [[package]] name = "torch" -version = "2.3.0" +version = "2.3.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.3.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d8ea5a465dbfd8501f33c937d1f693176c9aef9d1c1b0ca1d44ed7b0a18c52ac"}, - {file = "torch-2.3.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09c81c5859a5b819956c6925a405ef1cdda393c9d8a01ce3851453f699d3358c"}, - {file = "torch-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:1bf023aa20902586f614f7682fedfa463e773e26c58820b74158a72470259459"}, - {file = "torch-2.3.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:758ef938de87a2653bba74b91f703458c15569f1562bf4b6c63c62d9c5a0c1f5"}, - {file = "torch-2.3.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:493d54ee2f9df100b5ce1d18c96dbb8d14908721f76351e908c9d2622773a788"}, - {file = "torch-2.3.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:bce43af735c3da16cc14c7de2be7ad038e2fbf75654c2e274e575c6c05772ace"}, - {file = "torch-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:729804e97b7cf19ae9ab4181f91f5e612af07956f35c8b2c8e9d9f3596a8e877"}, - {file = "torch-2.3.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:d24e328226d8e2af7cf80fcb1d2f1d108e0de32777fab4aaa2b37b9765d8be73"}, - {file = "torch-2.3.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b0de2bdc0486ea7b14fc47ff805172df44e421a7318b7c4d92ef589a75d27410"}, - {file = "torch-2.3.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a306c87a3eead1ed47457822c01dfbd459fe2920f2d38cbdf90de18f23f72542"}, - {file = "torch-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9b98bf1a3c8af2d4c41f0bf1433920900896c446d1ddc128290ff146d1eb4bd"}, - {file = "torch-2.3.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:dca986214267b34065a79000cee54232e62b41dff1ec2cab9abc3fc8b3dee0ad"}, - {file = "torch-2.3.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:20572f426965dd8a04e92a473d7e445fa579e09943cc0354f3e6fef6130ce061"}, - {file = "torch-2.3.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e65ba85ae292909cde0dde6369826d51165a3fc8823dc1854cd9432d7f79b932"}, - {file = "torch-2.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:5515503a193781fd1b3f5c474e89c9dfa2faaa782b2795cc4a7ab7e67de923f6"}, - {file = "torch-2.3.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6ae9f64b09516baa4ef890af0672dc981c20b1f0d829ce115d4420a247e88fba"}, - {file = "torch-2.3.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cd0dc498b961ab19cb3f8dbf0c6c50e244f2f37dbfa05754ab44ea057c944ef9"}, - {file = "torch-2.3.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e05f836559251e4096f3786ee99f4a8cbe67bc7fbedba8ad5e799681e47c5e80"}, - {file = "torch-2.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:4fb27b35dbb32303c2927da86e27b54a92209ddfb7234afb1949ea2b3effffea"}, - {file = "torch-2.3.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:760f8bedff506ce9e6e103498f9b1e9e15809e008368594c3a66bf74a8a51380"}, + {file = "torch-2.3.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:605a25b23944be5ab7c3467e843580e1d888b8066e5aaf17ff7bf9cc30001cc3"}, + {file = "torch-2.3.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f2357eb0965583a0954d6f9ad005bba0091f956aef879822274b1bcdb11bd308"}, + {file = "torch-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:32b05fe0d1ada7f69c9f86c14ff69b0ef1957a5a54199bacba63d22d8fab720b"}, + {file = "torch-2.3.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:7c09a94362778428484bcf995f6004b04952106aee0ef45ff0b4bab484f5498d"}, + {file = "torch-2.3.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:b2ec81b61bb094ea4a9dee1cd3f7b76a44555375719ad29f05c0ca8ef596ad39"}, + {file = "torch-2.3.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:490cc3d917d1fe0bd027057dfe9941dc1d6d8e3cae76140f5dd9a7e5bc7130ab"}, + {file = "torch-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:5802530783bd465fe66c2df99123c9a54be06da118fbd785a25ab0a88123758a"}, + {file = "torch-2.3.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:a7dd4ed388ad1f3d502bf09453d5fe596c7b121de7e0cfaca1e2017782e9bbac"}, + {file = "torch-2.3.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:a486c0b1976a118805fc7c9641d02df7afbb0c21e6b555d3bb985c9f9601b61a"}, + {file = "torch-2.3.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:224259821fe3e4c6f7edf1528e4fe4ac779c77addaa74215eb0b63a5c474d66c"}, + {file = "torch-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:e5fdccbf6f1334b2203a61a0e03821d5845f1421defe311dabeae2fc8fbeac2d"}, + {file = "torch-2.3.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:3c333dc2ebc189561514eda06e81df22bf8fb64e2384746b2cb9f04f96d1d4c8"}, + {file = "torch-2.3.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:07e9ba746832b8d069cacb45f312cadd8ad02b81ea527ec9766c0e7404bb3feb"}, + {file = "torch-2.3.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:462d1c07dbf6bb5d9d2f3316fee73a24f3d12cd8dacf681ad46ef6418f7f6626"}, + {file = "torch-2.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff60bf7ce3de1d43ad3f6969983f321a31f0a45df3690921720bcad6a8596cc4"}, + {file = "torch-2.3.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:bee0bd33dc58aa8fc8a7527876e9b9a0e812ad08122054a5bff2ce5abf005b10"}, + {file = "torch-2.3.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:aaa872abde9a3d4f91580f6396d54888620f4a0b92e3976a6034759df4b961ad"}, + {file = "torch-2.3.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3d7a7f7ef21a7520510553dc3938b0c57c116a7daee20736a9e25cbc0e832bdc"}, + {file = "torch-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:4777f6cefa0c2b5fa87223c213e7b6f417cf254a45e5829be4ccd1b2a4ee1011"}, + {file = "torch-2.3.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:2bb5af780c55be68fe100feb0528d2edebace1d55cb2e351de735809ba7391eb"}, ] [package.dependencies] @@ -3431,7 +3434,7 @@ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \" nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" -triton = {version = "2.3.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} +triton = {version = "2.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} typing-extensions = ">=4.8.0" [package.extras] @@ -3440,21 +3443,21 @@ optree = ["optree (>=0.9.1)"] [[package]] name = "torch" -version = "2.3.0+cu121" +version = "2.3.1+cu121" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.3.0+cu121-cp310-cp310-linux_x86_64.whl", hash = "sha256:0a12aa9aa6bc442dff8823ac8b48d991fd0771562eaa38593f9c8196d65f7007"}, - {file = "torch-2.3.0+cu121-cp310-cp310-win_amd64.whl", hash = "sha256:002027d18a9c054f08fe9cf7a729e041229e783e065a71349015dcccc9a7137e"}, - {file = "torch-2.3.0+cu121-cp311-cp311-linux_x86_64.whl", hash = "sha256:5df7e3cb3961018a891e4edef1e0bc1f3304a8d943f81b24a8c6bf687ca49a67"}, - {file = "torch-2.3.0+cu121-cp311-cp311-win_amd64.whl", hash = "sha256:f7876ec20b42dd569e7a11c5af36febccc03830f63dfdedbd4026506e086cab6"}, - {file = "torch-2.3.0+cu121-cp312-cp312-linux_x86_64.whl", hash = "sha256:f15b6f549eebc6e6b22b26754e4f1d7e4469bcd2d4ba1eaab57268ad80bcca96"}, - {file = "torch-2.3.0+cu121-cp312-cp312-win_amd64.whl", hash = "sha256:58ac08166e7a3665362960ff013edd06c90a0926de62de47a930c03563b0ac0f"}, - {file = "torch-2.3.0+cu121-cp38-cp38-linux_x86_64.whl", hash = "sha256:9598b959f564ee3ebe3603b0ba01d24174ca8016feca98104f0301f1490617ca"}, - {file = "torch-2.3.0+cu121-cp38-cp38-win_amd64.whl", hash = "sha256:d7620f3c92e33030274b7b369a93d13ec3b35c965e790d6df27fc6d964a4c829"}, - {file = "torch-2.3.0+cu121-cp39-cp39-linux_x86_64.whl", hash = "sha256:3cc15e4c2682a85518121a2050d6be7976d98fc4843bbc13b6f5bee275a1b6ee"}, - {file = "torch-2.3.0+cu121-cp39-cp39-win_amd64.whl", hash = "sha256:77b690e7e0fd472a5d0146394f74fac82ab1e10b822baa9b955dec0667fe83c6"}, + {file = "torch-2.3.1+cu121-cp310-cp310-linux_x86_64.whl", hash = "sha256:f0deb5d2f932a68ed54625ba140eddbf2af22be978ee19b9b63c986add6425b2"}, + {file = "torch-2.3.1+cu121-cp310-cp310-win_amd64.whl", hash = "sha256:bf1438aeb124fc36ae2d6b4b5c76d751d47a9fc3d7b15291b41f0caa8d5bf27b"}, + {file = "torch-2.3.1+cu121-cp311-cp311-linux_x86_64.whl", hash = "sha256:925e34af0905062a48b4f82d0e6656341ad4d626834a6a8245ef4eaee5375c98"}, + {file = "torch-2.3.1+cu121-cp311-cp311-win_amd64.whl", hash = "sha256:5a578516d0caf233993b3161d7dce1472bb917c59dd767c51921cd6696c3f3f7"}, + {file = "torch-2.3.1+cu121-cp312-cp312-linux_x86_64.whl", hash = "sha256:b3c586f4ab25e83efffccfb97079e91325329bc228166555c4bb93957753d4ea"}, + {file = "torch-2.3.1+cu121-cp312-cp312-win_amd64.whl", hash = "sha256:065a92a5ea2c89aad2bcd93e54c85c04a65c3e4a91cec2815e22c22706ec5183"}, + {file = "torch-2.3.1+cu121-cp38-cp38-linux_x86_64.whl", hash = "sha256:4e410f342fd86c73bea0ed245509d5ff5e6877bda54b249f75a33d535c877f2f"}, + {file = "torch-2.3.1+cu121-cp38-cp38-win_amd64.whl", hash = "sha256:c45c34c482fc20a32fa03511d3e66eb73d9dde0a1e6baffe9f8794d7d9cc6d04"}, + {file = "torch-2.3.1+cu121-cp39-cp39-linux_x86_64.whl", hash = "sha256:dfea610362c0e2a5ff28d322d6aa65d65e03e1334996119a5a3770c7d1821ac4"}, + {file = "torch-2.3.1+cu121-cp39-cp39-win_amd64.whl", hash = "sha256:b221b1534f1a20b5aab5fd547b782adaa0f1925d5421788e286eeaa0cbf6fd68"}, ] [package.dependencies] @@ -3475,7 +3478,7 @@ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \" nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" -triton = {version = "2.3.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} +triton = {version = "2.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} typing-extensions = ">=4.8.0" [package.extras] @@ -3489,64 +3492,64 @@ reference = "torch_cuda" [[package]] name = "torchvision" -version = "0.18.0" +version = "0.18.1" description = "image and video datasets and models for torch deep learning" optional = false python-versions = ">=3.8" files = [ - {file = "torchvision-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dd61628a3d189c6852a12dc5ed4cd2eece66d2d67f35a866cb16f1dcb06c8c62"}, - {file = "torchvision-0.18.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:493c45f9937dad37aa1b64b14da17c7a589c72b91adc4837d431009cfe29bd53"}, - {file = "torchvision-0.18.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5337f6acfa1fe959d5cb340d01a00614d6b31ce7a4824ccb95435a85c5273b95"}, - {file = "torchvision-0.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd8e6f3b5beb49965f15c461302488edfa3d8c2d01d3bb79b150d6fb62711e3a"}, - {file = "torchvision-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6896a52168befe1105fb3c9335287390ed227e71d1e4ec4d68b62e8a3099fc09"}, - {file = "torchvision-0.18.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:3d7955398d4ceaad77c487c2c44f6f7813112402c9bab8cd906d346005891048"}, - {file = "torchvision-0.18.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:e5a24d620cea14a4bb89f24aa2b506230c0a16a3ada57fc53ad80cfd256a2128"}, - {file = "torchvision-0.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:6ad70ddfa879bda5ed886b2518fe562640e0059787cbd65cb2bffa7674541410"}, - {file = "torchvision-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:eb9d83c0e1dbb54ecb0fb04c87f786333e3a6fb8b9c400aca7c31081f9aa5707"}, - {file = "torchvision-0.18.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b657d052d146f24cb3b2a78219bfc82ae70a9706671c50f632528907d10cccec"}, - {file = "torchvision-0.18.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a964afbc7ddf50a46b941477f6c35729b416deedd139756befd488245e2e226d"}, - {file = "torchvision-0.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:7c770f0f748e0b17f57c0297508d7254f686cdf03fc2e2949f422b20574f4c0f"}, - {file = "torchvision-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2115a1906c015f5da9ceedc40a983313b0fd6e2c8a17108a92991706f51f6987"}, - {file = "torchvision-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6323f7e5423ff2594d5891863b919deb9d0de95f01c36bf26fbd879036b6ed08"}, - {file = "torchvision-0.18.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:925d0a82cccf6f986c18b29b4392a942db65cbdb73c13a129c8493822eb9e36f"}, - {file = "torchvision-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:95b42d0dc599b47a01530c7439a5751e67e45b85e3a67113989cf7c7c70f2039"}, - {file = "torchvision-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75e22ecf44a13b8f95b8ad421c0261282d859c61816badaca1959e073ccdd691"}, - {file = "torchvision-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4c334b3e719ba0a9ba6e15d4aff1178f5e6d029174f346163fed525f0ccfffd3"}, - {file = "torchvision-0.18.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:36efd87001c6bee2383e043e46a025affb03179747c8f4777b9918527ffce756"}, - {file = "torchvision-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:ccc292e093771d5baacf5535ac4416306b6b5f15676341cd4d010d8542eace25"}, + {file = "torchvision-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3e694e54b0548dad99c12af6bf0c8e4f3350137d391dcd19af22a1c5f89322b3"}, + {file = "torchvision-0.18.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:0b3bda0aa5b416eeb547143b8eeaf17720bdba9cf516dc991aacb81811aa96a5"}, + {file = "torchvision-0.18.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:573ff523c739405edb085f65cb592f482d28a30e29b0be4c4ba08040b3ae785f"}, + {file = "torchvision-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:ef7bbbc60b38e831a75e547c66ca1784f2ac27100f9e4ddbe9614cef6cbcd942"}, + {file = "torchvision-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80b5d794dd0fdba787adc22f1a367a5ead452327686473cb260dd94364bc56a6"}, + {file = "torchvision-0.18.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:9077cf590cdb3a5e8fdf5cdb71797f8c67713f974cf0228ecb17fcd670ab42f9"}, + {file = "torchvision-0.18.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:ceb993a882f1ae7ae373ed39c28d7e3e802205b0e59a7ed84ef4028f0bba8d7f"}, + {file = "torchvision-0.18.1-cp311-cp311-win_amd64.whl", hash = "sha256:52f7436140045dc2239cdc502aa76b2bd8bd676d64244ff154d304aa69852046"}, + {file = "torchvision-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2be6f0bf7c455c89a51a1dbb6f668d36c6edc479f49ac912d745d10df5715657"}, + {file = "torchvision-0.18.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:f118d887bfde3a948a41d56587525401e5cac1b7db2eaca203324d6ed2b1caca"}, + {file = "torchvision-0.18.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:13d24d904f65e62d66a1e0c41faec630bc193867b8a4a01166769e8a8e8df8e9"}, + {file = "torchvision-0.18.1-cp312-cp312-win_amd64.whl", hash = "sha256:ed6340b69a63a625e512a66127210d412551d9c5f2ad2978130c6a45bf56cd4a"}, + {file = "torchvision-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b1c3864fa9378c88bce8ad0ef3599f4f25397897ce612e1c245c74b97092f35e"}, + {file = "torchvision-0.18.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:02085a2ffc7461f5c0edb07d6f3455ee1806561f37736b903da820067eea58c7"}, + {file = "torchvision-0.18.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9726c316a2501df8503e5a5dc46a631afd4c515a958972e5b7f7b9c87d2125c0"}, + {file = "torchvision-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:64a2662dbf30db9055d8b201d6e56f312a504e5ccd9d144c57c41622d3c524cb"}, + {file = "torchvision-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:975b8594c0f5288875408acbb74946eea786c5b008d129c0d045d0ead23742bc"}, + {file = "torchvision-0.18.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:da83c8bbd34d8bee48bfa1d1b40e0844bc3cba10ed825a5a8cbe3ce7b62264cd"}, + {file = "torchvision-0.18.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:54bfcd352abb396d5c9c237d200167c178bd136051b138e1e8ef46ce367c2773"}, + {file = "torchvision-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:5c8366a1aeee49e9ea9e64b30d199debdf06b1bd7610a76165eb5d7869c3bde5"}, ] [package.dependencies] numpy = "*" pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" -torch = "2.3.0" +torch = "2.3.1" [package.extras] scipy = ["scipy"] [[package]] name = "torchvision" -version = "0.18.0+cu121" +version = "0.18.1+cu121" description = "image and video datasets and models for torch deep learning" optional = false python-versions = ">=3.8" files = [ - {file = "torchvision-0.18.0+cu121-cp310-cp310-linux_x86_64.whl", hash = "sha256:13e1b48dc5ce41ccb8100ab3dd26fdf31d8f1e904ecf2865ac524493013d0df5"}, - {file = "torchvision-0.18.0+cu121-cp310-cp310-win_amd64.whl", hash = "sha256:4ab207a0f35c8c2a43da91f19ee9248520239633dc8e11a9e4a2e77b076bb9db"}, - {file = "torchvision-0.18.0+cu121-cp311-cp311-linux_x86_64.whl", hash = "sha256:1e516779520fc92157d6cb245ac0fd3f79872fe81c84b8593a8f2e998106f5b1"}, - {file = "torchvision-0.18.0+cu121-cp311-cp311-win_amd64.whl", hash = "sha256:3e5557512ec9a31a6ce33a1107827427ef50ad65e88cd35012161d7392ef144b"}, - {file = "torchvision-0.18.0+cu121-cp312-cp312-linux_x86_64.whl", hash = "sha256:700f6019bebee9e0ee8b0bcbdb1588809c94a2eb947a1fde2e06adc34b60da2a"}, - {file = "torchvision-0.18.0+cu121-cp312-cp312-win_amd64.whl", hash = "sha256:e09966baf7945085d7725ac7c944172c632516643d603bde5855f6b3cf68efcf"}, - {file = "torchvision-0.18.0+cu121-cp38-cp38-linux_x86_64.whl", hash = "sha256:c2483b2cc62278fbaa6b67d2a9d808d245044f8b64a821596eae68ec6a0d5ed0"}, - {file = "torchvision-0.18.0+cu121-cp38-cp38-win_amd64.whl", hash = "sha256:1d637b1428a076dfaff71ca0a5b8ef200b5b5ff7dfe2ed9359be0eff43734e5a"}, - {file = "torchvision-0.18.0+cu121-cp39-cp39-linux_x86_64.whl", hash = "sha256:1bfe0c67fd5461a3a593f8f17e1544f07a6bd6686e155200dd244947074fcd51"}, - {file = "torchvision-0.18.0+cu121-cp39-cp39-win_amd64.whl", hash = "sha256:611bb0b42c51de0c1bbcc8e90f88b4d48c8b99451bdb2e4761028b93cb086437"}, + {file = "torchvision-0.18.1+cu121-cp310-cp310-linux_x86_64.whl", hash = "sha256:e95ba5a2c616939281e01babf11664d6d1725e81bba57ef81f81c3e57e4d4151"}, + {file = "torchvision-0.18.1+cu121-cp310-cp310-win_amd64.whl", hash = "sha256:fc2daccb9d290118fd706f42c280f4dcb5e2eb1e7e37b614f490dd548defe5b5"}, + {file = "torchvision-0.18.1+cu121-cp311-cp311-linux_x86_64.whl", hash = "sha256:2b2aec2c68e0ba17f9eed8921796fa2dbc7a493dea7a3b45d25c055ad4174868"}, + {file = "torchvision-0.18.1+cu121-cp311-cp311-win_amd64.whl", hash = "sha256:d85e21c03ab40b3676caaca4ec951a1f3a74ddcac3e68521c81f1869eb53ebf9"}, + {file = "torchvision-0.18.1+cu121-cp312-cp312-linux_x86_64.whl", hash = "sha256:ce8d5b992056f0640a39ef5734342e43ca4a801547de27fb8dbc3055d9345947"}, + {file = "torchvision-0.18.1+cu121-cp312-cp312-win_amd64.whl", hash = "sha256:4ef51349a1be161a60a8ad7e6f575917b13628e8255353f79c6a2c4d1432040f"}, + {file = "torchvision-0.18.1+cu121-cp38-cp38-linux_x86_64.whl", hash = "sha256:aee8961dcb8a418e92d06d4b3e9af52987293a48c14231c3c50c8eea3741e412"}, + {file = "torchvision-0.18.1+cu121-cp38-cp38-win_amd64.whl", hash = "sha256:54b167a0f8c17b568c0d7191aec45f77f6af4d9b0b8549e1857b34babbc5d9a6"}, + {file = "torchvision-0.18.1+cu121-cp39-cp39-linux_x86_64.whl", hash = "sha256:1ebf5dbbdf3af446c84e42baf2edbeb1bd6fb0cc9d3b4901af969c8391d14a5e"}, + {file = "torchvision-0.18.1+cu121-cp39-cp39-win_amd64.whl", hash = "sha256:15c3684dd265add6614a42b734e1b5a346e5a03ffa2414d2869cc01f9204b465"}, ] [package.dependencies] numpy = "*" pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" -torch = "2.3.0" +torch = "2.3.1" [package.extras] scipy = ["scipy"] @@ -3558,22 +3561,22 @@ reference = "torch_cuda" [[package]] name = "tornado" -version = "6.4" +version = "6.4.1" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, - {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, - {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, - {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, - {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] [[package]] @@ -3679,17 +3682,17 @@ vision = ["Pillow (>=10.0.1,<=15.0)"] [[package]] name = "triton" -version = "2.3.0" +version = "2.3.1" description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" files = [ - {file = "triton-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ce4b8ff70c48e47274c66f269cce8861cf1dc347ceeb7a67414ca151b1822d8"}, - {file = "triton-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c3d9607f85103afdb279938fc1dd2a66e4f5999a58eb48a346bd42738f986dd"}, - {file = "triton-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:218d742e67480d9581bafb73ed598416cc8a56f6316152e5562ee65e33de01c0"}, - {file = "triton-2.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381ec6b3dac06922d3e4099cfc943ef032893b25415de295e82b1a82b0359d2c"}, - {file = "triton-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038e06a09c06a164fef9c48de3af1e13a63dc1ba3c792871e61a8e79720ea440"}, - {file = "triton-2.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8f636e0341ac348899a47a057c3daea99ea7db31528a225a3ba4ded28ccc65"}, + {file = "triton-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c84595cbe5e546b1b290d2a58b1494df5a2ef066dd890655e5b8a8a92205c33"}, + {file = "triton-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9d64ae33bcb3a7a18081e3a746e8cf87ca8623ca13d2c362413ce7a486f893e"}, + {file = "triton-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaf80e8761a9e3498aa92e7bf83a085b31959c61f5e8ac14eedd018df6fccd10"}, + {file = "triton-2.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b13bf35a2b659af7159bf78e92798dc62d877aa991de723937329e2d382f1991"}, + {file = "triton-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63381e35ded3304704ea867ffde3b7cfc42c16a55b3062d41e017ef510433d66"}, + {file = "triton-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d968264523c7a07911c8fb51b4e0d1b920204dae71491b1fe7b01b62a31e124"}, ] [package.dependencies] @@ -3724,13 +3727,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.1" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] diff --git a/src/safeds/data/image/containers/_image.py b/src/safeds/data/image/containers/_image.py index c8a316812..b1ce3abd8 100644 --- a/src/safeds/data/image/containers/_image.py +++ b/src/safeds/data/image/containers/_image.py @@ -429,6 +429,9 @@ def convert_to_grayscale(self) -> Image: """ Return a new `Image` that is converted to grayscale. + The new image will have the same amount of channels as the original image. + If you want to change the amount of channels used, please use the method [change_channel][safeds.data.image.containers._image.Image.change_channel]. + The original image is not modified. Returns diff --git a/src/safeds/data/image/containers/_image_list.py b/src/safeds/data/image/containers/_image_list.py index 864a9cc54..7a86d03ee 100644 --- a/src/safeds/data/image/containers/_image_list.py +++ b/src/safeds/data/image/containers/_image_list.py @@ -404,7 +404,7 @@ def __contains__(self, item: object) -> bool: Returns ------- has_item: - Weather the given item is in this image list + Whether the given item is in this image list """ return isinstance(item, Image) and self.has_image(item) @@ -524,7 +524,7 @@ def has_image(self, image: Image) -> bool: Returns ------- has_image: - Weather the given image is in this image list + Whether the given image is in this image list """ # ------------------------------------------------------------------------------------------------------------------ @@ -876,6 +876,9 @@ def convert_to_grayscale(self) -> ImageList: """ Return a new `ImageList` with all images converted to grayscale. + The new image list will have the same amount of channels as the original image list. + If you want to change the amount of channels used, please use the method [change_channel][safeds.data.image.containers._image_list.ImageList.change_channel]. + The original image list is not modified. Returns diff --git a/src/safeds/data/labeled/containers/_image_dataset.py b/src/safeds/data/labeled/containers/_image_dataset.py index ec50d9835..c852c11a8 100644 --- a/src/safeds/data/labeled/containers/_image_dataset.py +++ b/src/safeds/data/labeled/containers/_image_dataset.py @@ -43,7 +43,7 @@ class ImageDataset(Dataset[ImageList, Out_co]): batch_size: the batch size used for training shuffle: - weather the data should be shuffled after each epoch of training + whether the data should be shuffled after each epoch of training """ def __init__(self, input_data: ImageList, output_data: Out_co, batch_size: int = 1, shuffle: bool = False) -> None: @@ -108,13 +108,13 @@ def __iter__(self) -> ImageDataset: return im_ds def __next__(self) -> tuple[Tensor, Tensor]: - if self._next_batch_index * self._batch_size >= len(self._input): + if self._next_batch_index * self._batch_size >= len(self._shuffle_tensor_indices): raise StopIteration self._next_batch_index += 1 return self._get_batch(self._next_batch_index - 1) def __len__(self) -> int: - return self._input.image_count + return len(self._shuffle_tensor_indices) def __eq__(self, other: object) -> bool: """ @@ -138,6 +138,7 @@ def __eq__(self, other: object) -> bool: and isinstance(other._output, type(self._output)) and (self._input == other._input) and (self._output == other._output) + and (self._shuffle_tensor_indices.tolist() == other._shuffle_tensor_indices.tolist()) ) def __hash__(self) -> int: @@ -149,7 +150,13 @@ def __hash__(self) -> int: hash: the hash value """ - return _structural_hash(self._input, self._output, self._shuffle_after_epoch, self._batch_size) + return _structural_hash( + self._input, + self._output, + self._shuffle_after_epoch, + self._batch_size, + self._shuffle_tensor_indices.tolist(), + ) def __sizeof__(self) -> int: """ @@ -205,7 +212,7 @@ def get_input(self) -> ImageList: input: the input data of this dataset """ - return self._sort_image_list_with_shuffle_tensor_indices(self._input) + return self._sort_image_list_with_shuffle_tensor_indices_reduce_if_necessary(self._input) def get_output(self) -> Out_co: """ @@ -222,19 +229,25 @@ def get_output(self) -> Out_co: elif isinstance(output, _ColumnAsTensor): return output._to_column(self._shuffle_tensor_indices) # type: ignore[return-value] else: - return self._sort_image_list_with_shuffle_tensor_indices(self._output) # type: ignore[return-value] + return self._sort_image_list_with_shuffle_tensor_indices_reduce_if_necessary(self._output) # type: ignore[return-value] - def _sort_image_list_with_shuffle_tensor_indices(self, image_list: _SingleSizeImageList) -> _SingleSizeImageList: + def _sort_image_list_with_shuffle_tensor_indices_reduce_if_necessary( + self, + image_list: _SingleSizeImageList, + ) -> _SingleSizeImageList: shuffled_image_list = _SingleSizeImageList() - shuffled_image_list._tensor = image_list._tensor - shuffled_image_list._indices_to_tensor_positions = { - index: self._shuffle_tensor_indices[tensor_position].item() - for index, tensor_position in image_list._indices_to_tensor_positions.items() + tensor_pos = [ + image_list._indices_to_tensor_positions[shuffled_index] + for shuffled_index in sorted(self._shuffle_tensor_indices.tolist()) + ] + temp_pos = { + shuffled_index: new_index for new_index, shuffled_index in enumerate(self._shuffle_tensor_indices.tolist()) } + shuffled_image_list._tensor = image_list._tensor[tensor_pos] shuffled_image_list._tensor_positions_to_indices = [ - index - for index, _ in sorted(shuffled_image_list._indices_to_tensor_positions.items(), key=lambda item: item[1]) + new_index for _, new_index in sorted(temp_pos.items(), key=lambda item: item[0]) ] + shuffled_image_list._indices_to_tensor_positions = shuffled_image_list._calc_new_indices_to_tensor_positions() return shuffled_image_list def _get_batch(self, batch_number: int, batch_size: int | None = None) -> tuple[Tensor, Tensor]: @@ -247,18 +260,18 @@ def _get_batch(self, batch_number: int, batch_size: int | None = None) -> tuple[ _check_bounds("batch_size", batch_size, lower_bound=_ClosedBound(1)) - if batch_number < 0 or batch_size * batch_number >= len(self._input): + if batch_number < 0 or batch_size * batch_number >= len(self._shuffle_tensor_indices): raise IndexOutOfBoundsError(batch_size * batch_number) max_index = ( - batch_size * (batch_number + 1) if batch_size * (batch_number + 1) < len(self._input) else len(self._input) + batch_size * (batch_number + 1) + if batch_size * (batch_number + 1) < len(self._shuffle_tensor_indices) + else len(self._shuffle_tensor_indices) ) input_tensor = ( self._input._tensor[ - self._shuffle_tensor_indices[ - [ - self._input._indices_to_tensor_positions[index] - for index in range(batch_size * batch_number, max_index) - ] + [ + self._input._indices_to_tensor_positions[index] + for index in self._shuffle_tensor_indices[batch_size * batch_number : max_index].tolist() ] ].to(torch.float32) / 255 @@ -267,11 +280,9 @@ def _get_batch(self, batch_number: int, batch_size: int | None = None) -> tuple[ if isinstance(self._output, _SingleSizeImageList): output_tensor = ( self._output._tensor[ - self._shuffle_tensor_indices[ - [ - self._output._indices_to_tensor_positions[index] - for index in range(batch_size * batch_number, max_index) - ] + [ + self._input._indices_to_tensor_positions[index] + for index in self._shuffle_tensor_indices[batch_size * batch_number : max_index].tolist() ] ].to(torch.float32) / 255 @@ -284,7 +295,7 @@ def shuffle(self) -> ImageDataset[Out_co]: """ Return a new `ImageDataset` with shuffled data. - The original dataset list is not modified. + The original dataset is not modified. Returns ------- @@ -296,10 +307,71 @@ def shuffle(self) -> ImageDataset[Out_co]: _init_default_device() im_dataset: ImageDataset[Out_co] = copy.copy(self) - im_dataset._shuffle_tensor_indices = torch.randperm(len(self)) + im_dataset._shuffle_tensor_indices = self._shuffle_tensor_indices[ + torch.randperm(len(self._shuffle_tensor_indices)) + ] im_dataset._next_batch_index = 0 return im_dataset + def split( + self, + percentage_in_first: float, + *, + shuffle: bool = True, + ) -> tuple[ImageDataset[Out_co], ImageDataset[Out_co]]: + """ + Create two image datasets by splitting the data of the current dataset. + + The first dataset contains a percentage of the data specified by `percentage_in_first`, and the second dataset + contains the remaining data. + + The original dataset is not modified. + By default, the data is shuffled before splitting. You can disable this by setting `shuffle` to False. + + Parameters + ---------- + percentage_in_first: + The percentage of data to include in the first dataset. Must be between 0 and 1. + shuffle: + Whether to shuffle the data before splitting. + + Returns + ------- + first_dataset: + The first dataset. + second_dataset: + The second dataset. + + Raises + ------ + OutOfBoundsError + If `percentage_in_first` is not between 0 and 1. + """ + import torch + + _check_bounds( + "percentage_in_first", + percentage_in_first, + lower_bound=_ClosedBound(0), + upper_bound=_ClosedBound(1), + ) + + first_dataset: ImageDataset[Out_co] = copy.copy(self) + second_dataset: ImageDataset[Out_co] = copy.copy(self) + + if shuffle: + shuffled_indices = torch.randperm(len(self._shuffle_tensor_indices)) + else: + shuffled_indices = torch.arange(len(self._shuffle_tensor_indices)) + + first_dataset._shuffle_tensor_indices, second_dataset._shuffle_tensor_indices = shuffled_indices.split( + [ + round(percentage_in_first * len(self)), + len(self) - round(percentage_in_first * len(self)), + ], + ) + return first_dataset, second_dataset + class _TableAsTensor: def __init__(self, table: Table) -> None: diff --git a/src/safeds/data/tabular/containers/_lazy_temporal_cell.py b/src/safeds/data/tabular/containers/_lazy_temporal_cell.py index 12619605c..180ecb58c 100644 --- a/src/safeds/data/tabular/containers/_lazy_temporal_cell.py +++ b/src/safeds/data/tabular/containers/_lazy_temporal_cell.py @@ -31,6 +31,24 @@ def __sizeof__(self) -> int: # Temporal operations # ------------------------------------------------------------------------------------------------------------------ + def century(self) -> Cell[int]: + return _LazyCell(self._expression.dt.century()) + + def weekday(self) -> Cell[int]: + return _LazyCell(self._expression.dt.weekday()) + + def week(self) -> Cell[int]: + return _LazyCell(self._expression.dt.week()) + + def year(self) -> Cell[int]: + return _LazyCell(self._expression.dt.year()) + + def month(self) -> Cell[int]: + return _LazyCell(self._expression.dt.month()) + + def day(self) -> Cell[int]: + return _LazyCell(self._expression.dt.day()) + def datetime_to_string(self, format_string: str = "%Y/%m/%d %H:%M:%S") -> Cell[str]: if not _check_format_string(format_string): raise ValueError("Invalid format string") diff --git a/src/safeds/data/tabular/containers/_temporal_cell.py b/src/safeds/data/tabular/containers/_temporal_cell.py index 85368bec4..e4a3dca59 100644 --- a/src/safeds/data/tabular/containers/_temporal_cell.py +++ b/src/safeds/data/tabular/containers/_temporal_cell.py @@ -9,12 +9,9 @@ class TemporalCell(ABC): """ - A class that contains temporal methods for a column. + Namespace for operations on temporal data. - Parameters - ---------- - column: - The column to be operated on. + This class cannot be instantiated directly. It can only be accessed using the `dt` attribute of a cell. Examples -------- @@ -31,6 +28,150 @@ class TemporalCell(ABC): +------------+ """ + @abstractmethod + def century(self) -> Cell[int]: + """ + Get the century of the underlying date(time) data. + + Returns + ------- + A cell containing the century as integer. + + Examples + -------- + >>> from safeds.data.tabular.containers import Column + >>> import datetime + >>> column = Column("example", [datetime.date(2022, 1, 1)]) + >>> column.transform(lambda cell: cell.dt.century()) + +---------+ + | example | + | --- | + | i32 | + +=========+ + | 21 | + +---------+ + """ + + @abstractmethod + def weekday(self) -> Cell[int]: + """ + Get the weekday of the underlying date(time) data. + + Returns + ------- + A cell containing the weekday as integer. + + Examples + -------- + >>> from safeds.data.tabular.containers import Column + >>> import datetime + >>> column = Column("example", [datetime.date(2022, 1, 1)]) + >>> column.transform(lambda cell: cell.dt.weekday()) + +---------+ + | example | + | --- | + | i8 | + +=========+ + | 6 | + +---------+ + """ + + @abstractmethod + def week(self) -> Cell[int]: + """ + Get the week of the underlying date(time) data. + + Returns + ------- + A cell containing the week as integer. + + Examples + -------- + >>> from safeds.data.tabular.containers import Column + >>> import datetime + >>> column = Column("example", [datetime.date(2022, 1, 1)]) + >>> column.transform(lambda cell: cell.dt.week()) + +---------+ + | example | + | --- | + | i8 | + +=========+ + | 52 | + +---------+ + """ + + @abstractmethod + def year(self) -> Cell[int]: + """ + Get the year of the underlying date(time) data. + + Returns + ------- + A cell containing the year as integer. + + Examples + -------- + >>> from safeds.data.tabular.containers import Column + >>> import datetime + >>> column = Column("example", [datetime.date(2022, 1, 9)]) + >>> column.transform(lambda cell: cell.dt.year()) + +---------+ + | example | + | --- | + | i32 | + +=========+ + | 2022 | + +---------+ + """ + + @abstractmethod + def month(self) -> Cell[int]: + """ + Get the month of the underlying date(time) data. + + Returns + ------- + A cell containing the month as integer. + + Examples + -------- + >>> from safeds.data.tabular.containers import Column + >>> import datetime + >>> column = Column("example", [datetime.date(2022, 1, 9)]) + >>> column.transform(lambda cell: cell.dt.month()) + +---------+ + | example | + | --- | + | i8 | + +=========+ + | 1 | + +---------+ + """ + + @abstractmethod + def day(self) -> Cell[int]: + """ + Get the day of the underlying date(time) data. + + Returns + ------- + A cell containing the day as integer. + + Examples + -------- + >>> from safeds.data.tabular.containers import Column + >>> import datetime + >>> column = Column("example", [datetime.date(2022, 1, 9)]) + >>> column.transform(lambda cell: cell.dt.day()) + +---------+ + | example | + | --- | + | i8 | + +=========+ + | 9 | + +---------+ + """ + @abstractmethod def datetime_to_string(self, format_string: str = "%Y/%m/%d %H:%M:%S") -> Cell[str]: """ diff --git a/src/safeds/data/tabular/plotting/_table_plotter.py b/src/safeds/data/tabular/plotting/_table_plotter.py index 7d1cca2e6..573dd258c 100644 --- a/src/safeds/data/tabular/plotting/_table_plotter.py +++ b/src/safeds/data/tabular/plotting/_table_plotter.py @@ -97,7 +97,7 @@ def correlation_heatmap(self) -> Image: # TODO: implement using matplotlib and polars # https://stackoverflow.com/questions/33282368/plotting-a-2d-heatmap import matplotlib.pyplot as plt - import seaborn as sns + import numpy as np only_numerical = self._table.remove_non_numeric_columns()._data_frame.fill_null(0) @@ -115,15 +115,18 @@ def correlation_heatmap(self) -> Image: " automatically expanding." ), ) - fig = plt.figure() - sns.heatmap( - data=only_numerical.corr().to_numpy(), + + fig, ax = plt.subplots() + heatmap = plt.imshow( + only_numerical.corr().to_numpy(), vmin=-1, vmax=1, - xticklabels=only_numerical.columns, - yticklabels=only_numerical.columns, - cmap="vlag", + cmap="coolwarm", ) + ax.set_xticks(np.arange(len(only_numerical.columns)), labels=only_numerical.columns) + ax.set_yticks(np.arange(len(only_numerical.columns)), labels=only_numerical.columns) + fig.colorbar(heatmap) + plt.tight_layout() return _figure_to_image(fig) @@ -353,6 +356,81 @@ def scatter_plot(self, x_name: str, y_names: list[str]) -> Image: return _figure_to_image(fig) + def moving_average_plot(self, x_name: str, y_name: str, window_size: int) -> Image: + """ + Create a moving average plot for the y column and plot it by the x column in the table. + + Parameters + ---------- + x_name: + The name of the column to be plotted on the x-axis. + y_name: + The name of the column to be plotted on the y-axis. + + Returns + ------- + plot: + The plot as an image. + + Raises + ------ + ColumnNotFoundError + If a column does not exist. + TypeError + If a column is not numeric. + + Examples + -------- + >>> from safeds.data.tabular.containers import Table + >>> table = Table( + ... { + ... "a": [1, 2, 3, 4, 5], + ... "b": [2, 3, 4, 5, 6], + ... } + ... ) + >>> image = table.plot.moving_average_plot("a", "b", window_size = 2) + """ + import matplotlib.pyplot as plt + import numpy as np + import polars as pl + + _plot_validation(self._table, x_name, [y_name]) + for name in [x_name, y_name]: + if self._table.get_column(name).missing_value_count() >= 1: + raise ValueError( + f"there are missing values in column '{name}', use transformation to fill missing values " + f"or drop the missing values. For a moving average no missing values are allowed.", + ) + + # Calculate the moving average + mean_col = pl.col(y_name).mean().alias(y_name) + grouped = self._table._lazy_frame.sort(x_name).group_by(x_name).agg(mean_col).collect() + data = grouped + moving_average = data.select([pl.col(y_name).rolling_mean(window_size).alias("moving_average")]) + # set up the arrays for plotting + y_data_with_nan = moving_average["moving_average"].to_numpy() + nan_mask = ~np.isnan(y_data_with_nan) + y_data = y_data_with_nan[nan_mask] + x_data = data[x_name].to_numpy()[nan_mask] + fig, ax = plt.subplots() + ax.plot(x_data, y_data, label="moving average") + ax.set( + xlabel=x_name, + ylabel=y_name, + ) + ax.legend() + if self._table.get_column(x_name).is_temporal: + ax.set_xticks(x_data) # Set x-ticks to the x data points + ax.set_xticks(ax.get_xticks()) + ax.set_xticklabels( + ax.get_xticklabels(), + rotation=45, + horizontalalignment="right", + ) # rotate the labels of the x Axis to prevent the chance of overlapping of the labels + fig.tight_layout() + + return _figure_to_image(fig) + def _plot_validation(table: Table, x_name: str, y_names: list[str]) -> None: y_names.append(x_name) diff --git a/src/safeds/data/tabular/transformation/_range_scaler.py b/src/safeds/data/tabular/transformation/_range_scaler.py index c54b60dc8..3a93be88b 100644 --- a/src/safeds/data/tabular/transformation/_range_scaler.py +++ b/src/safeds/data/tabular/transformation/_range_scaler.py @@ -37,13 +37,7 @@ class RangeScaler(InvertibleTableTransformer): # Dunder methods # ------------------------------------------------------------------------------------------------------------------ - def __init__( - self, - min_: float = 0.0, - max_: float = 1.0, - *, - column_names: str | list[str] | None = None, - ) -> None: + def __init__(self, *, column_names: str | list[str] | None = None, min_: float = 0.0, max_: float = 1.0) -> None: super().__init__(column_names) if min_ >= max_: diff --git a/src/safeds/exceptions/__init__.py b/src/safeds/exceptions/__init__.py index 4c2241941..dabbc3afa 100644 --- a/src/safeds/exceptions/__init__.py +++ b/src/safeds/exceptions/__init__.py @@ -16,14 +16,15 @@ from ._ml import ( DatasetMissesDataError, DatasetMissesFeaturesError, - TargetDataMismatchError, FeatureDataMismatchError, InputSizeError, + InvalidFitDataError, InvalidModelStructureError, LearningError, ModelNotFittedError, PlainTableError, PredictionError, + TargetDataMismatchError, ) @@ -71,6 +72,7 @@ class OutOfBoundsError(SafeDsError): "DatasetMissesFeaturesError", "TargetDataMismatchError", "FeatureDataMismatchError", + "InvalidFitDataError", "InputSizeError", "InvalidModelStructureError", "LearningError", diff --git a/src/safeds/exceptions/_ml.py b/src/safeds/exceptions/_ml.py index f95360455..b7600df34 100644 --- a/src/safeds/exceptions/_ml.py +++ b/src/safeds/exceptions/_ml.py @@ -30,7 +30,9 @@ class TargetDataMismatchError(ValueError): """ def __init__(self, actual_target_name: str, missing_target_name: str): - super().__init__(f"The provided target column '{actual_target_name}' does not match the target column of the training set '{missing_target_name}'.") + super().__init__( + f"The provided target column '{actual_target_name}' does not match the target column of the training set '{missing_target_name}'.", + ) class DatasetMissesDataError(ValueError): @@ -40,6 +42,13 @@ def __init__(self) -> None: super().__init__("Dataset contains no rows") +class InvalidFitDataError(Exception): + """Raised when a Neural Network is fitted on invalid data.""" + + def __init__(self, reason: str) -> None: + super().__init__(f"The given Fit Data is invalid:\n{reason}") + + class LearningError(Exception): """ Raised when an error occurred while training a model. diff --git a/src/safeds/ml/classical/classification/_baseline_classifier.py b/src/safeds/ml/classical/classification/_baseline_classifier.py index 907b69b9d..7b58d61e2 100644 --- a/src/safeds/ml/classical/classification/_baseline_classifier.py +++ b/src/safeds/ml/classical/classification/_baseline_classifier.py @@ -6,9 +6,9 @@ from safeds.data.labeled.containers import TabularDataset from safeds.exceptions import ( DatasetMissesDataError, - TargetDataMismatchError, FeatureDataMismatchError, ModelNotFittedError, + TargetDataMismatchError, ) from safeds.ml.classical.classification import ( AdaBoostClassifier, @@ -140,7 +140,10 @@ def predict(self, test_data: TabularDataset) -> dict[str, float]: if not self._feature_names == test_data.features.column_names: raise FeatureDataMismatchError if not self._target_name == test_data.target.name: - raise TargetDataMismatchError(actual_target_name=test_data.target.name, missing_target_name=self._target_name) + raise TargetDataMismatchError( + actual_target_name=test_data.target.name, + missing_target_name=self._target_name, + ) test_data_as_table = test_data.to_table() if test_data_as_table.row_count == 0: raise DatasetMissesDataError diff --git a/src/safeds/ml/classical/regression/_baseline_regressor.py b/src/safeds/ml/classical/regression/_baseline_regressor.py index 29e91ff7a..4562ed122 100644 --- a/src/safeds/ml/classical/regression/_baseline_regressor.py +++ b/src/safeds/ml/classical/regression/_baseline_regressor.py @@ -6,9 +6,9 @@ from safeds.data.labeled.containers import TabularDataset from safeds.exceptions import ( DatasetMissesDataError, - TargetDataMismatchError, FeatureDataMismatchError, ModelNotFittedError, + TargetDataMismatchError, ) from safeds.ml.classical.regression import ( AdaBoostRegressor, @@ -149,7 +149,10 @@ def predict(self, test_data: TabularDataset) -> dict[str, float]: if not self._feature_names == test_data.features.column_names: raise FeatureDataMismatchError if not self._target_name == test_data.target.name: - raise TargetDataMismatchError(actual_target_name=test_data.target.name, missing_target_name=self._target_name) + raise TargetDataMismatchError( + actual_target_name=test_data.target.name, + missing_target_name=self._target_name, + ) test_data_as_table = test_data.to_table() if test_data_as_table.row_count == 0: raise DatasetMissesDataError diff --git a/src/safeds/ml/nn/converters/_input_converter_table.py b/src/safeds/ml/nn/converters/_input_converter_table.py index 52d64ac01..7f26b39af 100644 --- a/src/safeds/ml/nn/converters/_input_converter_table.py +++ b/src/safeds/ml/nn/converters/_input_converter_table.py @@ -4,6 +4,7 @@ from safeds.data.labeled.containers import TabularDataset from safeds.data.tabular.containers import Column, Table +from safeds.exceptions import InvalidFitDataError from ._input_converter import InputConversion @@ -43,6 +44,24 @@ def _is_fit_data_valid(self, input_data: TabularDataset) -> bool: self._feature_names = input_data.features.column_names self._target_name = input_data.target.name self._first = False + + columns_with_missing_values = [] + columns_with_non_numerical_data = [] + + for col in input_data.features.add_columns([input_data.target]).to_columns(): + if col.missing_value_count() > 0: + columns_with_missing_values.append(col.name) + if not col.type.is_numeric: + columns_with_non_numerical_data.append(col.name) + + reason = "" + if len(columns_with_missing_values) > 0: + reason += f"The following Columns contain missing values: {columns_with_missing_values}\n" + if len(columns_with_non_numerical_data) > 0: + reason += f"The following Columns contain non-numerical data: {columns_with_non_numerical_data}" + if reason != "": + raise InvalidFitDataError(reason) + return (sorted(input_data.features.column_names)).__eq__(sorted(self._feature_names)) def _is_predict_data_valid(self, input_data: Table) -> bool: diff --git a/src/safeds/ml/nn/layers/__init__.py b/src/safeds/ml/nn/layers/__init__.py index a499a3e0e..71ef0ab64 100644 --- a/src/safeds/ml/nn/layers/__init__.py +++ b/src/safeds/ml/nn/layers/__init__.py @@ -8,6 +8,7 @@ from ._convolutional2d_layer import Convolutional2DLayer, ConvolutionalTranspose2DLayer from ._flatten_layer import FlattenLayer from ._forward_layer import ForwardLayer + from ._gru_layer import GRULayer from ._layer import Layer from ._lstm_layer import LSTMLayer from ._pooling2d_layer import AveragePooling2DLayer, MaxPooling2DLayer @@ -21,6 +22,7 @@ "ForwardLayer": "._forward_layer:ForwardLayer", "Layer": "._layer:Layer", "LSTMLayer": "._lstm_layer:LSTMLayer", + "GRULayer": "._gru_layer:GRULayer", "AveragePooling2DLayer": "._pooling2d_layer:AveragePooling2DLayer", "MaxPooling2DLayer": "._pooling2d_layer:MaxPooling2DLayer", }, @@ -33,6 +35,7 @@ "ForwardLayer", "Layer", "LSTMLayer", + "GRULayer", "AveragePooling2DLayer", "MaxPooling2DLayer", ] diff --git a/src/safeds/ml/nn/layers/_gru_layer.py b/src/safeds/ml/nn/layers/_gru_layer.py new file mode 100644 index 000000000..e74fec417 --- /dev/null +++ b/src/safeds/ml/nn/layers/_gru_layer.py @@ -0,0 +1,97 @@ +from __future__ import annotations + +import sys +from typing import TYPE_CHECKING, Any + +from safeds._utils import _structural_hash +from safeds._validation import _check_bounds, _ClosedBound +from safeds.ml.nn.typing import ModelImageSize + +from ._layer import Layer + +if TYPE_CHECKING: + from torch import nn + + +class GRULayer(Layer): + """ + A gated recurrent unit (GRU) layer. + + Parameters + ---------- + neuron_count: + The number of neurons in this layer + + Raises + ------ + OutOfBoundsError + If input_size < 1 + If output_size < 1 + """ + + def __init__(self, neuron_count: int): + _check_bounds("neuron_count", neuron_count, lower_bound=_ClosedBound(1)) + + self._input_size: int | None = None + self._output_size = neuron_count + + def _get_internal_layer(self, **kwargs: Any) -> nn.Module: + from ._internal_layers import _InternalGRULayer # Slow import on global level + + if "activation_function" not in kwargs: + raise ValueError( + "The activation_function is not set. The internal layer can only be created when the activation_function is provided in the kwargs.", + ) + else: + activation_function: str = kwargs["activation_function"] + + if self._input_size is None: + raise ValueError("The input_size is not yet set.") + + return _InternalGRULayer(self._input_size, self._output_size, activation_function) + + @property + def input_size(self) -> int: + """ + Get the input_size of this layer. + + Returns + ------- + result: + The amount of values being passed into this layer. + """ + if self._input_size is None: + raise ValueError("The input_size is not yet set.") + return self._input_size + + @property + def output_size(self) -> int: + """ + Get the output_size of this layer. + + Returns + ------- + result: + The number of neurons in this layer. + """ + return self._output_size + + def _set_input_size(self, input_size: int | ModelImageSize) -> None: + if isinstance(input_size, ModelImageSize): + raise TypeError("The input_size of a forward layer has to be of type int.") + + self._input_size = input_size + + def __hash__(self) -> int: + return _structural_hash( + self._input_size, + self._output_size, + ) # pragma: no cover + + def __eq__(self, other: object) -> bool: + if not isinstance(other, GRULayer): + return NotImplemented + return (self is other) or (self._input_size == other._input_size and self._output_size == other._output_size) + + def __sizeof__(self) -> int: + return sys.getsizeof(self._input_size) + sys.getsizeof(self._output_size) diff --git a/src/safeds/ml/nn/layers/_internal_layers.py b/src/safeds/ml/nn/layers/_internal_layers.py index 140be6807..321ca21eb 100644 --- a/src/safeds/ml/nn/layers/_internal_layers.py +++ b/src/safeds/ml/nn/layers/_internal_layers.py @@ -128,3 +128,26 @@ def __init__(self, strategy: Literal["max", "avg"], kernel_size: int, padding: i def forward(self, x: Tensor) -> Tensor: return self._layer(x) + + +class _InternalGRULayer(nn.Module): + def __init__(self, input_size: int, output_size: int, activation_function: str): + super().__init__() + + _init_default_device() + + self._layer = nn.GRU(input_size, output_size) + match activation_function: + case "sigmoid": + self._fn = nn.Sigmoid() + case "relu": + self._fn = nn.ReLU() + case "softmax": + self._fn = nn.Softmax() + case "none": + self._fn = None + case _: + raise ValueError("Unknown Activation Function: " + activation_function) + + def forward(self, x: Tensor) -> Tensor: + return self._fn(self._layer(x)[0]) if self._fn is not None else self._layer(x)[0] diff --git a/tests/safeds/data/labeled/containers/test_image_dataset.py b/tests/safeds/data/labeled/containers/test_image_dataset.py index 0c487d3b3..bd02f32ce 100644 --- a/tests/safeds/data/labeled/containers/test_image_dataset.py +++ b/tests/safeds/data/labeled/containers/test_image_dataset.py @@ -381,6 +381,109 @@ def test_get_batch_device(self, device: Device) -> None: assert batch[1].device == _get_device() +@pytest.mark.parametrize("device", get_devices(), ids=get_devices_ids()) +@pytest.mark.parametrize("shuffle", [True, False]) +class TestSplit: + + @pytest.mark.parametrize( + "output", + [ + Column("images", images_all()[:4] + images_all()[5:]), + Table( + { + "0": [1, 0, 0, 0, 0, 0], + "1": [0, 1, 0, 0, 0, 0], + "2": [0, 0, 1, 0, 0, 0], + "3": [0, 0, 0, 1, 0, 0], + "4": [0, 0, 0, 0, 1, 0], + "5": [0, 0, 0, 0, 0, 1], + }, + ), + _EmptyImageList(), + ], + ids=["Column", "Table", "ImageList"], + ) + def test_should_split(self, device: Device, shuffle: bool, output: Column | Table | ImageList) -> None: + configure_test_with_device(device) + image_list = ImageList.from_files(resolve_resource_path(images_all())).remove_duplicate_images().resize(10, 10) + if isinstance(output, _EmptyImageList): + output = image_list + image_dataset = ImageDataset(image_list, output) # type: ignore[type-var] + image_dataset1, image_dataset2 = image_dataset.split(0.4, shuffle=shuffle) + offset = len(image_dataset1) + assert len(image_dataset1) == round(0.4 * len(image_dataset)) + assert len(image_dataset2) == len(image_dataset) - offset + assert len(image_dataset1.get_input()) == round(0.4 * len(image_dataset)) + assert len(image_dataset2.get_input()) == len(image_dataset) - offset + im1_output = image_dataset1.get_output() + im2_output = image_dataset2.get_output() + if isinstance(im1_output, Table): + assert im1_output.row_count == round(0.4 * len(image_dataset)) + else: + assert len(im1_output) == round(0.4 * len(image_dataset)) + if isinstance(im2_output, Table): + assert im2_output.row_count == len(image_dataset) - offset + else: + assert len(im2_output) == len(image_dataset) - offset + + assert image_dataset != image_dataset1 + assert image_dataset != image_dataset2 + assert image_dataset1 != image_dataset2 + + for i, image in enumerate(image_dataset1.get_input().to_images()): + index = image_list.index(image)[0] + if not shuffle: + assert index == i + out = image_dataset1.get_output() + if isinstance(out, ImageList): + assert image_list.index(out.get_image(i))[0] == index + elif isinstance(out, Column) and isinstance(output, Column): + assert output.to_list().index(out.to_list()[i]) == index + elif isinstance(out, Table) and isinstance(output, Table): + assert output.get_column(str(index)).to_list()[index] == 1 + + for i, image in enumerate(image_dataset2.get_input().to_images()): + index = image_list.index(image)[0] + if not shuffle: + assert index == i + offset + out = image_dataset2.get_output() + if isinstance(out, ImageList): + assert image_list.index(out.get_image(i))[0] == index + elif isinstance(out, Column) and isinstance(output, Column): + assert output.to_list().index(out.to_list()[i]) == index + elif isinstance(out, Table) and isinstance(output, Table): + assert output.get_column(str(index)).to_list()[index] == 1 + + image_dataset._batch_size = len(image_dataset) + image_dataset1._batch_size = 1 + image_dataset2._batch_size = 1 + image_dataset_batch = next(iter(image_dataset)) + + for i, b in enumerate(iter(image_dataset1)): + assert b[0] in image_dataset_batch[0] + index = (b[0] == image_dataset_batch[0]).all(dim=[1, 2, 3]).nonzero()[0][0] + if not shuffle: + assert index == i + assert torch.all(torch.eq(b[0], image_dataset_batch[0][index])) + assert torch.all(torch.eq(b[1], image_dataset_batch[1][index])) + + for i, b in enumerate(iter(image_dataset2)): + assert b[0] in image_dataset_batch[0] + index = (b[0] == image_dataset_batch[0]).all(dim=[1, 2, 3]).nonzero()[0][0] + if not shuffle: + assert index == i + offset + assert torch.all(torch.eq(b[0], image_dataset_batch[0][index])) + assert torch.all(torch.eq(b[1], image_dataset_batch[1][index])) + + @pytest.mark.parametrize("percentage", [-1, -0.1, 1.1, 2]) + def test_should_raise(self, device: Device, shuffle: bool, percentage: float) -> None: + configure_test_with_device(device) + image_list = ImageList.from_files(resolve_resource_path(images_all())).resize(10, 10) + image_dataset = ImageDataset(image_list, Column("images", images_all())) + with pytest.raises(OutOfBoundsError): + image_dataset.split(percentage, shuffle=shuffle) + + @pytest.mark.parametrize("device", get_devices(), ids=get_devices_ids()) class TestTableAsTensor: def test_should_raise_if_not_one_hot_encoded(self, device: Device) -> None: diff --git a/tests/safeds/data/tabular/containers/_temporal_cell/test_century.py b/tests/safeds/data/tabular/containers/_temporal_cell/test_century.py new file mode 100644 index 000000000..2d36808b6 --- /dev/null +++ b/tests/safeds/data/tabular/containers/_temporal_cell/test_century.py @@ -0,0 +1,20 @@ +import datetime + +import pytest + +from tests.helpers import assert_cell_operation_works + + +@pytest.mark.parametrize( + ("expected", "input_date"), + [ + (18, datetime.datetime(1800, 1, 9, 23, 29, 1, tzinfo=datetime.UTC)), + (21, datetime.date(2022, 1, 1)), + ], + ids=[ + "ISO datetime", + "ISO date", + ], +) +def test_get_day(input_date: datetime.date, expected: bool) -> None: + assert_cell_operation_works(input_date, lambda cell: cell.dt.century(), expected) diff --git a/tests/safeds/data/tabular/containers/_temporal_cell/test_day.py b/tests/safeds/data/tabular/containers/_temporal_cell/test_day.py new file mode 100644 index 000000000..afa9c588b --- /dev/null +++ b/tests/safeds/data/tabular/containers/_temporal_cell/test_day.py @@ -0,0 +1,20 @@ +import datetime + +import pytest + +from tests.helpers import assert_cell_operation_works + + +@pytest.mark.parametrize( + ("expected", "input_date"), + [ + (9, datetime.datetime(2022, 1, 9, 23, 29, 1, tzinfo=datetime.UTC)), + (1, datetime.date(2022, 1, 1)), + ], + ids=[ + "ISO datetime", + "ISO date", + ], +) +def test_get_day(input_date: datetime.date, expected: bool) -> None: + assert_cell_operation_works(input_date, lambda cell: cell.dt.day(), expected) diff --git a/tests/safeds/data/tabular/containers/_temporal_cell/test_month.py b/tests/safeds/data/tabular/containers/_temporal_cell/test_month.py new file mode 100644 index 000000000..626dff546 --- /dev/null +++ b/tests/safeds/data/tabular/containers/_temporal_cell/test_month.py @@ -0,0 +1,20 @@ +import datetime + +import pytest + +from tests.helpers import assert_cell_operation_works + + +@pytest.mark.parametrize( + ("expected", "input_date"), + [ + (3, datetime.datetime(2022, 3, 9, 23, 29, 1, tzinfo=datetime.UTC)), + (1, datetime.date(2022, 1, 1)), + ], + ids=[ + "ISO datetime", + "ISO date", + ], +) +def test_get_month(input_date: datetime.date, expected: bool) -> None: + assert_cell_operation_works(input_date, lambda cell: cell.dt.month(), expected) diff --git a/tests/safeds/data/tabular/containers/_temporal_cell/test_week.py b/tests/safeds/data/tabular/containers/_temporal_cell/test_week.py new file mode 100644 index 000000000..3a6c7fd60 --- /dev/null +++ b/tests/safeds/data/tabular/containers/_temporal_cell/test_week.py @@ -0,0 +1,20 @@ +import datetime + +import pytest + +from tests.helpers import assert_cell_operation_works + + +@pytest.mark.parametrize( + ("expected", "input_date"), + [ + (10, datetime.datetime(2023, 3, 9, 23, 29, 1, tzinfo=datetime.UTC)), + (52, datetime.date(2022, 1, 1)), + ], + ids=[ + "ISO datetime", + "ISO date", + ], +) +def test_get_week(input_date: datetime.date, expected: bool) -> None: + assert_cell_operation_works(input_date, lambda cell: cell.dt.week(), expected) diff --git a/tests/safeds/data/tabular/containers/_temporal_cell/test_weekday.py b/tests/safeds/data/tabular/containers/_temporal_cell/test_weekday.py new file mode 100644 index 000000000..9db08b4fc --- /dev/null +++ b/tests/safeds/data/tabular/containers/_temporal_cell/test_weekday.py @@ -0,0 +1,20 @@ +import datetime + +import pytest + +from tests.helpers import assert_cell_operation_works + + +@pytest.mark.parametrize( + ("expected", "input_date"), + [ + (4, datetime.datetime(2023, 3, 9, 23, 29, 1, tzinfo=datetime.UTC)), + (6, datetime.date(2022, 1, 1)), + ], + ids=[ + "ISO datetime", + "ISO date", + ], +) +def test_get_weekday(input_date: datetime.date, expected: bool) -> None: + assert_cell_operation_works(input_date, lambda cell: cell.dt.weekday(), expected) diff --git a/tests/safeds/data/tabular/containers/_temporal_cell/test_year.py b/tests/safeds/data/tabular/containers/_temporal_cell/test_year.py new file mode 100644 index 000000000..e35810e52 --- /dev/null +++ b/tests/safeds/data/tabular/containers/_temporal_cell/test_year.py @@ -0,0 +1,20 @@ +import datetime + +import pytest + +from tests.helpers import assert_cell_operation_works + + +@pytest.mark.parametrize( + ("expected", "input_date"), + [ + (2023, datetime.datetime(2023, 3, 9, 23, 29, 1, tzinfo=datetime.UTC)), + (2022, datetime.date(2022, 1, 1)), + ], + ids=[ + "ISO datetime", + "ISO date", + ], +) +def test_get_year(input_date: datetime.date, expected: bool) -> None: + assert_cell_operation_works(input_date, lambda cell: cell.dt.year(), expected) diff --git a/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[date grouped].png b/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[date grouped].png new file mode 100644 index 000000000..58d065e37 Binary files /dev/null and b/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[date grouped].png differ diff --git a/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[date].png b/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[date].png new file mode 100644 index 000000000..c0946d1ec Binary files /dev/null and b/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[date].png differ diff --git a/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[numerical].png b/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[numerical].png new file mode 100644 index 000000000..6cd1556c5 Binary files /dev/null and b/tests/safeds/data/tabular/plotting/__snapshots__/test_moving_average_plot/test_should_match_snapshot[numerical].png differ diff --git a/tests/safeds/data/tabular/plotting/__snapshots__/test_plot_correlation_heatmap/test_should_match_snapshot[normal].png b/tests/safeds/data/tabular/plotting/__snapshots__/test_plot_correlation_heatmap/test_should_match_snapshot[normal].png index eedf2950c..9e6cfc072 100644 Binary files a/tests/safeds/data/tabular/plotting/__snapshots__/test_plot_correlation_heatmap/test_should_match_snapshot[normal].png and b/tests/safeds/data/tabular/plotting/__snapshots__/test_plot_correlation_heatmap/test_should_match_snapshot[normal].png differ diff --git a/tests/safeds/data/tabular/plotting/test_moving_average_plot.py b/tests/safeds/data/tabular/plotting/test_moving_average_plot.py new file mode 100644 index 000000000..a92c2edc2 --- /dev/null +++ b/tests/safeds/data/tabular/plotting/test_moving_average_plot.py @@ -0,0 +1,104 @@ +import datetime + +import pytest +from safeds.data.tabular.containers import Table +from safeds.exceptions import ColumnNotFoundError, ColumnTypeError +from syrupy import SnapshotAssertion + + +@pytest.mark.parametrize( + ("table", "x_name", "y_name", "window_size"), + [ + (Table({"A": [1, 2, 3], "B": [2, 4, 7]}), "A", "B", 2), + # (Table({"A": [1, 1, 2, 2, 3, 3, 4, 4, 5, 5], "B": [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]}), "A", "B", 2), + ( + Table( + { + "time": [ + datetime.date(2022, 1, 10), + datetime.date(2022, 1, 10), + datetime.date(2022, 1, 11), + datetime.date(2022, 1, 11), + datetime.date(2022, 1, 12), + datetime.date(2022, 1, 12), + ], + "A": [10, 5, 20, 2, 1, 1], + }, + ), + "time", + "A", + 2, + ), + ( + Table( + { + "time": [ + datetime.date(2022, 1, 9), + datetime.date(2022, 1, 10), + datetime.date(2022, 1, 11), + datetime.date(2022, 1, 12), + ], + "A": [10, 5, 20, 2], + }, + ), + "time", + "A", + 2, + ), + ], + ids=["numerical", "date grouped", "date"], +) +def test_should_match_snapshot( + table: Table, + x_name: str, + y_name: str, + window_size: int, + snapshot_png_image: SnapshotAssertion, +) -> None: + line_plot = table.plot.moving_average_plot(x_name, y_name, window_size) + assert line_plot == snapshot_png_image + + +@pytest.mark.parametrize( + ("x", "y"), + [ + ("C", "A"), + ("A", "C"), + ("C", "D"), + ], + ids=["x column", "y column", "x and y column"], +) +def test_should_raise_if_column_does_not_exist_error_message(x: str, y: str) -> None: + table = Table({"A": [1, 2, 3], "B": [2, 4, 7]}) + with pytest.raises(ColumnNotFoundError): + table.plot.moving_average_plot(x, y, window_size=2) + + +@pytest.mark.parametrize( + ("table"), + [ + (Table({"A": [1, 2, 3], "B": ["2", 4, 7]})), + (Table({"A": ["1", 2, 3], "B": [2, 4, 7]})), + ], + ids=["x column", "y column"], +) +def test_should_raise_if_column_is_not_numerical(table: Table) -> None: + with pytest.raises(ColumnTypeError): + table.plot.moving_average_plot("A", "B", window_size=2) + + +@pytest.mark.parametrize( + ("table", "column_name"), + [ + (Table({"A": [1, 2, 3], "B": [None, 4, 7]}), "B"), + (Table({"A": [None, 2, 3], "B": [2, 4, 7]}), "A"), + ], + ids=["x column", "y column"], +) +def test_should_raise_if_column_has_missing_value(table: Table, column_name: str) -> None: + with pytest.raises( + ValueError, + match=f"there are missing values in column '{column_name}', use transformation to fill missing " + f"values or drop the missing values", + ): + table.plot.moving_average_plot("A", "B", window_size=2) diff --git a/tests/safeds/data/tabular/plotting/test_plot_lineplot.py b/tests/safeds/data/tabular/plotting/test_plot_lineplot.py index 7ddcb04b8..5015abf4c 100644 --- a/tests/safeds/data/tabular/plotting/test_plot_lineplot.py +++ b/tests/safeds/data/tabular/plotting/test_plot_lineplot.py @@ -3,6 +3,8 @@ from safeds.exceptions import ColumnNotFoundError from syrupy import SnapshotAssertion +from tests.helpers import os_mac, skip_if_os + @pytest.mark.parametrize( ("table", "x_name", "y_names"), @@ -29,6 +31,8 @@ def test_should_match_snapshot( y_names: list[str], snapshot_png_image: SnapshotAssertion, ) -> None: + skip_if_os([os_mac]) + line_plot = table.plot.line_plot(x_name, y_names) assert line_plot == snapshot_png_image diff --git a/tests/safeds/ml/classical/classification/test_baseline_classifier.py b/tests/safeds/ml/classical/classification/test_baseline_classifier.py index 1af06a0b2..8f507c41a 100644 --- a/tests/safeds/ml/classical/classification/test_baseline_classifier.py +++ b/tests/safeds/ml/classical/classification/test_baseline_classifier.py @@ -3,9 +3,9 @@ from safeds.exceptions import ( ColumnTypeError, DatasetMissesDataError, - TargetDataMismatchError, FeatureDataMismatchError, ModelNotFittedError, + TargetDataMismatchError, ) from safeds.ml.classical.classification import BaselineClassifier diff --git a/tests/safeds/ml/classical/regression/test_baseline_regressor.py b/tests/safeds/ml/classical/regression/test_baseline_regressor.py index 57bc4873c..2d8816ef2 100644 --- a/tests/safeds/ml/classical/regression/test_baseline_regressor.py +++ b/tests/safeds/ml/classical/regression/test_baseline_regressor.py @@ -3,9 +3,9 @@ from safeds.exceptions import ( ColumnTypeError, DatasetMissesDataError, - TargetDataMismatchError, FeatureDataMismatchError, ModelNotFittedError, + TargetDataMismatchError, ) from safeds.ml.classical.regression import BaselineRegressor diff --git a/tests/safeds/ml/nn/layers/test_gru_layer.py b/tests/safeds/ml/nn/layers/test_gru_layer.py new file mode 100644 index 000000000..4a6f366e4 --- /dev/null +++ b/tests/safeds/ml/nn/layers/test_gru_layer.py @@ -0,0 +1,189 @@ +import sys +from typing import Any + +import pytest +from safeds.data.image.typing import ImageSize +from safeds.exceptions import OutOfBoundsError +from safeds.ml.nn.layers import GRULayer +from torch import nn + + +@pytest.mark.parametrize( + ("activation_function", "expected_activation_function"), + [ + ("sigmoid", nn.Sigmoid), + ("relu", nn.ReLU), + ("softmax", nn.Softmax), + ("none", None), + ], + ids=["sigmoid", "relu", "softmax", "none"], +) +def test_should_accept_activation_function(activation_function: str, expected_activation_function: type | None) -> None: + lstm_layer = GRULayer(neuron_count=1) + lstm_layer._input_size = 1 + internal_layer = lstm_layer._get_internal_layer( + activation_function=activation_function, + ) + assert ( + internal_layer._fn is None + if expected_activation_function is None + else isinstance(internal_layer._fn, expected_activation_function) + ) + + +@pytest.mark.parametrize( + "activation_function", + [ + "unknown_string", + ], + ids=["unknown"], +) +def test_should_raise_if_unknown_activation_function_is_passed(activation_function: str) -> None: + lstm_layer = GRULayer(neuron_count=1) + lstm_layer._input_size = 1 + with pytest.raises( + ValueError, + match=rf"Unknown Activation Function: {activation_function}", + ): + lstm_layer._get_internal_layer( + activation_function=activation_function, + ) + + +@pytest.mark.parametrize( + "output_size", + [ + 0, + ], + ids=["output_size_out_of_bounds"], +) +def test_should_raise_if_output_size_out_of_bounds(output_size: int) -> None: + with pytest.raises(OutOfBoundsError): + GRULayer(neuron_count=output_size) + + +@pytest.mark.parametrize( + "output_size", + [ + 1, + 20, + ], + ids=["one", "twenty"], +) +def test_should_raise_if_output_size_doesnt_match(output_size: int) -> None: + assert GRULayer(neuron_count=output_size).output_size == output_size + + +def test_should_raise_if_input_size_is_set_with_image_size() -> None: + layer = GRULayer(1) + with pytest.raises(TypeError, match=r"The input_size of a forward layer has to be of type int."): + layer._set_input_size(ImageSize(1, 2, 3)) + + +def test_should_raise_if_activation_function_not_set() -> None: + layer = GRULayer(1) + with pytest.raises( + ValueError, + match=r"The activation_function is not set. The internal layer can only be created when the activation_function is provided in the kwargs.", + ): + layer._get_internal_layer() + + +@pytest.mark.parametrize( + ("layer1", "layer2", "equal"), + [ + ( + GRULayer(neuron_count=2), + GRULayer(neuron_count=2), + True, + ), + ( + GRULayer(neuron_count=2), + GRULayer(neuron_count=1), + False, + ), + ], + ids=["equal", "not equal"], +) +def test_should_compare_forward_layers(layer1: GRULayer, layer2: GRULayer, equal: bool) -> None: + assert (layer1.__eq__(layer2)) == equal + + +def test_should_assert_that_forward_layer_is_equal_to_itself() -> None: + layer = GRULayer(neuron_count=1) + assert layer.__eq__(layer) + + +@pytest.mark.parametrize( + ("layer", "other"), + [ + (GRULayer(neuron_count=1), None), + ], + ids=["ForwardLayer vs. None"], +) +def test_should_return_not_implemented_if_other_is_not_forward_layer(layer: GRULayer, other: Any) -> None: + assert (layer.__eq__(other)) is NotImplemented + + +@pytest.mark.parametrize( + ("layer1", "layer2"), + [ + ( + GRULayer(neuron_count=2), + GRULayer(neuron_count=2), + ), + ], + ids=["equal"], +) +def test_should_assert_that_equal_forward_layers_have_equal_hash(layer1: GRULayer, layer2: GRULayer) -> None: + assert layer1.__hash__() == layer2.__hash__() + + +@pytest.mark.parametrize( + ("layer1", "layer2"), + [ + ( + GRULayer(neuron_count=2), + GRULayer(neuron_count=1), + ), + ], + ids=["not equal"], +) +def test_should_assert_that_different_forward_layers_have_different_hash( + layer1: GRULayer, + layer2: GRULayer, +) -> None: + assert layer1.__hash__() != layer2.__hash__() + + +@pytest.mark.parametrize( + "layer", + [ + GRULayer(neuron_count=1), + ], + ids=["one"], +) +def test_should_assert_that_layer_size_is_greater_than_normal_object(layer: GRULayer) -> None: + assert sys.getsizeof(layer) > sys.getsizeof(object()) + + +def test_set_input_size() -> None: + layer = GRULayer(1) + layer._set_input_size(3) + assert layer.input_size == 3 + + +def test_input_size_should_raise_error() -> None: + layer = GRULayer(1) + layer._input_size = None + with pytest.raises( + ValueError, + match="The input_size is not yet set.", + ): + layer.input_size # noqa: B018 + + +def test_internal_layer_should_raise_error() -> None: + layer = GRULayer(1) + with pytest.raises(ValueError, match="The input_size is not yet set."): + layer._get_internal_layer(activation_function="relu") diff --git a/tests/safeds/ml/nn/test_lstm_workflow.py b/tests/safeds/ml/nn/test_lstm_workflow.py index 2fa8f8d26..add96765f 100644 --- a/tests/safeds/ml/nn/test_lstm_workflow.py +++ b/tests/safeds/ml/nn/test_lstm_workflow.py @@ -10,6 +10,7 @@ ) from safeds.ml.nn.layers import ( ForwardLayer, + GRULayer, LSTMLayer, ) from torch.types import Device @@ -34,7 +35,7 @@ def test_lstm_model(device: Device) -> None: ) model_2 = NeuralNetworkRegressor( InputConversionTimeSeries(), - [ForwardLayer(neuron_count=256), LSTMLayer(neuron_count=1)], + [ForwardLayer(neuron_count=256), GRULayer(128), LSTMLayer(neuron_count=1)], ) trained_model = model.fit( train_table.to_time_series_dataset( diff --git a/tests/safeds/ml/nn/test_model.py b/tests/safeds/ml/nn/test_model.py index 04975127f..43fc67aa6 100644 --- a/tests/safeds/ml/nn/test_model.py +++ b/tests/safeds/ml/nn/test_model.py @@ -1,4 +1,5 @@ import pickle +import re import pytest from safeds.data.image.typing import ImageSize @@ -6,6 +7,7 @@ from safeds.data.tabular.containers import Table from safeds.exceptions import ( FeatureDataMismatchError, + InvalidFitDataError, InvalidModelStructureError, ModelNotFittedError, OutOfBoundsError, @@ -231,6 +233,54 @@ def test_should_raise_if_train_features_mismatch(self, device: Device) -> None: ): learned_model.fit(Table.from_dict({"k": [0.1, 0, 0.2], "l": [0, 0.15, 0.5]}).to_tabular_dataset("k")) + @pytest.mark.parametrize( + ("table", "reason"), + [ + ( + Table.from_dict({"a": [1, 2, 3], "b": [1, 2, None], "c": [0, 15, 5]}).to_tabular_dataset("c"), + re.escape("The given Fit Data is invalid:\nThe following Columns contain missing values: ['b']\n"), + ), + ( + Table.from_dict({"a": ["a", "b", "c"], "b": [1, 2, 3], "c": [0, 15, 5]}).to_tabular_dataset("c"), + re.escape("The given Fit Data is invalid:\nThe following Columns contain non-numerical data: ['a']"), + ), + ( + Table.from_dict({"a": ["a", "b", "c"], "b": [1, 2, None], "c": [0, 15, 5]}).to_tabular_dataset("c"), + re.escape( + "The given Fit Data is invalid:\nThe following Columns contain missing values: ['b']\nThe following Columns contain non-numerical data: ['a']", + ), + ), + ( + Table.from_dict({"a": [1, 2, 3], "b": [1, 2, 3], "c": [0, None, 5]}).to_tabular_dataset("c"), + re.escape( + "The given Fit Data is invalid:\nThe following Columns contain missing values: ['c']\n", + ), + ), + ( + Table.from_dict({"a": [1, 2, 3], "b": [1, 2, 3], "c": ["a", "b", "a"]}).to_tabular_dataset("c"), + re.escape("The given Fit Data is invalid:\nThe following Columns contain non-numerical data: ['c']"), + ), + ], + ids=[ + "missing value feature", + "non-numerical feature", + "missing value and non-numerical features", + "missing value target", + "non-numerical target", + ], + ) + def test_should_catch_invalid_fit_data(self, device: Device, table: TabularDataset, reason: str) -> None: + configure_test_with_device(device) + model = NeuralNetworkClassifier( + InputConversionTable(), + [ForwardLayer(neuron_count=4), ForwardLayer(1)], + ) + with pytest.raises( + InvalidFitDataError, + match=reason, + ): + model.fit(table) + # def test_should_raise_if_table_size_and_input_size_mismatch(self, device: Device) -> None: # configure_test_with_device(device) # model = NeuralNetworkClassifier( @@ -609,6 +659,54 @@ def test_should_raise_if_train_features_mismatch(self, device: Device) -> None: Table.from_dict({"k": [1, 0, 2], "l": [0, 15, 5]}).to_tabular_dataset("l"), ) + @pytest.mark.parametrize( + ("table", "reason"), + [ + ( + Table.from_dict({"a": [1, 2, 3], "b": [1, 2, None], "c": [0, 15, 5]}).to_tabular_dataset("c"), + re.escape("The given Fit Data is invalid:\nThe following Columns contain missing values: ['b']\n"), + ), + ( + Table.from_dict({"a": ["a", "b", "c"], "b": [1, 2, 3], "c": [0, 15, 5]}).to_tabular_dataset("c"), + re.escape("The given Fit Data is invalid:\nThe following Columns contain non-numerical data: ['a']"), + ), + ( + Table.from_dict({"a": ["a", "b", "c"], "b": [1, 2, None], "c": [0, 15, 5]}).to_tabular_dataset("c"), + re.escape( + "The given Fit Data is invalid:\nThe following Columns contain missing values: ['b']\nThe following Columns contain non-numerical data: ['a']", + ), + ), + ( + Table.from_dict({"a": [1, 2, 3], "b": [1, 2, 3], "c": [0, None, 5]}).to_tabular_dataset("c"), + re.escape( + "The given Fit Data is invalid:\nThe following Columns contain missing values: ['c']\n", + ), + ), + ( + Table.from_dict({"a": [1, 2, 3], "b": [1, 2, 3], "c": ["a", "b", "a"]}).to_tabular_dataset("c"), + re.escape("The given Fit Data is invalid:\nThe following Columns contain non-numerical data: ['c']"), + ), + ], + ids=[ + "missing value feature", + "non-numerical feature", + "missing value and non-numerical features", + "missing value target", + "non-numerical target", + ], + ) + def test_should_catch_invalid_fit_data(self, device: Device, table: TabularDataset, reason: str) -> None: + configure_test_with_device(device) + model = NeuralNetworkRegressor( + InputConversionTable(), + [ForwardLayer(neuron_count=4), ForwardLayer(1)], + ) + with pytest.raises( + InvalidFitDataError, + match=reason, + ): + model.fit(table) + # def test_should_raise_if_table_size_and_input_size_mismatch(self, device: Device) -> None: # configure_test_with_device(device) # model = NeuralNetworkRegressor(