diff --git a/notebooks/failure-type-classification/background/testgrid_flakiness_detection.ipynb b/notebooks/failure-type-classification/background/testgrid_flakiness_detection.ipynb index cf603d0d..b0d9d926 100644 --- a/notebooks/failure-type-classification/background/testgrid_flakiness_detection.ipynb +++ b/notebooks/failure-type-classification/background/testgrid_flakiness_detection.ipynb @@ -4,13 +4,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Overview\n", + "# Flake Detection for TestGrid \n", "\n", "\n", - "In continuous integration (CI) project workflow, developers frequently integrate code into a shared repository. Each integration can then be verified by an automated build and numerous different automated tests. Whenever a failure occurs in a test, developers manually need to analyze failures. Failures in the build can be a legitimate failure or due to some other issues like infrastructure flake, install flake, flaky test, etc. SME can analyze the TestGrid data and determine if failures are legitimate or not. However, it takes a lot of manual effort and reduces the productivity of a team.In this notebook, we will try to detect flaky test. \n", + "In the continuous integration (CI) project workflow, developers frequently integrate code into a shared repository. Each integration can then be verified by an automated build and tests. Whenever a failure occurs in a test, developers need to manually analyze failures. Failures in the build can be legitimate or due to some other issues like an infrastructure flake, install flake, flaky test, or some other type of failure. SME's can analyze the TestGrid data manually and determine if failures appear to be legitimate or not. However, it takes a lot of human effort and reduces the productivity of a team. In this notebook we will try to reliably detect one of these failure types: Flaky test. \n", "\n", - "## What is flaky test?\n", - "A test that passes or fails in a nondeterministic way is known as a flaky test [Refrence](http://mir.cs.illinois.edu/~eloussi2/publications/fse14.pdf). In data science terms, flaky tests pass and fail across multiple runs over a certain period of time. If the test fails consistently over an interval, then it's not an attribute of the flaky test. We will discuss the interval attribute in the later part of this notebook. \n" + "## What is a flaky test?\n", + "\n", + "A flaky test is one that passes or fails in a nondeterministic way. [See this paper for more details](http://mir.cs.illinois.edu/~eloussi2/publications/fse14.pdf). \n", + "\n", + "In data science terms, if a test passes and fails in an apparently random sequence then it is likely to be a flake. Tests can also be considered flaky if they pass and fail in a non-random but inconsistent pattern. Therefore, our goal here is to develop a technique for finding apparently random or inconsistent pass/fail sequences, which we can then apply to the TestGrid dataset. \n" ] }, { @@ -22,7 +25,16 @@ "start_time": "2020-11-24T03:30:02.813343Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/mcliffor/anaconda3/lib/python3.7/site-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n", + " import pandas.util.testing as tm\n" + ] + } + ], "source": [ "import requests\n", "import pandas as pd\n", @@ -37,6 +49,7 @@ "import json\n", "\n", "%matplotlib inline\n", + "sns.set()\n", "warnings.filterwarnings(\"ignore\")" ] }, @@ -44,15 +57,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Preparing data\n", + "## Data Access\n", "\n", - "In depth details of this step is given in another [notebook](../../data-sources/TestGrid/testgrid_EDA.ipynb). \n", + "_In depth details for data access and preprocessing can be found in the [testgrid_EDA notebook](../../data-sources/TestGrid/testgrid_EDA.ipynb)._ \n", "\n", - "To pull the desired json we can follow this syntax:\n", + "Here we provide two data access methods: download the latest or use example data. If you would like to download the most recent data for a specific grid, then please set `download_data` to `True` on line #2 below and update `dashboard_name` and `job_name` appropriately. Be warned, the output and results will likely change if the most recent data is used instead of the fixed example data. \n", "\n", - "https://testgrid.k8s.io/{dashboard_name}/table?&show-stale-tests=&tab={job_name}\n", + "Otherwise, we will use the repo's example dataset `data/raw/testgrid_810.json.gz`\n", "\n", - "From the work above we know how to get the list of all the dashboards and associated jobs. Here we will get the data for the job \"release-openshift-ocp-e2e-aws-scaleup-rhel7-4.3\" as an example." + "Regardless of the method used, we will be looking at \"redhat-openshift-ocp-release-4.6-informing/periodic-ci-openshift-release-master-ocp-4.6-e2e-aws-proxy\" as our example throughout. \n" ] }, { @@ -199,7 +212,9 @@ " axis=1,\n", " )\n", "else:\n", - " with gzip.open(\"testgrid_810.json.gz\", \"rb\") as read_file:\n", + " with gzip.open(\n", + " \"../../../data/raw/testgrid_810.json.gz\", \"rb\"\n", + " ) as read_file:\n", " data = json.load(read_file)\n", " details = data['\"' + dashboard_name + '\"'][job_name][\"grid\"]\n", " details = pd.DataFrame(details)\n", @@ -211,7 +226,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "From the column \"statuses\" above we can see that the time series data is run length encoded. Let's add a decoded column so we can get the data in an array format we could use for machine learning." + "From the column \"statuses\" above we can see that the time series data is run length encoded. Let's add a decoded column so we can get the data in an easier to use array format." ] }, { @@ -256,19 +271,16 @@ "source": [ "def label_arr(val_array, text_array):\n", " iter_text = iter(text_array)\n", - " return list(map(lambda x: next(iter_text) if x else \"\", val_array))\n", - "\n", - "\n", - "# details['label_arr'] = details.apply(lambda x: label_arr(x['values'], x['short_texts']), axis=1)" + " return list(map(lambda x: next(iter_text) if x else \"\", val_array))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "TestGrids are made of a set of tests that either pass or failing over time, essentially they are multidimensional time series where the values can take either 0 (not run), 1 (pass), 12 (fail), or 13(flaky). \n", + "TestGrids are made of a set of tests that either pass or fail over time. They are multidimensional time series where the values can take either 0 (not run), 1 (pass), 12 (fail), or 13(flaky). \n", "\n", - "Now that we have all our data unrolled, lets plot it. We will use green color for pass (1), red color for fail (12), white color for not run (0) and purple color for flaky (13). We plotted just the first 40 rows to save space." + "Now that we have all our data unrolled, lets plot it. We will use green for pass (1), red for fail (12), white for not run (0) and purple for flaky (13). We will also just plot the first 40 rows to save some space." ] }, { @@ -278,7 +290,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -302,6 +314,13 @@ " linewidths=0.1,\n", " linecolor=\"Black\",\n", ")\n", + "plt.ylabel(\"Tests\")\n", + "plt.xlabel(\"Days\")\n", + "plt.title(\n", + " \"Redhat-openshift-ocp-release-4.6-informing/periodic-ci-\\\n", + "openshift-release-master-ocp-4.6-e2e-aws-proxy\\n\",\n", + " fontsize=20,\n", + ")\n", "plt.show()" ] }, @@ -314,7 +333,9 @@ } }, "source": [ - "Cells with Purple color in the above graph are the existing flake labels. Currently, each failed test is retry, and if it's passed on a subsequent run it is considered as flaky. " + "Cells with Purple color in the above graph are the existing flake labels defined by the build process. Currently, each failed test is retried, and if it passes on a subsequent run it is considered to be flaky.\n", + "\n", + "We can see from the grid above that there is a large chunk of flakes between test 7 and 15, but there is also a fair amount of irregular pass/failure patterns on the grid that are not being flagged. Let's see if we can create a method to better capture these flakes. " ] }, { @@ -326,9 +347,9 @@ } }, "source": [ - "# Flaky test detection\n", + "## Flaky test detection\n", "\n", - "In the following section, we will explore different methods to detect flaky test. " + "In the following section, we will explore different methods to detect flaky tests. " ] }, { @@ -342,7 +363,9 @@ "source": [ "## Naive flakiness method\n", "\n", - "This method calculates flakiness as a ratio of failed or flaky tests to total tests. Flaky test passes and fails on several successive revisions, but this method cannot catch this signal of the flaky test. " + "This method calculates flakiness as a ratio of failed or flaky tests to total tests. The idea being that a score of 50 would mean a 50/50 (random) chance of a pass or fail occurring, indicating a flaky test. The major drawback of this method is that it evaluates the time series as a whole and can't account for specific pass/fail patterns or sub-sequences. If the first half of a series are all pass and the second half are all fail, we would not consider that to be a flake, despite this method flagging it as such.\n", + "\n", + "This is all to say, this is our naive baseline we can use to ensure our later methods are performing well. " ] }, { @@ -366,13 +389,6 @@ " )" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the following cell, we have shown a drawback of the naive flakiness method. As we can see in the below cell, we have `test_array` consist of consecutive test failures over a certain period type, which is not an attribute of a flaky test still. However, we got a high flakiness score. " - ] - }, { "cell_type": "code", "execution_count": 7, @@ -385,18 +401,39 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "45.833333333333336" + "
" ] }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Naive Flake Score 45.833333333333336\n" + ] } ], "source": [ "test_array = [1] * 6 + [12] * 11 + [1] * 7\n", - "naive_flake_calc(test_array)" + "plt.figure(figsize=(20, 5))\n", + "plt.plot(test_array)\n", + "plt.title(\"Consecutive Failures\", fontsize=20)\n", + "plt.xlabel(\"time\")\n", + "plt.show()\n", + "print(f\"Naive Flake Score {naive_flake_calc(test_array)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above cell, we have shown a drawback of the naive flakiness method. As we can see, we have a test array that consist of consecutive test failures, which is not an attribute of a flaky test. However, we got a very high flakiness score." ] }, { @@ -405,7 +442,7 @@ "source": [ "## Flip flakiness method\n", "\n", - "As we discussed earlier, flaky test pass and fail across multiple runs over a certain period of time. We trigger this behavior of a flaky test by using the concept of edge. Edge is the transition of a particular test case from pass to fail. Let's dig this behavior into more detail using the following example." + "As we discussed earlier, flaky tests pass and fail across multiple runs over a certain period of time. We can characterize this behavior by using the concept of an _edge_. Here we will define an edge as the transition of a particular test case from pass to fail (or fail to pass). Let's look at a couple examples below to illustrate the idea further. " ] }, { @@ -420,7 +457,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -456,11 +493,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the images above, we have shown test case results for 25 runs. In the first image, we can see there are multiple fails but only a single edge. In the second image, we have fewer fails compared to first images but multiple edges. Therefore, the second test exhibits a more irregular behavior pattern with many more edges. Therefore, we can conclude that test case 2 is more likely to be a flaky test, whereas test case 1 seems not to be.\n", + "In the images above, we have shown example results for 25 test runs. In the first image we can see there are multiple fails but only a single edge. In the second image, we have fewer fails but many more edges. Therefore, the second test exhibits a more erratic behavior pattern, and one we would associate more with a flaky test. \n", "\n", - "We calculated the flakiness score as the number of edges divided by total runs. The most common approach to detect flaky test is to run flaky test multiple times and if it's passes in any run then it is not considerd flaky test [Refrence](http://mir.cs.illinois.edu/~eloussi2/publications/fse14.pdf). At google, If the test is failing three times in a row, then only it reported as real failures; otherwise, it's considered a flaky test [Refrence](https://testing.googleblog.com/2016/05/flaky-tests-at-google-and-how-we.html). Hence, we ignored more than three consecutive failures and test cases that are not run while calculating the flakiness score.\n", + "We calculated the flakiness score as the number of edges divided by total runs. The most common approach to detect flaky test is to run flaky test multiple times and if it's passes in any run then it is not considered to be a flaky test ([please see paper for details](http://mir.cs.illinois.edu/~eloussi2/publications/fse14.pdf)). At Google, for example, if a test fails three times in a row, only then is it reported as a real failure; otherwise, it's considered a flake [please see blog for details](https://testing.googleblog.com/2016/05/flaky-tests-at-google-and-how-we.html). We will follow suite and also ignore three or more consecutive failures when calculating a flakiness score.\n", "\n", - "Flakiness score lies between 0 and 100; 0 is no flakiness, and 100 is maximum flakiness. " + "For the flip flakiness method below the possible scores will lie between 0 and 50; where 0 is no flakiness and 50 is maximum flakiness. " ] }, { @@ -596,9 +633,9 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABIcAAACJCAYAAAC2NFj4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAM2klEQVR4nO3dbYxmZXkH8P9VFvsBIdXuFBFYt22IyWoqkgloSgzGSoGo2MRUaNNS22bB0EQTk8baRPqSJk2a2qalEakSaCL0JYrQBC0bYoJNlDhLVsGlFiRQWVd2kdbVamJWr36YQzIdZthxnueZB+b8fsnk3Oc+93Puaz/cOdl/zkt1dwAAAAAYp5+YdwEAAAAAzI9wCAAAAGDEhEMAAAAAIyYcAgAAABgx4RAAAADAiAmHAAAAAEZsx7wLWMvOnTt79+7d8y4DAAAAYNvYv3//U929sLr/hOFQVd2U5C1JjnT3q4e+v0jy1iQ/SPK1JO/q7v9Z47ePJflOkh8mOd7dixspdvfu3VlaWtrIUAAAAAA2oKoeX6t/I4+V3ZzkklV9+5K8urt/Icl/JvmD5/j9G7v73I0GQwAAAABsnROGQ919b5KnV/Xd3d3Hh90vJDlrBrUBAAAAMGPTeCH1byf59DrHOsndVbW/qvY+10mqam9VLVXV0tGjR6dQFgAAAAAnMlE4VFV/mOR4ko+vM+TC7j4vyaVJrq2qN6x3ru6+sbsXu3txYeFZ70YCAAAAYAY2HQ5V1W9l+UXVv97dvdaY7j40bI8kuT3J+ZudDwAAAIDp21Q4VFWXJPn9JG/r7u+tM+aUqjr1mXaSi5M8uNlCAQAAAJi+jXzK/rYkFyXZWVVPJLkuy18n+8kk+6oqSb7Q3ddU1cuTfLS7L0tyepLbh+M7ktza3Z+Zyb8CGL1b7/uv3HHg0LzLAACSXH7umfm1C3bNuwwANuiE4VB3X7lG98fWGfuNJJcN7UeTvGai6gA26I4Dh3Lw8LHsOeO0eZcCAKN28PCxJBEOAbyAnDAcAnih2HPGafmnq18/7zIAYNTe+ZHPz7sEAH5M0/iUPQAAAAAvUMIhAAAAgBETDgEAAACMmHAIAAAAYMSEQwAAAAAjJhwCAAAAGDHhEAAAAMCICYcAAAAARkw4BAAAADBiwiEAAACAERMOAQAAAIyYcAgAAABgxDYUDlXVTVV1pKoeXNH30qraV1UPD9uXrPPbq4YxD1fVVdMqHAAAAIDJbfTOoZuTXLKq7/1J7unuc5LcM+z/P1X10iTXJbkgyflJrlsvRAIAAABg620oHOrue5M8var78iS3DO1bkrx9jZ/+cpJ93f10d/93kn15dsgEAAAAwJxM8s6h07v78ND+ZpLT1xhzZpKvr9h/Yuh7lqraW1VLVbV09OjRCcoCAAAAYKOm8kLq7u4kPeE5buzuxe5eXFhYmEZZAAAAAJzAJOHQk1V1RpIM2yNrjDmU5OwV+2cNfQAAAAA8D0wSDt2Z5Jmvj12V5I41xvxbkour6iXDi6gvHvoAAAAAeB7Y6Kfsb0vy+SSvrKonqup3kvx5kjdX1cNJfmnYT1UtVtVHk6S7n07yp0m+OPz9ydAHAAAAwPPAjo0M6u4r1zn0pjXGLiX53RX7NyW5aVPVAQAAADBTU3khNQAAAAAvTMIhAAAAgBETDgEAAACMmHAIAAAAYMSEQwAAAAAjJhwCAAAAGDHhEAAAAMCICYcAAAAARkw4BAAAADBiwiEAAACAERMOAQAAAIyYcAgAAABgxIRDAAAAACO26XCoql5ZVQdW/B2rqveuGnNRVX17xZgPTlwxAAAAAFOzY7M/7O6vJjk3SarqpCSHkty+xtDPdfdbNjsPAAAAALMzrcfK3pTka939+JTOBwAAAMAWmFY4dEWS29Y59vqq+lJVfbqqXrXeCapqb1UtVdXS0aNHp1QWAAAAAM9l4nCoql6U5G1J/mWNw/cneUV3vybJ3yb51Hrn6e4bu3uxuxcXFhYmLQsAAACADZjGnUOXJrm/u59cfaC7j3X3d4f2XUlOrqqdU5gTAAAAgCmYRjh0ZdZ5pKyqXlZVNbTPH+b71hTmBAAAAGAKNv21siSpqlOSvDnJ1Sv6rkmS7r4hyTuSvLuqjif5fpIrursnmRMAAACA6ZkoHOru/03y06v6bljRvj7J9ZPMAQAAAMDsTOtrZQAAAAC8AAmHAAAAAEZMOAQAAAAwYsIhAAAAgBETDgEAAACMmHAIAAAAYMSEQwAAAAAjJhwCAAAAGDHhEAAAAMCICYcAAAAARkw4BAAAADBiwiEAAACAERMOAQAAAIzYxOFQVT1WVQ9U1YGqWlrjeFXV31TVI1X15ao6b9I5AQAAAJiOHVM6zxu7+6l1jl2a5Jzh74IkHx62AAAAAMzZVjxWdnmSf+hlX0jyU1V1xhbMCwAAAMAJTCMc6iR3V9X+qtq7xvEzk3x9xf4TQx8AAAAAczaNx8ou7O5DVfUzSfZV1X90970/7kmGYGlvkuzatWsKZQEAAABwIhPfOdTdh4btkSS3Jzl/1ZBDSc5esX/W0Lf6PDd292J3Ly4sLExaFgAAAAAbMFE4VFWnVNWpz7STXJzkwVXD7kzym8NXy16X5NvdfXiSeQEAAACYjkkfKzs9ye1V9cy5bu3uz1TVNUnS3TckuSvJZUkeSfK9JO+acE4AAAAApmSicKi7H03ymjX6b1jR7iTXTjIPAAAAALOxFZ+yBwAAAOB5SjgEAAAAMGLCIQAAAIAREw4BAAAAjJhwCAAAAGDEhEMAAAAAIyYcAgAAABgx4RAAAADAiAmHAAAAAEZMOAQAAAAwYsIhAAAAgBETDgEAAACMmHAIAAAAYMQ2HQ5V1dlV9dmqOlhVX6mq96wx5qKq+nZVHRj+PjhZuQAAAABM044Jfns8yfu6+/6qOjXJ/qra190HV437XHe/ZYJ5AAAAAJiRTd851N2Hu/v+of2dJA8lOXNahQEAAAAwe1N551BV7U7y2iT3rXH49VX1par6dFW9ahrzAQAAADAdkzxWliSpqhcn+USS93b3sVWH70/yiu7+blVdluRTSc5Z5zx7k+xNkl27dk1aFgAAAAAbMNGdQ1V1cpaDoY939ydXH+/uY9393aF9V5KTq2rnWufq7hu7e7G7FxcWFiYpCwAAAIANmuRrZZXkY0ke6u4PrTPmZcO4VNX5w3zf2uycAAAAAEzXJI+V/WKS30jyQFUdGPo+kGRXknT3DUnekeTdVXU8yfeTXNHdPcGcAAAAAEzRpsOh7v73JHWCMdcnuX6zcwAAAAAwW1P5WhkAAAAAL0zCIQAAAIAREw4BAAAAjJhwCAAAAGDEhEMAAAAAIyYcAgAAABgx4RAAAADAiO2YdwHb1R//61dy8BvH5l0GjMbBw8ey54zT5l0GAJDl6/I7P/L5eZcBMBV7Xn5arnvrq+ZdxkxVd8+7hmepqqNJHp93HVOwM8lT8y4CRsSag61jvcHWsuZga1lzbFev6O6F1Z3Py3Bou6iqpe5enHcdMBbWHGwd6w22ljUHW8uaY2y8cwgAAABgxIRDAAAAACMmHJqtG+ddAIyMNQdbx3qDrWXNwday5hgV7xwCAAAAGDF3DgEAAACMmHBoRqrqkqr6alU9UlXvn3c9sJ1V1WNV9UBVHaiqpXnXA9tNVd1UVUeq6sEVfS+tqn1V9fCwfck8a4TtZJ0190dVdWi41h2oqsvmWSNsF1V1dlV9tqoOVtVXquo9Q7/rHKMiHJqBqjopyd8luTTJniRXVtWe+VYF294bu/tcnxyFmbg5ySWr+t6f5J7uPifJPcM+MB0359lrLkn+arjWndvdd21xTbBdHU/yvu7ek+R1Sa4d/u/mOseoCIdm4/wkj3T3o939gyT/mOTyOdcEAJvS3fcmeXpV9+VJbhnatyR5+1bWBNvZOmsOmIHuPtzd9w/t7yR5KMmZcZ1jZIRDs3Fmkq+v2H9i6ANmo5PcXVX7q2rvvIuBkTi9uw8P7W8mOX2excBI/F5VfXl47MwjLjBlVbU7yWuT3BfXOUZGOARsBxd293lZfpTz2qp6w7wLgjHp5U+f+vwpzNaHk/x8knOTHE7yl3OtBraZqnpxkk8keW93H1t5zHWOMRAOzcahJGev2D9r6ANmoLsPDdsjSW7P8qOdwGw9WVVnJMmwPTLnemBb6+4nu/uH3f2jJH8f1zqYmqo6OcvB0Me7+5NDt+scoyIcmo0vJjmnqn62ql6U5Iokd865JtiWquqUqjr1mXaSi5M8+Ny/AqbgziRXDe2rktwxx1pg23vmP6mDX4lrHUxFVVWSjyV5qLs/tOKQ6xyjUst3yDFtw+dF/zrJSUlu6u4/m29FsD1V1c9l+W6hJNmR5FbrDaarqm5LclGSnUmeTHJdkk8l+ecku5I8nuRXu9sLdGEK1llzF2X5kbJO8liSq1e8DwXYpKq6MMnnkjyQ5EdD9wey/N4h1zlGQzgEAAAAMGIeKwMAAAAYMeEQAAAAwIgJhwAAAABGTDgEAAAAMGLCIQAAAIAREw4BAAAAjJhwCAAAAGDEhEMAAAAAI/Z/wrgrJlYOkjMAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -610,20 +647,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using flip-flakiness method is: 0.0\n" + "flip-flakiness score: 0.0\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "x = np.arange(len(test_array))\n", "plt.step(x, test_array)\n", + "plt.title(\"Single edge and multiple fails\", fontsize=20)\n", "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", "plt.show()\n", - "\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"flip-flakiness score: \",\n", " calc_flakiness_score(test_array),\n", ")" ] @@ -647,9 +683,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -661,20 +697,20 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using flip-flakiness method is: 33.33333333333333\n" + "flip-flakiness score: 33.33333333333333\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "x = np.arange(len(test_array_1))\n", "plt.step(x, test_array_1)\n", "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", + "plt.title(\"multiple edges and multiple fails\", fontsize=20)\n", "plt.show()\n", "\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"flip-flakiness score: \",\n", " calc_flakiness_score(test_array_1),\n", ")" ] @@ -683,7 +719,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the above figure, we can see there are multiples edges. Hence, this test exhibits a more irregular behavior pattern. Therefore, our flakiness score is on the higher side. " + "In the above figure, we can see there are multiples edges. Hence, this test exhibits a more flake-like behavior pattern. Therefore, our flakiness score is greater. " ] }, { @@ -698,9 +734,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABIEAAAFGCAYAAAD9449qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3de5glZX0n8O/MMEAMiDoOiqKiKK8GxQuyBBVBYxKjEuM9btRo4sY7JromasxCYlwvMWpQieaKq+hqvLvxfhkjqEEjbIJZX1EZL6g4DF4YE5hhpvePt1rapnumu88Zaqrr83kensPUOafq91bVO4f68tZba2ZmZgIAAADA6ra27wIAAAAA2PuEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAA2AeVUjaVUmaW+Z3Hl1JmSimPn3DbR3TrOWuS9VxXSiknd/We3nctQ1RKOb3bfyf3XctSrPR4l1I2l1I2T2H7Z3XbP2LSde1mG9cvpZzR1Xx1t727rHBd12r3tP6uAGB4hEAAMBDCDljcSoLTfdjLkjwjyb8leXGSP07y3V4rAmBV2K/vAgCAqXlXks8m+U7fhcA+6Bf6LmAZHpTky7XWU6awriG1G4C9TAgEAKtErfWHSX7Ydx2wL6q1frXvGpbhZkn+aRorGli7AdjLhEAALEk3/8XFSd6Q5IVJXprkPkn2T/KZJM+qtV5YStmY5EVJTklyw7TbGX6/1vqJBdZ5SJLnJnloklsl+c8k5yX5s1rrR+d99uQkn0i7LeL9SU5LckK3jVvXWjd3nzu8W+cDktw8ybYk5yZ5Ya31c320tZtb5zfn1rlQu2qtp++mptl1JMlppZTT5rx9n1rrpm5+j79P8oRa61lzvju7zTt39T4kyYYkX0vyuiSvrrUu6TaaUsr1kjwzyaOS3C7JTFq7z6i1vmUp65izrmUdq1LKTZL8z7RREtdPUpO8MsnXd7ON49LafEJX63lJ/ijJL6edQ/eptW6a953bd3X9QpJDk/wgycfSjlFdoKbnpJ0DhyfZkeTStPPkT2qtX1vCfrhPkkcnuVe3jvVJvprkH5K8tNZ65bzPnz5be5IbJ/n9JHdMcmWSDyd5dq31kgW2c2y3L+45b18sy5xz8TZJHpjkqd2/fzfJXyV5ca11ppTyiLR9c3SSHyd5W5L/Prc9c/tarfXxC2xrU5KTaq1rdlPP7Dpm/zz3XP5krfXkbvnmJKm1HjHns49P12eSbEnyh2n9ZHvaMX9erfWi3e2PebUcn9bmeyW5Udq58P60c+fbS/j+piQndX88aU5bPllrPbmUsn+S30nrM0cnuWnavv1Ckj+vtX5ggXVeq9272f4xSZ6X1l8OS/KjJN9MC6SeU2vdsad1ALBvMycQAMt1RJJ/TnKTJGelXXTeL8mmUsrt0m5HOi7JW9Mu+u6c5AOllFvOXUkp5QZJPp12sf3DJK9K8o60i48Pl1KetMj2T0jyqSQHJvm7tKBme7fOuyW5IO2itCZ5dZL3Jbl3knNKKQ/oo61T8u60tibJJ9PCsNl/Ni/h+/sn+Wha+PG/k/x1khsk+Yskr1lKAd0xOyctiNmZa/b/xiRvLqX86dKasvxjVUrZkHa+/FaSL6edLxekhVi/t8g2Tky7eL1v2oX4a9KCxk8k+S+LfOf+aRfUv5Hkc2n752NpQeV5Xd2zn71eWmj17LQg6i+T/G1aKPbgJD+3xN3xB0l+qWvP65P8Tdo5fXra+bRuke89Ncmb0o7/a5NcmBbOfbSUcsC8dt0jrd/cL8kH0vbF9iSbkhy/xDrne3na+Xde2nHYlRYynVZKOTXt3PhK9953kzwtLbSbth90dcyGgXP7xllLXMdD0/rYt9KO+WeSPCzJZ0spZSkrKKU8Ie18+JW0c+xVST6f5IlJPr/EvxfO6upOWnvmt+NGXX0HJ/lIklckeW+SuyZ5fynliUupdZH6j0n7++7BaX+3vSLt77UtaefaAYt/G4ChMBIIgOU6KckLaq0vml1QSvmjJH+SdgHxtiRPrbXu6t77SJL/lXahPvdi/aVpF8l/leTJsyNRSikvTbtwOqOU8qH5I2fSLpafXGt9/dyFpZT9um0flDa645Nz3rtZ2gX935ZSjqi1XnUdt3VitdZ3l1J+kDYCY9PuRg0t4rC0kT93nG1/N5roc0meWkp5a611T7efvCrtYvMPaq0vm11YSjkw7QL6+aWUt9daL9jdSlZ4rF6cNtrkVbXW35vz+dekXbDP38batJDqwCQPmDtCopTy5LTAZv53bpjkLUn+I8m9a63/Pue9o9OO+d8kmQ2CfiHJkfNr6j6/f5Z+0fzUJBfPH41VSnlhkhckeXha0Djf/ZMcV2v9tznfeXPaqKIHp+3jlFLWpO2Ln0nya7XW98z5/DPTjutKHJvkmNlRR90Ipa+kjYT5jyTH1lr/X/feAUnOT/JbpZTTaq3fW+E2r6XW+oMkp3ej6m61gr6RtJFcp9Ra/8/sgjn75szsYV6dUspRaQHe5rSRS5fMee++aYHNX6SNwttdW87qvnNaks0LtOX7aW381rztH5IWQL2slHJ2rfU/d7edRfxmWn/5qXOkW/8N044pAANnJBAAy7U5yUvmLZsdoXJA2i0Du+a89+YkVyf5yeONSynrkzwm7faf5829+O1uvTgjbeTK4xbY/gXzA6DOA9MuyF89N1To1vnttKft3DTLmyR1cyZs6z7meXMDsFrr5Wm3uyXtdphFdSNxHpPk83MDoG49V6aNZlmT5L8uoY5lHavufPmNJFekjY6Z+/nPJzl7gW3cI8ltk3xigVtk/iptNNF8j0sbHXXa3ACo284X00ZP3bWUMn+Ez7UuuGut22utVyywjWuptX5tkdvxZsOZX17kq2fMDYA6f929zh3pdI8kJck/zb+4TxsRtNI5Y144N+zowpj3Jrlekr+cDYC6965KC7L2T3KHFW5vb/r43ACoM7tv7ltKudUevv+UtNv4njn/Vrxa68fT9ssppZSDJymy1nrV/ACoW/7DtKDvhmmjEyex0Pn8/Xl/1wEwUEYCAbBcF9Rad85bNjvXxZfnX/jWWneWUi5Nm+tk1u3TLhTP7YKI+T6eNgLirgu8d94idZ3Qvd5qkUeo3657vUParUFLMY227iuuTrudar5N3etC+3qu45KsS7LYI+rXd69LucBf7rGaPV8+1V3szrcp18yXNGu2PefM/3CtdVcp5dNJjlqkrjsvUtfs5++Q5N/Tbsu7JMlzu9vE3p82GmOh82ZRpZSfTZtn6SHdNg5OC9Rm3XyRr35+gWXf7F5vOGfZ7MilT8777Ow5e05aKLdcC21/tn/8ywLvzYYj+2L/2NO+uWt2M/dUrjl3TurmoZrv0LT+c1QW3jdL1o1Ke07arZOHpY3emWux82VP3pp2Hr67lPL2tNtHzzWxNMDqIgQCYLmudRFea726mzZjsSdTXZ1rQoIkOaR7XexR5rPLb7DAe99d5DsbutdHLPL+rIP28P5c02jrvuKyRYKJ2f15yALvzTW7f4/L7kcaLGX/LvdYzdZ26SKfW+ic2NN3Flo+W9d/W0pdtdYflVJ+Pm3Oll/NNSN2LiulnJnkT/c0kW43yunjaSN3Lky7EN+SNsF00iaAXuy2sh8ssOzq7nXuPEIr2X9LsVAfuHoJ7+2L/WNP+2ap/eM5e/jccv7+uZbufPt42n/DfyxthNGP0uZjukvabYArmrun1npeN4/WH6bdgvjYbps1bWLrZU38DsC+SQgEQB9mLxBvusj7h8373FyLPcVq9rMPrrW+d6WF7SWzt1Es9Lu7UNC1N9y4lLJugSBo9hjs6dHys++/stb6rAlrWe6xmv38TRZ5f6Hz6Ed7+M5Cy2e3c+da678uoa50t+b8djfvzs+lTUL9tCT/I+22+z09fevBaQHQtZ6OVUo5LC0EmtRK9t91ZXd9I7nu+see9s1S+8chtdYf7faTk3lB2txOCz3V7nlp59OK1Vo/k+RB3RxOx6bNO/WMtInft9R5T20EYHjMCQRAH2raJKN36SYcne8+3esXlrHOz3avJ05S2F7y/e71Fgu8d/dlrGc2wFnsaVG7s1/a3DDzndy9nr+H75+XdsE+jf273GP1pVxzviw0IuPkBZbNtude89/oJo1eaF+s+Byqtc7UWr9Ya311kl/sFv/aEr562+71HQu8d9ICy1Zith9da33dk8eutY+uQ4v2jVLK9XPtW/Z2Z2f3vZX0jz3tmz31j+vq75/bJrl8fgDUmdb5Mjv30Kdrrf8jyand4okCJgD2DUIgAK5ztdbtaZP5HpT2pK2fKKUcmXbRsSPJG5ex2vekTeL6tMUeBV9KOaF7rPd1bXYeo5+6zaiUcqe0OTiWamv3utJH0L947qPDSyk3ShtZkCR/v7svdk9zOjvJ3Uspf9Q94eunlFKOLKXcegl1LOtYdbdUnZ02V87p8z5397RJo+c7t9vGfUopvzLvvd/JwuHC36fdYnVaKeVaj5AvpaztnkA1++c7llKOWGA9s6NKlvI0pc3d68lzF5ZSbpP2BL1p+HRa8HrvUsr8C/mnZ2XzAU1FN6/Wl5Lcc+6E210A84q0US9LNUn/uG8p5UHzls3um0/UWnc3H1DSJpHekeSV3ZPCfkopZf/uVqtJbU5yo+5x7nPX/9tZfALxJSmlnLhIyLqc8xmAfZzbwQDoy3PT/q/507uJVD+R5MZJHpl2sf/0WuvFS11ZrXVHKeWhST6U5B+7iX8vSLtwuUXaPDa3SbvV7Lq+mHlPkouSPLqUcnjao8ZvmfZ/1t+T1ualqGmT6/56KWV7km+k3R73xiVcpH4nba6QC0sp702bl+XhafvjzCU8Hj5pF8W3SwvuHttNmntpkpulTZZ8XNrjyXd73FZ4rJ6f9rSw3+2Cn3O69x+VNiHzr87bxq5SyhOTfDDJe0sp70gLhY5JG6nzgSS/kmtuR0qtdWsp5eFJ3pXks6WUjyX5YveZW6ZN/rsh10zEe78kr+jq/1KS76VNevzg7jt/tvvdmSR5X9pj1Z/VhYLnd9t6UJJ/zMoDv5+otc50IcFHkryjlPLObpt37trwwbTbfvryZ0n+Nsm5pZR/SHJl2mjA9Un+b1qdS/GxtHmm3llKeX/aU66+XmtdSpj8viTvKqW8K9fsmwckuTzJU/f05Vrrl0opv5X2hK4vllI+mPYEuvVpx/DEtLmebr/EtizmVWlhzzmllLel3YZ297QRS29P69Mr9ewkv1RK2ZTka2lPbzw6rZ98P+2pegAMnJFAAPSieyrYCWmPA9+Q5FlpF3DnJbl/rfXMFazzX9Mu3l6aNpHrE9Ie3Xxs2sX1Y5NcNo36l1nXlWkBxtuS3DEtTLlN2uPU/3IZ69mZ9gSpc9KCoz9Oe8T7UkbfbE+74P9wkl9P8qS0C8hndvUsZfs/Srvl5Blp+/FhacftPmmPb/+9tKBhKeta1rGqtV6W5J5po3Vun+R30ybCfUqSVy6yjU1dvZvSHkt/arr5VNIucpNr5g6a/c7H0oKiM5MckeTJSZ6Ydtw+nrbvZn0o7aL8wLTg59lpT2z6SJITa61vX8J++HHaPEJvTrvgPrXb/guTPGZP31+qWuu5aUHER9Mu6p+RFgqenBZK9qbW+ndp+/jbaU95e2Ta6KV7ZuHJrxfzN0lenHY+/X7aPvztJX73nWl96xZpfeKe3bITaq1fWsoKaq1vSjt/z047hk9PO4a3TQto9hgmLWEbH0xyStrT6R6V1r6r0s7pf5xw9WemTUx+RFr/e0baiLkzk9zVU8IAVoc1MzOLza8JAKwGpZTNSVJrPaLXQvYhpZRzkxyfNpHvj/uuh36UUh6fFiw+odZ6Vr/VAMDeZyQQALAqlVKuV0q51tOlugv/eyT5sAAIABgTcwIBAKvVLZOcX0r5SNo8L/sluWva/Ck/SLt9CwBgNIRAAMBqdWna/Cwnpc2ZckCS76bd/vMic5wAAGNjTiAAAACAEehzJNABaY+A/U6SnT3WAQAAALBarEtyWJLPpT1F8if6DIGOS/KpHrcPAAAAsFqdmOScuQv6DIG+kyTf//6Ps2vXsG9J27DhoGzduq3vMoAJ6McwfPoxDJs+DMOnH+8b1q5dkxve8GeTLneZq88QaGeS7No1M/gQKMmqaAOMnX4Mw6cfw7DpwzB8+vE+5VpT76ztowoAAAAArltCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABiBJT0ivpTy8iQPS3JEkjvVWi8spWxI8sYkRya5KslXkjyp1rplL9UKAAAAwAotdSTQu5PcO8nX5yybSfKyWmuptR6T5KtJXjLl+gAAAACYgiWNBKq1npMkpZS5yy5PsmnOxz6b5ClTrG0QNl1wSb5w0WXZsX1n36VM5Pijb5KT73LzvstYkU0XXJJ//uKlfZcxkSHv/2R1HIP7HX+rHHvbDX2XsSKrYf8nw+4Hq+EYDHn/J6vj93jIx0Af6N9qOAZ+i/s35H6wGo7BkPd/sjp+i+91zGG5550O67uMvWpJIdCelFLWpgVA713udzdsOGgaJfTmCxddlosv+WFuffND+i5lxS6+5IdZf9G6POIXb993KSvyhYsuy7e2bBvsMRj6/k9WxzH45Pnfyv1POKLvUlZk6Ps/GX4/GPoxGPr+T4b/ezz0Y6AP9G81HAO/xf0aej8Y+jEY+v5Phv9bnCTXv/6B2bjx4L7L2KumEgIleXWSbUles9wvbt26Lbt2zUypjOveju07c+ubH5JnPeLOfZeyYi89+wvZsX1ntmy5ou9SVmTH9p05fONBgz0GQ9//yeo4BkkGewyGvv+T4feDoR+Doe//ZPi/x0M/BvpA/1bDMUj8Fvdp6P1g6Mdg6Ps/Gf5v8awhH4NZa9euWXTAzcQhUDdp9O2SnFJr3TXp+gAAAACYvolCoFLKi5Icm+SBtdarplMSAAAAANO21EfEn5HkoUlumuSjpZStSR6Z5PlJvpzk092k0RfXWh+yl2oFAAAAYIWW+nSwU5OcusBba6ZbDgAAAAB7w9q+CwAAAABg7xMCAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAAAACAERACAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAE9tvTB0opL0/ysCRHJLlTrfXCbvlRSd6QZEOSrUkeV2u9aO+VCgAAAMBKLWUk0LuT3DvJ1+ctf12S19Zaj0ry2iSvn3JtAAAAAEzJHkOgWus5tdZvzl1WSjk0yd2SvKVb9JYkdyulbJx+iQAAAABMaqVzAt0iySW11p1J0r1+u1sOAAAAwD5mj3MC7W0bNhzUdwkTWb//uiTJxo0H91zJyg29Derv39DboP7+Db0N6u/f0Nug/n4Nvf5k+G1Qf/+G3gb19281tGEMVhoCfTPJzUsp62qtO0sp65LcrFu+LFu3bsuuXTMrLKN/O7bvzPr912XLliv6LmXFdmzfmSSDbYP6+zf0Ngy9Hw99/yfDb4P6+6cf90v9/Rt6G/Th/g29Derv39D78Wqydu2aRQfcrOh2sFrr95JckOTR3aJHJzm/1rplRRUCAAAAsFftMQQqpZxRSvlWksOTfLSU8sXurScneUYp5ctJntH9GQAAAIB90B5vB6u1nprk1AWWfynJ8XujKAAAAACma6VPBwMAAABgQIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAAAACAERACAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACOw36QpKKQ9K8sIka9JCpdNrre+cdL0AAAAATM9EI4FKKWuSvDHJY2utd0nymCRvKKUYYQQAAACwD5lGWLMrySHdv98gyXdqrbumsF4AAAAApmSiEKjWOpPkkUneU0r5epJ3J/nNaRQGAAAAwPRMNCdQKWW/JM9L8uBa67mllHsmeWsp5edqrduWso4NGw6apITerd9/XZJk48aDe65k5YbeBvX3b+htUH//ht4G9fdv6G1Qf7+GXn8y/Daov39Db4P6+7ca2jAGk04MfZckN6u1npskXRD04yR3SPK5paxg69Zt2bVrZsIy+rNj+86s339dtmy5ou9SVmzH9p1JMtg2qL9/Q2/D0Pvx0Pd/Mvw2qL9/+nG/1N+/obdBH+7f0Nug/v4NvR+vJmvXrll0wM2kcwJ9K8nhpZSSJKWUOyS5aZKvTrheAAAAAKZoopFAtdbvllKekuTtpZTZyaCfUGu9fPLSAAAAAJiWSW8HS6317CRnT6EWAAAAAPaSaTwiHgAAAIB9nBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAAAACAERACAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAAAACAERACAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYgf0mXUEp5cAkr0xyvyRXJvlMrfV3Jl0vAAAAANMzcQiU5GVp4c9RtdaZUspNprBOAAAAAKZoohColHJQksclObzWOpMktdZLp1EYAAAAANMz6UigI5NsTXJaKeU+SbYleUGt9ZyJKwMAAABgaiYNgfZLcpsk59dan1NKOT7J+0opt621/mgpK9iw4aAJS+jX+v3XJUk2bjy450pWbuhtUH//ht4G9fdv6G1Qf/+G3gb192vo9SfDb4P6+zf0Nqi/f6uhDWMwaQj09SRXJ3lLktRa/7mUclmSo5J8fikr2Lp1W3btmpmwjP7s2L4z6/dfly1brui7lBXbsX1nkgy2Derv39DbMPR+PPT9nwy/Dervn37cL/X3b+ht0If7N/Q2qL9/Q+/Hq8natWsWHXAz0SPia62XJflEkl9MklLKUUkOTfKVSdYLAAAAwHRN4+lgT07yd6WUP0+yI8lja60/mMJ6AQAAAJiSiUOgWuvXkpw8eSkAAAAA7C0T3Q4GAAAAwDAIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAAAACAERACAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBGYWghUSjmtlDJTSrnjtNYJAAAAwHRMJQQqpdwtyc8n+cY01gcAAADAdE0cApVSDkjy2iRPTTIzcUUAAAAATN00RgL9SZI31VovnsK6AAAAANgL9pvky6WUE5Icl+S5K13Hhg0HTVJC79bvvy5JsnHjwT1XsnJDb4P6+zf0Nqi/f0Nvg/r7N/Q2qL9fQ68/GX4b1N+/obdB/f1bDW0Yg4lCoCQnJbl9kotLKUlyeJIPlVKeUGv98FJWsHXrtuzaNdy7yHZs35n1+6/Lli1X9F3Kiu3YvjNJBtsG9fdv6G0Yej8e+v5Pht8G9fdPP+6X+vs39Dbow/0behvU37+h9+PVZO3aNYsOuJkoBKq1viTJS2b/XErZnORBtdYLJ1kvAAAAANM1tUfEAwAAALDvmvR2sJ9Saz1imusDAAAAYDqMBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADACQiAAAACAERACAQAAAIyAEAgAAABgBIRAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAvtN8uVSyoYkb0xyZJKrknwlyZNqrVumUBsAAAAAUzLpSKCZJC+rtZZa6zFJvprkJZOXBQAAAMA0TTQSqNZ6eZJNcxZ9NslTJlknAAAAANM3UQg0VyllbVoA9N7lfG/DhoOmVUIv1u+/LkmycePBPVeyckNvg/r7N/Q2qL9/Q2+D+vs39Daov19Drz8ZfhvU37+ht0H9/VsNbRiDqYVASV6dZFuS1yznS1u3bsuuXTNTLOO6tWP7zqzff122bLmi71JWbMf2nUky2Daov39Db8PQ+/HQ938y/Daov3/6cb/U37+ht0Ef7t/Q2/p8KaMAAAWJSURBVKD+/g29H68ma9euWXTAzVRCoFLKy5PcLskptdZd01gnAAAAANMzcQhUSnlRkmOTPLDWetXkJQEAAAAwbZM+Iv7oJM9P8uUkny6lJMnFtdaHTKE2AAAAAKZk0qeDfTHJminVAgAAAMBesrbvAgAAAADY+4RAAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAEhEAAAAAAIyAEAgAAABgBIRAAAADACAiBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMwH59F8C+4Rvf25aXnv2FvstYkW98b1tueehBfZcxkSHv/2R1HIOLL/nhYI/Batj/ybD7wWo4BkPe/0mr/8jDD+m7jIkM+RjoA/1bDcfAb3H/htwPVsMxGPL+T1bHb/EYCIEmdK9jDsv1r39g32VM5Pijb9J3CRO55aEHDboNQ6591mo4BusvWpcd23f2XcqKDH3/J8PvB0M/BkOufdYtDz0oJ9318L7LWLGhHwN9oH+r4Rj4Le7X0Osf+jEYcu2zhv5bPBZrZmZm+tr2EUku3rp1W3bt6q2Gqdi48eBs2XJF32UAE9CPYfj0Yxg2fRiGTz/eN6xduyYbNhyUJLdOsvmn3uujIAAAAACuW0IgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGAEhEAAAAMAICIEAAAAARkAIBAAAADAC+/W47XVJsnbtmh5LmJ7V0g4YM/0Yhk8/hmHTh2H49OP+zTkG6+a/t2ZmZua6reYa90ryqb42DgAAALCKnZjknLkL+gyBDkhyXJLvJNnZVxEAAAAAq8i6JIcl+VySq+a+0WcIBAAAAMB1xMTQAAAAACMgBAIAAAAYASEQAAAAwAgIgQAAAABGQAgEAAAAMAJCIAAAAIAREAIBAAAAjIAQCAAAAGAE9uu7gKErpRyV5A1JNiTZmuRxtdaL+q0KWKpSyuYkV3b/JMkf1Fo/1FtBwB6VUl6e5GFJjkhyp1rrhd1yv8kwALvpw5vjNxkGoZSyIckbkxyZ5KokX0nypFrrllLKzyd5fZKfSbI5yWNqrd/rq1Z+mpFAk3tdktfWWo9K8tq0kx0YlofXWu/S/eM/NmHf9+4k907y9XnL/SbDMCzWhxO/yTAUM0leVmsttdZjknw1yUtKKWuSvCnJ07rf439K8pIe62QeIdAESimHJrlbkrd0i96S5G6llI39VQUAq1ut9Zxa6zfnLvObDMOxUB8GhqXWenmtddOcRZ9Ncqskd09yZa31nG7565I88jouj90QAk3mFkkuqbXuTJLu9dvdcmA4zi6l/Gsp5cxSyg36LgZYEb/JsDr4TYaBKaWsTfKUJO9NcsvMGeVXa70sydpSyo16Ko95hEDA2J1Ya71zkuOSrEnymp7rAYCx8psMw/TqJNuizw6CEGgy30xy81LKuiTpXm/WLQcGYHY4eq31qiRnJrlnvxUBK+Q3GQbObzIMTzfR++2SPKrWuivJN9JuC5t9/8ZJZmqtl/dUIvMIgSbQzXB+QZJHd4seneT8WuuW/qoClqqU8rOllEO6f1+T5NfT+jQwMH6TYdj8JsPwlFJelOTYJL/WhbdJ8i9JfqaUcq/uz09O8rY+6mNha2ZmZvquYdBKKbdPexztDZN8P+1xtLXfqoClKKXcJsk7kqzr/vn3JKfWWr/Ta2HAbpVSzkjy0CQ3TXJZkq211qP9JsMwLNSHk5wSv8kwGKWUo5NcmOTLSf6zW3xxrfUhpZR7pD2h88Bc84j4S3splGsRAgEAAACMgNvBAAAAAEZACAQAAAAwAkIgAAAAgBEQAgEAAACMgBAIAAAAYASEQAAAAAAjIAQCAAAAGIH/D9m2eQcuo/bgAAAAAElFTkSuQmCC\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -712,21 +748,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using flip-flakiness method is: 50.0\n" + "flip-flakiness score: 50.0\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "test_array_7 = [1, 12] * 11\n", "x = np.arange(len(test_array_7))\n", "plt.step(x, test_array_7)\n", - "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", + "plt.title(\"more multiple edges and multiple fails\", fontsize=20)\n", "plt.show()\n", - "\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"flip-flakiness score: \",\n", " calc_flakiness_score(test_array_7),\n", ")" ] @@ -735,7 +769,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the above figure, we have shown the extreme flaky test with irregular behavior patterns. Therefore, our flakiness score is 50." + "In the above figure, we have simulated an extremely flaky test with an inconsistent pass behavior pattern. And as you can see we get a maximum flakiness score of 50." ] }, { @@ -750,9 +784,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -764,21 +798,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using flip-flakiness method is: 0.0\n" + "flip-flakiness score: 0.0\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "test_array_2 = [1] * 24\n", "x = np.arange(len(test_array_2))\n", "plt.step(x, test_array_2)\n", - "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", + "plt.ylim(0, 13)\n", + "plt.title(\"all tests pass\", fontsize=20)\n", "plt.show()\n", "\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is:\",\n", + " \"flip-flakiness score: \",\n", " calc_flakiness_score(test_array_2),\n", ")" ] @@ -787,7 +821,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the above figure, we can see all the test runs passed. Hence, our flakiness score is 0" + "In the above figure, we can see all the test runs passed. And as we would expect, our flakiness score is 0" ] }, { @@ -802,9 +836,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -816,21 +850,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using flip-flakiness method is: 0.0\n" + "flip-flakiness score: 0.0\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "test_array_3 = [12] * 24\n", "x = np.arange(len(test_array_3))\n", "plt.step(x, test_array_3)\n", "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", + "plt.title(\"all tests fail\", fontsize=20)\n", "plt.show()\n", "\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"flip-flakiness score: \",\n", " calc_flakiness_score(test_array_3),\n", ")" ] @@ -839,7 +873,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the above figure, we can see there is no edge in this test run, and there are consistent failures occurring for all the runs. Hence we did not consider the above test as a flaky test. Hence, the total flakiness score using the `flip flakiness` method is 0" + "In the above example, we can see that there are no edges and consistent failures occurring for each run. We do not consider this pattern to represent a flake, so the flakiness score using the `flip flakiness` method is 0." ] }, { @@ -854,26 +888,46 @@ "outputs": [ { "data": { + "image/png": "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\n", "text/plain": [ - "0.0" + "
" ] }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "flip-flakiness score: 0.0\n" + ] } ], "source": [ + "plt.figure(figsize=(20, 5))\n", "test_array_4 = [12, 0] * 2 + [12] * 5 + [0] * 2 + [12] * 7\n", - "calc_flakiness_score(test_array_4)" + "x = np.arange(len(test_array_4))\n", + "plt.step(x, test_array_4)\n", + "plt.ylim(0, 13)\n", + "plt.title(\"fail or not run tests\", fontsize=20)\n", + "plt.show()\n", + "\n", + "print(\n", + " \"flip-flakiness score: \",\n", + " calc_flakiness_score(test_array_4),\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Above, we can see we ignore not run instants in our calculation of flakiness score.
\n", - "Below, we are included test cases from testgrid repos. [Refrence](https://github.com/GoogleCloudPlatform/testgrid/blob/2a016ff75a27fff1550f5e9f5319cf0114182547/pkg/summarizer/analyzers/flipanalyzer_test.go)" + "In the above example we have simulated consistent failures with irregular non-run instances. As we can see, this method has ignored the not run instances in our calculation of flakiness score.\n", + "\n", + "In addition to the examples above, we have also included the [test cases](https://github.com/GoogleCloudPlatform/testgrid/blob/2a016ff75a27fff1550f5e9f5319cf0114182547/pkg/summarizer/analyzers/flipanalyzer_test.go) used by the TestGrid developers below. " ] }, { @@ -890,55 +944,64 @@ "name": "stdout", "output_type": "stream", "text": [ - "Zeroth test case Passed\n", - "First test case Passed\n", - "Second test case Passed\n", - "Thrid test case Passed\n", - "Fourth test case Passed\n", - "Fifth test case Passed\n" + "Empty list: Passed\n", + "All passing: Passed\n", + "Multiple flakes: Passed\n", + "Short run: Passed\n", + "Long run: Passed\n", + "Long run interupted by flakes: Passed\n" ] } ], "source": [ - "test_array_google_0 = []\n", + "test_array_google_1 = []\n", "print(\n", - " \"Zeroth test case\",\n", - " \"Passed\" if calc_flakiness_score(test_array_google_0) == 0 else \"Failed\",\n", + " \"Empty list:\",\n", + " \"Passed\" if calc_flakiness_score(test_array_google_1) == 0 else \"Failed\",\n", ")\n", - "test_array_google_1 = [1, 1, 1]\n", + "test_array_google_2 = [1, 1, 1]\n", "print(\n", - " \"First test case\",\n", - " \"Passed\" if calc_flakiness_score(test_array_google_1) == 0 else \"Failed\",\n", + " \"All passing:\",\n", + " \"Passed\" if calc_flakiness_score(test_array_google_2) == 0 else \"Failed\",\n", ")\n", - "test_array_google_2 = [1, 12, 1, 1, 13, 1, 1, 1, 1, 12]\n", + "test_array_google_3 = [1, 12, 1, 1, 13, 1, 1, 1, 1, 12]\n", "print(\n", - " \"Second test case\",\n", - " \"Passed\" if calc_flakiness_score(test_array_google_2) == 30 else \"Failed\",\n", + " \"Multiple flakes:\",\n", + " \"Passed\" if calc_flakiness_score(test_array_google_3) == 30 else \"Failed\",\n", ")\n", - "test_array_google_3 = [1, 12, 12, 1, 1, 1, 1, 12, 1, 1]\n", + "test_array_google_4 = [1, 12, 12, 1, 1, 1, 1, 12, 1, 1]\n", "print(\n", - " \"Thrid test case\",\n", - " \"Passed\" if calc_flakiness_score(test_array_google_3) == 20 else \"Failed\",\n", + " \"Short run:\",\n", + " \"Passed\" if calc_flakiness_score(test_array_google_4) == 20 else \"Failed\",\n", ")\n", - "test_array_google_4 = [1, 12, 12, 12, 12, 12, 1, 12, 1, 12]\n", + "test_array_google_5 = [1, 12, 12, 12, 12, 12, 1, 12, 1, 12]\n", "print(\n", - " \"Fourth test case\",\n", - " \"Passed\" if calc_flakiness_score(test_array_google_4) == 40 else \"Failed\",\n", + " \"Long run:\",\n", + " \"Passed\" if calc_flakiness_score(test_array_google_5) == 40 else \"Failed\",\n", ")\n", - "test_array_google_5 = [1, 12, 12, 13, 12, 12, 1, 12, 1, 12]\n", + "test_array_google_6 = [1, 12, 12, 13, 12, 12, 1, 12, 1, 12]\n", "print(\n", - " \"Fifth test case\",\n", - " \"Passed\" if calc_flakiness_score(test_array_google_5) == 50 else \"Failed\",\n", + " \"Long run interupted by flakes:\",\n", + " \"Passed\" if calc_flakiness_score(test_array_google_6) == 50 else \"Failed\",\n", ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Excellent! All tests passed. From our hand-crafted examples and the tests cases above we can concluded that the flip flakiness method we have used here performs at least on pare with the methods implemented by TestGrid. \n", + "\n", + "One draw back of this method you may have noticed is that it evaluates the entire pass/fail time series for each test, and does not account for possible flaky subset within an otherwise stable test. Let's extend this method to find flaky regions (subsets) in our test data. " + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Flip Flakiness with Optimal Distance\n", "\n", - "One of the downsides of finding a single value for each test case is that there might be two different consecutive time periods for which the test case is behaving flaky. Or the number of edges is relatively low compares to total runes; hence your flakiness score is really low, but the test is still flaky. Let's illustrate this statement by the example. " + "One of the downsides of finding a single value for each test case is that there might be two different consecutive time periods for which the test case is behaving flaky, or the number of edges is relatively low compares to total runs. This could lead to a low flakiness score, despite the test is still being flaky. Let's illustrate this statement with an example. " ] }, { @@ -953,9 +1016,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -967,23 +1030,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using flip-flakiness method is: 8.620689655172415\n" + "flip-flakiness score: 8.620689655172415\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "test_array_5 = (\n", " [1] * 8 + [1, 12] * 2 + [1] * 23 + [1, 12, 1, 1, 12, 1, 12] + [1] * 16\n", ")\n", "x = np.arange(len(test_array_5))\n", "plt.step(x, test_array_5)\n", "plt.ylim(1, 14)\n", - "plt.axes().set_aspect(0.4)\n", + "plt.title(\"two flaky regions\", fontsize=20)\n", "plt.show()\n", "\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"flip-flakiness score: \",\n", " calc_flakiness_score(test_array_5),\n", ")" ] @@ -992,80 +1055,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As we can see in the above image, we have two separate time periods for which behavior is flaky. We can see that the behavior of the test is flaky between runs [8,11] and [35,41]. However, our flakiness score is low since the total number of runs is higher. " - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "ExecuteTime": { - "end_time": "2020-11-19T20:19:41.569081Z", - "start_time": "2020-11-19T20:19:41.486744Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "flakiness score of above test run using flip-flakiness method is: 3.508771929824561\n" - ] - } - ], - "source": [ - "plt.figure(figsize=(20, 10))\n", - "test_array_6 = [1] * 8 + [1, 12] * 2 + [1] * 45\n", - "x = np.arange(len(test_array_6))\n", - "plt.step(x, test_array_6)\n", - "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.4)\n", - "plt.show()\n", - "\n", - "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", - " calc_flakiness_score(test_array_6),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Similarly, in the above image, we can see that the behavior of the test is flaky between runs [4,7]. However, our flakiness score is low since the number of the total number of runs is higher. " + "As we can see in the above graph, we have two separate time periods for which behavior is flaky, between runs [8,11] and [35,41]. However, our flakiness score is rather low since the total number of runs is high in comparisons. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To overcome this downside, instead of calculating the flakiness score on the entire run. We just decided to calculate the flakiness score between edges since it will maximize our flakiness score. More specifically, we calculated the flakiness score between the two farthest edges, which have a flakiness score greater than a certain threshold. Currently, we are using the threshold as flakiness score 30, but we can change it according to need of the application. " + "To overcome this limitation, instead of calculating the flakiness score on the entire run we will calculate the flakiness score between edges to maximize our flakiness score for flaky subsets of the test. \n", + "\n", + "Specifically, we calculate the flakiness score between the two farthest edges, which have a flakiness score greater than a user defined threshold. Currently, we use a threshold of flakiness score of 30, but this can tuned according to needs of an application. " ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def calc_flake_edges(test_array):\n", - " \"\"\"This function calculates the edges, Edge is the transition of a particular test case from pass to fail.\n", + " \"\"\"This function calculates the number of edges, the transition of a\n", + " particular test case from pass to fail.\n", "\n", " Parameters\n", " ----------\n", - " test_row : array\n", + " test_array : numpy array\n", " array of test runs with 0, 1, 12, 13 values as not run, pass, fail, flaky respectively\n", "\n", " Returns\n", @@ -1098,7 +1112,7 @@ " while i < len(test_array):\n", " ## ignoring more than three consecutive failures\n", " ## If the test is consecutively failing for three or more than three runs,\n", - " ## we considered did not consider it an edge.\n", + " ## we do not consider it an edge.\n", " cf = calc_consecutive_failures(test_array, i)\n", " if cf >= ignore_failures_in_a_row:\n", " i = i + cf\n", @@ -1126,10 +1140,11 @@ "\n", "\n", "def flake_edge_end(test_array, flake_edges, index):\n", - " \"\"\"This function calculates the end of the edges and starting of the edge will always be 1 or 13\n", + " \"\"\"This function calculates the end of the edges. Starting of the edge will always be 1 or 13\n", + "\n", " Parameters\n", " ----------\n", - " test_row : array\n", + " test_array : numpy array\n", " array of test runs with 0, 1, 12, 13 values as not run, pass, fail, flaky respectively\n", "\n", " Returns\n", @@ -1147,13 +1162,13 @@ "\n", "\n", "def calc_optimal_flakiness_score(test_array, threshold=30):\n", - " \"\"\"calculate the flakiness score between edges since it will maximize our flakiness score.\n", - " More specifically, we calculated the flakiness score between the two farthest edges,\n", - " which have a flakiness score greater than a certain threshold.\n", + " \"\"\"Calculate the flakiness score between edges since it will maximize the flakiness score.\n", + " Specifically, we calculate the flakiness score between the two farthest edges\n", + " which have a flakiness score greater than a threshold.\n", "\n", " Parameters\n", " ----------\n", - " test_row : array\n", + " test_array : array\n", " array of test runs with 0, 1, 12, 13 values as not run, pass, fail, flaky respectively\n", " threshold: int default 30\n", "\n", @@ -1167,7 +1182,7 @@ " modified_test_array = test_array.copy()\n", " flake_edges_dict = {}\n", " flake_edges = calc_flake_edges(test_array)\n", - " ## flakiness score between the two farthest edges, which have a flakiness score greater than a certain threshold.\n", + " ## flakiness score between the two farthest edges\n", " p = 0\n", " q = 0\n", " while p < len(flake_edges):\n", @@ -1206,7 +1221,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:19:43.079987Z", @@ -1216,9 +1231,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -1230,97 +1245,50 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score dictionary using Flip Flakiness with Optimal Distance method is: {(8, 11): 50.0, (35, 41): 42.857142857142854}\n" + "Flip Flakiness with Optimal Distance results: \n", + " flake between (8, 11) with score of 50.0\n", + " flake between (35, 41) with score of 42.857142857142854\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "x = np.arange(len(test_array_5))\n", "plt.step(x, test_array_5)\n", "plt.ylim(1, 14)\n", - "plt.axes().set_aspect(0.4)\n", + "plt.title(\"two flaky regions\", fontsize=20)\n", "plt.show()\n", "\n", "modified_test_array, flake_dict = calc_optimal_flakiness_score(test_array_5)\n", "print(\n", - " \"flakiness score dictionary using Flip Flakiness with Optimal Distance method is: \",\n", - " flake_dict,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As we can see in the above image, we have two separate time periods for which behavior is flaky. We can see that the behavior of the test is flaky between runs [8,11] and [35,41]. Using `flip flakiness with optimal distance` methods we can see above, we have a flakiness score of 50 between test run 8 to 11 and a flakiness score of 42.85 between test run 35 to 41." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "ExecuteTime": { - "end_time": "2020-11-19T20:19:43.976945Z", - "start_time": "2020-11-19T20:19:43.888060Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "flakiness score dictionary using Flip Flakiness with Optimal Distance method is: {(8, 11): 50.0}\n" - ] - } - ], - "source": [ - "plt.figure(figsize=(20, 10))\n", - "x = np.arange(len(test_array_6))\n", - "plt.step(x, test_array_6)\n", - "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.4)\n", - "plt.show()\n", - "\n", - "modified_test_array, flake_dict = calc_optimal_flakiness_score(test_array_6)\n", - "print(\n", - " \"flakiness score dictionary using Flip Flakiness with Optimal Distance method is: \",\n", - " flake_dict,\n", - ")" + " \"Flip Flakiness with Optimal Distance results: \",\n", + ")\n", + "for i in flake_dict.keys():\n", + " print(f\" flake between {i} with score of {flake_dict[i]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As we can see above, we have a flakiness score of 50 between test run 8 to 11." + "As we can see in the graph above, we have two separate time periods for which behavior is flaky, between runs [8,11] and [35,41]. Using `flip flakiness with optimal distance` we have a successfully identified these two flaky regions. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Comparision of different methods\n", + "## Comparison of different methods\n", "\n", - "## Comparison of custom test cases\n", - "Below we are comparing custom test runs." + "Now that we have explored 3 different methods for identifying flakes in TestGrid data, lets compare them directly and make sure we move forward with the best method. \n", + "\n", + "### Comparison of custom test cases\n", + "Below use the our custom test cases to compare performance." ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:19:45.280113Z", @@ -1330,9 +1298,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -1344,9 +1312,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using naive method is: 45.833333333333336 and total flaky test detecteds are 11\n", - "flakiness score of above test run using flip-flakiness method is: 0.0 and total flaky test detecteds are 0\n", - "flakiness score dictionary using Flip Flakiness with Optimal Distance method is: {} and total flaky test detecteds are 0\n" + "Naive Score: 45.833333333333336 Number of Flaky Tests Detected: 11\n", + "Flip-Flakiness Score: 0.0 Number of Flaky Tests Detected: 0\n", + "Flip Flakiness with Optimal Distance score: {} Number of Flaky Tests Detected: 0\n" ] } ], @@ -1360,36 +1328,36 @@ " return val_array\n", "\n", "\n", - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "x = np.arange(len(test_array))\n", "plt.step(x, test_array)\n", + "plt.title(\"Single edge and multiple fails\", fontsize=20)\n", "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", "plt.show()\n", "\n", "naive_score = naive_flake_calc(test_array)\n", "total_error_naive = flake_annotation(test_array, naive_score, 10).count(13)\n", "flip_score = calc_flakiness_score(test_array)\n", "total_error_flip = flake_annotation(test_array, flip_score, 10).count(13)\n", - "modified_test_array, flake_dict = calc_optimal_flakiness_score(test_array, 0)\n", + "modified_test_array, flake_dict = calc_optimal_flakiness_score(test_array, 30)\n", "total_error_optimal_flip = modified_test_array.count(13)\n", "\n", "print(\n", - " \"flakiness score of above test run using naive method is: \",\n", + " \"Naive Score: \",\n", " naive_score,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_naive,\n", ")\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"Flip-Flakiness Score: \",\n", " flip_score,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_flip,\n", ")\n", "print(\n", - " \"flakiness score dictionary using Flip Flakiness with Optimal Distance method is: \",\n", + " \"Flip Flakiness with Optimal Distance score: \",\n", " flake_dict,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_optimal_flip,\n", ")" ] @@ -1398,13 +1366,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the above figure, we got a flakiness score of 45.83 using the `naive flakiness` method and `naive flakiness` method detected 11 failures as flaky.
\n", - "However, we can see there is only one edge with more than three consecutive failures. Therefore, there is no irregular behavior and we should not consider the above test as a flaky test. Hence, the total flakiness score using the `flip flakiness` method is 0 and detected flaky test using the `flip flakiness` method are also 0. Also, the flakiness score `flip flakiness with optimal distance` method is giving an empty dictionary i.e. there is no flakiness or flakiness score is 0. Since `flip flakiness with optimal distance` returns a dictionary where the flakiness score is above a certain threshold, and we set a threshold as 10. In this test case, we didn't get a single range where the flakiness score is above 0. " + "Given the above example, which we do not consider to be a flake, we can see that both `Flip-Flakiness with optimal distance` and `Flip-Flakiness` performed equally well, whereas the `Naive` method incorrectly flagged this example as flaky. " ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:19:46.318189Z", @@ -1414,9 +1381,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -1428,43 +1395,45 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using naive method is: 100.0 and total flaky test detecteds are 24\n", - "flakiness score of above test run using flip-flakiness method is: 0.0 and total flaky test detecteds are 0\n", - "flakiness score dictionary using Flip Flakiness with Optimal Distance method is: {} and total flaky test detecteds are 0\n" + "Naive Score: 100.0 Number of Flaky Tests Detected: 24\n", + "Flip-Flakiness Score: 0.0 Number of Flaky Tests Detected: 0\n", + "Flip Flakiness with Optimal Distance score: {} Number of Flaky Tests Detected: 0\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "x = np.arange(len(test_array_3))\n", "plt.step(x, test_array_3)\n", "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.2)\n", + "plt.title(\"all tests fail\", fontsize=20)\n", "plt.show()\n", "\n", "naive_score = naive_flake_calc(test_array_3)\n", "total_error_naive = flake_annotation(test_array_3, naive_score, 10).count(13)\n", "flip_score = calc_flakiness_score(test_array_3)\n", "total_error_flip = flake_annotation(test_array_3, flip_score, 10).count(13)\n", - "modified_test_array, flake_dict = calc_optimal_flakiness_score(test_array_3, 0)\n", + "modified_test_array, flake_dict = calc_optimal_flakiness_score(\n", + " test_array_3, 30\n", + ")\n", "total_error_optimal_flip = modified_test_array.count(13)\n", "\n", "print(\n", - " \"flakiness score of above test run using naive method is: \",\n", + " \"Naive Score: \",\n", " naive_score,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_naive,\n", ")\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"Flip-Flakiness Score: \",\n", " flip_score,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_flip,\n", ")\n", "print(\n", - " \"flakiness score dictionary using Flip Flakiness with Optimal Distance method is: \",\n", + " \"Flip Flakiness with Optimal Distance score: \",\n", " flake_dict,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_optimal_flip,\n", ")" ] @@ -1473,13 +1442,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In the above figure, we got a flakiness score of 100 using the `naive flakiness` method and and `naive flakiness` method detected 11 failures as flaky.
\n", - "However, we can see there is no edge in this test run, and there are consistent failures occurring for all the runs. Therefore, there is no irregular behavior and we should not consider the above test as a flaky test. Hence, the total flakiness score using the `flip flakiness` method is 0 and detected flaky test using the `flip flakiness` method are also 0. . Also, the flakiness score `flip flakiness with optimal distance` method is giving an empty dictionary i.e. there is no flakiness or flakiness score is 0. Since `flip flakiness with optimal distance` returns a dictionary where the flakiness score is above a certain threshold, and we set a threshold as 10. In this test case, we didn't get a single range where the flakiness score is above 0. " + "Again, we do not consider the above example to be a flake as it shows consistent failing behavior. And as expected, both `Flip-Flakiness with optimal distance` and `Flip-Flakiness` performed equally well again, whereas the `Naive` method incorrectly flagged this example as flaky. " ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:19:48.303966Z", @@ -1489,9 +1457,9 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -1503,18 +1471,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "flakiness score of above test run using naive method is: 8.620689655172415 and total flaky test detecteds are 0\n", - "flakiness score of above test run using flip-flakiness method is: 8.620689655172415 and total flaky test detecteds are 0\n", - "flakiness score dictionary using Flip Flakiness with Optimal Distance method is: {(8, 11): 50.0, (35, 41): 42.857142857142854} and total flaky test detecteds are 5\n" + "Naive Score: 8.620689655172415 Number of Flaky Tests Detected: 0\n", + "Flip-Flakiness Score: 8.620689655172415 Number of Flaky Tests Detected: 0\n", + "Flip Flakiness with Optimal Distance score: {(8, 11): 50.0, (35, 41): 42.857142857142854} \n", + "\tNumber of Flaky Tests Detected: 5\n" ] } ], "source": [ - "plt.figure(figsize=(20, 10))\n", + "plt.figure(figsize=(20, 5))\n", "x = np.arange(len(test_array_5))\n", "plt.step(x, test_array_5)\n", "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.4)\n", + "plt.title(\"two flaky regions\", fontsize=20)\n", "plt.show()\n", "\n", "naive_score = naive_flake_calc(test_array_5)\n", @@ -1527,21 +1496,21 @@ "total_error_optimal_flip = modified_test_array.count(13)\n", "\n", "print(\n", - " \"flakiness score of above test run using naive method is: \",\n", + " \"Naive Score: \",\n", " naive_score,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_naive,\n", ")\n", "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", + " \"Flip-Flakiness Score: \",\n", " flip_score,\n", - " \" and total flaky test detecteds are \",\n", + " \" Number of Flaky Tests Detected: \",\n", " total_error_flip,\n", ")\n", "print(\n", - " \"flakiness score dictionary using Flip Flakiness with Optimal Distance method is: \",\n", + " \"Flip Flakiness with Optimal Distance score: \",\n", " flake_dict,\n", - " \" and total flaky test detecteds are \",\n", + " \"\\n\\tNumber of Flaky Tests Detected: \",\n", " total_error_optimal_flip,\n", ")" ] @@ -1550,100 +1519,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As we can see in the above image, we have two separate time periods for which behavior is flaky. We can see that the behavior of the test is flaky between runs [8,7] and [31,37]. However, our flakiness score using `flip-flakiness` and `naive flakiness` method is low since the number of the total number of runs is higher.
\n", - "Hence, `flip-flakiness` and `naive flakiness` were unable to detect a flaky tests. However, `Flip Flakiness with Optimal Distance` method is able to detect the flaky test." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "ExecuteTime": { - "end_time": "2020-11-19T20:19:49.328891Z", - "start_time": "2020-11-19T20:19:49.232610Z" - } - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "flakiness score of above test run using naive method is: 8.620689655172415 and total flaky test detecteds are 0\n", - "flakiness score of above test run using flip-flakiness method is: 8.620689655172415 and total flaky test detecteds are 0\n", - "flakiness score dictionary using Flip Flakiness with Optimal Distance method is: {(8, 11): 50.0, (35, 41): 42.857142857142854} and total flaky test detecteds are 5\n" - ] - } - ], - "source": [ - "plt.figure(figsize=(20, 10))\n", - "x = np.arange(len(test_array_6))\n", - "plt.step(x, test_array_6)\n", - "plt.ylim(1, 13)\n", - "plt.axes().set_aspect(0.4)\n", - "plt.show()\n", + "As we can see in the above example, we have two separate time periods for which behavior is flaky, between runs [8,7] and [31,37]. However, our flakiness score using `flip-flakiness` and `naive flakiness` method is rather low since the total number of runs is high compared to the number of edges and both methods performed poorly at detecting flaky tests. \n", "\n", - "naive_score = naive_flake_calc(test_array_5)\n", - "total_error_naive = flake_annotation(test_array_5, naive_score, 10).count(13)\n", - "flip_score = calc_flakiness_score(test_array_5)\n", - "total_error_flip = flake_annotation(test_array_5, flip_score, 10).count(13)\n", - "modified_test_array, flake_dict = calc_optimal_flakiness_score(\n", - " test_array_5, 30\n", - ")\n", - "total_error_optimal_flip = modified_test_array.count(13)\n", - "\n", - "print(\n", - " \"flakiness score of above test run using naive method is: \",\n", - " naive_score,\n", - " \" and total flaky test detecteds are \",\n", - " total_error_naive,\n", - ")\n", - "print(\n", - " \"flakiness score of above test run using flip-flakiness method is: \",\n", - " flip_score,\n", - " \" and total flaky test detecteds are \",\n", - " total_error_flip,\n", - ")\n", - "print(\n", - " \"flakiness score dictionary using Flip Flakiness with Optimal Distance method is: \",\n", - " flake_dict,\n", - " \" and total flaky test detecteds are \",\n", - " total_error_optimal_flip,\n", - ")" + "However, `Flip Flakiness with Optimal Distance` method is able to correctly detect the flaky test regions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As we can see above, in the above test case, we can see that the behavior of the test is flaky between runs [4,7]. However, our flakiness score using `flip-flakiness` and `naive flakiness` method is low since the number of the total number of runs is higher.
\n", - "Hence, `flip-flakiness` and `naive flakiness` were unable to detect a flaky tests. However, `Flip Flakiness with Optimal Distance` method is able to detect the flaky test." + "Given the results of the above tests, it is safe to conclude that `Flip Flakiness with Optimal Distance` is the best method to identify flakes moving forward. However, that is only based on these handcrafted test examples. Now lets look at some read testgrid data and see how each method performs. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Comparison of testgrids\n", - "Below we are comparing custom testgirds with annotations.\n", + "## Comparison of TestGrids\n", + "\n", + "We will now apply each method to real testgrid data and see how well each performs.\n", "\n", - "### Original testgrid" + "\n", + "### Original TestGrid" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:20:00.250844Z", @@ -1653,7 +1555,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1677,6 +1579,9 @@ " linewidths=0.1,\n", " linecolor=\"Black\",\n", ")\n", + "plt.ylabel(\"Tests\")\n", + "plt.xlabel(\"Days\")\n", + "plt.title(\"raw data\\n\", fontsize=20)\n", "plt.show()" ] }, @@ -1684,12 +1589,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Cells with Purple color in the above graph are the existing flake labels. " + "Cells with Purple color in the above graph are the existing flake labels for individual test runs provided by the underlying CI system. " ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:20:00.255882Z", @@ -1701,7 +1606,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "total number of existing flake label given by the testgrid algorithm is 207\n" + "total number of flakes labeled by the ci system's algorithm: 207\n" ] } ], @@ -1710,7 +1615,7 @@ " np.array(list(details[\"values\"][:40].values)) == 13\n", ")\n", "print(\n", - " \"total number of existing flake label given by the testgrid algorithm is\",\n", + " \"total number of flakes labeled by the ci system's algorithm:\",\n", " total_existing_flake_label,\n", ")" ] @@ -1724,13 +1629,14 @@ } }, "source": [ - "### Naive flake method testgrid\n", - "Below we are annotating testgrid using the naive flake detection method. We want to check the performance of the method without the original flaky label. Hence, for illustration purposes, we are removing the flaky labels. However, in production, we might not change the original flaky label. " + "### Naive flake method\n", + "\n", + "Below we are annotating a testgrid using the naive flake detection method. " ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:20:39.070779Z", @@ -1739,7 +1645,7 @@ }, "outputs": [], "source": [ - "flake_score_threshold = 10\n", + "flake_score_threshold = 30\n", "# calculate the flakiness score by naive method for each test in our dataset.\n", "details[\"naive_flakiness_score\"] = details[\"values\"].apply(\n", " lambda x: naive_flake_calc(x)\n", @@ -1754,7 +1660,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:20:43.778690Z", @@ -1764,7 +1670,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJIAAAKBCAYAAAAMf4EQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzde7xsd10f/M8KQUWQW0SRRowi+YoYrvJUaxukF/FVTC0gAgKKgIVgSVufWpHH1qOITWNabLgIFSk0ptQbTWkV8ZXatI2IfdrCUxPbL4JJAC8ICWBjJVwyzx8zG/fZ2ftkrbPPnjWT837nldecvea7P/OdNXvW2a/v+a01w2KxCAAAAADckTPmbgAAAACA7WCQBAAAAMAoBkkAAAAAjGKQBAAAAMAoBkkAAAAAjGKQBAAAAMAoBkkAwJ1CVV1dVYu5+9h0VbWoqqtnfHyvEwBssTPnbgAAuPPaNTB4X5Lq7o/vU3NDki9Jctfu/tT6ujtaVXUsyQ+uvvwX3f0dB9Q9NsnVqy9v7O5zDvm4NyTJYXMAAPZjRRIAsA4PTPK3j/gxvj3JQ474MU7Gp5I8parufcD937WqAQDYeAZJAMBR+0iSm5N8f1V9/lE9SHe/r7v/11HlH8K/S3K3JM/Ye0dV3SfJk5P823U3BQBwMpzaBgActf+T5NIkL8/yVK8Xjfmmqnp2kguSPDLJFyX5ZJLfTPIT3f3T+9RfneSx3T2svn56kn+Z5OXd/T371H92kj9IcmuSs3efVrf63r+R5BFZDoGuT3JFkh/r7lvH9L/LLyf56ixXHr1qz33PSvI5SX4yyRMPCqiqxyf5W0n+rySfl+QDSd6c5GXd/dFVzdcn+Q+7vmf3dYje2N3P3pP5+Ul+NMt9fN8k70lyaXf/830e/4ws98dzs1z1NST5rSSvT/La7r5tn+95WpLvTfKVSf53krcl+b6DniMAsB2sSAIA1uFVSd6b5PlVde7I7/mJJOck+U9JfjzJv8ryWkqXV9VLR3z/v07ysSTPqKr9/vHsm5PcO8lP7xki/VSWA6gvz3JY86osV1S9NMkvH5B1Ip/OcuDy8Kr66j33fVeSG5JcddA3V9U/yHIY9WeT/GKSy7Ic+vzdJL9WVfdcld6Q5IeyfM4fW/155/8r98TeO8mvJfnaJD+f5F8keUCS11fVftdyujzL1+MLk7wuyT9Lcr8kr17dt7fnv5PkTUm+bJX9z5Ocl+TtSe5z0HMFADafFUkAwJHr7k9W1YuT/FySi5M8acS3fVV3v3f3hqr6rCRvTfLiqnpNd//uCR7z41X1M1mupPnGLE8x221nYPLGXfnPTvKcLIdQz+juP9l137EsV1R9d5J/OqL/3X4qyQ9kOTj6r6u8r0nyVavt+36KWVU9LstB0K8n+as7q4929frPV/f/ne6+Icmx1fZ097ET9PPwVU/P7+5Pr/JenuR/ZLlqaPc+eXqSb0vyziTnd/ctq+0/kOQ/Jvm2qvrF7v6Xq+3nZPkafyTJo1Z9paq+P8vXf8xrDwBsKCuSAIC16O6fz3Ig8sSq+vMj6t+7z7ZPZLlC6Mwkf2nEw+4MRI5bZVNV90/y+CTv7O7f3HXX38rywtfP2T1EWnlpkpuyz7WO7kh3vy/JryR5elXdfbX5u7JcrXS7U8l2uWindvcQaZX5hiTvOpl+sjzd8Ht2hkirvN/KcpXSQ6rq83bVPmd1++KdIdKq/o/zp6eqPW9X/TOSfFaSV+wMkVb1t2V5qtvtToMDALaHFUkAwDr931me3vSPq+prunvflThJUlUPzHJQ8Zey/NS3u+0p+TN39GDd/faqeneSC6rqPt39kdVdz0hylyRv2PV4n5vlSp0PJ/nbVbVf5K05+U+G+8ksV0Y9rap+LslTk/xid//eCU6X+9osrw31lKp6yj73f1aS+1XVWd1904Refru7/2if7e9f3d47y+saJcmjshz+XL1P/X/Mchj2yF3bHrXrvuN09+9U1fuzPEURANhCBkkAwNp0969X1c8n+ZYk35rkZ/arq6ovS/Jfsryezn/OcjXPx7IcWpyT5Qqjzx75sG9M8rIkT8vyOj9Zff8ns7yOz477ZHkR6ftleQrbqfaWLC/u/bwkd01y9yyHSydyVpa/r91RP/fIcrXUWB89YPvOtaLusmvbvZLcvFoNdpzu/lRVfTjJF+ypT5IPHvAYfxCDJADYWgZJAMC6vTjLC13/w6r61wfUfE+WQ5TvXJ3C9Rmra/bsd0Hog1ye5Wlp35HkJ6rqkVle+PnfdPeHdtV9bHX7zu5+VE6x1dDlDVk+/7Oz/OS1t97Bt30syRndfd9T3c8EH0ty36q6a3d/cvcdq5VUn5/kj/bUJ8sLc1+3T979j6RLAGAtXCMJAFir1bWPXp3kS5O86ICyL1/d/sI+9z124uO9P8mvJvmztTxf7XYX2V7V3ZLl4OOhVXVUg5vXZXlh7bOTvH73NYoO8I4k96mqh054jE/n+BVFh/XOLH9nPH+f+85fPdZ/37Vt58+3e51WK82++BT2BgCsmUESADCHH87y9Kr/J8vTsva6YXX79bs3VtXjc/yFncd6w+r2uUmenuVpYHs/xS1J/kmW1x16fVXde++dVXWfqjrp1UqrIdo3JnlikstGfMvLV7c/WVUP2Kefu68+/W23m7K8btLea0qdrNevbv/h6jpSO4/9uVl+Oluy/AS4HVdkedrgi1af4LZTf0aSH4vfPwFgqzm1DQBYu+6+uap+NMklB5S8Osl3Jvm5qvqFJL+b5KuyHML8bJYXqp7izVmefvW3s7w+0Sv2nqa16uv1VfXoJC9M8t6qeluS9yW5b5YrqM7P8lPWXjDx8Xc/xq9MqP33VfXiJP8wyW9X1S8luT7L4duXZLnq55os98uOf5/kMUl+uar+U5YXCP//uvvfnmS//7KqvjnLa1pdV1VXZrmq6q9nuU9+truv2FV/w6rnf5zknVX1M1me7vb4LC/i/T+SPOxkegEA5udfhACAuVyWP115dJzu/h9JHpflJ7z91SQXJrlnkiclec3UB+ruP0nyc1kOkZI9p7Xtqf3uJBck+fUkfznL6zX9tSwvIv1jSX586uMfRnf/oywHWL+Y5OuyHIY9JctPrftnSX5gz7f8SJb76EFJvj/L60M9+ZBtPD3Jd2e52un5WQ7SPpLkb67u29vzP0nybVkOvZ6d5DlJrk3y51bfBwBsqWGxOPBTdwEAAADgM6xIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGAUgyQAAAAARjFIAgAAAGCUM+du4LB+aPihxdjaY6v/TnWtbNmyZc+ZPSE6y/Lx2du6T2TfebL9fN++dvetbNmyx9WeTC+yZcuWfbpnLxaLYb/7rEgCAAAAYBSDJAAAAABGOXPuBpKkqs5N8sYkZyW5Kcm3d/dvz9sVAAAAALttyoqk1yR5VXefm+RVSV47cz8AAAAA7DH7IKmqviDJo5K8abXpTUkeVVX3m68rAAAAAPaafZCU5IuT/G53fzpJVre/t9oOAAAAwIbYhEESAAAAAFtgEwZJ70/yZ6rqLkmyun3AajsAAAAAG2L2QVJ3/2GSdyV5+mrT05O8s7s/NF9XAAAAAOx15twNrLwgyRur6h8k+UiSb5+5HwAAAAD22IhBUnf/ryR/du4+AAAAADjY7Ke2AQAAALAdhsViMXcPhzIMw3Y/AQAAAIANs1gshv22b8SpbYdxLMcm1Y6tn1Ir++D60eXHvJabnj3ltZwyoB6GYVL2hLan1cuWLXsjs6ceT8bWTzr2rHo5yn0y5fi9+3ZM/SZlH8k+/Ez0hF4mZuv79tmb8jN4lO+1bf097EiPP1uavUmv5emwT06Xn5Mp78utfc8fwKltAAAAAIxikAQAAADAKGfO3UBVXZrkyUnOSXJed187b0cAAAAA7GcTViRdmeT8JDfO3QgAAAAAB5t9RVJ3X5MkVTV3KwAAAACcwCasSAIAAABgCxgkAQAAADCKQRIAAAAAoxgkAQAAADDK7IOkqrqsqj6Q5OwkV1XVdXP3BAAAAMDtbcKntl2U5KK5+wAAAADgxIbFYjF3D4cyDMN2PwEAAACADbNYLIb9ts++IumwpkyRhgn1U2plH1yfYyOLj21W37JvXz/ptZwwoB6GYVL26Nqp9bJly97I7KnHk7H1k449q16Ocp9MOX4nR3O8X0f2kezDY3tuZcs+Vb3Ili1b9umefYDZr5EEAAAAwHYwSAIAAABglDPnbqCqzkpyeZIHJbk1yXuSPL+7PzRrYwAAAAAcZxNWJC2SXNLd1d0PS/LeJBfP3BMAAAAAe8y+Iqm7b05y9a5N70hy4TzdAAAAAHCQTViR9BlVdUaWQ6S3zN0LAAAAAMfbqEFSklckuSXJK+duBAAAAIDjzX5q246qujTJg5Nc0N23zd0PAAAAAMfbiEFSVb0syaOTPKG7b527HwAAAABub/ZBUlU9NMlLkrw7ydurKkmu7+4nztoYAAAAAMeZfZDU3dclGebuAwAAAIAT27SLbQMAAACwoYbFYjF3D4cyDMN2PwEAAACADbNYLPY9e2z2U9sO61iOTaodWz+lVvbB9aPLj3ktNz17yms5ZUA9DMOk7AltT6uXLVv2RmZPPZ6MrZ907Fn1cpT7ZMrxe/ftmPpNyj6SffiZ6Am9TMzelL63dX8f5c/gUb7Xpv6utCnZR3r82dJsr+XJ9zG1/nTaJ1OOm9u6Tw7i1DYAAAAARjFIAgAAAGCUM+duIEmq6sokX5rktiS3JHlRd79r3q4AAAAA2G0jBklJvqO7P5YkVfXNSV6f5FHztgQAAADAbhtxatvOEGnlXlmuTAIAAABgg2zKiqRU1euSfEOSIck3ztwOAAAAAHtsxIqkJOnu53X3A5O8JMmPzd0PAAAAAMfbmEHSju6+PMnjquqsuXsBAAAA4E/NPkiqqntU1Rfv+vqCJDev/gcAAABgQ2zCNZLunuTnquruST6d5QDpgu5ezNsWAAAAALvNPkjq7g8m+Zq5+wAAAADgxGY/tQ0AAACA7TAsFtt9BtkwDNv9BAAAAAA2zGKxGPbbPvupbYc1ZYo0TKifUiv7BPUjB5XDMGxW37JvXz/ltZwwoB6GITk2svhYxtdOrZct+06ePfU9vzF9TzyeTDlWbdJrOeX4nRzN8X4d2UeyD4/tuZ05e9LP4MTsbd0nm7C/E79zzJE96RgxMds+OUQvU2pln97ZB3BqGwAAAACjbNQgqap+sKoWVfVVc/cCAAAAwPE2ZpBUVY/K8tPb3jd3LwAAAADc3kYMkqrqs5O8KskLM+0yDgAAAACsyUYMkpL8cJKf7u7r524EAAAAgP3NPkiqqq9N8pgkr567FwAAAAAONvsgKcljk3xFkuur6oYkZyd5W1V9w5xNAQAAAHC8M+duoLsvTnLxzterYdI3dfe1c/UEAAAAwO1twookAAAAALbA7CuS9uruc+buAQAAAIDbsyIJAAAAgFGGxWIxdw+HMgzDdj8BAAAAgA2zWCyG/bZv3Kltkx2bWDu2fkqt7APrxw4qh2HYqL5l375+7MR2yPjXPZn42h/LRu0T2bJlH3321OPJafH3zu5b2RuXPelncGL2tu6TTdjfid85ZMuWLfukjsn7cGobAAAAAKMYJAEAAAAwyplzN5AkVXVDko+v/k+S7+vut83WEAAAAAC3sxGDpJVv6e5r524CAAAAgP05tQ0AAACAUTZpRdIVVTUkuSbJS7r7o3M3BAAAAMCf2pQVSX+hux+e5DFZfnr4K2fuBwAAAIA9NmKQ1N3vX93emuTVSb5u3o4AAAAA2Gv2QVJV3b2q7rX685DkaUneNW9XAAAAAOy1CddI+sIkv1BVd0lylyS/leSF87YEAAAAwF6zD5K6+3eSPHLuPgAAAAA4sdlPbQMAAABgOwyLxWLuHg5lGIbtfgIAAAAAG2axWAz7bZ/91LbDmjIIG4ZhdP2UWtmyZe+pHZ2cDElybGTxsQm1U+tly76TZ099z29r31OOVZv0Wk7qO9PqNyn7KF77k8meVDsxe5P6Hvvumfx38dT6I8w+ymOb32cOn72tx2T7RLbsE9c5tQ0AAACAUQySAAAAABhlI05tq6rPSfLyJH85yceT/Hp3/415uwIAAABgt40YJCW5JMsB0rndvaiqL5y7IQAAAACON/sgqarukeTbk5zd3Ysk6e4PztsVAAAAAHvNPkhK8qAkNyX5wap6XJJbkvxAd18zb1sAAAAA7LYJF9s+M8mXJXlnd391ku9L8uaquue8bQEAAACw2yYMkm5M8qkkb0qS7v6NJB9Ocu6cTQEAAABwvNkHSd394ST/IclfSZKqOjfJFyR5z5x9AQAAAHC8TbhGUpK8IMnrq+ofJ/lkkmd190dn7gkAAACAXTZikNTdv5Pk6+fuAwAAAICDDYvFYu4eDmUYhu1+AgAAAAAbZrFYDPtt34gVSYcxZRA2DMPo+im1smXLPr72WI6Nzj62+u9U18qWLfv42qnv+W3te1uPVVP6Tsb//jN1nxx19lG89ieTPaV2avYm7ZNt/TnZlN9nZMuWLft0zz7I7BfbBgAAAGA7GCQBAAAAMMrsp7ZV1TlJrty16d5J7tnd952nIwAAAAD2M/sgqbtvSPKIna+r6sezAX0BAAAAcLyNGthU1WcleUaSx8/dCwAAAADH27RrJP21JL/b3f997kYAAAAAON6mDZKek+T1czcBAAAAwO1tzCCpqh6Q5LFJrpi7FwAAAABub2MGSUmeneQXu/umuRsBAAAA4PY2bZDktDYAAACADbUxn9rW3efO3QMAAAAAB9ukFUkAAAAAbLBhsVjM3cOhDMOw3U8AAAAAYMMsFothv+0bc2rbyZoyCBuGYXT9lFrZsmUfX3ssx0ZnH1v9d6prZcuWfXzt1Pf8tva9rceqKX0n43//mbpPjjr7KF77k8meUjs1e1v73tbsbT22nS7Z23pMtk9kyz7xsdipbQAAAACMYpAEAAAAwChnzt1AklTVNyV5aZIhy+HWse5+87xdAQAAALDb7CuSqmpIcnmSZ3X3I5I8M8kbq2r23gAAAAD4U5syrLktyb1Wf753kt/v7ttm7AcAAACAPWYfJHX3Ism3Jvk3VXVjkiuTfMe8XQEAAACw1+yDpKo6M8n3J/nm7v6SJBck+Zmquse8nQEAAACw2+yDpCSPSPKA7v61JFnd/nGSh8zaFQAAAADH2YRB0geSnF1VlSRV9ZAk90/y3lm7AgAAAOA4Z87dQHf/QVVdmOTnq2rnAtvf2d03z9kXAAAAAMebfZCUJN19RZIr5u4DAAAAgIMNi8Vi7h4OZRiG7X4CAAAAABtmsVgM+23fhGskAQAAALAFNuLUtsOYsqJqGIbR9VNqZcuWvad2dHIyJKPrp9TKlr2V2dv6npe91uxk/M+KbNmyT74X2bJlyz7dsw9iRRIAAAAAo2zEiqSqekKSlya5a5Kbkzy7u6+ftysAAAAAdpt9RVJV3SfJG5M8rbvPS/KTSX5i3q4AAAAA2Gv2QVKSL0/ywe5+9+rrX0ry+Kr6/Bl7AgAAAGCPTRgkvTvJ/avqMauvn7G6feBM/QAAAACwj9kHSd39sSRPTfLyqvqvSb4gyUeTfHLWxgAAAAA4zkZcbLu7r0pyVZJU1Rcm+d4kvzNrUwAAAAAcZ/YVSUlSVfdf3Z6R5EeTvKa7/3jergAAAADYbSMGSUl+pKr+Z5LfTvKJJC+euR8AAAAA9tiUU9ueN3cPAAAAAJzYpqxIAgAAAGDDDYvFYu4eDmUYhu1+AgAAAAAbZrFYDPtt34hT2w5jyiBsGIbR9VNqZcuWvad2dHIyJKPrp9TKlr0x2ZvyvpR9p8lOjubnSrbsO3P2yfQiW7Zs2ad79kGc2gYAAADAKAZJAAAAAIyyllPbqurSJE9Ock6S87r72tX2c5O8MclZSW5K8u3d/dvr6AkAAACAada1IunKJOcnuXHP9tckeVV3n5vkVUleu6Z+AAAAAJhoLYOk7r6mu9+/e1tVfUGSRyV502rTm5I8qqrut46eAAAAAJhmzmskfXGS3+3uTyfJ6vb3VtsBAAAA2DAutg0AAADAKHMOkt6f5M9U1V2SZHX7gNV2AAAAADbMbIOk7v7DJO9K8vTVpqcneWd3f2iungAAAAA42FoGSVV1WVV9IMnZSa6qqutWd70gyYuq6t1JXrT6GgAAAIANNCwWi7l7OKzRT2AYhox9vlNqZcuWvad2dHIyZPybeEqtbNkbk70p70vZd5rs5Gh+rmTLvjNnn0wvsmXLli17Mex3n4ttAwAAADDK1q9IGoZhu58AAAAAwIY5aEXSmetu5FTb4iVismXfebNHJ2/5KUuyZY+p35T3pew7TXayfacVyZY9d/bJ9CJbtmzZp3v2QZzaBgAAAMAoa1mRVFWXJnlyknOSnNfd155oOwAAAACbZ10rkq5Mcn6SG0duBwAAAGDDrGVFUndfkyRVNWo7AAAAAJvHNZIAAAAAGMUgCQAAAIBRDJIAAAAAGMUgCQAAAIBR1jJIqqrLquoDSc5OclVVXXei7QAAAABsnmGxWMzdw2GNfgLDMGTs851SK1u27D21o5OTIePfxFNqZcvemOxNeV/KvtNkJ0fzcyVb9p05+2R6kS1btmzZi2G/+5zaBgAAAMAoW78iaRiG7X4CAAAAABvmoBVJZ667kVNti5eIyZZ9580enbzlpyzJlj2mflPel7LvNNnJ9p1WJFv23Nkn04ts2bJln+7ZB3FqGwAAAACjGCQBAAAAMMraTm2rqkuTPDnJOUnO6+5rq+qsJJcneVCSW5O8J8nzu/tD6+oLAAAAgHHWuSLpyiTnJ7lx17ZFkku6u7r7YUnem+TiNfYEAAAAwEhrW5HU3dckSVXt3nZzkqt3lb0jyYXr6gkAAACA8TbmGklVdUaWQ6S3zN0LAAAAALe3MYOkJK9IckuSV87dCAAAAAC3t7ZT205kdSHuBye5oLtvm7sfAAAAAG5v9kFSVb0syaOTPKG7b527HwAAAAD2t7ZBUlVdluRJSe6f5KqquinJtyZ5SZJ3J3n76kLc13f3E9fVFwAAAADjrPNT2y5KctE+dw3r6gEAAACAk7dJF9sGAAAAYIMNi8Vi7h4OZRiG7X4CAAAAABtmsVjsewbZ7BfbPqwpg7BhGEbXT6mVLVv2ntrRyctzW8fWT6mVLXtjsjflfSn7TpOdHM3PlWzZd+bsk+lFtmzZsk/37IM4tQ0AAACAUQySAAAAABhlLae2VdWlSZ6c5Jwk53X3tavtVyb50iS3JbklyYu6+13r6AkAAACAada1IunKJOcnuXHP9u/o7od39yOTXJrk9WvqBwAAAICJ1rIiqbuvSZKq2rv9Y7u+vFeWK5MAAAAA2ECzf2pbVb0uyTdk+eE23zhzOwAAAAAcYPaLbXf387r7gUlekuTH5u4HAAAAgP3NPkja0d2XJ3lcVZ01dy8AAAAA3N5sg6SqukdVffGury9IcvPqfwAAAAA2zFqukVRVlyV5UpL7J7mqqm5K8heT/FxV3T3Jp7McIF3Q3Yt19AQAAADANOv61LaLkly0z11fs47HBwAAAODwhsViuxcADcOw3U8AAAAAYMMsFothv+0bc7FtAAAAADbbWk5tO0pTVlQNwzC6fkqtbNmy99SOTk6GZHT9kCTHJoQfm5Z9lH2fLtmjX59j29v35J/BTXlfyr7TZCdH83MlW/adOftkepEtW7bs0z37IFYkAQAAADDK2lYkVdWlSZ6c5Jwk53X3tXvu/8Es/533dvcBAAAAML91rki6Msn5SW7ce0dVPSrLT3B73xr7AQAAAGCCtQ2Suvua7n7/3u1V9dlJXpXkhZl2WQsAAAAA1mgTrpH0w0l+uruvn7sRAAAAAA426yCpqr42yWOSvHrOPgAAAAC4Y3OvSHpskq9Icn1V3ZDk7CRvq6pvmLMpAAAAAG5vbZ/atp/uvjjJxTtfr4ZJ3+RT2wAAAAA2z9pWJFXVZVX1gSxXHV1VVdet67EBAAAAOLy1rUjq7ouSXHQHNeespxsAAAAAppr7GkkAAAAAbIlhsVjM3cOhDMOw3U8AAAAAYMMsFothv+2zXmz7VJgyCBuGYXT9lFrZsmUfX5tjo6OXtWPrjyVTJsfDTv6p7mNqvWzZG5A99T2/rX1vyrFqavakvjOtfpOyj+K1P5nsSbUTs7e1723N3tZj2+mSva3HZPtEtuwT1zm1DQAAAIBRDJIAAAAAGGVtp7ZV1aVJnpzknCTndfe1q+03JPn46v8k+b7uftu6+gIAAABgnHVeI+nKJP80yX/e575v2RksAQAAALCZ1jZI6u5rkqSq1vWQAAAAAJxC61yRdCJXVNWQ5JokL+nuj87dEAAAAADH24SLbf+F7n54ksdk+Wndr5y5HwAAAAD2Mfsgqbvfv7q9Ncmrk3zdvB0BAAAAsJ9ZB0lVdfequtfqz0OSpyV515w9AQAAALC/tV0jqaouS/KkJPdPclVV3ZTkgiS/UFV3SXKXJL+V5IXr6gkAAACA8db5qW0XJblon7seua4eAAAAADh5s18jCQAAAIDtMCwWi7l7OJRhGLb7CQAAAABsmMViMey3fW2nth2VKYOwYRhG10+plS1b9vG1OTY6elk7tv5YMmVyPOzkn+o+ptbLlr0B2VPf89va96Ycq6ZmT+o70+o3KfsoXvuTyZ5UOzF7W/ve1uxtPbadLtnbeky2T2TLPnGdU9sAAAAAGGUtK5Kq6tIkT05yTpLzuvva1fbPSfLyJH85yceT/Hp3/4119AQAAADANOtakXRlkvOT3Lhn+yVZDpDO7e7zkvz9NfUDAAAAwERrWZHU3dckSVV9ZltV3SPJtyc5u7sXq7oPrqMfAAAAAKZbyyDpAGHlyZQAACAASURBVA9KclOSH6yqxyW5JckP7AydAAAAANgsc15s+8wkX5bknd391Um+L8mbq+qeM/YEAAAAwAHmHCTdmORTSd6UJN39G0k+nOTcGXsCAAAA4ACzDZK6+8NJ/kOSv5IkVXVuki9I8p65egIAAADgYGsZJFXVZVX1gSRnJ7mqqq5b3fWCJC+pqt9M8q+SPKu7P7qOngAAAACYZl2f2nZRkov22f47Sb5+HT0AAAAAcDhzXiMJAAAAgC0yLBaLuXs4lGEYtvsJAAAAAGyYxWIx7Ld9Lae2HaUpg7BhGEbXT6mVLVv24bJzbGTxseTY6OJV7RFmj62f1Meqlyl9T83elL436bU8yv29KX0f5fvyKH8Gj/JYdZTv+anZU/pOxr+eU/fJUWcfxWt/MtmTjoPLP4xzbNr+O+4xRvQyte9NyZ50PJmYva2/cxzlcXNbj22b1Ld9Ilv2iY87Tm0DAAAAYBSDJAAAAABGOXMdD1JVlyZ5cpJzkpzX3ddW1TlJrtxVdu8k9+zu+66jJwAAAACmWcsgKcuB0T9N8p93NnT3DUkesfN1Vf34GvsBAAAAYKK1DG66+5okqap976+qz0ryjCSPX0c/AAAAAEy3KddI+mtJfre7//vcjQAAAACwv00ZJD0nyevnbgIAAACAg80+SKqqByR5bJIr5u4FAAAAgIPNPkhK8uwkv9jdN83dCAAAAAAHW8sgqaouq6oPJDk7yVVVdd2uu58dp7UBAAAAbLx1fWrbRUkuOuC+c9fRAwAAAACHswmntgEAAACwBYbFYjF3D4cyDMN2PwEAAACADbNYLIb9tq/l1LajNGUQNgzD6PoptbJlyz6+NsdGRy9rx9ZPqT2J7ClT6WEn/1T3MbVetuyRtVPf89va97Yeqyb1nWn1m5R9FK/9yWRPqp2Yva19b2v2th7bTpfsbT0m2yeyZZ+4zqltAAAAAIxikAQAAADAKGs5ta2qLk3y5CTnJDmvu69dbf+mJC/N8iyRM5Ic6+43r6MnAAAAAKZZ14qkK5Ocn+TGnQ1VNSS5PMmzuvsRSZ6Z5I1VZZUUAAAAwAZay4qk7r4mSapq7123JbnX6s/3TvL73X3bOnoCAAAAYJrZVv909yLJtyb5N1V1Y5arlr5jrn4AAAAAOLHZBklVdWaS70/yzd39JUkuSPIzVXWPuXoCAAAA4GBzXo/oEUke0N2/liSr2z9O8pAZewIAAADgAHMOkj6Q5OxaXTipqh6S5P5J3jtjTwAAAAAcYC0X266qy5I8KctB0VVVdVN3P7SqLkzy81W1c4Ht7+zum9fREwAAAADTrOtT2y5KctE+269IcsU6egAAAADgcIbFYnGHRVX14CQf6e4PV9XnJvlbST6d5LLu/vgR93hCwzDc8RMAAAAAYLTFYjHst33siqSfTfJtST6c5JIsL5T9iSSV5LmnosGTNWYQtmMYhtH1U2ply5Z9fG2OjY5e1o6tn1K7huyxe3DYyZ+Qva37RPbmZk99z29r39t6rJrUd6bVb1T2qOrlcXNq9pG8Psf23I6o39a+tzX7KI9tU/61etLf9ccm1E7s5ah/55i6T47ymLwp++RIj/cTs0+Hn0HZa84+wNhB0pd29/9c/flbkjwsyZ8kec/I7wcAAABgy40dJH2iqu6e5CuT/F53/2FV3SXJ3Y6uNQAAAAA2yZRT234lyT2T/NRq2yOS3Djmm6vq0iRPTnJOkvO6+9rV9ickeWmSuya5Ocmzu/v6sc0DAAAAsD5njKy7KMk/SvL3uvvHV9vOTPJ3R37/lUnOz67BU1XdJ8kbkzytu89L8pNJfmJkHgAAAABrNnaQ9I+6+y3d/dadDd39G0keN+abu/ua7n7/ns1fnuSD3f3u1de/lOTxVfX5I3sCAAAAYI3GDpKef8D27zrEY787yf2r6jGrr5+xun3gITIBAAAAOCInvEZSVX3bTl1VPT2rT/Nb+bIsr2t0Urr7Y1X11CQvr6rPSfLWJB9N8smTzQQAAADg6NzRxbZftLr9rCyvk7RjkeSDSZ57mAfv7quSXJUkVfWFSb43ye8cJhMAAACAo3HCQVJ3f22y/NS17h57Ye3Rqur+3f0HVXVGkh9N8pru/uNT/TgAAAAAHN7YayS9tKruliRVNVTV06vqKWMfpKouq6oPJDk7yVVVdd3qrh+pqv+Z5LeTfCLJiyf0DgAAAMAa3dGpbTt+OcnfTPLfkvxIkqck+VRVPaa7/94dfXN3X5TjT43b2f68Cb0CAAAAMKOxK5K+Isk7V39+VpJvSHJ+kmceRVMAAAAAbJ5hsVjcYVFV3ZTki5I8OMnPd/dDqmpI8kfd/XlH3OMJDcNwx08AAAAAgNEWi8Ww3/axp7b9SpKfTnK/JD+72vYVSX7/8K0dzphB2I5hGEbXT6mVLVv28bU5Njp6WTu2fkrtGrLH7sFhJ39C9rbuE9mbmz31Pb+tfW/rsWpS35lWv0nZR/Han0z2pNqJ2dva97Zmb+ux7XTJ3tZjsn0iW/aJ68YOkp6b5HlJPpnkp1bbHpDl9ZIAAAAAOA2MGiR19/9JclmSVNV9k9zc3f/+KBsDAAAAYLOMGiRV1T2TvDzJ01ab7l5V35Tkkd390hHff1aSy5M8KMmtSd6T5Pnd/aGq+pokr01ytyQ3JHlmd//h1CcCAAAAwNEa+6ltr8ryMh9fleQTq23/JctPcBtjkeSS7q7ufliS9ya5eHXB7p9O8t3dfW6S/5Tk4rHNAwAAALA+YwdJj0/ygu6+Pqvry65WDX3hmG/u7pu7++pdm96R5EuSfHWSj3f3Navtr0nyrSN7AgAAAGCNxg6S/neS++zeUFVnJ/ng1AesqjOSXJjkLUkemOTGnfu6+8NJzlhdhwkAAACADTJ2kPSGJD9bVV+bZKiqRyZ5fZKfPInHfEWSW5K88iS+FwAAAICZjB0kvSzJW5NckeQeSd6c5FeTXDrlwarq0iQPTvLU7r4tyfuyPMVt5/7PT7Lo7pun5AIAAABw9E74qW1V9fTuftNq6HNxDnEh7Kp6WZJHJ3lCd9+62vzfktytqv786jpJL0jysyf7GAAAAAAcnRMOkpK8NsmbDvsgVfXQJC9J8u4kb6+qJLm+u59YVc9K8tqq+pwkNyR55mEfDwAAAIBT744GScOpeJDuvu6grO5+e5LzTsXjAAAAAHB07miQdJeqelxOMFDq7l89tS0BAAAAsImGxWJx4J1V9ekkN+bgQdKiu7/sKBobaxiGg58AAAAAAJMtFot9Z0F3tCLpj+ceFN2REw3C9hqGYXT9lFrZsmUfX5tjo6OXtWPrp9SuIXvsHhx28idkb+s+kb252VPf89va97Yeqyb1nWn1m5R9FK/9yWRPqp2Yva19b2v2th7bjvS4OSF60u8oU/rY6WVLj8n2iextyj7S9/wBzpjwmAAAAACcxtZyse2qOivJ5UkelOTWJO9J8vzu/lBVXZHkcUm+KMnndfctp+IxAQAAADi1Trgiqbs/7xQ9ziLJJd1d3f2wJO9NcvHqvp9K8ohT9DgAAAAAHJE7WpF0SnT3zUmu3rXpHUkuXN33q0lSVetoBQAAAICTtPZrJFXVGVkOkd6y7scGAAAA4OTNcbHtVyS5JckrZ3hsAAAAAE7SWk5t21FVlyZ5cJILuvu2dT42AAAAAIeztkFSVb0syaOTPKG7b13X4wIAAABwaqzl1LaqemiSlyR5QJK3V9W7qupfr+57c1V9YFXaVfW2dfQEAAAAwDTr+tS265IMB9z3pHX0AAAAAMDhzHGxbQAAAAC20LBYLObu4VCGYdjuJwAAAACwYRaLxb5nlq31U9uOwpRB2DAMo+un1MqWLfv42hwbHb2sHVs/pXYN2WP34LCTPyF7W/fJlOwp/wowaR9O6WNq/RZnT33Pb2vf23qsmtR3ptVvUvZRvPYnkz2pdmL2tva9rdnbemw7XbK39Zhsn8iWfeI6p7YBAAAAMIpBEgAAAACjrOXUtqo6K8nlSR6U5NYk70ny/CT3SfLaJF+U5FNJ/t8kL+zuP1lHXwAAAACMt64VSYskl3R3dffDkrw3ycVJPpHke7r7K5I8LMnnJvm7a+oJAAAAgAnWsiKpu29OcvWuTe9IcmF335DkhlXNbVX1X5I8ZB09AQAAADDN2q+RVFVnJLkwyVv2bL9bkufs3Q4AAADAZpjjYtuvSHJLklfubKiqM5P8qyS/2t0GSQAAAAAbaC2ntu2oqkuTPDjJBd1922rbXZJckeQjSS5aZz8AAAAAjLe2QVJVvSzJo5M8obtvXW07I8kbknw6yXO7e7GufgAAAACYZi2DpKp6aJKXJHl3krdXVZJcn+R1SZ6Z5Nok/221/de6+7vX0RcAAAAA463rU9uuSzIccPdB2wEAAADYIHNcbBsAAACALTQsFtt9WaJhGLb7CQAAAABsmMVise8ZZGv91LajMGUQNgzD6PoptbJlyz6+NsdGRy9rx9ZPqV1D9tg9OOzkT8je1n0ie3Ozp77nt7XvbT1WTeo70+o3KfsoXvuTyZ5UOzF7W/ve1uxtPbadLtnbekye9DM4IXrI5uyTqX1vSva2/pxsbfYBnNoGAAAAwCgGSQAAAACMspZT26rqrCSXJ3lQkluTvCfJ85PclOTXknzuqvT3k7ygu29YR18AAAAAjLeuFUmLJJd0d3X3w5K8N8nF3X1bkm/s7od398OTvDXJP1lTTwAAAABMsJYVSd19c5Krd216R5ILV/d9bNf2eya5bR09AQAAADDN2j+1rarOyHKI9JZd234pyaOSfDjJN6y7JwAAAADu2BwX235FkluSvHJnQ3f/1SQPSPKmJD8wQ08AAAAA3IG1DpKq6tIkD07y1NX1kT5j9fVPJXnWOnsCAAAAYJy1ndpWVS9L8ugkT+juW1fb7pfktu6+aVX2lCS/ua6eAAAAABhvLYOkqnpokpckeXeSt1dVklyf5B8keUNV3TXJsNr2zHX0BAAAAMA06/rUtuuyHBTt59Hr6AEAAACAwxkWi8XcPRzKMAzb/QQAAAAANsxisdh3QdDarpF0VKYMwoZhGF0/pVa2bNnH1+bY6Ohl7dj6KbVryB67B4ed/AnZ27pPpmRP+VeASftwSh9T67c4e+p7flv73tZj1aS+M61+k7KP4rU/mexJtROzt7Xvbc3e1mPb6fL367Yek49yf086xk7M3pSfk23NPl1+Bicfk/ex1k9tAwAAAGB7GSQBAAAAMMq6PrXtrCSXJ3lQkluTvCfJ87v7Q7tqXp/kO5N8Xnffso6+AAAAABhvXSuSFkku6e7q7ocleW+Si3furKoLMu3UPgAAAADWbC2DpO6+ubuv3rXpHUm+JPnMaqUfTPI96+gFAAAAgJOz9mskVdUZSS5M8pbVplclOdbdH1t3LwAAAACMN8fFtl+R5JYkr6yqpyT5RHf/uxn6AAAAAGCCtQ6SqurSJA9O8tTuvi3J45L8xaq6oapuWJVdV1Vfuc6+AAAAALhja/nUtiSpqpcleXSSJ3T3rUnS3S9M8sJdNYskD/WpbQAAAACbZy2DpKp6aJKXJHl3krdXVZJc391PXMfjAwAAAHB4axkkdfd1SYYRdXdYAwAAAMA85rjYNgAAAABbaFgsFnP3cCjDMGz3EwAAAADYMIvFYt+zxtZ2se2jMmUQNgzD6PoptbJlyz6+NsdGRy9rx9ZPqV1D9tg9OOzkT8je1n0yJXvKvwJM2odT+phav8XZU9/z29r3th6rJvWdafWblH0Ur/3JZE+qnZi9rX1va/a2HttOl79ft/WYfJT7e9IxdmL2pvycbGv26fIzOPmYvA+ntgEAAAAwikESAAAAAKOs5dS2qjoryeVJHpTk1iTvSfL87v5QVS2S/GaS21blz+ru31xHXwAAAACMt65rJC2SXNLdVydJVf1YkouTPHd1/5/r7lvW1AsAAAAAJ2Etg6TuvjnJ1bs2vSPJhet4bAAAAABOjbV/altVnZHlEOktuzZfXVVnJnlrkmPdfeu6+wIAAADgxOa42PYrktyS5JWrrx/Y3V+d5PwkX5nk78/QEwAAAAB3YK2DpKq6NMmDkzy1u29Lku5+/+r2j5K8LsnXrbMnAAAAAMZZ2yCpql6W5NFJ/vrOqWtVdZ+qutvqz2cm+ZYk71pXTwAAAACMt5ZrJFXVQ5O8JMm7k7y9qpLk+iSXJHltVS2S3DXJ2+PUNgAAAICNtK5PbbsuyXDA3Q9bRw8AAAAAHM6wWCzm7uFQhmHY7icAAAAAsGEWi8W+C4Lm+NQ2AAAAALbQWk5tO0pTVlQNwzC6fkqtbNmyj6/NsdHRy9qx9VNq15A9dg8OO/kTsrd1n0zJnrKcdNI+nNLH1Potzp76nt/Wvrf1WDWp70yr36Tso3jtTyZ7Uu3E7G3te1uzt/XYdrr8/bqtx+Sj3N+TjrETszfl52Rbs0+Xn8HJx+R9WJEEAAAAwCjr+tS2s5JcnuRBSW5N8p4kz+/uD1XVfZO8Ksmjk3wyyc909w+voy8AAAAAxlvXiqRFkku6u7r7YUnem+Ti1X1vSPIb3X1udz80yWvX1BMAAAAAE6xlRVJ335zk6l2b3pHkwqp6cJKHJfnmXbUfXEdPAAAAAEyz9ottV9UZSS5M8pYkX5nkA0leV1WPTPIHSb63u6/7/9u793jJqurA47/CJD66sZHGR1QQRFgqUQQkwWiMTEyLH9MBjBPiE3WIihnMOJOHwUTbB75ojSPoqMFWbNEkJEoQncRJlEyMMiYKEUyyiAoKPlqkgdgYWumu+eOcwurqqnvPvrfvrir69/18+tO3Tq1ad9XZdXbV3XXO3rXrkiRJkiRJ0sKmMdn2OcA24FyagazjgPdl5tHAeTQDTJIkSZIkSZoxVQeSImIjcBhwSmbuBL4GfD0z/w4gMz8M/GREHFCzLkmSJEmSJC2u2kBSRJxFszLbSZm5vd38eeDWiDiijXk8sBW4sVZdkiRJkiRJ6qbKHEntQNGZwNXAZyIC4JrMPDkinge8NyLuCnwfeGpm9mvUJUmSJEmSpO5qrdr2JaA34b5/BH66Rh2SJEmSJElaumlMti1JkiRJkqQ51Ov35/sqsl6vN99PQJIkSZIkacb0+/2xV5ZVubRtJZUMhPV6vc7xJbHmNre5d41lQ+fUTWzX+JLYCrm77sHeIH9B7nndJ+ae3dylx/y81j2vfVVR3ZTFz1LulWj7peQuii3MPa91z2vuee3b9pbc89onu0/Mbe6F47y0TZIkSZIkSZ04kCRJkiRJkqROqlzaFhFrgc3AocB24MvAC4HDgHcMhd4H+HZmHl2jLkmSJEmSJHVXa46kPvCmzLwUICLOBt6Qmf8FeNQgKCIuAj5dqSZJkiRJkiQVqDKQlJlbgUuHNl0GnD4cExH3AdbRnKkkSZIkSZKkGVN9jqSI2IdmEOnikbueA3wiM7fUrkmSJEmSJEmLm8Zk2+cA24BzR7Y/D9hUvxxJkiRJkiR1UWuOJAAiYiPNBNvrM3Pn0PbjgLXAx2vWI0mSJEmSpO6qDSRFxFnAMcBTMnP7yN3PB96fmbfXqkeSJEmSJEllqgwkRcQRwJnA1cBnIgLgmsw8OSLuDvwq8JgatUiSJEmSJGlpaq3a9iWgN+G+/wD2q1GHJEmSJEmSlm4ak21LkiRJkiRpDvX6/f60a1iWXq83309AkiRJkiRpxvT7/bFXllVdtW0llAyE9Xq9zvElseY2t7l3jWVD59RNbNf4ktgKubvuwd4gf0Hued0n5p7d3KXH/LzWPa99VVHdlMXPUu6VaPul5C6KLcw9r3XPa+557dv2ltzz2ie7T8xt7oXjvLRNkiRJkiRJnTiQJEmSJEmSpE6qXNoWEWuBzcChwHbgy8ALM/OGiHg+8FJgB3A78NLM/LsadUmSJEmSJKm7Wmck9YE3ZWZk5iOBrwBvaAeY3go8MTMfBbwaeFelmiRJkiRJklSgyhlJmbkVuHRo02XA6bRz0AL7AluA/YDra9QkSZIkSZKkMlUGkoZFxD40g0gXZ+Z3I+J04PKIuInmDKkn1K5JkiRJkiRJi5vGZNvnANuAcyPinsBvAI/OzIOA/w58JCJ6CyWQJEmSJElSfVUHkiJiI3AYcEpm7gTWATdnZgJk5p/STMh9QM26JEmSJEmStLhqA0kRcRZwDHBSZm5vN18DHBUR92ljjgf+HfhurbokSZIkSZLUTZU5kiLiCOBM4GrgMxEBcE1mnhwRZwN/GxE/ALYDT8vMfo26JEmSJEmS1F2tVdu+xI9WaBu97y3AW2rUIUmSJEmSpKXr9fvzffJPr9eb7ycgSZIkSZI0Y/r9/tgTgqqckbSSSgbCer1e5/iSWHOb29y7xrKhc+omtmt8SWyF3F33YG+QvyD3vO4Tc89u7tJjfl7rnte+qqhuyuJnKfdKtP1SchfFFuae17rnNfe89m17S+557ZPdJ+Y298JxVVdtkyRJkiRJ0vxyIEmSJEmSJEmdVLm0LSLWApuBQ2lWZvsy8MLMvCEinge8FLgL8FXg1MzcWqMuSZIkSZIkdVfrjKQ+8KbMjMx8JPAV4A0R8TDgtcAvZOYRwP8DXlepJkmSJEmSJBWoMpCUmVsz89KhTZcBDwJ+CrgiM29ot38ceGaNmiRJkiRJklSm+hxJEbEPcDpwMfBPwKMj4pCI6AHPAFZHxP6165IkSZIkSdLCpjHZ9jnANuDczLwa+E3gT2jOUrqxjbl9CnVJkiRJkiRpAVUm2x6IiI3AYcD6zNwJkJl/DPxxe/9PA9/IzH+vWZckSZIkSZIWV+2MpIg4CzgGOCkztw9tv1/7/92AVwEba9UkSZIkSZKk7qqckRQRRwBnAlcDn4kIgGsy82TgvRHxIOAnaM5MeluNmiRJkiRJklSmykBSZn4J6E2478k1apAkSZIkSdLyTGOybUmSJEmSJM2hXr/fn3YNy9Lr9eb7CUiSJEmSJM2Yfr8/9sqyqqu2rYSSgbBer9c5viTW3OY2966xbOicuontGl8SWyF31z3YG+QvyD2v+8Tcs5u79Jif17rnta8qqpuy+FnKvRJtv5TcRbGFuee17nnNPa99296Se177ZPeJuc29cJyXtkmSJEmSJKkTB5IkSZIkSZLUSbVL2yLiIuAQYCewDTgjM6+IiMOB84G1wI3AczLz32rVJUmSJEmSpG5qnpF0amYemZlHARuBTe32dwJvz8zDgbcD76pYkyRJkiRJkjqqNpCUmbcM3VwD7IyI+wBHAx9qt38IODoi7l2rLkmSJEmSJHVTddW2iDgPWEeziNEJwIHANzJzB0Bm7oiIb7bbb6hZmyRJkiRJkhZWdbLtzDwtMw8CzgTOrvm7JUmSJEmStDxTWbUtMzcDxwPXAw+IiLsAtP/fH7huGnVJkiRJkiRpsioDSRGxOiIOHLq9HtgKfAe4Anh6e9fTgcsz08vaJEmSJEmSZkytOZJWARdGxCpgB80g0vrM7EfEi4DzI+IVwE3AcyrVJEmSJEmSpAJVBpIycwtw3IT7/hX4mRp1SJIkSZIkael6/X5/2jUsS6/Xm+8nIEmSJEmSNGP6/X5v3PapTLYtSZIkSZKk+VNrjqQVU3JGVa/X6xxfEmtuc5t7ebnZ0DF4A91jS+OXkLvrs+wN8hfkntd9UpK75HTSon1YUkdpvLmr517JvmqW9klR3ZTFz1LuFdmHG0b+n3Ju90nd3HvLZ455fX/dGz4rle7vkn2ykm1p7t1z7y2vweI+eQzPSJIkSZIkSVIn1c5IioiLgEOAncA24IzMvCIiNgK/AhwMPCIzr6pVkyRJkiRJkrqreUbSqZl5ZGYeBWwENrXbLwIeD3ytYi2SJEmSJEkqVO2MpMy8ZejmGpozk8jMTwNERK1SJEmSJEmStARVJ9uOiPOAdTRzPJ1Q83dLkiRJkiRpeapOtp2Zp2XmQcCZwNk1f7ckSZIkSZKWZyqrtmXmZuD4iFg7jd8vSZIkSZKkclUGkiJidUQcOHR7PbC1/SdJkiRJkqQ5UGuOpFXAhRGxCthBM4C0PjP7EfE24KnA/YC/jogbM/OISnVJkiRJkiSpoyoDSZm5BThuwn0vAV5Sow5JkiRJkiQt3VTmSJIkSZIkSdL86fX7/WnXsCy9Xm++n4AkSZIkSdKM6ff7vXHba82RtGJKBsJ6vV7n+JJYc5vb3MvLzYaOwRvoHlsav4TcXZ9lb5C/IPe87pOS3CXfAhTtw5I6SuPNXT33SvZVs7RPiuqmLH6Wcq/IPtww8v+Uc7tP6ubeWz5zzOv7697wWWkl97e56+b2NTimjgm8tE2SJEmSJEmdOJAkSZIkSZKkTqpd2hYRFwGHADuBbcAZwHXAZuBQYDvwZeCFmXlDrbokSZIkSZLUTc0zkk7NzCMz8yhgI7CJ5nK+N2VmZOYjga8Ab6hYkyRJkiRJkjqqdkZSZt4ydHMNsDMztwKXDm2/DDi9Vk2SJEmSJEnqruqqbRFxHrCOZrLwE0bu24dmEOnimjVJkiRJkiSpm6qTbWfmaZl5EHAmcPbI3efQzJ10bs2aJEmSJEmS1M1UVm3LzM3A8RGxFiAiNgKHAadk5s5p1CRJkiRJkqSFVRlIiojVEXHg0O31wFZga0ScBRwDnJSZ22vUI0mSJEmSpHK15khaBVwYEauAHTSDSOuBh9Nc5nY18JmIALgmM0+uVJckSZIkSZI6qjKQlJlbgOMm3N2rUYMkSZIkSZKWZypzJEmSJEmSJGn+9Pr9/rRrWJZerzffT0CSJEmSJGnG9Pv9sVeQ1ZojacWUDIT1er3O8SWx5ja3uZeXmw0dgzfQPbY0fgm5uz7L3iB/Qe553ScluUu+BSjahyV1lMabu3ruleyrZmmfFNVNWfws5V6Rfbhh5P8p53af1M29t3zmmNf3173hs1Lp/i7ZJyvZlubePffe8hos7pPH8NI2SZIkSZIkdVLtjKSIuAg4BNgJbAPODVLDFgAAIABJREFUyMwrJm2vVZckSZIkSZK6qXlp26mZeQtARJwIbAKOXmC7JEmSJEmSZki1S9sGg0WtNTRnIE3cLkmSJEmSpNlSdbLtiDgPWEczx9MJi22XJEmSJEnS7Kg62XZmnpaZBwFnAmcvtl2SJEmSJEmzYyqrtmXmZuD4iFjbZbskSZIkSZKmr8pAUkSsjogDh26vB7YCP5iwfWuNuiRJkiRJktRdrTmSVgEXRsQqYAfNQNF64B7jtmdmv1JdkiRJkiRJ6qjKQFJmbgGOm3D3pO2SJEmSJEmaIVOZI0mSJEmSJEnzp9fvz/dVZL1eb76fgCRJkiRJ0ozp9/u9cdtrzZG0YkoGwnq9Xuf4klhzm9vcy8vNho7BG+geWxq/hNxdn2VvkL8g97zuk5LcJd8CFO3DkjpK481dPfdK9lWztE+K6qYsfpZyr8g+3DDy/5Rzu0/q5t5bPnP4/jq7uVdyf5u7bm5fg2PqmMBL2yRJkiRJktSJA0mSJEmSJEnqpNqlbRFxEXAIsBPYBpyRmVcM3f9KmpOnHpGZV9WqS5IkSZIkSd3UnCPp1My8BSAiTgQ2AUe3t48GjgO+XrEeSZIkSZIkFah2adtgEKm1hubMJCLirsDbgRdTNk+UJEmSJEmSKqq6altEnAeso5ks/IR286uBD2TmNRFRsxxJkiRJkiQVqDrZdmaelpkHAWcCZ0fEY4BjgXfUrEOSJEmSJEnlprJqW2ZuBo4H/hPwUOCaiLgWeCDwVxGxbhp1SZIkSZIkabIql7ZFxGrgXpl5XXt7PbAVeF1mnjUUdy3wS67aJkmSJEmSNHtqzZG0CrgwIlYBO2gGkdZnppNrS5IkSZIkzYkqA0mZuQU4rkPcwStfjSRJkiRJkpZiKnMkSZIkSZIkaf70+v35vrqs1+vN9xOQJEmSJEmaMf1+vzdue605klZMyUBYr9frHF8Sa25zm3t5udnQMXgD3WNL45eQu+uz7A3yF+Se131SkrvkW4CifVhSR2m8uavnXsm+apb2SVHdlMXPUu4V2YcbRv6fcm73Sd3ce8tnDt9fZzf3Su5vc9fN7WtwTB0TeGmbJEmSJEmSOnEgSZIkSZIkSZ1Uu7QtIi4CDgF2AtuAMzLzioi4Frit/Qfwu5n5V7XqkiRJkiRJUjc150g6NTNvAYiIE4FNwNHtfU/LzKsq1iJJkiRJkqRC1S5tGwwitdbQnJkkSZIkSZKkOVF11baIOA9YRzNZ+AlDd10QET3g08CZmXlzzbokSZIkSZK0uKqTbWfmaZl5EHAmcHa7+ecy80jgWJoBpnNr1iRJkiRJkqRuprJqW2ZuBo6PiLWZeV27bTvwDuCx06hJkiRJkiRJC6sykBQRqyPiwKHb64GtwG0Rsabd1gN+DbiiRk2SJEmSJEkqU2uOpFXAhRGxCthBM4i0Hrgv8OcRcRfgLsA/Ay+uVJMkSZIkSZIKVBlIyswtwHET7j6qRg2SJEmSJElanl6/3592DcvS6/Xm+wlIkiRJkiTNmH6/3xu3vdalbSumZCCs1+t1ji+JNbe5zb1rLBs6p25iu8aXxJp7YnzXlu8N8hfkntd9sjfkLj3m57Xuee2riuqmLH6Wcq9E2y8ld1FsYe55rXtec89r37a35J7XPtl9Ym5zLxw3lVXbJEmSJEmSNH8cSJIkSZIkSVIn1S5ti4iLgEOAncA24IzMvCIi7gb8IfBE4Dbgs5n5glp1SZIkSZIkqZtqA0nAqZl5C0BEnAhsAo4G3kQzgHR4ZvYj4r4Va5IkSZIkSVJH1QaSBoNIrTXAzohYDTwHeGBm9tu4LbVqkiRJkiRJUnc1z0giIs4D1tEsBnQCcChwI/DKiDie5pK338/MT9esS5IkSZIkSYurOtl2Zp6WmQcBZwJn0wxkPRi4PDMfDfwu8OGIuGfNuiRJkiRJkrS4qazalpmbgeOB64HbgQ+12/8f8F3g8GnUJUmSJEmSpMmqDCRFxOqIOHDo9npgK/Ad4FPAL7bbDwfuA3y5Rl2SJEmSJEnqrtYcSauACyNiFbCDZhBpfbtK24uATRHxZuCHwLMz8+ZKdUmSJEmSJKmjKgNJ7Upsx02476vAE2rUIUmSJEmSpKWbyhxJkiRJkiRJmj+9fr8/7RqWpdfrzfcTkCRJkiRJmjH9fr83bnutOZJWTMlAWK/X6xxfEmtuc5t711g2dE7dxHaNL4k198znLvkWoDfIv6frKI2f49ylx/xK1t21kh4r+z4/S6/voroL42cp90q8ZpeSuyi2MHfx/u6Yurgf3Etyz1LfNq+5V6QtB7lnpE+epdzuE3PPVe4JvLRNkiRJkiRJnTiQJEmSJEmSpE6qXdoWERcBhwA7gW3AGcDNwEVDYfsB98zM/WvVJUmSJEmSpG5qzpF0ambeAhARJwKbMvNo4FGDgIh4a+WaJEmSJEmS1FG1QZvBIFJrDc2ZSXeIiJ8Angk8qVZNkiRJkiRJ6q7q2T8RcR6wjmbS/xNG7v5l4BuZ+YWaNUmSJEmSJKmbqpNtZ+ZpmXkQcCZw9sjdzwc21axHkiRJkiRJ3U1l1bbM3AwcHxFrASLi/sDPAxdMox5JkiRJkiQtrspAUkSsjogDh26vB7a2/wCeC3wsM2+sUY8kSZIkSZLK1ZojaRVwYUSsAnbQDCCtz8x+e/9zgZdUqkWSJEmSJElLUGUgKTO3AMctcP/hNeqQJEmSJEnS0k1ljiRJkiRJkiTNn16/3188aob1er35fgKSJEmSJEkzpt/v98ZtrzVH0oopGQjr9Xqd40tizW1uc+8ay4bOqZvYrvElseae+dwl3wL0Bvn3dB2l8XOcu/SYn9e657WvKqqbsvhZyr0Sbb+U3EWxhbnnte55zT2vfdveknte+2T3ibnNvXCcl7ZJkiRJkiSpk2pnJEXERcAhwE5gG3BGZl4REb8EvIbmC+d9gA2Z+eFadUmSJEmSJKmbmmcknZqZR2bmUcBGYFNE9IDNwLMz81HAs4DzI8IzpSRJkiRJkmZMtQGbzLxl6OYamjOTaP9f0/68H/CtzNyJJEmSJEmSZkrVybYj4jxgHc1lbCdkZj8ifhX4i4i4FdgXeErNmiRJkiRJktRN1UvIMvO0zDwIOBM4OyJ+DPg94MTMfBCwHviTiFhdsy5JkiRJkiQtbipzEWXmZuB44Bjg/pn59+32vwduBR42jbokSZIkSZI0WZWBpIhYHREHDt1eD2wFvg48MCKi3f4w4H7AV2rUJUmSJEmSpO5qzZG0CrgwIlYBO2gGkdZn5rci4nTgzyJiMMH28zJza6W6JEmSJEmS1FGVgaTM3AIcN+G+C4ALatQhSZIkSZKkpZvKHEmSJEmSJEmaP71+vz/tGpal1+vN9xOQJEmSJEmaMf1+vzdue605klZMyUBYr9frHF8Sa25zm3vXWDZ0Tt3Edo0viTX3zOcu+RagN8i/p+sojZ/j3KXH/LzWPa99VVHdlMXPUu6VaPul5C6KLcw9r3XPa+557dv2ltzz2ie7T2Y3t58fK+eewEvbJEmSJEmS1IkDSZIkSZIkSeqk2qVtEXERcAiwE9gGnJGZV0TEU4DXAD8ObAWem5nX1KpLkiRJkiRJ3dQ8I+nUzDwyM48CNgKbIuJewPnAr2XmI4A/Av5XxZokSZIkSZLUUbWBpMy8ZejmGpozkx4CbMnMq9vtHweeFBEH1KpLkiRJkiRJ3VRdtS0izgPW0UygfgJwPXC/iDg2M/8BeGYbehDw3Zq1SZIkSZIkaWFVJ9vOzNMy8yDgTODs9iylU4A/jIh/BO4D3Az8sGZdkiRJkiRJWtxUVm3LzM3A8RGxNjP/OjMfl5mPBs4F7g58dRp1SZIkSZIkabIqA0kRsToiDhy6vZ5mhbatEXG/dts+wOuAd2bmrTXqkiRJkiRJUne15khaBVwYEauAHTSDSOszsx8Rr42IxwI/AXwCeFmlmiRJkiRJklSgykBSZm4Bjptw32k1apAkSZIkSdLyTGWOJEmSJEmSJM2fXr/fn3YNkiRJkiRJmgOekSRJkiRJkqROHEiSJEmSJElSJw4kSZIkSZIkqRMHkiRJkiRJktSJA0mSJEmSJEnqxIEkSZIkSZIkdeJAkiRJkiRJkjpxIEmSJEmSJEmdOJAkSZIkSZKkThxIkiRJkiRJUic/Nu0C9pSIWAsc2N68LjNvnGY9AxFxr8y8qWPsEzPzr1eghtXA4cCXM/Pf93DuewAPA76SmTcvELc/cBDwQ+Crmfkfe7IOSZIkSZK08nr9fn/aNSxLRBwKvBs4Gvhmu/n+wBeAF2Xmvy0j91rgjTQDIH+RmW8fuu/PM/NXRuKPBDYBO4BTgY3A8cCNwPrMvGIo9uFjfuVfAeuAXmb+80juX8zM/9P+vAY4F/hZ4ArgxZm5ZSj2ncAfZOYNEfFY4MPAd4F7A8/KzE+M5P4u8EFg03CNE/bJycD5NPv6VOBPgVuB+wLPzcyPjsQ/CHgn8CSgD9wM3B34X8DvZeYPFvp9mn8RsR/AQgONsywiHpqZ/7pCuffPzK0rlHttlwH1tn1uz8xti+XDwfpJeVdssL7Nv+iAfelgvcflgrnn5rgcibc9x+eeanuWtOUs9rMlfWwbP3f97Ar1sbbl5Ly25TLZlnfE2JZ7ro7itrwzDCT9PfAO4EOZubPdtg/wDOA3MvMxBbmuzMxHDN3+M+CrwGXA6cD3gF/NzNsj4vLMPGrk8X8LvBnYD3gNcGZmXhAR64HfzMwnDsXuBL42UsIDgeuBfmY+eCT3FzLz6Pbnc2kuS3wH8HTgIZl5ylDsP2Xmke3PnwRelpmfi4jDgQ9m5qNHcl8DXAQ8s/39m4ALxr2oI+IK4NnAvWgGqH45Mz8TEQ9rc4/uk08B5wEfB54FHAC8HXgdsD0zf2P0d7SP80CfnHfmO+2IOIBmEPZXgV77byfNwOPLMvOGgpr+d2Y+eej2XYHfAh5EM8D7saH7zsnMM0YefxDwhzQDvC8B/oDmNfxFmoHVa0ee/6gvAQ+nGeD9/kjuIzLzS+3PP97mfizNAO8fDMdHxO8D72oHeB8OXAz8JM1A88mZ+fmR3P8IXAB8YLH9FRGPA94FXAe8mOZ4PhS4BfiVzPzsSPx+wOtpjvlV7eZvAGdn5jkjsXtssH5MH+tg/fj91HnAvmSw3uPyznNctvF7pD1H27Ld1rk9S9qyje/cniVt2cZ0bs+StmzjO7fnEtpyj/Szo31su61zP1vSx7bxnfvZkj62jencz85KH9vG25a25WiNtqVtObg9l205yZ3h0ra1mXnB8IZsBpQ+0H6g2MWEBrkj18jth2Tm09rHfYSmQS6JiJMmPH7fzLy4jX/NoK7M/GhEvHok9lXAzwCnZ+bX2sdck5mHTMjdG/r5ccCxmflD4OURceVI7N1HavpcW8fVEfETY3LflJkvjYjfAU4Enge8PiI+Brxn8KJs9TPzyrbebZn5mTb3v0TEuLr3H2qfcyLic5n5yoh4AZCjwZMO9IiYiQM9IkoO9PdGxIoe6BGxYp12RHTqtCNiXKf9AeDvgIOzHQRs/+h5UXvfk0bqGPeHxcBPjdx+B80H888Bb2z3539r73vsmMe/E/hL4J7AJ4APAYfR/PH1VmD4eN7WPrfeSI5b2+13Gdm+mea1Cs0x/XCaP6ie1uZ+wVDsKZn52vbnNwG/nZkfiYjHA28bU/tPAo8HXhsRfwW8B/jfbf826i3Ay2gGeC8F/kdmXhgRx7f1HDcSfz7N/vt5mj90bgA+CbwqIg7IzFcOxb6fZp//Yu4+WP9+YJfB+sI+9l00g/UfB06PiF+gHawHHjz6YJr99Cqawfq/pBmsf0o0g/UbgScOxV7F7oP192t/V39M/jcCg77uLJovDk6kGax/G3DKUOxjhv7wfA1Nn3DHYD3N62zY92j6kk9ExIKD9a1X0rwe7gV8jJEBe2D4zM/30QzWP4PdB+v/EBgerPe4vPMcl1DQnoVtCWXtWdKWUNaeJW0JZe1Z0pZQ1p6lbdm5ny3sY6Gsny3pY6Gsny3pY6Gsn52VPhZsS9tyd7albTkwr2051p1hsu2tEfH0iLjjA0lE9CLimTR/6I66CriE5gU6+u+Akdi7Dn7IzH42Z89c2cbebUzu4Q9Fozt/l32dma8CXg58KCJe1G5e6PSwu0bEw9oXd78dRBrYMRL71xHx5vaD46ci4hRoBjBoRjzHyswfZuafZeZTaM54+SIw+s1Zv63jMcCqiDiuzX04u3+YB7i9HRwiIo4Btre/ayfNGS2j3k/T0azNzCMy8wiag/a97X13iIiHT/rH5AN9K82H3pMi4sMRMRhMnXSgn0tzoH8wM+9B8y3kxjG5r2L319PgQL9kJPaNQz8PH+j/2v7eUeMO9CNoBhRfNxI73Gl/ISL+a0Tca0zOgUGn/YK25qdn5sPb3KODn++j+eNkLfDfaPbNwcAamk572MGZeVYOnUmWmd9tP+AfPKaObW3t24b+DW7ffyT22Mz8tcx8C3AscHBEvKftA0b/MAG4f2a+rf3d987M12fmlmy+FR4duH0fzWttTWbuk5n7AF9rfx73+h7+fSfQjOBfApxGMzg4bHgQ9ycz8yMAmfl/gXF/5H0nM09ua/x7mtfN9RHxhth91PbHM/Ojmfl+YGdmXtjm/hRD/diQB7ftc3lm/hZwUmb+A/BUmjecYWsz84LhP64yc2dmfoDmzX5USR/7kMz8ncz8MM23K9+iGawf179CO1jfPk9yaLCe3Y/5VwH/AjwhMw/JZpD++vbncYNUo4P1v5mZV2Xmy2n+eB02cbCeXdt54KbMfCnwAJpj9snA1yPij9t+eVQ/M69sXxu7DNiPid2/bZ+b2tf0kzPzOzTH9LqRWI/LO89xCWXtWdKWUNaeJW0JZe1Z0pZQ1p4lbQll7VnaliX9bEkfC2X9bEkfC2X9bEkfC2X97Kz0sWBb2pa25YBtubt5bcux7gwDSafSfKC4MSKujObsnBuB/9LeN+pa4OcGjTH8D9gyEvvV9lusO2Tmb9Nc6nb4uNwRsW8b9+uDjRHxQOD7o8GZeTnwBJoPaH/Dwo12D370It4vIh7Q5r4nzansw14K/DjNadRPpRms2g78D+D5Y3Lv9iE/M7+Vma/LzIeO3PUKmg9cF9OMbL4mIq6i+ebt9WNyvwK4rG2Xv6QZuCAi7tvmGeWBvrt57LRvawcbdxERP0s7mDjiW8B9s/2jov13l2z+wPjmSOwdZ1Jmc1ndr9B8c76Z8X3a8ADtFxa4j8x8Ps3lCn8TEU8eFzOiFxF3bwdt75gDI5tvIUYHSj8fEYPLQS5v98Xgm49xc4X121zfycw3Z+ZP0RzP+wOfHYm9S0Qc0A7a7h8RD2lz35vxf7DujOYSxcGZZvu0v+u2MXWXDtZfS/c+1sH63QfroWzAvmSw3uPyznNcQll7lrQllLVn57Zs85W0Z0lbQll7lrQllLVnaVuW9LPX0r2PhfH97ODLr9F+tnMf2+Yr6WdL+lhYQj87A30s1G/LSe+ZtuX8taXH5Z2nLe+Ux+WouR9Iysx/y8xfAIJm4OhUIDLzP2XmbpdOAX9Oc83/OB8euf1smhfC6O98OfCIMdtPzszvjcl7E80ZJ+Pq/0FmvozmRTLuoBrEHZyZDx56MX+jvet2mg94w7HbM/MlNHMuPRV4NM03hidk5jVj0k+6VG9cHZdk5v6Zee/M/CTNN4SDff6hMfEfoznF/XnAoe1jyObbyl8fjccD/c7Sab8IeH9EfDEiPtr+u5LmdP8XjqnjU4y/vAKaQcph347m0sPBc91Bc2pqf0KO/4gfDfA+ZbCx/ZB/+2hwNt92Pxl4TkS8j4UvAX4kP/p2/5j40QDv3dj9dfIbwBMj4qs0/dWlEfFlmstAXjwm97gB3ssy8wXsfgbBW4GvAJ+n2ffnR8QlNJdL/tGY3G8FvhgRH6UZGH9zW/d92f0U2tHB+qtozuybNFhf0scuNFg/7oyApQzWH0/3wfqPM/3Behg/YP8lxg/YlwzWjzsuv0hzXI5eIgSze1yez8odl39b6bh895jcJcclLNzPjrZnSVtCWXsWtWUb17U9S9oSytqzpC2hrD1L23JcPzvpS9GSPhbG97O/xfh+tqiPbeO6fila8oUolPWzs9LHAjyX7l9w74m2nPQF90q3Zdf3S6jflpO+4C5ty8FxubVSW+7p47LL559Zb8s9dVyOtuVCn2Vn8bicdluONfeTbevOJSIOo7n07CiaFzY0Z9dcQTOfVA7Fng18JNuzaEby/M/M/M2RbR8D3pjN2TfD28+imeNnn6FtHwGeMzow2B7oF+aESdyjmYPq1TSXAkRmPnBMzLU0B/Sgg31cZn6jPdAvzXZS9aH4uwJn0wxs3khzGd4Paf4wOH14cDDGTAK/kIj4JZpLBnfQdNq/RzNvxANp5mv64FDsU2guSfg2zWV7p2TmJ9tO+7XjBgYj4tE0c1IBfB34fGYuq9NpXyPbM/PrI9t7NGdJfXx0+7jfGc1cIvfLzKsW+F3/meYss7GTwi/wuP2Ah2bmZWPuewjNmWc/RnM5x+dHY9q4x+TIZLyL/M79aebjurF9k1oHXJOZo2cIDOIfSvMH4T9lh7nHovnWfXgC/JKJmcdOVN/WvDOHJnYfxEbEw3NkQuxJuWnONFiVzRlyk+KOA47PzHFnTi6U+zaa18lug/ARsYpmst0fY4F9EhEPynYuvOHc4/bJhMffBTiG5vWy2yB5+3p7CHB1Zv77YrlHjstDgY1dj8uYsIhAe1z+YPh5RsQTgb+h43HZxl9Oc0nSYsflK7M5g6STNvc/AA/rcFw+ODPHXcI89rictE/a+0aPyxNoFjPodFwulHvoMcPt+TXgC3uon/3BmNftbv3sAn3sWhZpyzbuaTT97H8tqG8NE9qyvX+4Pa8dt79L+9j2MZ372dI+tn3MoJ9dDfwHkLnIohqxyAIcbc39QZ8wHA88cKF+dij22zRnhE3sY9v4x9OcaX1uQd3fAu42ro9t4wb97H4082j922ju0T52sX0y5nfs28ZfN+45DvexNJ/fFs29nPfMBXLei6YtdzsbuOA9cxWLvF+2cY8BHp+Zb1wobuQx96A583Gxthx8/tnty9CIOGj0812J9v3yUTRXBSz6ftkx5/BxeVv72AVXyIxFFq8Z/fwzHE/z5f9Cx+UgdgtNP71YWz6OZr62t0+o5Y4+fCj3N+l+XH6f5ni4eSRm9LjssqDPPvmjOYxWtfHXZ+a3x8TuT/M30dU0X1osmLt9zHBbXpOZ1y0Q22lFuEFb0ny5sUv8pONyNDfN34SrJ7XlUPxqmpMoJn6WjR8tWDXIDRM+x7bxD6BpS1hkn4xyIEkzaYXegHf5MDVyX8kb8D0Wq6f9o/Xnl/AGfJ8cWeFm5Hcv9ga82x+sJfbUG3Dbib2BZkT/4sw8d+i+catxDccvNhF66Upfw/EL1rLE3CV1l+yTA9r4LpPDd65jCXWXrjDxSJr5T8bF/1Jm/tNSYpeQe6l1307zjXKX3MOxT6D5dqt0nyy3lpJ9MnrpbI/mm7xJK9mVrBZSukrecnKvZN1zsU/a+EkLN1xOs2rtlg6xkxZ5qJX7njQTpD62zT26QuK42Fmp+1yaQZM9Ufe4RTVuAO7D7ishla4aWbLKUq3cPwt8ZAm5V3Kf7Knc36VZDXDT6HvYqKHY946+DywQ32lBlZLYJebu9BxL45dY90rt75JVxDrHLiH3STRf+q5k7m/QfN7omns4fhvNF8x7ap8sWssScj+I5kSFwVQcC61wO4jtuiJc5/hKuRd9jkuJH2fuL23TnVNm3pCZX2j/3QAQu69ON9G42MzcOm4QqfUnHeu6lWbllcXiLhsMInWtO5tljD+6wP23ZuYX230yWKHnypGYiYNIXerIzB2Z+fnM3DJhH96cmf+Yu38bOBr7LppLOt8JnBgLT2w+Gr/YROgLTZo+bmLX4fjFaimZkH2xukdrKd0n7yyopWT/lcaXTjx/zgLxb15GbGn8Uut+e0Hu4dhVS9wny62lZJ+MLgpwCZMXBRgXv9AiAiWxy819Cc2HxZXKPQ/7BCYv3JDsvnBD6SIPeyL3v3TI/bo2/pcn1DIc+/rC3Cu5T15H88fTL0+oZdxzLF1U46cYv6jGuNhJC3CUxtfK/dol5l7JfbKncn+P5uyE/xOLL3oyiO26QErJgiqli6+U5u76HEvjl1L3Su3vkgVpSmJL4zdUyP3CwtzD8UdMiF/qPulSS2nu99EsGHQAiy8YNIhd2yG2NL5G7i7PcSnxu1lojgGpugnfyELzLfHajrGMxpbGz0nuWd4nD8nMp7WP+whN53RJ+83HOCXxC8WOWx1qT+UurXu0lmntk+Xm3jczL25jX5NDE89HxLg365J4c9et5VXAz9BcEvu19jHXZDOv3Dgl8eaumxt2X7jh2Gzm3Hv5mMH9ktg9lfv393Dux65g7uXsk3G1lOaeuKhGNJfMLzXW3PVz35SZL42I36EZPHwe8Ppopld4T7Znqi0h1tz1c/cz80qAiNhlQZrYfWHHklhz18+9/+DzEXBORHwuM18ZES+g+aJhqbF7S+6xPCNJs2bSSmyXsPtKbKWrtpXEz0PuWd4npatxlcSbu27uoonnC+PNXbGWLFzJriTe3HVzt+4a3RduKIk1d/3cJYtqlC7AYe66uYGiRU+KYs1dNXfJgjQlseaun7tkwaDSFeH2htxjOZCkWXMt3VdiK4k1d93cJSsYlMabu27ua6NshYmSeHNXriW7r8pTHG/uurkpWwWrdMUsc9fNXbJ6TulKO+aum3u3M6Nz8kpVJbHmrp+7dEW4rrHmnk7urqu8la4ItzfkHstL2zRrBksufmPMfaNLLpbEmrtu7mcz5pv0zHx5RFwwur0w3twVc2fmyWMeD80cSyeOydE53tz1a2kf8wPgZdEuCjDh8UuKN3e93Jl58IS7bgePZxG7AAAC+UlEQVR2mWC/JNbcU8m9HXhJRPweiyyqURJr7vq5gUmXlC831tyVc2fmJcD+g9sR8bdMWJCmJNbcU8n9sWhWI91lwaA29teXGru35J7EVdskSZIkSZLUiZe2SZIkSZIkqRMHkiRJkiRJktSJA0mSJEmSJEnqxMm2JUmSCkXEtcB9aSZQ3gH8M/B+4N3ZLJ8rSZJ0p+QZSZIkSUuzPjP3pVnR8g3A7wLvmW5JkiRJK8szkiRJkpYhM28BLo6IbwOXRcSbaQaXXkuzZPgtwHsycwNARHwM+MvMPGeQIyK+CLwC+AvgLcAzgbsCXwOekZlX1XtGkiRJk3lGkiRJ0h6QmZ8Drgd+DrgVeA6wH/AU4PSIOKkNPR941uBxEXEk8ADg48A64PHA4e1jTwFurPQUJEmSFuVAkiRJ0p7zTWD/zLw0M6/MzJ2Z+UXgQ8DPtzF/ARwWEYe1t58N/Elm/gD4IbAv8FCgl5n/kpnfqvwcJEmSJnIgSZIkac95ALA1In4mIj4VETdExC3Ai4ADADJzO/CnwLMiYh/g6cDm9r5PAucCbwe2RMS7I+Ke03gikiRJ4ziQJEmStAdExLE0A0mfBj4IXAwcmJlrgHcCvaHw82nmQfoF4PuZ+dnBHZn5tsw8BjiC5hK3367zDCRJkhbnZNuSJEnL0J4x9HjgfwIfyMwrI2JfYGtm3hYRPw08A/jE4DGZ+dmI2Am8mfZspDbXsTRf9H2BZp6l24Ad1Z6MJEnSIjwjSZIkaWk+GhHfA64DXk6z2trz2vteDLy6vf8VNJeyjXo/8AjgA0Pb7gn8EXATzYptNwIbV6R6SZKkJej1+/1p1yBJkrTXiYjnAC/IzMdNuxZJkqSuPCNJkiSpsoi4B81ZS++edi2SJEklHEiSJEmqKCKeBNwAbKGZlFuSJGlueGmbJEmSJEmSOvGMJEmSJEmSJHXiQJIkSZIkSZI6cSBJkiRJkiRJnTiQJEmSJEmSpE4cSJIkSZIkSVInDiRJkiRJkiSpk/8PjY3uJxxagC4AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] @@ -1788,6 +1694,9 @@ " linewidths=0.1,\n", " linecolor=\"Black\",\n", ")\n", + "plt.ylabel(\"Tests\")\n", + "plt.xlabel(\"Days\")\n", + "plt.title(\"Naive Method\\n\", fontsize=20)\n", "plt.show()" ] }, @@ -1800,12 +1709,12 @@ } }, "source": [ - "Cells with Purple color in the above graph are the labels given by the naive flake algorithm. We can see the `naive flake algorithm` is unable to detect many flay tests such as test number 4, 19, 22, 23, 24, 25, 34, 35, 37. Also, for tests 1, 2, 3, 4 from the timestamp 0 to 17 consistent failures are occurring, which not a behavior of flaky test but still incorrectly detected as flaky. " + "Cells with Purple color in the above graph are the labels given by the naive flake algorithm. We can see the `naive flake algorithm` is unable to detect many flay tests such as test number 19, 22, 23, 24, 25, 34, 35, 37. Also, for tests 1, 3 from the time-stamp 0 to 17 consistent failures are occurring, which is not a flake behavior but this method still incorrectly identifies them as flaky. " ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 27, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:20:54.961086Z", @@ -1817,8 +1726,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "total number of flake label given by the `naive flakiness method` is 512\n", - "the total flaky test detected by the `naive flakiness method` is 2.47 times than the total flaky test detected by the existing testgrid method \n" + "Number of flake labels given by the naive flakiness method: 332\n", + "Total flaky tests detected by the `naive flakiness method` is 1.6 times \n", + "the total flaky test detected by the existing testgrid method \n" ] } ], @@ -1827,13 +1737,13 @@ " np.array(list(details[\"naive_flakiness\"][:40].values)) == 13\n", ")\n", "print(\n", - " \"total number of flake label given by the `naive flakiness method` is\",\n", + " \"Number of flake labels given by the naive flakiness method: \",\n", " total_naive_flake_label,\n", ")\n", "print(\n", - " \"the total flaky test detected by the `naive flakiness method` is\",\n", + " \"Total flaky tests detected by the `naive flakiness method` is\",\n", " round(total_naive_flake_label / total_existing_flake_label, 2),\n", - " \"times than the total flaky test detected by the existing testgrid method \",\n", + " \"times \\nthe total flaky test detected by the existing testgrid method \",\n", ")" ] }, @@ -1846,13 +1756,13 @@ } }, "source": [ - "### Flip flake method testgrid\n", - "Below we are annotating testgrid using the flip flake detection method. We want to check the performance of the method without the original flaky label. Hence, for illustration purposes, we are removing the flaky labels. However, in production, we might not change the original flaky label. " + "### Flip flake method \n", + "Below we are annotating testgrid using the flip flake detection method." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2020-11-19T20:20:59.034866Z", @@ -1861,7 +1771,7 @@ }, "outputs": [], "source": [ - "flake_score_threshold = 10\n", + "flake_score_threshold = 30\n", "## calculate the flakiness score by flip method for each test in our dataset.\n", "details[\"flip_flakiness_score\"] = details[\"values\"].apply(\n", " lambda x: calc_flakiness_score(x)\n", @@ -1876,7 +1786,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2020-11-18T19:04:26.582563Z", @@ -1886,7 +1796,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1910,6 +1820,9 @@ " linewidths=0.1,\n", " linecolor=\"Black\",\n", ")\n", + "plt.ylabel(\"Tests\")\n", + "plt.xlabel(\"Days\")\n", + "plt.title(\"Flip Flakiness\\n\", fontsize=20)\n", "plt.show()" ] }, @@ -1917,12 +1830,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Cells with Purple color in the above graph are the labels given by the `flip flake algorithm`. Though it performed better than `naive flake algorithm`, but it was unable to detect flaky behaviors of test number 23, 4 due to low signal. Also, for tests 1, 3 from the timestamp 0 to 17 and for test 17 for timestamp 74 to 96 consistent failures are occurring, which not a behavior of flaky test but still incorrectly detected as flaky." + "Cells with Purple color in the above graph are the labels given by the `flip flake algorithm`. Though it performed better than `naive flake algorithm`, but it was still unable to detect flaky behaviors for test number 23 and 24 due to a low occurrence of failures in those tests. Also, for tests 1,2,3,4 from the time-stamp 0 to 17 and for test 17 for time-stamp 74 to 96 consistent failures are occurring, which not a behavior of flaky test but still incorrectly detected as flaky." ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2020-11-18T19:10:40.095030Z", @@ -1934,8 +1847,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "total number of flake label given by the `flip flakiness` method is 523\n", - "the total flaky test detected by the `flip flake` method is 2.53 times than the total flaky test detected by the existing testgrid method \n" + "Number of flake labels given by the `flip flakiness` method: 333\n", + "Total flaky test detected by the `flip flake` method is 1.61 times \n", + "the total flaky tests detected by the existing testgrid method \n" ] } ], @@ -1944,13 +1858,13 @@ " np.array(list(details[\"flip_flakiness\"][:40].values)) == 13\n", ")\n", "print(\n", - " \"total number of flake label given by the `flip flakiness` method is\",\n", + " \"Number of flake labels given by the `flip flakiness` method:\",\n", " total_flip_flake_label,\n", ")\n", "print(\n", - " \"the total flaky test detected by the `flip flake` method is\",\n", + " \"Total flaky test detected by the `flip flake` method is\",\n", " round(total_flip_flake_label / total_existing_flake_label, 2),\n", - " \"times than the total flaky test detected by the existing testgrid method \",\n", + " \"times \\nthe total flaky tests detected by the existing testgrid method \",\n", ")" ] }, @@ -1958,13 +1872,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Flip flakiness with optimal distance method testgrid\n", - "Below we are annotating testgrid using the Flip flakiness with optimal distance method" + "### Flip flakiness with optimal distance method\n", + "Below we are annotating testgrid using the `Flip flakiness with optimal distance` method" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2020-11-18T19:10:27.382993Z", @@ -1980,12 +1894,12 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 32, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -2009,6 +1923,9 @@ " linewidths=0.1,\n", " linecolor=\"Black\",\n", ")\n", + "plt.ylabel(\"Tests\")\n", + "plt.xlabel(\"Days\")\n", + "plt.title(\"Flip Flakiness with Optimal Distance\\n\", fontsize=20)\n", "plt.show()" ] }, @@ -2016,13 +1933,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Cells with purple color in the above graph are the labels given by the flip flake with optimal distance algorithm.\n", - "In the above figure, we can see that `Flip flakiness with optimal distance` method is able to detect the flaky behavior in test number 4, 19, 22, 23, 24, 25, 34, 35, 37, which `naive flake algorithm` were failed to detect and test 4 and 23 which `flip flake algorithm` was failed to detect. Also, it correctly classified flaky tests for test cases 1, 2, 3, 4, 17. Hence, we can conclude that `Flip flakiness with optimal distance` works better than `naive flakiness algorithm` and `flip flakiness algortihm`." + "Cells with purple color in the above graph are the labels given by the `flip flake with optimal distance algorithm`.\n", + "\n", + "In the above figure, we can see that `flip flakiness with optimal distance` method is able to detect the flaky behavior in test number 4, 19, 22, 23, 24, 25, 34, 35, 37, which `naive flake algorithm` were failed to detect and test 4 and 23 which `flip flake algorithm` was failed to detect. Also, it correctly classified flaky tests for test cases 1, 3, 17. \n", + "\n", + "Given the above, its safe to conclude that `Flip flakiness with optimal distance` works better than `naive flakiness` and `flip flakiness` methods on both are example and real world data sets." ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2020-11-18T19:10:55.995274Z", @@ -2034,8 +1954,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "total number of flake label given by the `flip flake optimal distance` method is 923\n", - "the total flaky test detected by the `flip flake optimal distance method` is 1.2 times than the total flaky test detected by the existing testgrid method \n" + "Number of flake labels given by the `flip flake optimal distance` method: 424\n", + "Total flaky test detected by the `flip flake optimal distance method` is 2.05 times \n", + "the total flaky tests detected by the existing testgrid method \n" ] } ], @@ -2044,13 +1965,13 @@ " np.array(list(details[\"flip_flakiness_optimal\"][:40].values)) == 13\n", ")\n", "print(\n", - " \"total number of flake label given by the `flip flake optimal distance` method is\",\n", + " \"Number of flake labels given by the `flip flake optimal distance` method:\",\n", " total_flip_flake__optimal_label,\n", ")\n", "print(\n", - " \"the total flaky test detected by the `flip flake optimal distance method` is\",\n", + " \"Total flaky test detected by the `flip flake optimal distance method` is\",\n", " round(total_flip_flake__optimal_label / total_existing_flake_label, 2),\n", - " \"times than the total flaky test detected by the existing testgrid method \",\n", + " \"times \\nthe total flaky tests detected by the existing testgrid method \",\n", ")" ] }, @@ -2058,17 +1979,46 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Conclusion\n", + "## Conclusion\n", + "\n", + "\n", + "**TLDR: Flip Flakiness with Optimal Distance is best!**\n", + "\n", + "In this notebook, we explored 3 different methods for automatically identifying flaky tests.\n", + "\n", + "1) **Naive Flakiness**: This was our baseline method to compare the performance of the other two methods. This method simply calculates flakiness as a ratio of failed tests over total tests. As we expected, this method performed the worst and should not be used in the future for flake identification. \n", + "\n", + "\n", + "2) **Flip Flakiness**: This method relied on counting the number of edges (flips from pass to fail) for a test. Although it performed much better than the naive method, it fell short for longer test examples with flaky regions in an otherwise stable time-series. Moving forward, this method should not be used either. \n", "\n", - "In this notebook, we explored different methods to find flaky test.
\n", - "1) Naive flakiness method: This method calculates flakiness as a ratio of failed tests to total tests. Flaky test passes and fails on several successive revisions, but this method cannot catch this signal of the flaky test.
\n", - "2) Flip flakiness method: flaky test pass and fail across multiple runs over a certain period of time. We trigger this behavior of a flaky test by using the concept of edge. Edge is the transition of a particular test case from pass to fail.
\n", - "3) Flip Flakiness with Optimal Distance: One of the downsides of finding a single value for each test case is that the number of edges is relatively low compares to total runes; hence your flakiness score is really low. To overcome this we decided to calculate the flakiness score between edges since it will maximize our flakiness score.
\n", "\n", - "We applied these three algorithms to testgrids and found out that `Flip flakiness with optimal distance` methods performed better than `Naive flakiness` and `Flip flakiness` method. Currently, at upstream testgrid repo `Naive flakiness` and `Flip flakiness` methods are implemented for detecting flakiness. We can include `Flip flakiness with optimal distance` method to further improve accuracy. \n", + "3) **Flip Flakiness with Optimal Distance**: This method extended the flip flakiness method by identifying irregular subsets within a test. This was the best performing method explored in this notebook and should be carried forward into the [failure type classification](https://github.com/aicoe-aiops/ocp-ci-analysis/blob/master/notebooks/failure-type-classification/README.md) tool and serve as the new baseline. \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Next Steps" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The current upstream [testgrid repo](https://github.com/GoogleCloudPlatform/testgrid) uses both `Naive flakiness` and `Flip flakiness` methods for detecting flakes. We should open an issue and suggest including `Flip flakiness with optimal distance` into their workflow to further improve flake identification. \n", "\n", - "In this notebook, we just used the result of previous runs to detect flaky tests. Next, we can try detecting flakiness with additional data such as metadata related to git revisions to improve accuracy.[more details](https://medium.com/fitbit-tech-blog/a-machine-learning-solution-for-detecting-and-mitigating-flaky-tests-c5626ca7e853)" + "\n", + "* One limitation of the work in this notebook is that we only used the results of previous runs as our data to detect flaky tests. This is not the only data available to us. Next, we can try incorporating additional metadata (like git revisions or linked bugzillas) to improve upon our existing flake identification methods. See [this article](https://medium.com/fitbit-tech-blog/a-machine-learning-solution-for-detecting-and-mitigating-flaky-tests-c5626ca7e853) for possible avenues of future development. " ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {