From 576af4adebb9ba0f20b51dcbf7ef4be356d3b651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 1 Apr 2025 10:06:30 +0200 Subject: [PATCH 01/64] Initial release of the Redis Cluster Operator with CRD update from the original repository --- .gitattributes | 2 + .github/CODEOWNERS | 12 + .github/ISSUE_TEMPLATE/bug-issue.md | 32 + .github/ISSUE_TEMPLATE/feature-issue.md | 31 + .github/ISSUE_TEMPLATE/op-release-issue.md | 37 + .github/PULL_REQUEST_TEMPLATE.md | 15 + .github/workflows/stale.yml | 27 + .github/workflows/test_e2e.yml | 41 + .gitignore | 56 +- .go-version | 1 + CHANGELOG.md | 9 + CODE-OF-CONDUCT.md | 57 + CONTRIBUTING.md | 90 + Dockerfile | 34 + Makefile | 590 + NOTICE.txt | 2021 + README.md | 37 +- SECURITY.md | 42 + SUPPORT.md | 46 + api/v1/groupversion_info.go | 20 + api/v1/rediscluster_conversion.go | 4 + api/v1/rediscluster_types.go | 253 + api/v1/zz_generated.deepcopy.go | 269 + api/v1alpha1/groupversion_info.go | 20 + api/v1alpha1/rediscluster_conversion.go | 280 + api/v1alpha1/rediscluster_conversion_test.go | 626 + api/v1alpha1/rediscluster_types.go | 237 + api/v1alpha1/zz_generated.deepcopy.go | 224 + cmd/main.go | 172 + .../redis.inditex.com_redisclusters.yaml | 10474 ++++ config/crd/kustomization.yaml | 9 + config/crd/patches/operator-crd-patch.yaml | 6 + .../crd/patches/webhook_in_redisclusters.yaml | 4 + .../patches/webhook_in_redisclusters.yaml.tpl | 17 + .../deploy-profiles/debug/kustomization.yaml | 18 + .../debug/operator-deployment-patch.yaml | 34 + .../debug/operator-env-patch.yaml | 23 + .../debug/resources/namespace.yaml | 4 + config/deploy-profiles/dev/kustomization.yaml | 17 + .../dev/operator-deployment-patch.yaml | 15 + .../dev/operator-env-patch.yaml | 12 + .../dev/resources/namespace.yaml | 4 + config/deploy-profiles/pro/kustomization.yaml | 17 + .../pro/operator-deployment-patch.yaml | 28 + .../pro/operator-env-patch.yaml | 4 + config/int-test/kustomization.yaml | 12 + .../int-test/operator-deployment-patch.yaml | 25 + config/int-test/resources/namespace.yaml | 4 + config/kustomization.yaml | 9 + config/manager/kustomization.yaml | 17 + config/manager/operator.yaml | 54 + config/manager/redis_operator_config.yaml | 11 + config/rbac/bases/cluster_role_binding.yaml | 12 + config/rbac/bases/clusterrole.yaml | 93 + config/rbac/bases/leader_election_role.yaml | 27 + .../bases/leader_election_role_binding.yaml | 12 + .../rbac/bases/rediscluster_editor_role.yaml | 26 + .../rbac/bases/rediscluster_viewer_role.yaml | 22 + config/rbac/bases/role.yaml | 102 + config/rbac/bases/role_binding.yaml | 13 + config/rbac/bases/service_account.yaml | 5 + config/rbac/kustomization.yaml | 15 + config/rbac/rediscluster_editor_role.yaml | 27 + config/rbac/rediscluster_viewer_role.yaml | 23 + config/samples/kustomization.yaml | 7 + config/samples/redis_v1_rediscluster.yaml | 74 + ...redis_v1alpha1_rediscluster-ephemeral.yaml | 34 + ...dis_v1alpha1_rediscluster-multimodule.yaml | 39 + ...redis_v1alpha1_rediscluster-repmaster.yaml | 31 + .../redis_v1alpha1_rediscluster-storage.yaml | 32 + .../webhook/bases/allow-webhook-traffic.yaml | 20 + config/webhook/bases/deployment.yaml | 55 + config/webhook/bases/namespace.yaml | 4 + config/webhook/bases/service.yaml | 15 + config/webhook/kustomization.yaml | 9 + controllers/assert.go | 32 + controllers/conditions.go | 14 + controllers/mock_factory.go | 161 + controllers/redis_manager.go | 1844 + controllers/redis_manager_test.go | 827 + controllers/rediscluster_reconciler.go | 115 + controllers/resource_manager.go | 2029 + controllers/resource_manager_test.go | 96 + controllers/suite_test.go | 269 + docs/developer-guide.md | 402 + docs/images/badge.png | Bin 0 -> 1992 bytes docs/images/badge.svg | 36 + docs/images/redis-dashboard.png | Bin 0 -> 98362 bytes docs/images/redis-load-dashboard.png | Bin 0 -> 51161 bytes docs/images/redisbackup.png | Bin 0 -> 261004 bytes docs/images/redisk8slayout.png | Bin 0 -> 399548 bytes docs/images/redispvcnodeslayout.png | Bin 0 -> 256605 bytes docs/operator-guide/backup-configuration.md | 17 + docs/operator-guide/delete-pvc.md | 24 + docs/operator-guide/ephemeral-cluster.md | 22 + docs/operator-guide/master-replica-cluster.md | 90 + docs/operator-guide/operator-deployment.md | 49 + docs/operator-guide/redis-deployment.md | 78 + docs/operator-guide/toc.md | 9 + docs/operator-guide/troubleshooting.md | 228 + go.mod | 81 + go.sum | 210 + internal/finalizers/backup.go | 20 + internal/finalizers/configmap.go | 25 + internal/finalizers/delete_pvc.go | 22 + internal/finalizers/finalizer.go | 13 + internal/kubernetes/cluster_nodes.go | 1277 + internal/kubernetes/redis.go | 61 + internal/kubernetes/redis_test.go | 177 + internal/redis/node.go | 618 + internal/redis/redis.go | 876 + internal/redis/redis_test.go | 1920 + internal/redis/utils.go | 181 + internal/utils/pods.go | 94 + internal/utils/range.go | 10 + internal/utils/range_test.go | 26 + test/README.md | 43 + test/cmd/README.md | 96 + test/cmd/check_cluster_test.sh | 85 + test/cmd/clean.sh | 39 + test/cmd/create_local_cluster_testing.sh | 169 + test/cmd/data_44kl.txt | 44061 ++++++++++++++++ test/cmd/push_image_local_cluster.sh | 31 + test/cmd/redisClusterOLMTest.sh | 326 + test/cmd/redisClusterTest.sh | 1553 + test/cmd/waitforstatus.sh | 41 + test/e2e/e2e_suite_test.go | 119 + test/e2e/framework/kubeclient.go | 113 + test/e2e/framework/redisclient.go | 961 + test/e2e/internal/config/client.go | 23 + test/e2e/namespace_test.go | 27 + test/e2e/operator_test.go | 367 + test/e2e/rediscluster_test.go | 1538 + v1alpha1client/client.go | 95 + v1client/client.go | 95 + webhook/Dockerfile | 37 + webhook/go.mod | 70 + webhook/go.sum | 192 + webhook/main.go | 122 + webhook/v1/rediscluster_webhook.go | 19 + 140 files changed, 78962 insertions(+), 13 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/CODEOWNERS create mode 100644 .github/ISSUE_TEMPLATE/bug-issue.md create mode 100644 .github/ISSUE_TEMPLATE/feature-issue.md create mode 100644 .github/ISSUE_TEMPLATE/op-release-issue.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/stale.yml create mode 100644 .github/workflows/test_e2e.yml create mode 100644 .go-version create mode 100644 CHANGELOG.md create mode 100644 CODE-OF-CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 NOTICE.txt create mode 100644 SECURITY.md create mode 100644 SUPPORT.md create mode 100644 api/v1/groupversion_info.go create mode 100644 api/v1/rediscluster_conversion.go create mode 100644 api/v1/rediscluster_types.go create mode 100644 api/v1/zz_generated.deepcopy.go create mode 100644 api/v1alpha1/groupversion_info.go create mode 100644 api/v1alpha1/rediscluster_conversion.go create mode 100644 api/v1alpha1/rediscluster_conversion_test.go create mode 100644 api/v1alpha1/rediscluster_types.go create mode 100644 api/v1alpha1/zz_generated.deepcopy.go create mode 100644 cmd/main.go create mode 100644 config/crd/bases/redis.inditex.com_redisclusters.yaml create mode 100644 config/crd/kustomization.yaml create mode 100644 config/crd/patches/operator-crd-patch.yaml create mode 100644 config/crd/patches/webhook_in_redisclusters.yaml create mode 100644 config/crd/patches/webhook_in_redisclusters.yaml.tpl create mode 100644 config/deploy-profiles/debug/kustomization.yaml create mode 100644 config/deploy-profiles/debug/operator-deployment-patch.yaml create mode 100644 config/deploy-profiles/debug/operator-env-patch.yaml create mode 100644 config/deploy-profiles/debug/resources/namespace.yaml create mode 100644 config/deploy-profiles/dev/kustomization.yaml create mode 100644 config/deploy-profiles/dev/operator-deployment-patch.yaml create mode 100644 config/deploy-profiles/dev/operator-env-patch.yaml create mode 100644 config/deploy-profiles/dev/resources/namespace.yaml create mode 100644 config/deploy-profiles/pro/kustomization.yaml create mode 100644 config/deploy-profiles/pro/operator-deployment-patch.yaml create mode 100644 config/deploy-profiles/pro/operator-env-patch.yaml create mode 100644 config/int-test/kustomization.yaml create mode 100644 config/int-test/operator-deployment-patch.yaml create mode 100644 config/int-test/resources/namespace.yaml create mode 100644 config/kustomization.yaml create mode 100644 config/manager/kustomization.yaml create mode 100644 config/manager/operator.yaml create mode 100644 config/manager/redis_operator_config.yaml create mode 100644 config/rbac/bases/cluster_role_binding.yaml create mode 100644 config/rbac/bases/clusterrole.yaml create mode 100644 config/rbac/bases/leader_election_role.yaml create mode 100644 config/rbac/bases/leader_election_role_binding.yaml create mode 100644 config/rbac/bases/rediscluster_editor_role.yaml create mode 100644 config/rbac/bases/rediscluster_viewer_role.yaml create mode 100644 config/rbac/bases/role.yaml create mode 100644 config/rbac/bases/role_binding.yaml create mode 100644 config/rbac/bases/service_account.yaml create mode 100644 config/rbac/kustomization.yaml create mode 100644 config/rbac/rediscluster_editor_role.yaml create mode 100644 config/rbac/rediscluster_viewer_role.yaml create mode 100644 config/samples/kustomization.yaml create mode 100644 config/samples/redis_v1_rediscluster.yaml create mode 100644 config/samples/redis_v1alpha1_rediscluster-ephemeral.yaml create mode 100644 config/samples/redis_v1alpha1_rediscluster-multimodule.yaml create mode 100644 config/samples/redis_v1alpha1_rediscluster-repmaster.yaml create mode 100644 config/samples/redis_v1alpha1_rediscluster-storage.yaml create mode 100644 config/webhook/bases/allow-webhook-traffic.yaml create mode 100644 config/webhook/bases/deployment.yaml create mode 100644 config/webhook/bases/namespace.yaml create mode 100644 config/webhook/bases/service.yaml create mode 100644 config/webhook/kustomization.yaml create mode 100644 controllers/assert.go create mode 100644 controllers/conditions.go create mode 100644 controllers/mock_factory.go create mode 100644 controllers/redis_manager.go create mode 100644 controllers/redis_manager_test.go create mode 100644 controllers/rediscluster_reconciler.go create mode 100644 controllers/resource_manager.go create mode 100644 controllers/resource_manager_test.go create mode 100644 controllers/suite_test.go create mode 100644 docs/developer-guide.md create mode 100644 docs/images/badge.png create mode 100644 docs/images/badge.svg create mode 100644 docs/images/redis-dashboard.png create mode 100644 docs/images/redis-load-dashboard.png create mode 100644 docs/images/redisbackup.png create mode 100644 docs/images/redisk8slayout.png create mode 100644 docs/images/redispvcnodeslayout.png create mode 100644 docs/operator-guide/backup-configuration.md create mode 100644 docs/operator-guide/delete-pvc.md create mode 100644 docs/operator-guide/ephemeral-cluster.md create mode 100644 docs/operator-guide/master-replica-cluster.md create mode 100644 docs/operator-guide/operator-deployment.md create mode 100644 docs/operator-guide/redis-deployment.md create mode 100644 docs/operator-guide/toc.md create mode 100644 docs/operator-guide/troubleshooting.md create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/finalizers/backup.go create mode 100644 internal/finalizers/configmap.go create mode 100644 internal/finalizers/delete_pvc.go create mode 100644 internal/finalizers/finalizer.go create mode 100644 internal/kubernetes/cluster_nodes.go create mode 100644 internal/kubernetes/redis.go create mode 100644 internal/kubernetes/redis_test.go create mode 100644 internal/redis/node.go create mode 100644 internal/redis/redis.go create mode 100644 internal/redis/redis_test.go create mode 100644 internal/redis/utils.go create mode 100644 internal/utils/pods.go create mode 100644 internal/utils/range.go create mode 100644 internal/utils/range_test.go create mode 100644 test/README.md create mode 100644 test/cmd/README.md create mode 100755 test/cmd/check_cluster_test.sh create mode 100644 test/cmd/clean.sh create mode 100755 test/cmd/create_local_cluster_testing.sh create mode 100644 test/cmd/data_44kl.txt create mode 100644 test/cmd/push_image_local_cluster.sh create mode 100755 test/cmd/redisClusterOLMTest.sh create mode 100755 test/cmd/redisClusterTest.sh create mode 100755 test/cmd/waitforstatus.sh create mode 100644 test/e2e/e2e_suite_test.go create mode 100644 test/e2e/framework/kubeclient.go create mode 100644 test/e2e/framework/redisclient.go create mode 100644 test/e2e/internal/config/client.go create mode 100644 test/e2e/namespace_test.go create mode 100644 test/e2e/operator_test.go create mode 100644 test/e2e/rediscluster_test.go create mode 100644 v1alpha1client/client.go create mode 100644 v1client/client.go create mode 100644 webhook/Dockerfile create mode 100644 webhook/go.mod create mode 100644 webhook/go.sum create mode 100644 webhook/main.go create mode 100644 webhook/v1/rediscluster_webhook.go diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..1384451 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,12 @@ +# These owners will be the default owners for everything in +# the repo. Unless a later match takes precedence, +# all users in this group will be requested +# for review when someone opens a pull request. + +# Default reviewers +* @InditexTech/redisoperator + +# CI/CD workflows reviewers +.github/workflows/* @InditexTech/redisoperator + +# Other reviewers diff --git a/.github/ISSUE_TEMPLATE/bug-issue.md b/.github/ISSUE_TEMPLATE/bug-issue.md new file mode 100644 index 0000000..5dabb30 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-issue.md @@ -0,0 +1,32 @@ +--- +name: Bug Report +about: Use this template to report a bug +title: '' +labels: kind/bug +assignees: '' + +--- + +### Detailed description + +A clear and concise description of what the problem is. Please include logs, screenshots or whatever other information to reproduce the error. + +### Expected behaviour + +Expected behaviour once the problem is fixed. + + +### Technical Solution + +If at bug creation time is no information on how to solve, leave blank until bug inspection and triage. + +Technical detail of what would need to be done or what would need to be modified to implement the bugfix. Enough detail should be given so that there is no doubt as to how to start and finish the task. Diagrams or any other graphical means of help, links, documentation, source code examples, etc... can be included. + + +### Acceptance criteria + +- [ ] Bug is fixed +- [ ] Test are implemented covering bugfix code +- [ ] acceptance criteria 1 +- [ ] acceptance criteria 2 +- [ ] acceptance criteria n diff --git a/.github/ISSUE_TEMPLATE/feature-issue.md b/.github/ISSUE_TEMPLATE/feature-issue.md new file mode 100644 index 0000000..d99aecb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-issue.md @@ -0,0 +1,31 @@ +--- +name: Feature request +about: Suggest an idea/feature for this project +title: '' +labels: 'kind/feature' +assignees: '' + +--- + +### Motivation + +Why is this issue necessary, what does it bring to the project, why should we do it? +Do not indicate technical reasons, only functional or operational ones. + + +### Analysis + +Current status or operation, if there is any current status. If new, there would be no current situation. + + +### Technical Solution + +Technical detail of what would need to be done or what would need to be modified to implement the solution. Enough detail should be given so that there is no doubt as to how to start and finish the task. Diagrams or any other graphical means of help, links, documentation, source code examples, etc... can be included. + + +### Acceptance criteria + +- [ ] acceptance criteria 1 +- [ ] acceptance criteria 2 +- [ ] acceptance criteria 3 +- [ ] acceptance criteria n diff --git a/.github/ISSUE_TEMPLATE/op-release-issue.md b/.github/ISSUE_TEMPLATE/op-release-issue.md new file mode 100644 index 0000000..483eb9f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/op-release-issue.md @@ -0,0 +1,37 @@ +--- +name: Release new operator version +about: Use this template to create a incoming release +title: 'Release Redis Operator X.Y.Z' +labels: kind/internal +assignees: '' + +--- + +### Motivation + +Recollect all issues and bugfixes that will be released with this version. +Help team identify what will be released when issues are implemented across several sprints even before release is done +Create a standardized way of documenting release changes (apart from changelog drafter rrnn) + +### Analysis + +We agreed to create this issue whenever a new version is released + +### Technical Solution + +N/A + +```[tasklist] +### List of issues +- [ ] issue 1 +- [ ] issue 2 +- [ ] issue n +``` + +### Acceptance criteria + +- [ ] New version is released +- [ ] Bundle is updated +- [ ] Update Catalog OCP +- [ ] Update Catalog Cloud +- [ ] A new issue with a rollout plan and schedule is created before closing this issue diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..6584b2e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ +This closes # + +## Summary Of Changes + +## Additional Context + +## Local Testing + +Please ensure you run the unit and integration tests before approving the PR. + +To run the unit and integration tests: + +``` +$ make test-cov test-e2e-cov +``` \ No newline at end of file diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..b452528 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,27 @@ +# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/actions/stale +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '24 23 * * *' + +jobs: + stale: + + runs-on: ubuntu-22.04 + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v3 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: 'Stale issue message' + stale-pr-message: 'Stale pull request message' + stale-issue-label: 'no-issue-activity' + stale-pr-label: 'no-pr-activity' diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml new file mode 100644 index 0000000..4021d86 --- /dev/null +++ b/.github/workflows/test_e2e.yml @@ -0,0 +1,41 @@ +name: Build, Push and run E2E test + +on: + pull_request: + branches: + - 'develop*' + paths-ignore: + - 'docs/**' + - '.github/**' + - '_local_tools/**' + +env: + KUBECONFIG: /tmp/kubeconfig.yaml + GO_VER: 1.24.0 + OPERATOR_NAME: redis-operator + +jobs: + e2e-tests: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v4 + with: + go-version: ${{ env.GO_VER }} + + - name: Setup kubectl + run: | + curl -sLO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o kubectl + chmod +x kubectl + sudo mv kubectl /usr/local/bin/kubectl + + - name: Setup e2e environment + run: chmod +x ${GITHUB_WORKSPACE}/test/cmd/create_local_cluster_testing.sh && ${GITHUB_WORKSPACE}/test/cmd/create_local_cluster_testing.sh ${{ env.OPERATOR_NAME }} + + - name: Install ginkgo + run: go install github.com/onsi/ginkgo/v2/ginkgo + + - name: Run tests for Kubernetes + run: | + make test-e2e-cov OPERATOR_IMAGE=${{ env.OPERATOR_NAME }}:0.1.0 diff --git a/.gitignore b/.gitignore index 6f72f89..60b40b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,59 @@ -# If you prefer the allow list template instead of the deny list, see community template: -# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore -# + # Binaries for programs and plugins *.exe *.exe~ *.dll *.so *.dylib +bin +testbin/* +config/test/tests.yaml +/iac-redisoperator +target/ +.local/ -# Test binary, built with `go test -c` +# Test binary, build with `go test -c` *.test # Output of the go coverage tool, specifically when used with LiteIDE *.out -# Dependency directories (remove the comment below to include it) -# vendor/ +# Output of Goland coverage +cover.out + +# Kubernetes Generated files - skip generated files, except for vendored files + +!vendor/**/zz_generated.* + +# editor and IDE paraphernalia +.idea +*.swp +*.swo +*~ +.vscode + +state/ + +# Directory used to generate kustomized yamls for deployment +deployment + +# Deployment temp files +config/aks/aks.yaml +config/init-test/tests.yaml + +# Bundle temporary files +bundle +bundle.Dockerfile + +# Certificates +certs/ + +# Secret files +config/webhook/bases/secret.yaml -# Go workspace file -go.work -go.work.sum +# OSS Review Toolkit (ORT) temporary files +ort/ -# env file -.env +# Log files generated by tests +hack/local/k6.log +hack/local/manager.log diff --git a/.go-version b/.go-version new file mode 100644 index 0000000..53cc1a6 --- /dev/null +++ b/.go-version @@ -0,0 +1 @@ +1.24.0 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..cc404c9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log +All notable changes to this project will be documented in this file. + +Format is based on [Keep a Changelog](http://keepachangelog.com/). + +## [Unreleased] - dd.mm.yyyy +### Added +### Fixed +### Changed diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md new file mode 100644 index 0000000..af72c81 --- /dev/null +++ b/CODE-OF-CONDUCT.md @@ -0,0 +1,57 @@ +# Contributor Code of Conduct + +## Our Pledge + +As contributors and maintainers of this project, we pledge to make participation in our project a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +We are committed to providing a welcoming and inclusive environment for all participants. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Being respectful of differing viewpoints and experiences. +- Gracefully accepting constructive criticism. +- Focusing on what is best for the community. +- Showing empathy towards other community members. + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery, and unwelcome sexual attention or advances. +- Trolling, insulting/derogatory comments, and personal or political attacks. +- Public or private harassment. +- Publishing others' private information, such as a physical or email address, without their explicit permission. +- Other conduct which could reasonably be considered inappropriate in a professional setting. + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned with this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, including but not limited to: + +- Issue trackers +- Pull requests +- Project wikis +- Discussion forums (Slack, Discord, etc.) +- Social media channels related to the project +- Offline events or meetups organized by the project or its community + +It also applies to interactions that happen outside the project spaces but can affect the project’s reputation or safety. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [insert contact email or reporting system]. All complaints will be reviewed and investigated promptly and fairly. + +Project maintainers are obligated to respect the privacy and security of the reporter of any incident. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +## Contact + +If you have any question, you can contact us by writing an email to oso@inditex.com. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2e60a34 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,90 @@ +# Contributing to Redis Operator + +Thank you for considering contributing to Redis Operator. We appreciate your interest in helping improve this project. + +Whether you are fixing bugs, adding features, or improving documentation, your contributions are welcome. By following this guide, you'll help ensure that your contributions are accepted and make the process easier for everyone. + +## How to Contribute + +### 1. Create a Descriptive Issue + +Open an issue using the provided templates: + +- Bug report: use this template to report a bug. The issue must contain: + - A detailed description of the problem + - The expected behaviour + - The proposed technical solution +- Feature request: suggest an idea/feature for this project. The issue must contain: + - Feature motivation + - Analysis of current status + - The proposed technical solution + +Once created, the project maintainers will review the issue and discuss the proposed solution. When the proposed solution is accepted, the developer can continue with the next step. + + +### 2. Fork the Repository + +Begin by forking the repository. This will create a copy of the project in your GitHub account, which you can work on freely. + +### 3. Clone Your Fork + +Clone your fork to your local machine to work on it: + +```bash +git clone https://github.com/your-username/[project-name].git +cd [project-name] +``` + +### 4. Create a Branch + +Create a new branch for the changes you want to make: + +```bash +git checkout -b your-branch-name +``` + +The name of the branch must be associated with the issue of the change, following the pattern: + +``` +/GH-- +``` + +where: + +- `` is `bugfix` for a Bug report or `feature` for a Feature request. +- `` is the issue number. +- `` is a brief description (one or two words) of the issue. + + +### 5. Make and Commit Your Changes + +Make the necessary changes to the codebase, documentation, or any other aspect of the project. Be sure to: + +- Write clear, concise commit messages. +- Follow the coding style and standards of the project. +- Use [conventional commits](https://www.conventionalcommits.org/). +- Ensure that your changes are well-documented and tested (if applicable). + + +### 6. Push Your Changes + +Push your branch to your forked repository on GitHub: + +```bash +git push origin your-branch-name +``` + +### 7. Create a Pull Request +Go to the original repository where you want to contribute and create a pull request (PR) from your branch. Be sure to include: + +- A clear description of what your PR does. +- A link to any related issues or discussions. + +We’ll review your PR and provide feedback. If everything looks good, we will merge it! + + +## Running tests + +Redis Operator has both unit and behavioral (End To End) tests. Please refer to the [operator guide](./docs/operator-guide/toc.md), [developer guide](./docs/developer-guide.md) +and [test guide](./test/README.md) for more information + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fdeb75a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# Build the manager binary +FROM golang:1.24.0 as builder + +WORKDIR /workspace +# Copy the Go Modules manifests +COPY go.mod go.mod +COPY go.sum go.sum +# cache deps before building and copying source so that we don't need to re-download as much +# and so that source changes don't invalidate our downloaded layer +RUN go mod download + +# Copy the go source +COPY cmd/ cmd/ +COPY api/ api/ +COPY v1alpha1client/ v1alpha1client/ +COPY v1client/ v1client/ +COPY controllers/ controllers/ +COPY internal/ internal/ + +# Build +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o manager ./cmd/ + +# Use Red Hat Universal Base Image 9 Minimal to package the manager binary. +# Refer to https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image for more details. +FROM redhat/ubi9-minimal:9.1.0 + +LABEL org.opencontainers.image.source="https://github.com/inditextech/redisoperator" + +RUN microdnf update -y && microdnf install procps -y + +WORKDIR / +COPY --from=builder /workspace/manager . +USER 65532:65532 +ENTRYPOINT ["/manager"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..94ac91b --- /dev/null +++ b/Makefile @@ -0,0 +1,590 @@ + + +.DEFAULT_GOAL := help +SHELL := /bin/bash + +name := redis-cluster-operator +VERSION := 1.3.0 +package := github.com/inditextech/$(name) +# Image URL to use for building/pushing image targets when using `pro` deployment profile. +IMG ?= redis-operator:$(VERSION) +IMG_WEBHOOK ?= redis-operator-webhook:$(VERSION) + +# CN for the webhook certificate +CN ?= inditex.com + +# ............................................................................. +# DONT TOUCH THIS SECTION +# ............................................................................. +# Build specific information +COMMIT?=$(shell git rev-parse HEAD) +DATE?=$(shell date +%FT%T%z) + +# Go related variables. +GO = go +GOFMT = gofmt +GOLINT = staticcheck + +# go source files, ignore vendor directory +SRC = $(shell find . -path ./vendor -prune -o -name '*.go' -print) +M = $(shell printf "\033[34;1m▶\033[0m") + +MODULE=$(shell go list -m) +GO_COMPILE_FLAGS='-X $(MODULE)/cmd/server.GitCommit=$(COMMIT) -X $(MODULE)/cmd/server.BuildDate=$(DATE) -X $(MODULE)/cmd/server.VersionBuild=$(VERSION)' + +# Test coverage files +TEST_COVERAGE_PROFILE_OUTPUT = ".local/coverage.out" +TEST_REPORT_OUTPUT = ".local/test_report.ndjson" +TEST_REPORT_OUTPUT_E2E = ".local/test_report_e2e.ndjson" +# ............................................................................. +# / END SECTION +# ............................................................................. + +# ............................................................................. +# / IMPORTANT VARIABLES +# ............................................................................. +# CHANNELS define the bundle channels used in the bundle. +# Add a new line here if you would like to change its default config. (E.g CHANNELS = "preview,fast,stable") +# To re-generate a bundle for other specific channels without changing the standard setup, you can: +# - use the CHANNELS as arg of the bundle target (e.g make bundle CHANNELS=preview,fast,stable) +# - use environment variables to overwrite this value (e.g export CHANNELS="preview,fast,stable") +ifneq ($(origin CHANNELS), undefined) +BUNDLE_CHANNELS := --channels=$(CHANNELS) +endif + +# DEFAULT_CHANNEL defines the default channel used in the bundle. +# Add a new line here if you would like to change its default config. (E.g DEFAULT_CHANNEL = "stable") +# To re-generate a bundle for any other default channel without changing the default setup, you can: +# - use the DEFAULT_CHANNEL as arg of the bundle target (e.g make bundle DEFAULT_CHANNEL=stable) +# - use environment variables to overwrite this value (e.g export DEFAULT_CHANNEL="stable") +ifneq ($(origin DEFAULT_CHANNEL), undefined) +BUNDLE_DEFAULT_CHANNEL := --default-channel=$(DEFAULT_CHANNEL) +endif +BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL) + +# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) +ifeq (,$(shell go env GOBIN)) +GOBIN=$(shell go env GOPATH)/bin +else +GOBIN=$(shell go env GOBIN) +endif + +# BUNDLE_IMG defines the image:tag used for the bundle. +# You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=/:) +BUNDLE_IMG ?= controller-bundle:$(VERSION) + +# Image URL to use for building/pushing image targets when using `dev` deployment profile. +# We always use version 0.1.0 for this purpose. +IMG_DEV ?= redis-operator:0.1.0-dev +IMG_DEV_WEBHOOK ?= redis-operator-webhook:0.1.0-dev + +# Image URL to use for deploying the operator pod when using `debug` deployment profile. +# A base golang image is used with Delve installed, in order to be able to remotely debug the manager. +IMG_DEBUG ?= delve:1.24.0 + +# Set the Operator SDK version to use. By default, what is installed on the system is used. +# This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit. +OPERATOR_SDK_VERSION ?= v1.37.0 + +CHANNELS ?= alpha,beta + +# Image REF in bundle image +# Can be overwritten with make bundle IMAGE_REF=/: +IMAGE_REF ?= $(IMG) + +# Namespace to deploy to. +# Takes the active namespace. If no namespace active, then `redis-operator` is used by default. +NAMESPACE ?= $(shell kubectl config view --minify --output 'jsonpath={..namespace}'; echo) +ifeq ($(NAMESPACE), ) + NAMESPACE := redis-operator +endif + +WEBHOOK_NAMESPACE := redis-operator-webhook + +# Allowed deploying profiles. +PROFILES := dev debug pro + +# Deploying profile used to generate the manifest files to deploy the operator. +# The files to generate the manifests are kustomized from the directory config/deploy-profile/. +# By default, `dev` profile is used. It can be overwritten (e.g. make process-manifests PROFILE=debug). +# Only the values defined in `PROFILES` are allowed. +PROFILE ?= dev +ifeq ($(filter $(PROFILE),$(PROFILES)), ) +$(error The profile specified ($(PROFILE)) is not supported) +endif +# ............................................................................. +# / END SECTION +# ............................................................................. + +# ............................................................................. +# PUBLIC TARGETS +# ............................................................................. + +# The help target prints out all targets with their descriptions organized +# beneath their categories. The categories are represented by '##@' and the +# target descriptions by '##'. The awk commands is responsible for reading the +# entire set of makefiles included in this invocation, looking for lines of the +# file as xyz: ## something, and then pretty-format the target and help. Then, +# if there's a line with ##@ something, that gets pretty-printed as a category. +# More info on the usage of ANSI control characters for terminal formatting: +# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters +# More info on the awk command: +# http://linuxcommand.org/lc3_adv_awk.php + +.PHONY: help +help: ## Display this help. + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +##@ General +.PHONY: verify +verify: deps tidy checkfmt fmt lint vet build test-sonar ## Check the code + $(info $(M) checking code...) + +deps: ## Installs dependencies + $(info $(M) Installing dependencies...) + GONOSUMDB=honnef.co/go/* GONOPROXY=honnef.co/go/* $(GO) install honnef.co/go/tools/cmd/staticcheck@v0.5.1 + +.PHONY: version +version:: ## Print the current version of the project. + @echo "$(VERSION)" + +.PHONY: version-next +version-next:: ## Bump to next development version + @echo "Bumping to next development version" + sed -ri 's/(.*)(VERSION\s*:=\s*)([0-9]+)\.([0-9]+)\.([0-9]+)(.*)/echo "\1\2\3.$$((\4+1)).0-SNAPSHOT\6"/ge' Makefile + +.PHONY: version-set +version-set:: ## Set the project version to the given version, using the NEW_VERSION environment variable + @echo "Setting version to $(NEW_VERSION)" + sed -ri 's/(.*)(VERSION\s*:=\s*)([0-9]+\.[0-9]+\.[0-9]+)(-SNAPSHOT)(.*)/echo "\1\2$(NEW_VERSION)\5"/ge' Makefile + +.PHONY: checkfmt +checkfmt: ## Check format validation + $(info $(M) running gofmt checking code style...) + @fmtRes=$$($(GOFMT) -d $(SRC)); \ + if [ -n "$${fmtRes}" ]; then \ + echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ + echo "Please ensure you are using $$($(GO) version) for formatting code."; \ + exit 1; \ + fi + +.PHONY: fmt +fmt: ## Run gofmt on all source files + $(info $(M) running go fmt...) + $(GOFMT) -l -w $(SRC) + +.PHONY: lint +lint: deps ## Run golint + $(info $(M) running staticcheck...) + $(GOLINT) ./... + +.PHONY: vet +vet: ## Run go vet + $(info $(M) running go vet...) + $(GO) vet ./... + +.PHONY: clean +clean: ## Clean the build artifacts and Go cache + $(info $(M) cleaning generated files...) + rm -rf ./target + rm -rf ./bin + rm -rf ./bundle + rm -f bundle.Dockerfile + rm -rf ./deployment + $(GO) clean --modcache + +##@ Development +manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. + $(CONTROLLER_GEN) rbac:roleName=redis-operator-role crd:maxDescLen=0 webhook paths="./..." output:crd:artifacts:config=deployment output:rbac:artifacts:config=deployment + +generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. + $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." + +##@ Build +.PHONY: build +build: ## Build program binary + $(info $(M) building executable...) + $(GO) build \ + -ldflags $(GO_COMPILE_FLAGS) \ + -tags release \ + -o bin/manager \ + ./cmd/main.go + +.PHONY: update-packages +update-packages: ## Run go get -u + $(info $(M) running go get -u...) + $(GO) get -u + + +.PHONY: tidy +tidy: ## Run go mod tidy + $(info $(M) running go mod tidy...) + $(GO) mod tidy + +.PHONY: run +run: ## Execute the program locally + $(info $(M) Running app...) + CONFIGMAP_PATH=./config_test/configmap.local.yml SECRET_PATH=./config_test/secrets.local.yml $(GO) run ./cmd/main.go + +dev-build: ## Build manager binary. + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o bin/manager ./cmd/main.go + +dev-build-webhook: ## Build webhook binary. + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o bin/webhook ./cmd/webhook/main.go + +docker-build: test ## Build docker image with the manager (uses `${IMG}` image name). + docker build -t ${IMG} . + +docker-build-webhook: test ## Build docker image with the manager (uses `${IMG_WEBHOOK}` image name). + docker build -t ${IMG_WEBHOOK} -f webhook/Dockerfile . + +docker-push: ## Push docker image with the manager (uses `${IMG}` image name). + docker push ${IMG} + +docker-push-webhook: ## Push docker image with the webhook (uses `${IMG_WEBHOOK}` image name). + docker push ${IMG_WEBHOOK} + +dev-docker-build: test ## Build docker image with the manager for development (uses `${IMG_DEV}` image name). + docker build -t ${IMG_DEV} . + +dev-docker-build-webhook: test ## Build docker image with the webhook for development (uses `${IMG_DEV_WEBHOOK}` image name). + docker build -t ${IMG_DEV_WEBHOOK} -f webhook/Dockerfile . + +dev-docker-push: ## Push docker image with the manager for development (uses `${IMG_DEV}` image name). + docker push ${IMG_DEV} + +dev-docker-push-webhook: ## Push docker image with the webhook for development (uses `${IMG_DEV_WEBHOOK}` image name). + docker push ${IMG_DEV_WEBHOOK} + +debug-docker-build: ## Build docker image for debugging from debug.Dockerfile (uses `${IMG_DEBUG}` image name). + docker build -t ${IMG_DEBUG} -f debug.Dockerfile . + +debug-docker-push: ## Push docker image for debugging from debug.Dockerfile (uses `${IMG_DEBUG}` image name). + docker push ${IMG_DEBUG} + + +##@ Deployment +install: process-manifests-crd ## Install CRD into the K8s cluster specified by kubectl default context (Kustomize is installed if not present). + kubectl apply -f deployment/redis.inditex.com_redisclusters.yaml + +uninstall: process-manifests-crd ## Uninstall CRD from the K8s cluster specified by kubectl default context (Kustomize is installed if not present). + kubectl delete -f deployment/redis.inditex.com_redisclusters.yaml + +process-manifests: kustomize manifests ## Generate the kustomized yamls into the `deployment` directory to deploy the manager. + @echo "Generating manager deploying manifest files using ${PROFILE} profile" + cp config/deploy-profiles/${PROFILE}/kustomization.yaml config/deploy-profiles/${PROFILE}/kustomization.yaml.orig && \ + (cd config/deploy-profiles/${PROFILE} && \ + $(KUSTOMIZE) edit set namespace ${NAMESPACE}) && \ + if [ ${PROFILE} == "dev" ]; then \ + (cd config/deploy-profiles/${PROFILE} && \ + $(KUSTOMIZE) edit set image redis-operator=${IMG_DEV}); \ + $(KUSTOMIZE) build config/deploy-profiles/dev > deployment/deployment.yaml; \ + $(SED) -i 's/watch-namespace/$(NAMESPACE)/' deployment/deployment.yaml; \ + elif [ ${PROFILE} == "debug" ]; then \ + (cd config/deploy-profiles/${PROFILE} && \ + $(KUSTOMIZE) edit set image /redis-operator=${IMG_DEBUG}); \ + $(KUSTOMIZE) build config/deploy-profiles/debug > deployment/deployment.yaml; \ + $(SED) -i 's/watch-namespace/$(NAMESPACE)/' deployment/deployment.yaml; \ + elif [ ${PROFILE} == "pro" ]; then \ + (cd config/deploy-profiles/${PROFILE} && \ + $(KUSTOMIZE) edit set image redis-operator=${IMG}); \ + $(KUSTOMIZE) build config/deploy-profiles/pro > deployment/deployment.yaml; \ + fi + rm config/deploy-profiles/${PROFILE}/kustomization.yaml + mv config/deploy-profiles/${PROFILE}/kustomization.yaml.orig config/deploy-profiles/${PROFILE}/kustomization.yaml + @echo "Manifest generated successfully" + +process-manifests-crd: kustomize manifests ## Generate the kustomized yamls into the `deployment` directory to deploy the CRD. + @echo "Generating CRD deploying manifest files" + if [ ! -f certs/ca.crt ]; then make generate-ca-cert; fi + $(eval CA_CERT := $(shell cat certs/ca.crt | base64 -w 0)) + cp ./config/crd/patches/webhook_in_redisclusters.yaml ./config/crd/patches/webhook_in_redisclusters.yaml.orig + cat ./config/crd/patches/webhook_in_redisclusters.yaml.tpl | sed "s|WEBHOOK_CA_CERT|${CA_CERT}|g" > ./config/crd/patches/webhook_in_redisclusters.yaml + $(KUSTOMIZE) build config/crd > deployment/redis.inditex.com_redisclusters.yaml + mv ./config/crd/patches/webhook_in_redisclusters.yaml.orig ./config/crd/patches/webhook_in_redisclusters.yaml + @echo "CRD manifest generated successfully" + +process-manifests-webhook: kustomize manifests ## Generate the kustomized yamls into the `deployment` directory to deploy the webhook. + @echo "Generating webhook deploying manifest files using ${PROFILE} profile" + if [ ! -f certs/ca.crt ]; then make generate-ca-cert; fi + + @echo "Generating certificates..." + openssl req -newkey rsa:2048 -nodes -keyout certs/server.key \ + -subj "/C=AU/CN=${WEBHOOK_NAMESPACE}.${CN}" \ + -out certs/server.csr + openssl x509 -req \ + -extfile <(printf "subjectAltName=DNS:redis-operator-webhook-service.${WEBHOOK_NAMESPACE}.svc,DNS:redis-operator-webhook-service.${WEBHOOK_NAMESPACE}.svc.cluster.local") \ + -in certs/server.csr \ + -CA certs/ca.crt -CAkey certs/ca.key -CAcreateserial \ + -out certs/server.crt \ + -days 365 + + @echo ">> Generating kube secrets..." + kubectl create secret tls redis-operator-webhook-service-cert \ + --cert=certs/server.crt \ + --key=certs/server.key \ + --dry-run=client -o yaml \ + > ./config/webhook/bases/secret.yaml + + cp config/webhook/kustomization.yaml config/webhook/kustomization.yaml.orig && \ + (cd config/webhook && \ + $(KUSTOMIZE) edit set namespace ${WEBHOOK_NAMESPACE}) && \ + if [ ${PROFILE} == "dev" ]; then \ + (cd config/webhook && \ + $(KUSTOMIZE) edit set image redis-operator-webhook=${IMG_DEV_WEBHOOK};) \ + elif [ ${PROFILE} == "pro" ]; then \ + (cd config/webhook && \ + $(KUSTOMIZE) edit set image redis-operator-webhook=${IMG_WEBHOOK}); \ + $(KUSTOMIZE) build config/deploy-profiles/pro > deployment/deployment.yaml; \ + fi + $(KUSTOMIZE) build config/webhook > deployment/webhook.yaml + rm config/webhook/kustomization.yaml + mv config/webhook/kustomization.yaml.orig config/webhook/kustomization.yaml + rm config/webhook/bases/secret.yaml + + @echo "Webhook manifest generated successfully" + +generate-ca-cert: + @echo "Generating CA certificates" + mkdir -p certs + openssl genrsa -out certs/ca.key 2048 + openssl req -x509 -new -nodes -key certs/ca.key -days 3650 -out certs/ca.crt -subj "/CN=${WEBHOOK_NAMESPACE}.${CN}" + +deploy: process-manifests ## Deploy the operator. + kubectl apply -f deployment/deployment.yaml + +deploy-webhook: process-manifests-webhook ## Deploy the webhook into the K8s cluster specified by kubectl default context. + kubectl apply -f deployment/webhook.yaml + +undeploy: process-manifests ## Delete the operator deployed. + kubectl delete -f deployment/deployment.yaml + +undeploy-webhook: process-manifests-webhook ## Delete the webhook into the K8s cluster specified by kubectl default context. + kubectl delete -f deployment/webhook.yaml + +OPERATOR=$(shell kubectl -n ${NAMESPACE} get po -l='control-plane=redis-operator' -o=jsonpath='{.items[0].metadata.name}') +dev-deploy: ## Build a new manager binary, copy the file to the operator pod and run it. + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -gcflags="all=-N -l" -o bin/manager ./cmd/main.go + kubectl wait -n ${NAMESPACE} --for=condition=ready pod -l control-plane=redis-operator + kubectl cp ./bin/manager $(OPERATOR):/manager -n ${NAMESPACE} + kubectl exec -it po/$(OPERATOR) -n ${NAMESPACE} exec /manager + +debug: ## Build a new manager binary, copy the file to the operator pod and run it in debug mode (listening on port 40000 for Delve connections). + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -gcflags="all=-N -l" -o bin/manager ./cmd/main.go + kubectl wait -n ${NAMESPACE} --for=condition=ready pod -l control-plane=redis-operator + kubectl cp ./bin/manager $(OPERATOR):/manager -n ${NAMESPACE} + kubectl exec -it po/$(OPERATOR) -n ${NAMESPACE} -- dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec /manager --continue + +port-forward: ## Port forwarding of port 40000 for debugging the manager with Delve. + kubectl port-forward pods/$(OPERATOR) 40000:40000 -n ${NAMESPACE} + +delete-operator: ## Delete the operator pod (redis-operator) in order to have a new clean pod created. + kubectl delete pod $(OPERATOR) -n ${NAMESPACE} + +dev-apply-rdcl: ## Apply the sample Redis Cluster manifest. + $(KUSTOMIZE) build config/samples | $(SED) 's/namespace: redis-operator/namespace: ${NAMESPACE}/' | kubectl apply -f - + +dev-delete-rdcl: ## Delete the sample Redis Cluster manifest. + $(KUSTOMIZE) build config/samples | $(SED) 's/namespace: redis-operator/namespace: ${NAMESPACE}/' | kubectl delete -f - + +dev-apply-all: dev-docker-build dev-docker-push install process-manifests deploy dev-apply-rdcl + +deploy-aks: install deploy-aks-manifests dev-apply-rdcl + +##@ Tools + +## Location to install dependencies to +LOCALBIN ?= $(shell pwd)/bin +$(LOCALBIN): ## Ensure that the directory exists + mkdir -p $(LOCALBIN) + +## Tool Binaries +KUSTOMIZE ?= $(LOCALBIN)/kustomize +CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen +ENVTEST ?= $(LOCALBIN)/setup-envtest + +## Tool Versions +KUSTOMIZE_VERSION ?= v5.3.0 +CONTROLLER_TOOLS_VERSION ?= v0.17.2 + +KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" +.PHONY: kustomize +kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. +$(KUSTOMIZE): + mkdir -p $(LOCALBIN) + curl -s $(KUSTOMIZE_INSTALL_SCRIPT) | bash -s -- $(subst v,,$(KUSTOMIZE_VERSION)) $(LOCALBIN) + +.PHONY: controller-gen +controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. +$(CONTROLLER_GEN): + GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) + +.PHONY: envtest +envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. +$(ENVTEST): + GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest + + +##@ Troubleshooting + +REDIS_PODS=$(shell kubectl get po -n ${NAMESPACE} --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' ) +redis-check: ## Check information in pods related to redis cluster. + for POD in $(REDIS_PODS); do kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli --cluster check localhost:6379; done + +redis-nodes: ## Check nodes of redis cluster. + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli CLUSTER NODES | sort; done + +redis-slots: ## Check slots of redis cluster. + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli CLUSTER SLOTS | sort; done + +redis-info: ## Check info of redis cluster + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli CLUSTER INFO | sort; done + +redis-forget: ## Forget nodes of redis cluster + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli CLUSTER FORGET $(nodeid); done + +redis-benchmark: # Benckmark a redis cluster + if [ "$(WORKSPACE)" == "default" ]; then \ + kubectl exec -it -n $(NSTEST) redis-cluster-0 -- redis-benchmark -c 100 -n 100000 -t set,get; \ + else \ + if [ -z "$(REDIS_POD)" ]; then \ + echo "ERROR:: No pods running to benchmark, starts your cluster to use this feature."; \ + else \ + kubectl exec -it $(REDIS_POD) -n ${NAMESPACE} -- redis-benchmark -c 200 -n 100000 -d 100 -P 20 -r 10 -t set,get,lpush; \ + fi \ + fi + +redis-fix: ## Fix redis cluster + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli --cluster fix localhost:6379; done + +redis-rebalance: ## Rebalance slots of redis cluster + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli --cluster rebalance --cluster-use-empty-masters localhost:6379; done + +args = `arg="$(filter-out $@,$(MAKECMDGOALS))" && echo $${arg:-${1}}` + +redis-forget-manually: + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli CLUSTER FORGET $(call args, $(nodeid)); done + +REDIS_POD=$(shell kubectl get po -n ${NAMESPACE} --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head -n 1) + +.SILENT: +redis-insert: + rm -f /tmp/data.txt + for ((i=1;i<=100;i++)); do echo "set $${RANDOM}$${RANDOM} $${RANDOM}$${RANDOM}" >> /tmp/data.txt; done + if [ "$(WORKSPACE)" == "test" ]; then \ + cat /tmp/data.txt | kubectl exec -i -n $(NSTEST) redis-cluster-0 -- redis-cli -c; \ + else \ + if [ -z "$(REDIS_POD)" ]; then \ + echo "ERROR:: No pods running to insert data, starts your cluster to use this feature."; \ + else \ + cat /tmp/data.txt | kubectl exec -i $(REDIS_POD) -n ${NAMESPACE} -- redis-cli -c; \ + fi \ + fi + + +redis-save: + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli SAVE; kubectl exec $${POD} -n ${NAMESPACE} -- cat /data/dump.rdb > /tmp/$${POD}-dump.rdb; kubectl exec $${POD} -n ${NAMESPACE} -- rm /data/dump.rdb; done + +redis-flushall: + for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli FLUSHALL; done + +redis-restore: + for POD in $(REDIS_PODS); do echo $${POD}; kubectl cp /tmp/$${POD}-dump.rdb $${POD}:/data/dump.rdb -n ${NAMESPACE}; done + +redis-aof-disable: + kubectl patch rdcl redis-cluster -n ${NAMESPACE} --type='json' -p='[{"op": "replace", "path": "/spec/config", "value":"maxmemory 200mb\nmaxmemory-samples 5\nmaxmemory-policy allkeys-lru\nappendonly no\nprotected-mode no\nloadmodule /usr/lib/redis/modules/redisgraph.so"}]' | for POD in $(REDIS_PODS); do echo $${POD}; kubectl exec -it $${POD} -n ${NAMESPACE} -- redis-cli SHUTDOWN; done | sleep 5 + +redis-aof-enable: + kubectl patch rdcl redis-cluster -n ${NAMESPACE} --type='json' -p='[{"op": "replace", "path": "/spec/config", "value":"maxmemory 200mb\nmaxmemory-samples 5\nmaxmemory-policy allkeys-lru\nappendonly yes\nprotected-mode no\nloadmodule /usr/lib/redis/modules/redisgraph.so"}]' + + +##@ Integration with OLM + +.PHONY: operator-sdk +OPERATOR_SDK ?= $(LOCALBIN)/operator-sdk +operator-sdk: ## Download operator-sdk locally if necessary. +ifeq (,$(wildcard $(OPERATOR_SDK))) +ifeq (, $(shell which operator-sdk 2>/dev/null)) + @{ \ + set -e ;\ + mkdir -p $(dir $(OPERATOR_SDK)) ;\ + OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \ + curl -sSLo $(OPERATOR_SDK) https://github.com/operator-framework/operator-sdk/releases/download/$(OPERATOR_SDK_VERSION)/operator-sdk_$${OS}_$${ARCH} ;\ + chmod +x $(OPERATOR_SDK) ;\ + } +else +OPERATOR_SDK = $(shell which operator-sdk) +endif +endif + +.PHONY: bundle +bundle: kustomize manifests ## Generate the files for bundle. + rm -rf bundle/manifests/* + rm -rf bundle/metadata/* + $(OPERATOR_SDK) generate kustomize manifests -q + cd config/manager && $(KUSTOMIZE) edit set image redis-operator=$(IMAGE_REF) + $(KUSTOMIZE) build config | $(OPERATOR_SDK) generate bundle -q --overwrite --channels $(CHANNELS) --version $(VERSION) $(BUNDLE_METADATA_OPTS) + $(OPERATOR_SDK) bundle validate ./bundle + +.PHONY: bundle-build +bundle-build: ## Build the bundle image. + docker build -f bundle.Dockerfile -t $(BUNDLE_IMG) . + +bundle-push: ## Push the bundle image. + docker push $(BUNDLE_IMG) + + +##@ Test +ginkgo: + go install github.com/onsi/ginkgo/v2/ginkgo + +.PHONY: test-e2e +test-e2e: process-manifests-crd ginkgo ## Execute e2e application test + $(info $(M) running e2e tests...) + $(info $(M) generating sonar report...) + $(eval TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME=$(shell dirname $(TEST_COVERAGE_PROFILE_OUTPUT))) + $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT_E2E))) + mkdir -p $(TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME) $(TEST_REPORT_OUTPUT_DIRNAME) + ginkgo ./test/e2e -cover -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -json > $(TEST_REPORT_OUTPUT_E2E) + +.PHONY: test-e2e-cov +test-e2e-cov: process-manifests-crd ginkgo ## Execute e2e application test + $(info $(M) generating coverage report...) + $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT))) + mkdir -p $(TEST_REPORT_OUTPUT_DIRNAME) + ginkgo ./test/e2e -vv -cover -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -covermode=count OPERATOR_IMAGE=$(IMG_DEV) + + +.PHONY: test-sonar +test-sonar: ## Execute the application test for Sonar (coverage + test report) + $(info $(M) generating sonar report...) + $(eval TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME=$(shell dirname $(TEST_COVERAGE_PROFILE_OUTPUT))) + $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT))) + mkdir -p $(TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME) $(TEST_REPORT_OUTPUT_DIRNAME) + $(GO) test ./controllers/ ./internal/*/ -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -json > $(TEST_REPORT_OUTPUT) + +.PHONY: test-cov +test-cov: ## Execute the application test with coverage + $(info $(M) generating coverage report...) + $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT))) + mkdir -p $(TEST_REPORT_OUTPUT_DIRNAME) + $(GO) test ./controllers/ ./internal/*/ ./api/*/ -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -covermode=count + +# Integration tests +SED = $(shell which sed) + +int-test-generate: ## Generate manifests and metadata files. + cd config/int-test; $(KUSTOMIZE) edit set image redis-operator=${IMG}; \ + $(KUSTOMIZE) edit set namespace $(NAMESPACE); $(KUSTOMIZE) build > tests.yaml + +int-test-clean: ## Clear manifests and metadata files. + -kubectl delete -f config/int-test/tests.yaml + -rm config/int-test/tests.yaml + +int-test-apply: ## Apply manifests and metadata files. + $(KUSTOMIZE) build config/crd/ | kubectl apply -f - + sleep 3 # We need to sleep for a bit to make sure the CRDs are registered before we apply the test + kubectl apply -f config/int-test/tests.yaml + +# .PHONY=int-test +# int-test: kustomize int-test-generate int-test-apply ## Generate manifests and metadata, then apply generated files. diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000..336cee5 --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,2021 @@ +Redis Operator + +©2025 Inditex. All Rights Reserved. See LICENSE.txt for license information. + +NOTICES: +-------- + +This document includes a list of open source components used in Redis Operator, including those that have been modified. + +-------- + +## Go + +This product contains 'Go' by Go. + +The Go programming language + +* HOMEPAGE: + * https://go.dev + +* LICENSE: BSD 3-Clause "New" or "Revised" License + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +--- + +## go-logr/logr + +This product contains 'go-logr/logr' by go-logr. + +A simple logging interface for Go + +* HOMEPAGE: + * https://github.com/go-logr/logr + +* LICENSE: Apache License 2.0 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## joho/godotenv + +This product contains 'joho/godotenv' by John Barton. + +A Go port of Ruby's dotenv library (Loads environment variables from .env files) + +* HOMEPAGE: + * http://godoc.org/github.com/joho/godotenv + +* LICENSE: MIT License + + + +--- + +## k8s.io/api + +This product contains 'k8s.io/api' by Kubernetes. + +The canonical location of the Kubernetes API definition. + +* HOMEPAGE: + * https://github.com/kubernetes/api + +* LICENSE: Apache License 2.0 + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## k8s.io/apiextensions-apiserver + +This product contains 'k8s.io/apiextensions-apiserver' by Kubernetes. + +API server for API extensions like CustomResourceDefinitions + +* HOMEPAGE: + * https://github.com/kubernetes/apiextensions-apiserver + +* LICENSE: Apache License 2.0 + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## k8s.io/apimachinery + +This product contains 'k8s.io/apimachinery' by Kubernetes. + +* HOMEPAGE: + * https://github.com/kubernetes/apimachinery + +* LICENSE: Apache License 2.0 + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## k8s.io/client-go + +This product contains 'k8s.io/client-go' by Kubernetes. + +Go client for Kubernetes. + +* HOMEPAGE: + * https://github.com/kubernetes/client-go + +* LICENSE: Apache License 2.0 + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## k8s.io/kubectl + +This product contains 'k8s.io/kubectl' by Kubernetes. + +Issue tracker and mirror of kubectl code + +* HOMEPAGE: + * https://github.com/kubernetes/kubectl + +* LICENSE: Apache License 2.0 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## k8s.io/utils + +This product contains 'k8s.io/utils' by Kubernetes. + +Non-Kubernetes-specific utility libraries which are consumed by multiple projects. + +* HOMEPAGE: + * https://github.com/kubernetes/utils + +* LICENSE: Apache License 2.0 + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## onsi/ginkgo + +This product contains 'onsi/ginkgo' by Onsi Fakhouri. + +A Modern Testing Framework for Go + +* HOMEPAGE: + * http://onsi.github.io/ginkgo/ + +* LICENSE: MIT License + +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--- + +## onsi/gomega + +This product contains 'onsi/gomega' by Onsi Fakhouri. + +Ginkgo's Preferred Matcher Library + +* HOMEPAGE: + * http://onsi.github.io/gomega/ + +* LICENSE: MIT License + +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--- + +## redis/go-redis + +This product contains 'redis/go-redis' by Redis. + +Redis Go client + +* HOMEPAGE: + * https://redis.uptrace.dev + +* LICENSE: BSD 2-Clause "Simplified" License + +Copyright (c) 2013 The github.com/redis/go-redis Authors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +--- + +## sigs.k8s.io/controller-runtime + +This product contains 'sigs.k8s.io/controller-runtime' by Kubernetes SIGs. + +Repo for the controller-runtime subproject of kubebuilder (sig-apimachinery) + +* HOMEPAGE: + * https://github.com/kubernetes-sigs/controller-runtime + +* LICENSE: Apache License 2.0 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- + +## sirupsen/logrus + +This product contains 'sirupsen/logrus' by Simon Eskildsen. + +Structured, pluggable logging for Go. + +* HOMEPAGE: + * https://github.com/sirupsen/logrus + +* LICENSE: MIT License + +The MIT License (MIT) + +Copyright (c) 2014 Simon Eskildsen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +--- + +## stretchr/testify + +This product contains 'stretchr/testify' by Stretchr, Inc.. + +A toolkit with common assertions and mocks that plays nicely with the standard library + +* HOMEPAGE: + * https://github.com/stretchr/testify + +* LICENSE: MIT License + +MIT License + +Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +## x/exp + +This product contains 'x/exp' by Go. + +[mirror] Experimental and deprecated packages + +* HOMEPAGE: + * https://golang.org/x/exp + +* LICENSE: BSD 3-Clause "New" or "Revised" License + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + diff --git a/README.md b/README.md index 02b2e50..fa836fb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,36 @@ -# Redis Operator +# ![Redis Operator icon](docs/images/badge.png) Redis Operator for Kubernetes -Redis Operator +The easiest way to deploy and manage a Redis cluster in Kubernetes implementing the [operator pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/). + +This operator implements a controller that extends the Kubernetes API allowing to seamlessly deploy a Redis cluster, monitor the deployed resources implementing a reconciliation loop, logging events, manage cluster scaling and recover from errors. + +Redis operator is built using [kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) and [operator-sdk](https://github.com/operator-framework/operator-sdk). + +## Features + +* Redis cluster creation +* Redis cluster fixing +* Slots allocation +* PVC +* Sidecar pods support (e.g. custom metrics applications) +* Persistence +* RedisGraph support + +## Documentation + +Refer to [operator guide](./docs/operator-guide/toc.md) to have an overview of the main Redis configuration and management options, and a troubleshooting guide. + +If you are a developer, you'll find interesting information in the [developer guide](./docs/developer-guide.md). + +## Versions + +* Go version: v1.24.0 +* Operator SDK version: v1.37.0 + +## License + +Copyright 2025 Inditex. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..a047d95 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,42 @@ +# Security Policy + +## Reporting a Vulnerability + +If you discover a security vulnerability in this project, please report it to us responsibly. We take security seriously and appreciate your help in keeping this project safe. + +Please **do not** disclose the vulnerability publicly until we have had a chance to investigate and address it. + +To report a vulnerability, please email us at: +[insert contact email or secure communication method] + +If you prefer a different communication method, please let us know, and we will accommodate it. + +## Security Updates + +We are committed to fixing any security vulnerabilities discovered in the project. Once a report is received, we will: + +1. Acknowledge the report within [insert timeframe, e.g., 48 hours]. +2. Work to resolve the issue and release an appropriate patch. +3. Publicly disclose the details of the fix once it is available, while following responsible disclosure practices. + +We recommend that all users keep their project dependencies up to date to minimize the risk of vulnerabilities. + +## Security Best Practices + +We recommend that contributors follow these security best practices when developing, reviewing, or maintaining the project: + +- Avoid exposing sensitive data in code or logs (e.g., passwords, tokens, and API keys). +- Use strong encryption algorithms and libraries for handling sensitive data. +- Regularly update dependencies to ensure that known vulnerabilities are patched. +- Follow established security practices in the relevant technology stack. +- Review and audit code changes with an emphasis on security. +- Avoid using unsafe or deprecated functions and libraries. + +## Code of Conduct Compliance + +As part of the responsibility for maintaining a secure environment, we ask that all contributors adhere to the project's Code of Conduct, ensuring that contributions do not introduce security risks or malicious behavior into the project. + +## Attribution + +This Security Policy is inspired by the [GitHub Security Policy Template](https://docs.github.com/en/github/managing-security-vulnerabilities/creating-a-security-policy) and other open-source best practices. + diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..3960f10 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,46 @@ +# Support + +Welcome to the support section of our open-source project! We’re excited to have you involved and want to ensure you have the best possible experience while using or contributing to this project. + +## How to Get Help + +### 1. **Check the Documentation** +Before asking for help, please review the documentation provided for this project. It includes installation instructions, usage guides, and API documentation. The documentation is available at: +- [Documentation Link](./docs/) +- [Wikis](https://github.com/inditextech/redisoperator/wiki) + +### 2. **Search the Issues** +Often, your issue might have already been reported and solved by others. Please search the issues section of this repository to see if your problem has already been discussed: +- [Issues Section](https://github.com/inditextech/redisoperator/issues) + +### 3. **Community and Discussion** +If you didn’t find your answer in the documentation or the issues, you can ask for help or discuss the project in our community channels: +- [Discussion Forum / Slack / Discord / Gitter](link-to-community) +- [StackOverflow tag](your-stackoverflow-tag) + + +## Contributing to the Project + +We love contributions from the community! If you'd like to contribute to this project or you enconter a bug, please review our [contribution guide](./CONTRIBUTING.md). + + +## FAQ (Frequently Asked Questions) + +- How do I install the project? + +Please refer to the [developer guide](./docs/developer-guide.md). + +- How do I contribute to the documentation? + +You can contribute to the docs the same way as the code. Please see the [contribution guide](./CONTRIBUTING.md). + +- What is the project’s license? + +This project is licensed under the Apache 2.0 License. + + + +## Contact +For general inquiries or additional support, you can contact us at: + +Email: oso@inditex.com diff --git a/api/v1/groupversion_info.go b/api/v1/groupversion_info.go new file mode 100644 index 0000000..d0b00ab --- /dev/null +++ b/api/v1/groupversion_info.go @@ -0,0 +1,20 @@ +// Package v1 contains API Schema definitions for the redis v1 API group. +// +kubebuilder:object:generate=true +// +groupName=redis.inditex.com +package v1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects. + GroupVersion = schema.GroupVersion{Group: "redis.inditex.com", Version: "v1"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme. + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/api/v1/rediscluster_conversion.go b/api/v1/rediscluster_conversion.go new file mode 100644 index 0000000..5df2b1a --- /dev/null +++ b/api/v1/rediscluster_conversion.go @@ -0,0 +1,4 @@ +package v1 + +// Hub marks this type as a conversion hub. +func (*RedisCluster) Hub() {} diff --git a/api/v1/rediscluster_types.go b/api/v1/rediscluster_types.go new file mode 100644 index 0000000..0000ac7 --- /dev/null +++ b/api/v1/rediscluster_types.go @@ -0,0 +1,253 @@ +package v1 + +import ( + appsv1 "k8s.io/api/apps/v1" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// StatusUpgrading: A RedisCluster enters this status when when: +// - there are differences between the existing configuration in the configmap +// and the configuration of the RedisCluster object merged with the default configuration set in the code. +// - there is a mismatch between the StatefulSet object labels and the RedisCluster Spec labels. +// - a mismatch exists between RedisCluster resources defined under spec and effective resources defined in the StatefulSet. +// - the images set in RedisCluster under spec and the image set in the StatefulSet object are not the same. +// The cluster is upgraded, reconfiguring the objects to solve these mismatches. +// +// StatusScalingDown: RedisCluster replicas > StatefulSet replicas +// +// The cluster enters in this status to remove excess nodes. +// +// StatusScalingUp: RedisCluster replicas < StatefulSet replicas +// +// The cluster enters in this status to create the needed nodes to equal the desired replicas with the current replicas. +// +// Ready: The cluster has the correct configuration, the desired number of replicas, is rebalances and ready to be used. +// +// The operator checks pediodically if the cluster can be kept in this status. +// +// Configuring: Not all the cluster slots are OK but every cluster node are up and ready. +// +// If the cluster needs a meet or a rebalance, being in Ready status, its status will switch to +// Configuring. +// +// Initializing: Not all the cluster slots are OK and not all the cluster nodes are up and ready. +// Error: An error is detected in the cluster. +// - Storage capacity mismatch. +// - Storage class mismatch. +// - Scaling up the cluster before upgrading raises an error. +// - Scaling down the cluster after upgradind raises an error. +// - Scaling up when in StatusScalingUp status goes wrong. +// - Scaling down when in StatusScalingDown status goes wrong. +// The operator tries to recover the cluster from error checking the configuration and/or scaling the cluster. +var StatusUpgrading = "Upgrading" +var StatusScalingDown = "ScalingDown" +var StatusScalingUp = "ScalingUp" + +var StatusReady = "Ready" +var StatusConfiguring = "Configuring" +var StatusInitializing = "Initializing" +var StatusError = "Error" + +var ConditionUpgrading = metav1.Condition{ + Type: "Upgrading", + LastTransitionTime: metav1.Now(), + Message: "Redis cluster is upgrading", + Reason: "RedisClusterUpgrading", + Status: metav1.ConditionTrue, +} + +var ConditionScalingUp = metav1.Condition{ + Type: "ScalingUp", + LastTransitionTime: metav1.Now(), + Message: "Redis cluster is scaling up", + Reason: "RedisClusterScalingUp", + Status: metav1.ConditionTrue, +} +var ConditionScalingDown = metav1.Condition{ + Type: "ScalingDown", + LastTransitionTime: metav1.Now(), + Message: "Redis cluster is scaling down", + Reason: "RedisClusterScalingDown", + Status: metav1.ConditionTrue, +} + +// RedisClusterSpec defines the desired state of RedisCluster +// +kubebuilder:validation:XValidation:rule="self.ephemeral || has(self.storage)", message="Ephemeral or storage must be set" +// +kubebuilder:validation:XValidation:rule="!(self.ephemeral && has(self.storage))", message="Ephemeral and storage cannot be combined" +type RedisClusterSpec struct { + // +kubebuilder:validation:Optional + // RedisAuth + Auth RedisAuth `json:"auth,omitempty"` + + // +kubebuilder:validation:Optional + // Redis version + Version string `json:"version,omitempty"` + + // Replicas specifies the number of Redis nodes in the cluster. + // +kubebuilder:validation:Required + Replicas int32 `json:"replicas"` + + // +kubebuilder:validation:Optional + // ReplicasPerMaster specifies how many replicas should be attached to each Redis Master + //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Number of replicas per Master Node" + ReplicasPerMaster int32 `json:"replicasPerMaster,omitempty"` + + // +kubebuilder:validation:Optional + // Image is the Redis image to use. + Image string `json:"image,omitempty"` + + // +kubebuilder:validation:Optional + // DeletePVC specifies if the PVC should be deleted when the RedisCluster is deleted. + DeletePVC bool `json:"deletePVC,omitempty"` + + // +kubebuilder:validation:Optional + // Backup specifies if the RedisCluster should be backed up. + Backup bool `json:"backup,omitempty"` + + // +kubebuilder:validation:Optional + // Monitoring specifies the monitoring configuration for the RedisCluster. + Monitoring *MonitoringSpec `json:"monitoring,omitempty"` + + // +kubebuilder:validation:Optional + // PurgeKeysOnRebalance specifies if keys should be purged on rebalance. + PurgeKeysOnRebalance bool `json:"purgekeysonrebalance,omitempty"` + + // +kubebuilder:validation:Optional + // Config is the Redis configuration to use. + Config string `json:"config,omitempty"` + + // +kubebuilder:validation:Optional + // Resources is the resource requirements for the RedisCluster. + Resources *v1.ResourceRequirements `json:"resources,omitempty"` + + // +kubebuilder:validation:Optional + // Labels is the labels to add to the RedisCluster. + Labels *map[string]string `json:"labels,omitempty"` + + // +kubebuilder:validation:Optional + // Pdb is the PodDisruptionBudget configuration for the RedisCluster. + Pdb Pdb `json:"pdb,omitempty"` + + // +kubebuilder:validation:Optional + Override *RedisClusterOverrideSpec `json:"override,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default=true + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the ephemeral field is not allowed" + // Ephemeral storage is not persisted across pod restarts. + Ephemeral bool `json:"ephemeral"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage size is not allowed" + // Storage is the amount of persistent storage to request for each Redis node. + Storage string `json:"storage,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default="" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage class name is not allowed" + // StorageClassName is the name of the StorageClass to use for the PVC. + StorageClassName string `json:"storageClassName"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default={ReadWriteOnce} + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage access modes is not allowed" + // +kubebuilder:validation:items:Enum={ReadWriteOnce,ReadOnlyMany,ReadWriteMany} + // AccessModes is the list of access modes for the PVC. + AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` +} + +func (redisClusterSpec RedisClusterSpec) NodesNeeded() int { + return int(redisClusterSpec.Replicas + (redisClusterSpec.Replicas * redisClusterSpec.ReplicasPerMaster)) +} + +// Provides the ability to override the generated manifest of several child resources. +type RedisClusterOverrideSpec struct { + // +kubebuilder:validation:Optional + // Override configuration for the RedisCluster StatefulSet. + StatefulSet *appsv1.StatefulSet `json:"statefulSet,omitempty"` + + // +kubebuilder:validation:Optional + // Override configuration for the RedisCluster Service. + Service *v1.Service `json:"service,omitempty"` +} + +type MonitoringSpec struct { + Template *v1.PodTemplateSpec `json:"template,omitempty"` + Config *string `json:"config,omitempty"` +} + +// RedisClusterStatus defines the observed state of RedisCluster +type RedisClusterStatus struct { + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster + // Important: Run "make manifests" to regenerate code after modifying this file + Nodes map[string]*RedisNode `json:"nodes"` + Status string `json:"status"` + Conditions []metav1.Condition `json:"conditions,omitempty"` +} + +type SlotRange struct { + Start int `json:"start"` + End int `json:"end"` +} + +type RedisNode struct { + Name string `json:"name"` + IP string `json:"ip"` + IsMaster bool `json:"isMaster"` + ReplicaOf string `json:"replicaOf"` + RedisCLI string `json:"redisCLI,omitempty"` +} + +type RedisAuth struct { + SecretName string `json:"secret,omitempty"` +} +type Pdb struct { + Enabled bool `json:"enabled,omitempty"` + PdbSizeUnavailable intstr.IntOrString `json:"pdbSizeUnavailable,omitempty"` + PdbSizeAvailable intstr.IntOrString `json:"pdbSizeAvailable,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:shortName=rdcl +// +kubebuilder:storageversion +// +kubebuilder:printcolumn:name="Replicas",type="integer",JSONPath=".spec.replicas",description="Amount of Redis nodes" +// +kubebuilder:printcolumn:name="Image",type="string",JSONPath=".spec.image",description="Source image for Redis instance" +// +kubebuilder:printcolumn:name="Storage",type="string",JSONPath=".spec.storage",description="Amount of storage for Redis" +// +kubebuilder:printcolumn:name="StorageClassName",type="string",JSONPath=".spec.storageClassName",description="Storage Class to be used by the PVC" +// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.status",description="The status of Redis cluster" +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector +// RedisCluster is the Schema for the redisclusters API +type RedisCluster struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec RedisClusterSpec `json:"spec,omitempty"` + Status RedisClusterStatus `json:"status,omitempty"` +} + +func (redisCluster RedisCluster) NodesNeeded() int { + return redisCluster.Spec.NodesNeeded() +} + +//+kubebuilder:object:root=true + +// RedisClusterList contains a list of RedisCluster +type RedisClusterList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []RedisCluster `json:"items"` +} + +func init() { + SchemeBuilder.Register(&RedisCluster{}, &RedisClusterList{}) +} + +func (r RedisCluster) NamespacedName() types.NamespacedName { + return types.NamespacedName{ + Namespace: r.GetNamespace(), + Name: r.GetName(), + } +} diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000..7d8a810 --- /dev/null +++ b/api/v1/zz_generated.deepcopy.go @@ -0,0 +1,269 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by controller-gen. DO NOT EDIT. + +package v1 + +import ( + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Pdb) DeepCopyInto(out *Pdb) { + *out = *in + out.PdbSizeUnavailable = in.PdbSizeUnavailable + out.PdbSizeAvailable = in.PdbSizeAvailable +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Pdb. +func (in *Pdb) DeepCopy() *Pdb { + if in == nil { + return nil + } + out := new(Pdb) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisAuth) DeepCopyInto(out *RedisAuth) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisAuth. +func (in *RedisAuth) DeepCopy() *RedisAuth { + if in == nil { + return nil + } + out := new(RedisAuth) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisCluster) DeepCopyInto(out *RedisCluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisCluster. +func (in *RedisCluster) DeepCopy() *RedisCluster { + if in == nil { + return nil + } + out := new(RedisCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RedisCluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterList) DeepCopyInto(out *RedisClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RedisCluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterList. +func (in *RedisClusterList) DeepCopy() *RedisClusterList { + if in == nil { + return nil + } + out := new(RedisClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RedisClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterOverrideSpec) DeepCopyInto(out *RedisClusterOverrideSpec) { + *out = *in + if in.StatefulSet != nil { + in, out := &in.StatefulSet, &out.StatefulSet + *out = new(appsv1.StatefulSet) + (*in).DeepCopyInto(*out) + } + if in.Service != nil { + in, out := &in.Service, &out.Service + *out = new(corev1.Service) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterOverrideSpec. +func (in *RedisClusterOverrideSpec) DeepCopy() *RedisClusterOverrideSpec { + if in == nil { + return nil + } + out := new(RedisClusterOverrideSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MonitoringSpec) DeepCopyInto(out *MonitoringSpec) { + *out = *in + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(corev1.PodTemplateSpec) + (*in).DeepCopyInto(*out) + } + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterOverrideSpec. +func (in *MonitoringSpec) DeepCopy() *MonitoringSpec { + if in == nil { + return nil + } + out := new(MonitoringSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterSpec) DeepCopyInto(out *RedisClusterSpec) { + *out = *in + out.Auth = in.Auth + if in.Monitoring != nil { + in, out := &in.Monitoring, &out.Monitoring + *out = new(MonitoringSpec) + (*in).DeepCopyInto(*out) + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(corev1.ResourceRequirements) + (*in).DeepCopyInto(*out) + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = new(map[string]string) + if **in != nil { + in, out := *in, *out + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + } + out.Pdb = in.Pdb + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]corev1.PersistentVolumeAccessMode, len(*in)) + copy(*out, *in) + } + if in.Override != nil { + in, out := &in.Override, &out.Override + *out = new(RedisClusterOverrideSpec) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterSpec. +func (in *RedisClusterSpec) DeepCopy() *RedisClusterSpec { + if in == nil { + return nil + } + out := new(RedisClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterStatus) DeepCopyInto(out *RedisClusterStatus) { + *out = *in + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make(map[string]*RedisNode, len(*in)) + for key, val := range *in { + var outVal *RedisNode + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = new(RedisNode) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterStatus. +func (in *RedisClusterStatus) DeepCopy() *RedisClusterStatus { + if in == nil { + return nil + } + out := new(RedisClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisNode) DeepCopyInto(out *RedisNode) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisNode. +func (in *RedisNode) DeepCopy() *RedisNode { + if in == nil { + return nil + } + out := new(RedisNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SlotRange) DeepCopyInto(out *SlotRange) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SlotRange. +func (in *SlotRange) DeepCopy() *SlotRange { + if in == nil { + return nil + } + out := new(SlotRange) + in.DeepCopyInto(out) + return out +} diff --git a/api/v1alpha1/groupversion_info.go b/api/v1alpha1/groupversion_info.go new file mode 100644 index 0000000..b1822f4 --- /dev/null +++ b/api/v1alpha1/groupversion_info.go @@ -0,0 +1,20 @@ +// Package v1alpha1 contains API Schema definitions for the redis v1alpha1 API group +// +kubebuilder:object:generate=true +// +groupName=redis.inditex.com +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects + GroupVersion = schema.GroupVersion{Group: "redis.inditex.com", Version: "v1alpha1"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/api/v1alpha1/rediscluster_conversion.go b/api/v1alpha1/rediscluster_conversion.go new file mode 100644 index 0000000..50cb618 --- /dev/null +++ b/api/v1alpha1/rediscluster_conversion.go @@ -0,0 +1,280 @@ +package v1alpha1 + +import ( + "encoding/json" + "fmt" + + "github.com/inditextech/redisoperator/api/v1" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/conversion" +) + +// ConvertTo converts this RedisCluster to the Hub version (v1). +func (src *RedisCluster) ConvertTo(dstRaw conversion.Hub) error { + dst := dstRaw.(*v1.RedisCluster) + ctrl.Log.Info(fmt.Sprintf("Converting RedisCluster %s from v1alpha1 version to v1 version", src.Name)) + + return src.toV1(dst) +} + +// ConvertFrom converts from the Hub version (v1) to this version. +func (dst *RedisCluster) ConvertFrom(srcRaw conversion.Hub) error { + src := srcRaw.(*v1.RedisCluster) + ctrl.Log.Info(fmt.Sprintf("Converting RedisCluster %s from v1 version to v1alpha1 version", src.Name)) + + return dst.fromV1(src) +} + +func (src *RedisCluster) toV1(dst *v1.RedisCluster) error { + // Metadata + src.copyMetatoV1(dst) + + // Spec + src.copySpectoV1(dst) + + // Status + src.copyStatustoV1(dst) + + // Override + dst.Spec.Override = &v1.RedisClusterOverrideSpec{} + + // Extra annotations + src.copyExtraAnnotationsToV1(dst) + + // Extra labels + src.copyExtraLabelsToV1(dst) + + return nil +} + +func (src *RedisCluster) copyMetatoV1(dst *v1.RedisCluster) { + dst.TypeMeta = metav1.TypeMeta{ + APIVersion: v1.GroupVersion.String(), + Kind: "RedisCluster", + } + dst.ObjectMeta = src.ObjectMeta +} + +func (src *RedisCluster) copySpectoV1(dst *v1.RedisCluster) { + dst.Spec.Auth = v1.RedisAuth{SecretName: src.Spec.Auth.SecretName} + dst.Spec.Version = src.Spec.Version + dst.Spec.Replicas = src.Spec.Replicas + dst.Spec.ReplicasPerMaster = src.Spec.ReplicasPerMaster + dst.Spec.Image = src.Spec.Image + dst.Spec.Ephemeral = src.Spec.Ephemeral + dst.Spec.Backup = src.Spec.Backup + dst.Spec.Storage = src.Spec.Storage + dst.Spec.Monitoring = &v1.MonitoringSpec{ + Template: src.Spec.Monitoring, + } + dst.Spec.PurgeKeysOnRebalance = src.Spec.PurgeKeysOnRebalance + dst.Spec.Config = src.Spec.Config + dst.Spec.Resources = src.Spec.Resources + dst.Spec.Labels = src.Spec.Labels + dst.Spec.Pdb = v1.Pdb(src.Spec.Pdb) + dst.Spec.StorageClassName = src.Spec.StorageClassName + dst.Spec.DeletePVC = src.Spec.DeletePVC + dst.Spec.AccessModes = src.Spec.AccessModes +} + +func (src *RedisCluster) copyStatustoV1(dst *v1.RedisCluster) { + dst.Status.Status = src.Status.Status + dst.Status.Conditions = src.Status.Conditions + dst.Status.Nodes = make(map[string]*v1.RedisNode) + + for node := range src.Status.Nodes { + dst.Status.Nodes[node] = &v1.RedisNode{ + Name: src.Status.Nodes[node].NodeName, + IP: src.Status.Nodes[node].IP, + } + } +} + +func (src *RedisCluster) copyExtraAnnotationsToV1(dst *v1.RedisCluster) { + // Get the value of the annotation + value, ok := src.Annotations["inditex.com/nodes-extra-annotations"] + if !ok { + return + } + + // Unmarshal the JSON value into a map + var nodesExtraAnnotations map[string]string + if err := json.Unmarshal([]byte(value), &nodesExtraAnnotations); err != nil { + return + } + + // If the StatefulSet override is nil, create it + if dst.Spec.Override.StatefulSet == nil { + dst.Spec.Override.StatefulSet = &appsv1.StatefulSet{} + dst.Spec.Override.StatefulSet.Spec.Template = corev1.PodTemplateSpec{} + dst.Spec.Override.StatefulSet.Spec.Template.Annotations = make(map[string]string) + } + + // Copy the annotations to the StatefulSet template + for k, v := range nodesExtraAnnotations { + dst.Spec.Override.StatefulSet.Spec.Template.Annotations[k] = v + } + + // Remove the annotation from the source object + delete(src.Annotations, "inditex.com/nodes-extra-annotations") +} + +func (src *RedisCluster) copyExtraLabelsToV1(dst *v1.RedisCluster) { + // Get the value of the annotation + value, ok := src.Annotations["inditex.com/nodes-extra-labels"] + if !ok { + return + } + + // Unmarshal the JSON value into a map + var nodesExtraLabels map[string]string + if err := json.Unmarshal([]byte(value), &nodesExtraLabels); err != nil { + return + } + + // If the StatefulSet override is nil, create it + if dst.Spec.Override.StatefulSet == nil { + dst.Spec.Override.StatefulSet = &appsv1.StatefulSet{} + dst.Spec.Override.StatefulSet.Spec.Template = corev1.PodTemplateSpec{} + dst.Spec.Override.StatefulSet.Spec.Template.Labels = make(map[string]string) + } + + // Copy the labels to the StatefulSet template + for k, v := range nodesExtraLabels { + dst.Spec.Override.StatefulSet.Spec.Template.Labels[k] = v + } + + // Remove the annotation from the source object + delete(src.Annotations, "inditex.com/nodes-extra-labels") +} + +func (dst *RedisCluster) fromV1(src *v1.RedisCluster) error { + // Metadata + dst.copyMetaFromV1(src) + + // Spec + dst.copySpecFromV1(src) + + // Status + dst.copyStatusFromV1(src) + + // Override + if src.Spec.Override == nil { + return nil + } + + // Fields from statefulset override + if src.Spec.Override.StatefulSet != nil { + // Extra annotations + dst.copyExtraAnnotationsFromV1(src) + + // Extra labels + dst.copyExtraLabelsFromV1(src) + } + + return nil +} + +func (dst *RedisCluster) copyMetaFromV1(src *v1.RedisCluster) { + dst.TypeMeta = metav1.TypeMeta{ + APIVersion: GroupVersion.String(), + Kind: "RedisCluster", + } + dst.ObjectMeta = src.ObjectMeta +} + +func (dst *RedisCluster) copySpecFromV1(src *v1.RedisCluster) { + dst.Spec.Auth = RedisAuth{SecretName: src.Spec.Auth.SecretName} + dst.Spec.Version = src.Spec.Version + dst.Spec.Replicas = src.Spec.Replicas + dst.Spec.ReplicasPerMaster = src.Spec.ReplicasPerMaster + dst.Spec.Image = src.Spec.Image + dst.Spec.Ephemeral = src.Spec.Ephemeral + dst.Spec.Backup = src.Spec.Backup + dst.Spec.Storage = src.Spec.Storage + dst.Spec.PurgeKeysOnRebalance = src.Spec.PurgeKeysOnRebalance + dst.Spec.Config = src.Spec.Config + dst.Spec.Resources = src.Spec.Resources + dst.Spec.Labels = src.Spec.Labels + dst.Spec.Pdb = Pdb(src.Spec.Pdb) + dst.Spec.StorageClassName = src.Spec.StorageClassName + dst.Spec.DeletePVC = src.Spec.DeletePVC + dst.Spec.AccessModes = src.Spec.AccessModes + + if src.Spec.Monitoring != nil && src.Spec.Monitoring.Template != nil { + dst.Spec.Monitoring = src.Spec.Monitoring.Template + } +} + +func (dst *RedisCluster) copyStatusFromV1(src *v1.RedisCluster) { + dst.Status.Status = src.Status.Status + dst.Status.Conditions = src.Status.Conditions + dst.Status.Nodes = make(map[string]*RedisNode) + + for node := range src.Status.Nodes { + dst.Status.Nodes[node] = &RedisNode{ + NodeName: src.Status.Nodes[node].Name, + NodeID: node, + IP: src.Status.Nodes[node].IP, + } + } + + dst.Status.Slots = []*SlotRange{} +} + +func (dst *RedisCluster) copyExtraAnnotationsFromV1(src *v1.RedisCluster) { + // Get the extra annotations from pod template annotations of override + nodesExtraAnnotations := make(map[string]string) + for k, v := range src.Spec.Override.StatefulSet.Spec.Template.Annotations { + nodesExtraAnnotations[k] = v + } + + // If there are no extra annotations, return + if len(nodesExtraAnnotations) == 0 { + return + } + + // Marshal the extra annotations to JSON + nodesExtraAnnotationsJSON, err := json.Marshal(nodesExtraAnnotations) + if err != nil { + return + } + + // If the annotations map is nil, create it + if dst.Annotations == nil { + dst.Annotations = make(map[string]string) + } + + // Set the annotation on the destination object + dst.Annotations["inditex.com/nodes-extra-annotations"] = string(nodesExtraAnnotationsJSON) +} + +func (dst *RedisCluster) copyExtraLabelsFromV1(src *v1.RedisCluster) { + // Get the extra labels from pod template labels of override + nodesExtraLabels := make(map[string]string) + for k, v := range src.Spec.Override.StatefulSet.Spec.Template.Labels { + nodesExtraLabels[k] = v + } + + // If there are no extra labels, return + if len(nodesExtraLabels) == 0 { + return + } + + // Marshal the extra labels to JSON + nodesExtraLabelsJSON, err := json.Marshal(nodesExtraLabels) + if err != nil { + return + } + + // If the annotations map is nil, create it + if dst.Annotations == nil { + dst.Annotations = make(map[string]string) + } + + // Set the annotation on the destination object + dst.Annotations["inditex.com/nodes-extra-labels"] = string(nodesExtraLabelsJSON) +} diff --git a/api/v1alpha1/rediscluster_conversion_test.go b/api/v1alpha1/rediscluster_conversion_test.go new file mode 100644 index 0000000..71a4aee --- /dev/null +++ b/api/v1alpha1/rediscluster_conversion_test.go @@ -0,0 +1,626 @@ +package v1alpha1 + +import ( + "testing" + + "github.com/inditextech/redisoperator/api/v1" + "github.com/stretchr/testify/assert" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func Test_toV1(t *testing.T) { + tests := []struct { + name string + src *RedisCluster + expected *v1.RedisCluster + expectedErr error + }{ + { + name: "Case base", + src: &RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1alpha1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + }, + Spec: RedisClusterSpec{ + Auth: RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + Status: RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*RedisNode{ + "node1": { + NodeName: "node1", + NodeID: "1", + IP: "", + }, + }, + Slots: []*SlotRange{ + { + Start: 0, + End: 16383, + }, + }, + }, + }, + expected: &v1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + }, + Spec: v1.RedisClusterSpec{ + Auth: v1.RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Monitoring: &v1.MonitoringSpec{}, + Override: &v1.RedisClusterOverrideSpec{}, + }, + Status: v1.RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*v1.RedisNode{ + "node1": { + Name: "node1", + IP: "", + IsMaster: false, + ReplicaOf: "", + }, + }, + }, + }, + expectedErr: nil, + }, + { + name: "Extra annotations", + src: &RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1alpha1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + Annotations: map[string]string{ + "inditex.com/nodes-extra-annotations": `{"annotation1": "value1"}`, + }, + }, + Spec: RedisClusterSpec{ + Auth: RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + Status: RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*RedisNode{ + "node1": { + NodeName: "node1", + NodeID: "1", + IP: "", + }, + }, + Slots: []*SlotRange{ + { + Start: 0, + End: 16383, + }, + }, + }, + }, + expected: &v1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + Annotations: map[string]string{}, + }, + Spec: v1.RedisClusterSpec{ + Auth: v1.RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Monitoring: &v1.MonitoringSpec{}, + Override: &v1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "annotation1": "value1", + }, + }, + }, + }, + }, + }, + }, + Status: v1.RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*v1.RedisNode{ + "node1": { + Name: "node1", + IP: "", + IsMaster: false, + ReplicaOf: "", + }, + }, + }, + }, + expectedErr: nil, + }, + { + name: "Extra labels", + src: &RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1alpha1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + Annotations: map[string]string{ + "inditex.com/nodes-extra-labels": `{"label1": "value1"}`, + }, + }, + Spec: RedisClusterSpec{ + Auth: RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + Status: RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*RedisNode{ + "node1": { + NodeName: "node1", + NodeID: "1", + IP: "", + }, + }, + Slots: []*SlotRange{ + { + Start: 0, + End: 16383, + }, + }, + }, + }, + expected: &v1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + Annotations: map[string]string{}, + }, + Spec: v1.RedisClusterSpec{ + Auth: v1.RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Monitoring: &v1.MonitoringSpec{}, + Override: &v1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "label1": "value1", + }, + }, + }, + }, + }, + }, + }, + Status: v1.RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*v1.RedisNode{ + "node1": { + Name: "node1", + IP: "", + IsMaster: false, + ReplicaOf: "", + }, + }, + }, + }, + expectedErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := &v1.RedisCluster{} + err := tt.src.toV1(dst) + + if tt.expectedErr != nil { + assert.Equal(t, tt.expectedErr, err) + } else { + assert.Equal(t, tt.expected, dst) + } + }) + } +} + +func Test_fromV1(t *testing.T) { + tests := []struct { + name string + src *v1.RedisCluster + expected *RedisCluster + expectedErr error + }{ + { + name: "Case base", + src: &v1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + }, + Spec: v1.RedisClusterSpec{ + Auth: v1.RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Override: &v1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{}, + }, + }, + Status: v1.RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*v1.RedisNode{ + "node1": { + Name: "node1", + IP: "", + IsMaster: false, + ReplicaOf: "", + }, + }, + }, + }, + expected: &RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1alpha1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + }, + Spec: RedisClusterSpec{ + Auth: RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + Status: RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*RedisNode{ + "node1": { + NodeName: "node1", + NodeID: "node1", + IP: "", + }, + }, + Slots: []*SlotRange{}, + }, + }, + expectedErr: nil, + }, + { + name: "Extra annotations", + src: &v1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + }, + Spec: v1.RedisClusterSpec{ + Auth: v1.RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Override: &v1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "annotation1": "value1", + }, + }, + }, + }, + }, + }, + }, + Status: v1.RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*v1.RedisNode{ + "node1": { + Name: "node1", + IP: "", + IsMaster: false, + ReplicaOf: "", + }, + }, + }, + }, + expected: &RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1alpha1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + Annotations: map[string]string{ + "inditex.com/nodes-extra-annotations": `{"annotation1":"value1"}`, + }, + }, + Spec: RedisClusterSpec{ + Auth: RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + Status: RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*RedisNode{ + "node1": { + NodeName: "node1", + NodeID: "node1", + IP: "", + }, + }, + Slots: []*SlotRange{}, + }, + }, + expectedErr: nil, + }, + { + name: "Extra annotations", + src: &v1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + }, + Spec: v1.RedisClusterSpec{ + Auth: v1.RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + Override: &v1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "label1": "value2", + }, + }, + }, + }, + }, + }, + }, + Status: v1.RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*v1.RedisNode{ + "node1": { + Name: "node1", + IP: "", + IsMaster: false, + ReplicaOf: "", + }, + }, + }, + }, + expected: &RedisCluster{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.inditex.com/v1alpha1", + Kind: "RedisCluster", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "test-rediscluster", + Namespace: "default", + Annotations: map[string]string{ + "inditex.com/nodes-extra-labels": `{"label1":"value2"}`, + }, + }, + Spec: RedisClusterSpec{ + Auth: RedisAuth{ + SecretName: "secret", + }, + Version: "6.0.0", + Replicas: 3, + ReplicasPerMaster: 1, + Image: "redis:6.0.0", + Ephemeral: false, + Backup: false, + Storage: "1Gi", + PurgeKeysOnRebalance: false, + Config: "config", + StorageClassName: "storage", + DeletePVC: false, + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + Status: RedisClusterStatus{ + Status: "OK", + Nodes: map[string]*RedisNode{ + "node1": { + NodeName: "node1", + NodeID: "node1", + IP: "", + }, + }, + Slots: []*SlotRange{}, + }, + }, + expectedErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dst := &RedisCluster{} + err := dst.fromV1(tt.src) + + if tt.expectedErr != nil { + assert.Equal(t, tt.expectedErr, err) + } else { + assert.Equal(t, tt.expected, dst) + } + }) + } +} diff --git a/api/v1alpha1/rediscluster_types.go b/api/v1alpha1/rediscluster_types.go new file mode 100644 index 0000000..0d66f24 --- /dev/null +++ b/api/v1alpha1/rediscluster_types.go @@ -0,0 +1,237 @@ +package v1alpha1 + +import ( + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// NOTE: The status values Upgrading, ScalingUp and ScalingDown should be replaced with conditions because these conditions +// can occur independently of the basic states Error, Initializing and Ready. Configuring should probably be removed eventually because the +// stata value should only tell the end user whether the redis cluster is ready to receive traffic, if is initializing or there has been an error. +// Any redis specific information should be represented by conditions. + +// StatusUpgrading: A RedisCluster enters this status when when: +// - there are differences between the existing configuration in the configmap +// and the configuration of the RedisCluster object merged with the default configuration set in the code. +// - there is a mismatch between the StatefulSet object labels and the RedisCluster Spec labels. +// - a mismatch exists between RedisCluster resources defined under spec and effective resources defined in the StatefulSet. +// - the images set in RedisCluster under spec and the image set in the StatefulSet object are not the same. +// The cluster is upgraded, reconfiguring the objects to solve these mismatches. +// +// StatusScalingDown: RedisCluster replicas > StatefulSet replicas +// +// The cluster enters in this status to remove excess nodes. +// +// StatusScalingUp: RedisCluster replicas < StatefulSet replicas +// +// The cluster enters in this status to create the needed nodes to equal the desired replicas with the current replicas. +// +// Ready: The cluster has the correct configuration, the desired number of replicas, is rebalances and ready to be used. +// +// The operator checks pediodically if the cluster can be kept in this status. +// +// Configuring: Not all the cluster slots are OK but every cluster node are up and ready. +// +// If the cluster needs a meet or a rebalance, being in Ready status, its status will switch to +// Configuring. +// +// Initializing: Not all the cluster slots are OK and not all the cluster nodes are up and ready. +// Error: An error is detected in the cluster. +// - Storage capacity mismatch. +// - Storage class mismatch. +// - Scaling up the cluster before upgrading raises an error. +// - Scaling down the cluster after upgradind raises an error. +// - Scaling up when in StatusScalingUp status goes wrong. +// - Scaling down when in StatusScalingDown status goes wrong. +// The operator tries to recover the cluster from error checking the configuration and/or scaling the cluster. +var StatusUpgrading = "Upgrading" +var StatusScalingDown = "ScalingDown" +var StatusScalingUp = "ScalingUp" + +var StatusReady = "Ready" +var StatusConfiguring = "Configuring" +var StatusInitializing = "Initializing" +var StatusError = "Error" + +var ConditionUpgrading = metav1.Condition{ + Type: "Upgrading", + LastTransitionTime: metav1.Now(), + Message: "Redis cluster is upgrading", + Reason: "RedisClusterUpgrading", + Status: metav1.ConditionTrue, +} + +var ConditionScalingUp = metav1.Condition{ + Type: "ScalingUp", + LastTransitionTime: metav1.Now(), + Message: "Redis cluster is scaling up", + Reason: "RedisClusterScalingUp", + Status: metav1.ConditionTrue, +} +var ConditionScalingDown = metav1.Condition{ + Type: "ScalingDown", + LastTransitionTime: metav1.Now(), + Message: "Redis cluster is scaling down", + Reason: "RedisClusterScalingDown", + Status: metav1.ConditionTrue, +} + +// RedisClusterSpec defines the desired state of RedisCluster +// +kubebuilder:validation:XValidation:rule="self.ephemeral || has(self.storage)", message="Ephemeral or storage must be set" +// +kubebuilder:validation:XValidation:rule="!(self.ephemeral && has(self.storage))", message="Ephemeral and storage cannot be combined" +type RedisClusterSpec struct { + // +kubebuilder:validation:Optional + // RedisAuth + Auth RedisAuth `json:"auth,omitempty"` + + // +kubebuilder:validation:Optional + // Redis version + Version string `json:"version,omitempty"` + + // Replicas specifies the number of Redis nodes in the cluster. + // +kubebuilder:validation:Required + Replicas int32 `json:"replicas,omitempty"` + + // +kubebuilder:validation:Optional + // ReplicasPerMaster specifies how many replicas should be attached to each Redis Master + //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Number of replicas per Master Node" + ReplicasPerMaster int32 `json:"replicasPerMaster,omitempty"` + + // +kubebuilder:validation:Optional + // Image is the Redis image to use. + Image string `json:"image,omitempty"` + + // +kubebuilder:validation:Optional + // DeletePVC specifies if the PVC should be deleted when the RedisCluster is deleted. + DeletePVC bool `json:"deletePVC,omitempty"` + + // +kubebuilder:validation:Optional + // Backup specifies if the RedisCluster should be backed up. + Backup bool `json:"backup,omitempty"` + + // +kubebuilder:validation:Optional + // Monitoring specifies the monitoring configuration for the RedisCluster. + Monitoring *v1.PodTemplateSpec `json:"monitoring,omitempty"` + + // +kubebuilder:validation:Optional + // PurgeKeysOnRebalance specifies if keys should be purged on rebalance. + PurgeKeysOnRebalance bool `json:"purgekeysonrebalance,omitempty"` + + // +kubebuilder:validation:Optional + // Config is the Redis configuration to use. + Config string `json:"config,omitempty"` + + // +kubebuilder:validation:Optional + // Resources is the resource requirements for the RedisCluster. + Resources *v1.ResourceRequirements `json:"resources,omitempty"` + + // +kubebuilder:validation:Optional + // Labels is the labels to add to the RedisCluster. + Labels *map[string]string `json:"labels,omitempty"` + + // +kubebuilder:validation:Optional + // Pdb is the PodDisruptionBudget configuration for the RedisCluster. + Pdb Pdb `json:"pdb,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default=true + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the ephemeral field is not allowed" + // Ephemeral storage is not persisted across pod restarts. + Ephemeral bool `json:"ephemeral"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage size is not allowed" + // Storage is the amount of persistent storage to request for each Redis node. + Storage string `json:"storage,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default="" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage class name is not allowed" + // StorageClassName is the name of the StorageClass to use for the PVC. + StorageClassName string `json:"storageClassName"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default={ReadWriteOnce} + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage access modes is not allowed" + // +kubebuilder:validation:items:Enum={ReadWriteOnce,ReadOnlyMany,ReadWriteMany} + // AccessModes is the list of access modes for the PVC. + AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` +} + +func (redisClusterSpec RedisClusterSpec) NodesNeeded() int { + return int(redisClusterSpec.Replicas + (redisClusterSpec.Replicas * redisClusterSpec.ReplicasPerMaster)) +} + +// RedisClusterStatus defines the observed state of RedisCluster +type RedisClusterStatus struct { + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster + // Important: Run "make manifests" to regenerate code after modifying this file + Nodes map[string]*RedisNode `json:"nodes"` + Slots []*SlotRange `json:"slots"` + Status string `json:"status"` + Conditions []metav1.Condition `json:"conditions,omitempty"` +} + +type SlotRange struct { + Start int `json:"start"` + End int `json:"end"` +} + +type RedisNode struct { + NodeName string `json:"name"` + NodeID string `json:"nodeid"` + IP string `json:"ip"` +} + +// RedisAuth +type RedisAuth struct { + SecretName string `json:"secret,omitempty"` +} +type Pdb struct { + Enabled bool `json:"enabled,omitempty"` + PdbSizeUnavailable intstr.IntOrString `json:"pdbSizeUnavailable,omitempty"` + PdbSizeAvailable intstr.IntOrString `json:"pdbSizeAvailable,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:shortName=rdcl +// +kubebuilder:printcolumn:name="Replicas",type="integer",JSONPath=".spec.replicas",description="Amount of Redis nodes" +// +kubebuilder:printcolumn:name="Image",type="string",JSONPath=".spec.image",description="Source image for Redis instance" +// +kubebuilder:printcolumn:name="Storage",type="string",JSONPath=".spec.storage",description="Amount of storage for Redis" +// +kubebuilder:printcolumn:name="StorageClassName",type="string",JSONPath=".spec.storageClassName",description="Storage Class to be used by the PVC" +// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.status",description="The status of Redis cluster" +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector +// RedisCluster is the Schema for the redisclusters API +type RedisCluster struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec RedisClusterSpec `json:"spec,omitempty"` + Status RedisClusterStatus `json:"status,omitempty"` +} + +func (redisCluster RedisCluster) NodesNeeded() int { + return redisCluster.Spec.NodesNeeded() +} + +//+kubebuilder:object:root=true + +// RedisClusterList contains a list of RedisCluster +type RedisClusterList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []RedisCluster `json:"items"` +} + +func init() { + SchemeBuilder.Register(&RedisCluster{}, &RedisClusterList{}) +} + +func (r RedisCluster) NamespacedName() types.NamespacedName { + return types.NamespacedName{ + Namespace: r.GetNamespace(), + Name: r.GetName(), + } +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000..ee2dcc0 --- /dev/null +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,224 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Pdb) DeepCopyInto(out *Pdb) { + *out = *in + out.PdbSizeUnavailable = in.PdbSizeUnavailable + out.PdbSizeAvailable = in.PdbSizeAvailable +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Pdb. +func (in *Pdb) DeepCopy() *Pdb { + if in == nil { + return nil + } + out := new(Pdb) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisAuth) DeepCopyInto(out *RedisAuth) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisAuth. +func (in *RedisAuth) DeepCopy() *RedisAuth { + if in == nil { + return nil + } + out := new(RedisAuth) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisCluster) DeepCopyInto(out *RedisCluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisCluster. +func (in *RedisCluster) DeepCopy() *RedisCluster { + if in == nil { + return nil + } + out := new(RedisCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RedisCluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterList) DeepCopyInto(out *RedisClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RedisCluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterList. +func (in *RedisClusterList) DeepCopy() *RedisClusterList { + if in == nil { + return nil + } + out := new(RedisClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *RedisClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterSpec) DeepCopyInto(out *RedisClusterSpec) { + *out = *in + out.Auth = in.Auth + if in.Monitoring != nil { + in, out := &in.Monitoring, &out.Monitoring + *out = new(v1.PodTemplateSpec) + (*in).DeepCopyInto(*out) + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(v1.ResourceRequirements) + (*in).DeepCopyInto(*out) + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = new(map[string]string) + if **in != nil { + in, out := *in, *out + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + } + out.Pdb = in.Pdb + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]v1.PersistentVolumeAccessMode, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterSpec. +func (in *RedisClusterSpec) DeepCopy() *RedisClusterSpec { + if in == nil { + return nil + } + out := new(RedisClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisClusterStatus) DeepCopyInto(out *RedisClusterStatus) { + *out = *in + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make(map[string]*RedisNode, len(*in)) + for key, val := range *in { + var outVal *RedisNode + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = new(RedisNode) + **out = **in + } + (*out)[key] = outVal + } + } + if in.Slots != nil { + in, out := &in.Slots, &out.Slots + *out = make([]*SlotRange, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(SlotRange) + **out = **in + } + } + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisClusterStatus. +func (in *RedisClusterStatus) DeepCopy() *RedisClusterStatus { + if in == nil { + return nil + } + out := new(RedisClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RedisNode) DeepCopyInto(out *RedisNode) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RedisNode. +func (in *RedisNode) DeepCopy() *RedisNode { + if in == nil { + return nil + } + out := new(RedisNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SlotRange) DeepCopyInto(out *SlotRange) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SlotRange. +func (in *SlotRange) DeepCopy() *SlotRange { + if in == nil { + return nil + } + out := new(SlotRange) + in.DeepCopyInto(out) + return out +} diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..8341c86 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,172 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "flag" + "fmt" + "os" + "strings" + + "github.com/joho/godotenv" + + corev1 "k8s.io/api/core/v1" + _ "k8s.io/client-go/plugin/pkg/client/auth" + + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/healthz" + "sigs.k8s.io/controller-runtime/pkg/log/zap" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/controller-runtime/pkg/webhook" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + redisv1alpha1 "github.com/inditextech/redisoperator/api/v1alpha1" + "github.com/inditextech/redisoperator/controllers" + //+kubebuilder:scaffold:imports +) + +const ( + USER_AGENT_NAME = "redis-cluster-operator" + USER_AGENT_VERSION = "1.3.0" +) + +var ( + scheme = runtime.NewScheme() + setupLog = ctrl.Log.WithName("setup") +) + +func init() { + utilruntime.Must(clientgoscheme.AddToScheme(scheme)) + + utilruntime.Must(redisv1alpha1.AddToScheme(scheme)) + utilruntime.Must(redisv1.AddToScheme(scheme)) + //+kubebuilder:scaffold:scheme +} + +func main() { + var metricsAddr string + var enableLeaderElection bool + var probeAddr string + var maxConcurrentReconciles int + var concurrentMigrates int + + // NOTE: This is needed to enable RSA again after update to go v1.22 + // https://tip.golang.org/doc/go1.22 (crypto/tls) + os.Setenv("GODEBUG", "tlsrsakex=1") + + flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") + flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") + flag.IntVar(&maxConcurrentReconciles, "max-concurrent-reconciles", 10, "Maximum number of concurrent events.") + flag.IntVar(&concurrentMigrates, "concurrent-migrates", 3, "Number of concurrent migrate operations.") + flag.BoolVar(&enableLeaderElection, "leader-elect", false, + "Enable leader election for controller manager. "+ + "Enabling this will ensure there is only one active controller manager.") + opts := zap.Options{ + Development: true, + } + opts.BindFlags(flag.CommandLine) + flag.Parse() + + ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) + godotenv.Load("./.env") + + // Get namespace(s) to watch + watchNamespace, err := getWatchNamespace() + if err != nil { + setupLog.Info("unable to get WatchNamespace, the manager will watch and manage resources in all namespaces") + } + + // Controller options + ctrlOptions := ctrl.Options{ + Scheme: scheme, + Metrics: server.Options{ + BindAddress: metricsAddr, + }, + WebhookServer: webhook.NewServer(webhook.Options{ + Port: 9443, + }), + HealthProbeBindAddress: probeAddr, + LeaderElection: enableLeaderElection, + LeaderElectionID: "db95d8a6.inditex.com", + Client: client.Options{ + Cache: &client.CacheOptions{ + DisableFor: []client.Object{ + &corev1.ConfigMap{}, + &corev1.Secret{}, + }, + }, + }, + Cache: cache.Options{ + DefaultNamespaces: watchNamespace, + }, + } + config := ctrl.GetConfigOrDie() + config.UserAgent = USER_AGENT_NAME + "/" + USER_AGENT_VERSION + mgr, err := ctrl.NewManager(config, ctrlOptions) + if err != nil { + setupLog.Error(err, "unable to start manager") + os.Exit(1) + } + + if err = controllers.NewRedisClusterReconciler(mgr, maxConcurrentReconciles, concurrentMigrates).SetupWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create controller", "controller", "RedisCluster") + os.Exit(1) + } + + //+kubebuilder:scaffold:builder + + if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { + setupLog.Error(err, "unable to set up health check") + os.Exit(1) + } + if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { + setupLog.Error(err, "unable to set up ready check") + os.Exit(1) + } + + setupLog.Info("starting manager") + if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { + setupLog.Error(err, "problem running manager") + os.Exit(1) + } +} + +// getWatchNamespace returns the Namespace the operator should be watching for changes +func getWatchNamespace() (map[string]cache.Config, error) { + // WatchNamespaceEnvVar is the constant for env variable WATCH_NAMESPACE + // which specifies the Namespace to watch. + // An empty value means the operator is running with cluster scope. + var watchNamespaceEnvVar = "WATCH_NAMESPACE" + + namespaces, found := os.LookupEnv(watchNamespaceEnvVar) + if !found { + return nil, fmt.Errorf("%s must be set", watchNamespaceEnvVar) + } + + watchNamespaces := make(map[string]cache.Config) + for _, ns := range strings.Split(namespaces, ",") { + setupLog.Info("manager set up with namespace", "namespace", ns) + watchNamespaces[ns] = cache.Config{} + } + + return watchNamespaces, nil +} diff --git a/config/crd/bases/redis.inditex.com_redisclusters.yaml b/config/crd/bases/redis.inditex.com_redisclusters.yaml new file mode 100644 index 0000000..0388b1b --- /dev/null +++ b/config/crd/bases/redis.inditex.com_redisclusters.yaml @@ -0,0 +1,10474 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + name: redisclusters.redis.inditex.com +spec: + group: redis.inditex.com + names: + kind: RedisCluster + listKind: RedisClusterList + plural: redisclusters + shortNames: + - rdcl + singular: rediscluster + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Amount of Redis nodes + jsonPath: .spec.replicas + name: Replicas + type: integer + - description: Source image for Redis instance + jsonPath: .spec.image + name: Image + type: string + - description: Amount of storage for Redis + jsonPath: .spec.storage + name: Storage + type: string + - description: Storage Class to be used by the PVC + jsonPath: .spec.storageClassName + name: StorageClassName + type: string + - description: The status of Redis cluster + jsonPath: .status.status + name: Status + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: RedisCluster is the Schema for the redisclusters API + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + description: RedisClusterSpec defines the desired state of RedisCluster + properties: + accessModes: + default: + - ReadWriteOnce + items: + enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + type: string + type: array + x-kubernetes-validations: + - message: Changing the storage access modes is not allowed + rule: self == oldSelf + auth: + description: RedisAuth + properties: + secret: + type: string + type: object + backup: + type: boolean + config: + type: string + deletePVC: + type: boolean + ephemeral: + default: true + type: boolean + x-kubernetes-validations: + - message: Changing the ephemeral field is not allowed + rule: self == oldSelf + pdb: + description: PodDisruptionBudget + properties: + enabled: + type: boolean + pdbSizeUnavailable: + description: MaxUnavailable property + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + pdbSizeAvailable: + description: MinAvailable property + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + image: + type: string + labels: + additionalProperties: + type: string + type: object + monitoring: + properties: + metadata: + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + description: Added capabilities + items: + type: string + type: array + drop: + description: Removed capabilities + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + items: + properties: + name: + type: string + source: + properties: + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + purgekeysonrebalance: + type: boolean + replicas: + format: int32 + type: integer + replicasPerMaster: + description: ReplicasPerMaster specifies how many replicas should + be attached to each Redis Master + format: int32 + type: integer + resources: + description: ResourceRequirements describes the compute resource requirements. + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + storage: + type: string + x-kubernetes-validations: + - message: Changing the storage size is not allowed + rule: self == oldSelf + storageClassName: + default: "" + type: string + x-kubernetes-validations: + - message: Changing the storage class name is not allowed + rule: self == oldSelf + version: + type: string + required: + - replicas + type: object + x-kubernetes-validations: + - message: Ephemeral or storage must be set + rule: self.ephemeral || has(self.storage) + - message: Ephemeral and storage cannot be combined + rule: '!(self.ephemeral && has(self.storage))' + status: + description: RedisClusterStatus defines the observed state of RedisCluster + properties: + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + maxLength: 32768 + type: string + observedGeneration: + format: int64 + minimum: 0 + type: integer + reason: + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + nodes: + additionalProperties: + properties: + ip: + type: string + name: + type: string + nodeid: + type: string + required: + - ip + - name + - nodeid + type: object + type: object + slots: + items: + properties: + end: + type: integer + start: + type: integer + required: + - end + - start + type: object + type: array + status: + type: string + required: + - nodes + - slots + - status + type: object + type: object + served: true + storage: false + subresources: + scale: + labelSelectorPath: .status.selector + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas + status: {} + - additionalPrinterColumns: + - description: Amount of Redis nodes + jsonPath: .spec.replicas + name: Replicas + type: integer + - description: Source image for Redis instance + jsonPath: .spec.image + name: Image + type: string + - description: Amount of storage for Redis + jsonPath: .spec.storage + name: Storage + type: string + - description: Storage Class to be used by the PVC + jsonPath: .spec.storageClassName + name: StorageClassName + type: string + - description: The status of Redis cluster + jsonPath: .status.status + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: RedisCluster is the Schema for the redisclusters API + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + description: RedisClusterSpec defines the desired state of RedisCluster + properties: + accessModes: + items: + type: string + enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + type: array + default: + - ReadWriteOnce + x-kubernetes-validations: + - message: Changing the storage access modes is not allowed + rule: self == oldSelf + auth: + description: RedisAuth + properties: + secret: + type: string + type: object + backup: + type: boolean + config: + type: string + deletePVC: + type: boolean + ephemeral: + type: boolean + default: true + x-kubernetes-validations: + - message: Changing the ephemeral field is not allowed + rule: self == oldSelf + pdb: + description: PodDisruptionBudget + properties: + enabled: + type: boolean + pdbSizeUnavailable: + description: MaxUnavailable property + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + pdbSizeAvailable: + description: MinAvailable property + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + type: object + image: + type: string + labels: + additionalProperties: + type: string + type: object + monitoring: + properties: + config: + type: string + template: + type: object + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + options: + items: + properties: + name: + description: Required. + type: string + value: + type: string + type: object + type: array + searches: + items: + type: string + type: array + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + description: Added capabilities + items: + type: string + type: array + drop: + description: Removed capabilities + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + ip: + type: string + type: object + type: array + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + properties: + args: + items: + type: string + type: array + command: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + items: + properties: + configMapRef: + properties: + name: + type: string + optional: + type: boolean + type: object + prefix: + type: string + secretRef: + properties: + name: + type: string + optional: + type: boolean + type: object + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + capabilities: + properties: + add: + items: + type: string + type: array + drop: + items: + type: string + type: array + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + type: string + required: + - name + type: object + type: array + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + resourceClaims: + items: + properties: + name: + type: string + source: + properties: + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource + to select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + required: + - containers + type: object + type: object + purgekeysonrebalance: + type: boolean + replicas: + format: int32 + type: integer + replicasPerMaster: + description: ReplicasPerMaster specifies how many replicas should + be attached to each Redis Master + format: int32 + type: integer + override: + properties: + service: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + ports: + items: + properties: + appProtocol: + type: string + name: + type: string + nodePort: + format: int32 + type: integer + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: array + x-kubernetes-list-map-keys: + - port + - protocol + x-kubernetes-list-type: map + selector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + type: object + type: object + statefulSet: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + minReadySeconds: + format: int32 + type: integer + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + activeDeadlineSeconds: + format: int64 + type: integer + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-type: atomic + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + x-kubernetes-list-type: atomic + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + mismatchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + x-kubernetes-list-type: atomic + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: object + automountServiceAccountToken: + type: boolean + containers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + dnsConfig: + properties: + nameservers: + items: + type: string + type: array + x-kubernetes-list-type: atomic + options: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + searches: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + dnsPolicy: + type: string + enableServiceLinks: + type: boolean + ephemeralContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + targetContainerName: + type: string + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + hostAliases: + items: + properties: + hostnames: + items: + type: string + type: array + x-kubernetes-list-type: atomic + ip: + type: string + required: + - ip + type: object + type: array + x-kubernetes-list-map-keys: + - ip + x-kubernetes-list-type: map + hostIPC: + type: boolean + hostNetwork: + type: boolean + hostPID: + type: boolean + hostUsers: + type: boolean + hostname: + type: string + imagePullSecrets: + items: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + initContainers: + items: + properties: + args: + items: + type: string + type: array + x-kubernetes-list-type: atomic + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + envFrom: + items: + properties: + configMapRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + prefix: + type: string + secretRef: + properties: + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + type: object + type: array + x-kubernetes-list-type: atomic + image: + type: string + imagePullPolicy: + type: string + lifecycle: + properties: + postStart: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + sleep: + properties: + seconds: + format: int64 + type: integer + required: + - seconds + type: object + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + name: + type: string + ports: + items: + properties: + containerPort: + format: int32 + type: integer + hostIP: + type: string + hostPort: + format: int32 + type: integer + name: + type: string + protocol: + default: TCP + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + resizePolicy: + items: + properties: + resourceName: + type: string + restartPolicy: + type: string + required: + - resourceName + - restartPolicy + type: object + type: array + x-kubernetes-list-type: atomic + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + restartPolicy: + type: string + securityContext: + properties: + allowPrivilegeEscalation: + type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + capabilities: + properties: + add: + items: + type: string + type: array + x-kubernetes-list-type: atomic + drop: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + privileged: + type: boolean + procMount: + type: string + readOnlyRootFilesystem: + type: boolean + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object + stdin: + type: boolean + stdinOnce: + type: boolean + terminationMessagePath: + type: string + terminationMessagePolicy: + type: string + tty: + type: boolean + volumeDevices: + items: + properties: + devicePath: + type: string + name: + type: string + required: + - devicePath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - devicePath + x-kubernetes-list-type: map + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + recursiveReadOnly: + type: string + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + x-kubernetes-list-map-keys: + - mountPath + x-kubernetes-list-type: map + workingDir: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + nodeName: + type: string + nodeSelector: + additionalProperties: + type: string + type: object + x-kubernetes-map-type: atomic + os: + properties: + name: + type: string + required: + - name + type: object + overhead: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + preemptionPolicy: + type: string + priority: + format: int32 + type: integer + priorityClassName: + type: string + readinessGates: + items: + properties: + conditionType: + type: string + required: + - conditionType + type: object + type: array + x-kubernetes-list-type: atomic + resourceClaims: + items: + properties: + name: + type: string + source: + properties: + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + restartPolicy: + type: string + runtimeClassName: + type: string + schedulerName: + type: string + schedulingGates: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + securityContext: + properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + x-kubernetes-list-type: atomic + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + serviceAccount: + type: string + serviceAccountName: + type: string + setHostnameAsFQDN: + type: boolean + shareProcessNamespace: + type: boolean + subdomain: + type: string + terminationGracePeriodSeconds: + format: int64 + type: integer + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + x-kubernetes-list-type: atomic + topologySpreadConstraints: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + matchLabelKeys: + items: + type: string + type: array + x-kubernetes-list-type: atomic + maxSkew: + format: int32 + type: integer + minDomains: + format: int32 + type: integer + nodeAffinityPolicy: + type: string + nodeTaintsPolicy: + type: string + topologyKey: + type: string + whenUnsatisfiable: + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + x-kubernetes-list-map-keys: + - topologyKey + - whenUnsatisfiable + x-kubernetes-list-type: map + volumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + x-kubernetes-list-type: atomic + wwids: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + x-kubernetes-list-type: atomic + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + clusterTrustBundle: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + name: + type: string + optional: + type: boolean + path: + type: string + signerName: + type: string + required: + - path + type: object + configMap: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + x-kubernetes-list-type: atomic + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + name: + default: "" + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + x-kubernetes-list-type: atomic + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + x-kubernetes-list-type: atomic + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + x-kubernetes-list-type: atomic + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + default: "" + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + type: object + updateStrategy: + properties: + rollingUpdate: + properties: + maxUnavailable: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + partition: + format: int32 + type: integer + type: object + type: + type: string + type: object + type: object + type: object + type: object + resources: + description: ResourceRequirements describes the compute resource requirements. + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + storage: + type: string + x-kubernetes-validations: + - message: Changing the storage size is not allowed + rule: self == oldSelf + storageClassName: + type: string + default: "" + x-kubernetes-validations: + - message: Changing the storage class name is not allowed + rule: self == oldSelf + version: + type: string + type: object + x-kubernetes-validations: + - message: Ephemeral or storage must be set + rule: 'self.ephemeral || has(self.storage)' + - message: Ephemeral and storage cannot be combined + rule: '!(self.ephemeral && has(self.storage))' + status: + description: RedisClusterStatus defines the observed state of RedisCluster + properties: + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + maxLength: 32768 + type: string + observedGeneration: + format: int64 + minimum: 0 + type: integer + reason: + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + nodes: + additionalProperties: + properties: + ip: + type: string + name: + type: string + isMaster: + type: boolean + replicaOf: + type: string + redisCLI: + type: string + required: + - ip + - name + type: object + type: object + status: + type: string + required: + - nodes + - status + type: object + type: object + served: true + storage: true + subresources: + scale: + labelSelectorPath: .status.selector + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml new file mode 100644 index 0000000..04d5362 --- /dev/null +++ b/config/crd/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- bases/redis.inditex.com_redisclusters.yaml + +patches: +- path: ./patches/operator-crd-patch.yaml +- path: ./patches/webhook_in_redisclusters.yaml diff --git a/config/crd/patches/operator-crd-patch.yaml b/config/crd/patches/operator-crd-patch.yaml new file mode 100644 index 0000000..7970584 --- /dev/null +++ b/config/crd/patches/operator-crd-patch.yaml @@ -0,0 +1,6 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: redisclusters.redis.inditex.com + annotations: + inditex.com/operator-version: 0.2.40 diff --git a/config/crd/patches/webhook_in_redisclusters.yaml b/config/crd/patches/webhook_in_redisclusters.yaml new file mode 100644 index 0000000..aa8df61 --- /dev/null +++ b/config/crd/patches/webhook_in_redisclusters.yaml @@ -0,0 +1,4 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: redisclusters.redis.inditex.com \ No newline at end of file diff --git a/config/crd/patches/webhook_in_redisclusters.yaml.tpl b/config/crd/patches/webhook_in_redisclusters.yaml.tpl new file mode 100644 index 0000000..e38f008 --- /dev/null +++ b/config/crd/patches/webhook_in_redisclusters.yaml.tpl @@ -0,0 +1,17 @@ +# The following patch enables a conversion webhook for the CRD +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: redisclusters.redis.inditex.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + caBundle: WEBHOOK_CA_CERT + service: + namespace: redis-operator-webhook + name: redis-operator-webhook-service + path: /convert + conversionReviewVersions: + - v1 diff --git a/config/deploy-profiles/debug/kustomization.yaml b/config/deploy-profiles/debug/kustomization.yaml new file mode 100644 index 0000000..d19aa5a --- /dev/null +++ b/config/deploy-profiles/debug/kustomization.yaml @@ -0,0 +1,18 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +patches: +- path: ./operator-env-patch.yaml + target: + group: apps + kind: Deployment + name: redis-operator + version: v1 +- path: ./operator-deployment-patch.yaml + +resources: +- ../../rbac +- ../../manager + +namespace: redis-operator + diff --git a/config/deploy-profiles/debug/operator-deployment-patch.yaml b/config/deploy-profiles/debug/operator-deployment-patch.yaml new file mode 100644 index 0000000..4e95431 --- /dev/null +++ b/config/deploy-profiles/debug/operator-deployment-patch.yaml @@ -0,0 +1,34 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-operator + labels: + control-plane: redis-operator +spec: + template: + metadata: + labels: + prometheus.io/scrape: "true" + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scheme: http + prometheus.io/scrape: "true" + spec: + containers: + - name: redis-operator + resources: + requests: + cpu: 0.3 + memory: 200Mi + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + ports: + - containerPort: 8080 + name: "metrics" + - containerPort: 40000 + name: debug + protocol: TCP diff --git a/config/deploy-profiles/debug/operator-env-patch.yaml b/config/deploy-profiles/debug/operator-env-patch.yaml new file mode 100644 index 0000000..f7c59c3 --- /dev/null +++ b/config/deploy-profiles/debug/operator-env-patch.yaml @@ -0,0 +1,23 @@ +- op: remove + path: /spec/template/spec/containers/0/livenessProbe +- op: remove + path: /spec/template/spec/containers/0/readinessProbe +- op: remove + path: /spec/template/spec/containers/0/args +- op: replace + path: /spec/template/spec/containers/0/command/0 + value: sleep +- op: replace + path: /spec/template/spec/containers/0/imagePullPolicy + value: Always +- op: add + path: /spec/template/spec/containers/0/command/1 + value: "18000" +- op: add + path: /spec/template/spec/containers/0/securityContext + value: + allowPrivilegeEscalation: false +- op: add + path: /spec/template/spec/securityContext + value: + runAsNonRoot: false diff --git a/config/deploy-profiles/debug/resources/namespace.yaml b/config/deploy-profiles/debug/resources/namespace.yaml new file mode 100644 index 0000000..5efde87 --- /dev/null +++ b/config/deploy-profiles/debug/resources/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: default diff --git a/config/deploy-profiles/dev/kustomization.yaml b/config/deploy-profiles/dev/kustomization.yaml new file mode 100644 index 0000000..4f71158 --- /dev/null +++ b/config/deploy-profiles/dev/kustomization.yaml @@ -0,0 +1,17 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../rbac +- ../../manager + +namespace: redis-operator + +patches: +- path: ./operator-env-patch.yaml + target: + group: apps + kind: Deployment + name: redis-operator + version: v1 +- path: ./operator-deployment-patch.yaml diff --git a/config/deploy-profiles/dev/operator-deployment-patch.yaml b/config/deploy-profiles/dev/operator-deployment-patch.yaml new file mode 100644 index 0000000..703494f --- /dev/null +++ b/config/deploy-profiles/dev/operator-deployment-patch.yaml @@ -0,0 +1,15 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-operator + labels: + control-plane: redis-operator +spec: + template: + spec: + containers: + - name: redis-operator + resources: + requests: + cpu: 0.3 + memory: 200Mi diff --git a/config/deploy-profiles/dev/operator-env-patch.yaml b/config/deploy-profiles/dev/operator-env-patch.yaml new file mode 100644 index 0000000..980ac7a --- /dev/null +++ b/config/deploy-profiles/dev/operator-env-patch.yaml @@ -0,0 +1,12 @@ +- op: remove + path: /spec/template/spec/containers/0/livenessProbe +- op: remove + path: /spec/template/spec/containers/0/readinessProbe +- op: replace + path: /spec/template/spec/containers/0/env + value: + - name: WATCH_NAMESPACE + value: watch-namespace +- op: replace + path: /spec/template/spec/containers/0/imagePullPolicy + value: Always \ No newline at end of file diff --git a/config/deploy-profiles/dev/resources/namespace.yaml b/config/deploy-profiles/dev/resources/namespace.yaml new file mode 100644 index 0000000..5efde87 --- /dev/null +++ b/config/deploy-profiles/dev/resources/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: default diff --git a/config/deploy-profiles/pro/kustomization.yaml b/config/deploy-profiles/pro/kustomization.yaml new file mode 100644 index 0000000..84fcace --- /dev/null +++ b/config/deploy-profiles/pro/kustomization.yaml @@ -0,0 +1,17 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../rbac +- ../../manager + +namespace: client-namespace-changeit + +patches: +- path: ./operator-env-patch.yaml + target: + group: apps + kind: Deployment + name: redis-operator + version: v1 +- path: ./operator-deployment-patch.yaml diff --git a/config/deploy-profiles/pro/operator-deployment-patch.yaml b/config/deploy-profiles/pro/operator-deployment-patch.yaml new file mode 100644 index 0000000..b8c225d --- /dev/null +++ b/config/deploy-profiles/pro/operator-deployment-patch.yaml @@ -0,0 +1,28 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-operator + labels: + control-plane: redis-operator +spec: + template: + metadata: + labels: + prometheus.io/scrape: "true" + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scheme: http + prometheus.io/scrape: "true" + spec: + containers: + - name: redis-operator + resources: + requests: + cpu: 0.3 + memory: 200Mi + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace diff --git a/config/deploy-profiles/pro/operator-env-patch.yaml b/config/deploy-profiles/pro/operator-env-patch.yaml new file mode 100644 index 0000000..237e2ef --- /dev/null +++ b/config/deploy-profiles/pro/operator-env-patch.yaml @@ -0,0 +1,4 @@ +- op: remove + path: /spec/template/spec/containers/0/livenessProbe +- op: remove + path: /spec/template/spec/containers/0/readinessProbe diff --git a/config/int-test/kustomization.yaml b/config/int-test/kustomization.yaml new file mode 100644 index 0000000..ac602a0 --- /dev/null +++ b/config/int-test/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +patchesStrategicMerge: +- ./operator-deployment-patch.yaml + +resources: +- resources/namespace.yaml +- ../samples +- ../rbac +- ../manager + diff --git a/config/int-test/operator-deployment-patch.yaml b/config/int-test/operator-deployment-patch.yaml new file mode 100644 index 0000000..da2181d --- /dev/null +++ b/config/int-test/operator-deployment-patch.yaml @@ -0,0 +1,25 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-operator + labels: + control-plane: redis-operator +spec: + template: + spec: + containers: + - name: redis-operator + resources: + limits: + cpu: "500m" + memory: 500Mi + requests: + cpu: 100m + memory: 100Mi + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + imagePullSecrets: + - name: regcred \ No newline at end of file diff --git a/config/int-test/resources/namespace.yaml b/config/int-test/resources/namespace.yaml new file mode 100644 index 0000000..5efde87 --- /dev/null +++ b/config/int-test/resources/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: default diff --git a/config/kustomization.yaml b/config/kustomization.yaml new file mode 100644 index 0000000..477a942 --- /dev/null +++ b/config/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- manager +- crd +- rbac +- webhook + diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml new file mode 100644 index 0000000..f790d22 --- /dev/null +++ b/config/manager/kustomization.yaml @@ -0,0 +1,17 @@ +namespace: default + +resources: +- operator.yaml + +generatorOptions: + disableNameSuffixHash: true + +configMapGenerator: +- files: + - redis_operator_config.yaml + name: redis-operator-config + +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + + diff --git a/config/manager/operator.yaml b/config/manager/operator.yaml new file mode 100644 index 0000000..05169d5 --- /dev/null +++ b/config/manager/operator.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-operator + labels: + control-plane: redis-operator +spec: + selector: + matchLabels: + control-plane: redis-operator + replicas: 1 + template: + metadata: + labels: + control-plane: redis-operator + spec: + securityContext: + runAsNonRoot: true + containers: + - command: + - /manager + args: + - --leader-elect + - --max-concurrent-reconciles + - "10" + image: redis-operator:0.3.0 + imagePullPolicy: Always + name: redis-operator + securityContext: + allowPrivilegeEscalation: false + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: "1" + memory: 1Gi + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.annotations['olm.targetNamespaces'] + + serviceAccountName: redis-operator-sa + terminationGracePeriodSeconds: 10 diff --git a/config/manager/redis_operator_config.yaml b/config/manager/redis_operator_config.yaml new file mode 100644 index 0000000..6553678 --- /dev/null +++ b/config/manager/redis_operator_config.yaml @@ -0,0 +1,11 @@ +apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 +kind: ControllerManagerConfig +health: + healthProbeBindAddress: :8081 +metrics: + bindAddress: 127.0.0.1:8080 +webhook: + port: 9443 +leaderElection: + leaderElect: true + resourceName: db95d8a6.inditex.com diff --git a/config/rbac/bases/cluster_role_binding.yaml b/config/rbac/bases/cluster_role_binding.yaml new file mode 100644 index 0000000..e9e059e --- /dev/null +++ b/config/rbac/bases/cluster_role_binding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: redis-operator-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: redis-operator-role +subjects: +- kind: ServiceAccount + name: redis-operator-sa + namespace: default diff --git a/config/rbac/bases/clusterrole.yaml b/config/rbac/bases/clusterrole.yaml new file mode 100644 index 0000000..0ed8a08 --- /dev/null +++ b/config/rbac/bases/clusterrole.yaml @@ -0,0 +1,93 @@ + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: redis-operator-role + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: +- apiGroups: + - "" + resources: + - configmap + - pods + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + - services + verbs: + - create + - delete + - get + - list +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +- apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/finalizers + verbs: + - update +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get + - patch + - update diff --git a/config/rbac/bases/leader_election_role.yaml b/config/rbac/bases/leader_election_role.yaml new file mode 100644 index 0000000..6334cc5 --- /dev/null +++ b/config/rbac/bases/leader_election_role.yaml @@ -0,0 +1,27 @@ +# permissions to do leader election. +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: leader-election-role +rules: +- apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch diff --git a/config/rbac/bases/leader_election_role_binding.yaml b/config/rbac/bases/leader_election_role_binding.yaml new file mode 100644 index 0000000..15f582e --- /dev/null +++ b/config/rbac/bases/leader_election_role_binding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: leader-election-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: leader-election-role +subjects: +- kind: ServiceAccount + name: redis-operator-sa + namespace: default diff --git a/config/rbac/bases/rediscluster_editor_role.yaml b/config/rbac/bases/rediscluster_editor_role.yaml new file mode 100644 index 0000000..1d6ad6e --- /dev/null +++ b/config/rbac/bases/rediscluster_editor_role.yaml @@ -0,0 +1,26 @@ +# permissions for end users to edit redisclusters. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: rediscluster-editor-role + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get diff --git a/config/rbac/bases/rediscluster_viewer_role.yaml b/config/rbac/bases/rediscluster_viewer_role.yaml new file mode 100644 index 0000000..dcdab50 --- /dev/null +++ b/config/rbac/bases/rediscluster_viewer_role.yaml @@ -0,0 +1,22 @@ +# permissions for end users to view redisclusters. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: rediscluster-viewer-role + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - get + - list + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get diff --git a/config/rbac/bases/role.yaml b/config/rbac/bases/role.yaml new file mode 100644 index 0000000..6b4c8cf --- /dev/null +++ b/config/rbac/bases/role.yaml @@ -0,0 +1,102 @@ + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: redis-operator-role +rules: +- apiGroups: + - "" + resources: + - configmaps + - pods + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + - services + verbs: + - create + - update + - delete + - get + - list +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - delete + - deletecollection +- apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/finalizers + verbs: + - update +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get + - patch + - update diff --git a/config/rbac/bases/role_binding.yaml b/config/rbac/bases/role_binding.yaml new file mode 100644 index 0000000..fc36a19 --- /dev/null +++ b/config/rbac/bases/role_binding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: redis-operator-rolebinding + namespace: default +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: redis-operator-role +subjects: +- kind: ServiceAccount + name: redis-operator-sa + namespace: default diff --git a/config/rbac/bases/service_account.yaml b/config/rbac/bases/service_account.yaml new file mode 100644 index 0000000..6addde5 --- /dev/null +++ b/config/rbac/bases/service_account.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: redis-operator-sa + namespace: default diff --git a/config/rbac/kustomization.yaml b/config/rbac/kustomization.yaml new file mode 100644 index 0000000..7f45f70 --- /dev/null +++ b/config/rbac/kustomization.yaml @@ -0,0 +1,15 @@ +resources: +- bases/leader_election_role.yaml +- bases/leader_election_role_binding.yaml +- bases/role.yaml +- bases/role_binding.yaml +- bases/service_account.yaml +- bases/rediscluster_editor_role.yaml + +namespace: default +# For each CRD, "Editor" and "Viewer" roles are scaffolded by +# default, aiding admins in cluster management. Those roles are +# not used by the Project itself. You can comment the following lines +# if you do not want those helpers be installed with your Project. +# - rediscluster_editor_role.yaml +# - rediscluster_viewer_role.yaml \ No newline at end of file diff --git a/config/rbac/rediscluster_editor_role.yaml b/config/rbac/rediscluster_editor_role.yaml new file mode 100644 index 0000000..8f9ec15 --- /dev/null +++ b/config/rbac/rediscluster_editor_role.yaml @@ -0,0 +1,27 @@ +# permissions for end users to edit redisclusters. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: redis-cluster-operator + app.kubernetes.io/managed-by: kustomize + name: rediscluster-editor-role +rules: +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get diff --git a/config/rbac/rediscluster_viewer_role.yaml b/config/rbac/rediscluster_viewer_role.yaml new file mode 100644 index 0000000..b879e49 --- /dev/null +++ b/config/rbac/rediscluster_viewer_role.yaml @@ -0,0 +1,23 @@ +# permissions for end users to view redisclusters. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/name: redis-cluster-operator + app.kubernetes.io/managed-by: kustomize + name: rediscluster-viewer-role +rules: +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - get + - list + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get diff --git a/config/samples/kustomization.yaml b/config/samples/kustomization.yaml new file mode 100644 index 0000000..e130ebe --- /dev/null +++ b/config/samples/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - redis_v1alpha1_rediscluster-ephemeral.yaml + +namespace: redis-operator diff --git a/config/samples/redis_v1_rediscluster.yaml b/config/samples/redis_v1_rediscluster.yaml new file mode 100644 index 0000000..8f5a485 --- /dev/null +++ b/config/samples/redis_v1_rediscluster.yaml @@ -0,0 +1,74 @@ +apiVersion: redis.inditex.com/v1 +kind: RedisCluster +metadata: + labels: + app.kubernetes.io/name: redis-cluster-operator + app.kubernetes.io/managed-by: kustomize + name: rediscluster-sample +spec: + replicas: 1 + ephemeral: true + # storage: 100Mi + accessModes: + - ReadWriteOnce + deletePVC: false + image: redis/redis-stack-server:7.4.0-v3 + purgekeysonrebalance: false + labels: + team: team-a + custom: labels + config: | + maxmemory 200mb + maxmemory-samples 5 + maxmemory-policy allkeys-lru + appendonly no + save "" + protected-mode no + loadmodule /usr/lib/redis/modules/redisgraph.so + # override: + # service: + # metadata: + # annotations: + # traffic.inditex.com/weight: "101" + # labels: + # inditex.com/test: "test" + # spec: + # ports: + # - name: prometheus + # port: 9090 + # targetPort: 9090 + # protocol: TCP + # selector: + # inditex.com/test: "test" + # statefulSet: + # metadata: + # annotations: + # traffic.inditex.com/weight: "10" + # spec: + # template: + # metadata: + # labels: + # inditex.com/test: "test" + # spec: + # tolerations: + # - key: "test" + # operator: "Equal" + # value: "test" + # effect: "NoSchedule" + # topologySpreadConstraints: + # - maxSkew: 1 + # topologyKey: kubernetes.io/hostname + # whenUnsatisfiable: DoNotSchedule + # labelSelector: + # matchLabels: + # app: foo + # matchLabelKeys: + # - pod-template-hash + # containers: + # - name: nginx + # image: nginx + # - name: redis + # env: + # - name: test + # value: test + # terminationGracePeriodSeconds: 10 diff --git a/config/samples/redis_v1alpha1_rediscluster-ephemeral.yaml b/config/samples/redis_v1alpha1_rediscluster-ephemeral.yaml new file mode 100644 index 0000000..4cf4f9e --- /dev/null +++ b/config/samples/redis_v1alpha1_rediscluster-ephemeral.yaml @@ -0,0 +1,34 @@ +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +metadata: + name: redis-cluster + namespace: redis-operator + labels: + tier: redis-cluster + team: team-a + custom: labels +spec: + config: | + maxmemory 90mb + maxmemory-samples 5 + maxmemory-policy allkeys-lru + protected-mode no + appendonly no + save "" + image: redis/redis-stack-server:7.4.0-v3 + purgekeysonrebalance: false + pdb: + enabled: true + pdbSizeUnavailable: 1 + replicas: 1 + ephemeral: true + accessModes: + - ReadWriteOnce + labels: + tier: redis-cluster + team: team-a + custom: labels + resources: + limits: + cpu: 100m + memory: 128Mi diff --git a/config/samples/redis_v1alpha1_rediscluster-multimodule.yaml b/config/samples/redis_v1alpha1_rediscluster-multimodule.yaml new file mode 100644 index 0000000..9df99de --- /dev/null +++ b/config/samples/redis_v1alpha1_rediscluster-multimodule.yaml @@ -0,0 +1,39 @@ +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +metadata: + name: redis-cluster-modules-test + namespace: redis-operator + labels: + tier: redis-cluster + team: team-a + custom: labels +spec: + config: | + maxmemory 90mb + cluster-enabled no + loadmodule /opt/redis-stack/lib/redisearch.so + loadmodule /opt/redis-stack/lib/rejson.so + loadmodule /opt/redis-stack/lib/redistimeseries.so + appendonly no + save "" + deletePVC: false + ephemeral: true + image: redis/redis-stack-server:7.4.0-v3 + labels: + app: redis-cluster-modules-test + domain: productandcatalog + tenant: za + application: kpiengine + layer: middleware-redis + platform: meccanoarteixo2 + environment: preint + version: 2.6.0 + template: senttpl-redis_2.6.0 + type: middleware + slot: meckpieng + replicas: 1 + resources: + limits: + cpu: 100m + memory: 128Mi + \ No newline at end of file diff --git a/config/samples/redis_v1alpha1_rediscluster-repmaster.yaml b/config/samples/redis_v1alpha1_rediscluster-repmaster.yaml new file mode 100644 index 0000000..31fedaa --- /dev/null +++ b/config/samples/redis_v1alpha1_rediscluster-repmaster.yaml @@ -0,0 +1,31 @@ +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +metadata: + name: redis-cluster + namespace: redis-operator + labels: + tier: redis-cluster + team: team-a + custom: labels +spec: + config: | + maxmemory 90mb + maxmemory-samples 5 + rdbcompression no + rdbchecksum no + appendonly no + save "" + protected-mode no + image: redis/redis-stack-server:7.4.0-v3 + purgekeysonrebalance: false + replicas: 3 + replicasPerMaster: 1 + ephemeral: true + labels: + tier: redis-cluster + team: team-a + custom: labels + resources: + limits: + cpu: 100m + memory: 1280Mi diff --git a/config/samples/redis_v1alpha1_rediscluster-storage.yaml b/config/samples/redis_v1alpha1_rediscluster-storage.yaml new file mode 100644 index 0000000..651af02 --- /dev/null +++ b/config/samples/redis_v1alpha1_rediscluster-storage.yaml @@ -0,0 +1,32 @@ +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +metadata: + name: redis-cluster + namespace: redis-operator + labels: + app: redis + team: team-a + custom: labels +spec: + config: | + maxmemory 90mb + maxmemory-samples 5 + maxmemory-policy allkeys-lru + appendonly yes + save 900 1 + protected-mode no + loadmodule /usr/lib/redis/modules/redisgraph.so + replicas: 1 + storage: 300Mi + accessModes: + - ReadWriteOnce + deletePVC: false + image: redis/redis-stack-server:7.4.0-v3 + purgekeysonrebalance: false + labels: + team: team-a + custom: labels + resources: + limits: + cpu: 100m + memory: 128Mi diff --git a/config/webhook/bases/allow-webhook-traffic.yaml b/config/webhook/bases/allow-webhook-traffic.yaml new file mode 100644 index 0000000..c74396c --- /dev/null +++ b/config/webhook/bases/allow-webhook-traffic.yaml @@ -0,0 +1,20 @@ +# This NetworkPolicy allows ingress traffic to your webhook server running +# as part of the controller-manager from specific namespaces and pods. CR(s) which uses webhooks +# will only work when applied in namespaces labeled with 'webhook: enabled' +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + labels: + app.kubernetes.io/name: redis-cluster-operator + name: allow-webhook-traffic + namespace: redis-operator +spec: + podSelector: + matchLabels: + control-plane: redis-operator-webhook + policyTypes: + - Ingress + ingress: + - ports: + - protocol: TCP + port: 9443 diff --git a/config/webhook/bases/deployment.yaml b/config/webhook/bases/deployment.yaml new file mode 100644 index 0000000..934faf4 --- /dev/null +++ b/config/webhook/bases/deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + control-plane: redis-operator-webhook + name: redis-operator-webhook + namespace: redis-operator +spec: + replicas: 1 + selector: + matchLabels: + control-plane: redis-operator-webhook + template: + metadata: + labels: + control-plane: redis-operator-webhook + domain: DOMAIN + environment: ENVIRONMENT + layer: middleware-redisoperator-webhook + slot: default + tenant: TENANT + type: middleware + spec: + containers: + - command: + - /webhook + image: redis-operator-webhook + imagePullPolicy: Always + name: redis-operator-webhook + ports: + - containerPort: 9443 + name: webhook-server + protocol: TCP + resources: + limits: + cpu: "1" + memory: 1Gi + requests: + cpu: "0.3" + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + securityContext: + runAsNonRoot: true + serviceAccountName: redis-operator-sa + terminationGracePeriodSeconds: 10 + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: redis-operator-webhook-service-cert diff --git a/config/webhook/bases/namespace.yaml b/config/webhook/bases/namespace.yaml new file mode 100644 index 0000000..f2713a3 --- /dev/null +++ b/config/webhook/bases/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: redis-operator-webhook diff --git a/config/webhook/bases/service.yaml b/config/webhook/bases/service.yaml new file mode 100644 index 0000000..2468215 --- /dev/null +++ b/config/webhook/bases/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: redis-cluster-operator + app.kubernetes.io/managed-by: kustomize + name: redis-operator-webhook-service + namespace: redis-operator +spec: + ports: + - port: 443 + protocol: TCP + targetPort: 9443 + selector: + control-plane: redis-operator-webhook diff --git a/config/webhook/kustomization.yaml b/config/webhook/kustomization.yaml new file mode 100644 index 0000000..c051651 --- /dev/null +++ b/config/webhook/kustomization.yaml @@ -0,0 +1,9 @@ +resources: +- ../rbac +- bases/service.yaml +- bases/deployment.yaml +- bases/secret.yaml +- bases/namespace.yaml +- bases/allow-webhook-traffic.yaml + +namespace: redis-operator-webhook \ No newline at end of file diff --git a/controllers/assert.go b/controllers/assert.go new file mode 100644 index 0000000..34e39ea --- /dev/null +++ b/controllers/assert.go @@ -0,0 +1,32 @@ +package controllers + +import ( + "fmt" + redisv1 "github.com/inditextech/redisoperator/api/v1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "testing" +) + +func assertStatusEqual(t *testing.T, redis *redisv1.RedisCluster, expectedStatus string) { + got := redis.Status.Status + if expectedStatus != got { + fmt.Printf("expected status '%s' but got '%s'\n", expectedStatus, got) + t.Fail() + } +} + +func assertConditionTrue(t *testing.T, redis *redisv1.RedisCluster, condition metav1.Condition) { + conditions := redis.Status.Conditions + if !(meta.IsStatusConditionTrue(conditions, condition.Type)) { + fmt.Printf("expected condition '%s' to be true but conditions were '%v'\n", condition.Type, conditions) + t.Fail() + } +} +func assertConditionFalse(t *testing.T, redis *redisv1.RedisCluster, condition metav1.Condition) { + conditions := redis.Status.Conditions + if meta.IsStatusConditionTrue(conditions, condition.Type) { + fmt.Printf("expected condition '%s' to be false but conditions were '%v'\n", condition.Type, conditions) + t.Fail() + } +} diff --git a/controllers/conditions.go b/controllers/conditions.go new file mode 100644 index 0000000..236f1a2 --- /dev/null +++ b/controllers/conditions.go @@ -0,0 +1,14 @@ +package controllers + +import ( + "github.com/go-logr/logr" + redisv1 "github.com/inditextech/redisoperator/api/v1" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func SetConditionFalse(log logr.Logger, redisCluster *redisv1.RedisCluster, condition metav1.Condition) { + log.Info("Condition set to false", "condition", condition) + condition.Status = metav1.ConditionFalse + meta.SetStatusCondition(&redisCluster.Status.Conditions, condition) +} diff --git a/controllers/mock_factory.go b/controllers/mock_factory.go new file mode 100644 index 0000000..c7ec71d --- /dev/null +++ b/controllers/mock_factory.go @@ -0,0 +1,161 @@ +package controllers + +import ( + "context" + "fmt" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + r "github.com/inditextech/redisoperator/internal/redis" + + ginkgo "github.com/onsi/ginkgo/v2" + v1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/tools/record" + "sigs.k8s.io/controller-runtime/pkg/log/zap" + + "strconv" + + "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" +) + +func newClient(rc *redisv1.RedisCluster, s *runtime.Scheme) client.Client { + return fake.NewClientBuilder().WithObjects(rc).WithScheme(s).Build() +} + +func newScheme() *runtime.Scheme { + sb := redisv1.SchemeBuilder + s, err := sb.Build() + if err != nil { + fmt.Println(err) + } + return s +} + +func newReconciler(redis *redisv1.RedisCluster, recorder record.EventRecorder) *RedisClusterReconciler { + ctrl.SetLogger(zap.New(zap.WriteTo(ginkgo.GinkgoWriter), zap.UseDevMode(true))) + + var defaultReplicas int32 = 3 + + scheme := newScheme() + + reconciler := &RedisClusterReconciler{ + Client: newClient(redis, scheme), + Scheme: scheme, + Log: ctrl.Log.WithName("controllers").WithName("rediscluster"), + MaxConcurrentReconciles: 10, + ConcurrentMigrate: 3, + Recorder: recorder, + GetReadyNodesFunc: mockReadyNodes(make(map[string]*redisv1.RedisNode)), + FindExistingStatefulSetFunc: mockStatefulSet(newStatefulSet(redis, defaultReplicas)), + FindExistingConfigMapFunc: mockConfigMap(newConfigMap()), + } + + return reconciler +} + +func newContext() context.Context { + return context.Background() +} + +func newRequest(rc *redisv1.RedisCluster) ctrl.Request { + return ctrl.Request{ + NamespacedName: types.NamespacedName{ + Namespace: rc.Namespace, + Name: rc.Name, + }, + } +} + +func newRedisCluster() *redisv1.RedisCluster { + om := metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "unittest", + Labels: map[string]string{ + "label-key": "label-value", + }, + } + return &redisv1.RedisCluster{ + ObjectMeta: om, + Status: redisv1.RedisClusterStatus{ + Status: redisv1.StatusReady, + Conditions: []metav1.Condition{}, + }, + Spec: redisv1.RedisClusterSpec{ + Replicas: 3, + Config: r.MapToConfigString(r.MergeWithDefaultConfig(nil, false, 0)), + Image: "redis-operator:0.3.0", + Resources: &corev1.ResourceRequirements{ + Limits: newLimits(), + Requests: newRequests(), + }, + }, + } +} + +func newRequests() corev1.ResourceList { + return corev1.ResourceList{} +} + +func newLimits() corev1.ResourceList { + return corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("1"), + corev1.ResourceMemory: resource.MustParse("16Gi"), + } +} + +func mockReadyNodes(nodes map[string]*redisv1.RedisNode) func(ctx context.Context, redisCluster *redisv1.RedisCluster) (map[string]*redisv1.RedisNode, error) { + return func(ctx context.Context, redisCluster *redisv1.RedisCluster) (map[string]*redisv1.RedisNode, error) { + return nodes, nil + } +} + +func newReadyNodes(amount int) map[string]*redisv1.RedisNode { + readyNodes := make(map[string]*redisv1.RedisNode) + for i := 0; i < amount; i++ { + readyNodes[strconv.Itoa(i)] = &redisv1.RedisNode{} + } + return readyNodes +} + +func mockClusterInfo(ci map[string]string) func(ctx context.Context, redisCluster *redisv1.RedisCluster) map[string]string { + return func(ctx context.Context, redisCluster *redisv1.RedisCluster) map[string]string { + return ci + } +} + +func mockStatefulSet(sset *v1.StatefulSet) func(ctx context.Context, req ctrl.Request) (*v1.StatefulSet, error) { + return func(ctx context.Context, req ctrl.Request) (*v1.StatefulSet, error) { + return sset, nil + } +} + +func newStatefulSet(redis *redisv1.RedisCluster, numReplicas int32) *v1.StatefulSet { + req := newRequest(redis) + spec := redis.Spec + labels := make(map[string]string) + sset, _ := r.CreateStatefulSet(newContext(), req, spec, labels) + sset.Spec.Replicas = &numReplicas + for k := range sset.Spec.Template.Spec.Containers { + sset.Spec.Template.Spec.Containers[k].Resources.Limits[corev1.ResourceCPU] = *redis.Spec.Resources.Limits.Cpu() + sset.Spec.Template.Spec.Containers[k].Resources.Limits[corev1.ResourceMemory] = *redis.Spec.Resources.Limits.Memory() + sset.Spec.Template.Spec.Containers[k].Resources.Requests[corev1.ResourceCPU] = *redis.Spec.Resources.Requests.Cpu() + sset.Spec.Template.Spec.Containers[k].Resources.Requests[corev1.ResourceMemory] = *redis.Spec.Resources.Requests.Memory() + } + return sset +} + +func mockConfigMap(configMap *corev1.ConfigMap) func(ctx context.Context, req ctrl.Request) (*corev1.ConfigMap, error) { + return func(ctx context.Context, req ctrl.Request) (*corev1.ConfigMap, error) { + return configMap, nil + } +} + +func newConfigMap() *corev1.ConfigMap { + return &corev1.ConfigMap{} +} diff --git a/controllers/redis_manager.go b/controllers/redis_manager.go new file mode 100644 index 0000000..431aa50 --- /dev/null +++ b/controllers/redis_manager.go @@ -0,0 +1,1844 @@ +package controllers + +import ( + "context" + "crypto/md5" + "encoding/hex" + "errors" + "fmt" + "maps" + "math" + "reflect" + "sort" + "strconv" + "strings" + "time" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/internal/kubernetes" + redis "github.com/inditextech/redisoperator/internal/redis" + "github.com/inditextech/redisoperator/internal/utils" + + "github.com/go-logr/logr" + errors2 "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + + redisclient "github.com/redis/go-redis/v9" + v1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + pv1 "k8s.io/api/policy/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/util/retry" + controllerruntime "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + CONFIG_CHECKSUM_ANNOTATION = "inditex.com/redis-conf" +) + +type RedisClient struct { + NodeId string + RedisClient *redisclient.Client + IP string +} + +var redisClients map[string]*RedisClient = make(map[string]*RedisClient) + +func (r *RedisClusterReconciler) RefreshRedisClients(ctx context.Context, redisCluster *redisv1.RedisCluster) { + nodes, _ := r.GetReadyNodes(ctx, redisCluster) + for nodeId, node := range nodes { + secret, _ := r.GetRedisSecret(redisCluster) + redisClient := r.GetRedisClient(ctx, node.IP, secret) + err := redisClient.Ping(ctx).Err() + redisClient.Close() + if err != nil { + r.LogInfo(redisCluster.NamespacedName(), "RefreshRedisClients - Redis client for node is errorring", "node", nodeId, "error", err) + redisClients[nodeId] = nil + } + } +} + +func (r *RedisClusterReconciler) GetRedisClientForNode(ctx context.Context, nodeId string, redisCluster *redisv1.RedisCluster) (*redisclient.Client, error) { + nodes, _ := r.GetReadyNodes(ctx, redisCluster) + // If redisClient for this node has not been initialized, or the IP has changed + if nodes[nodeId] == nil { + return nil, fmt.Errorf("node %s does not exist", nodeId) + } + if redisClients[nodeId] == nil || redisClients[nodeId].IP != nodes[nodeId].IP { + secret, _ := r.GetRedisSecret(redisCluster) + rdb := r.GetRedisClient(ctx, nodes[nodeId].IP, secret) + redisClients[nodeId] = &RedisClient{NodeId: nodeId, RedisClient: rdb, IP: nodes[nodeId].IP} + } + + return redisClients[nodeId].RedisClient, nil +} + +func (r *RedisClusterReconciler) RemoveRedisClientForNode(nodeId string, ctx context.Context, redisCluster *redisv1.RedisCluster) { + if redisClients[nodeId] == nil { + return + } + redisClients[nodeId].RedisClient.Close() + redisClients[nodeId] = nil +} + +func (r *RedisClusterReconciler) ConfigureRedisCluster(ctx context.Context, redisCluster *redisv1.RedisCluster, clusterNodes kubernetes.ClusterNodeList) error { + r.LogInfo(redisCluster.NamespacedName(), "ConfigureRedisCluster", "readyNodes", clusterNodes.SimpleNodesObject()) + err := clusterNodes.LoadInfoForNodes() + if err != nil { + return err + } + err = clusterNodes.ClusterMeet(ctx) + if err != nil { + r.Recorder.Event(redisCluster, "Warning", "ClusterMeet", "Error when attempting ClusterMeet") + return err + } + + podsReady, err := r.AllPodsReady(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check ready pods") + } + if redisCluster.Spec.Ephemeral && podsReady { + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + err := clusterNodes.RemoveClusterOutdatedNodes(ctx, redisCluster, logger) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check outdated nodes") + } + } + + if podsReady { + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + err := clusterNodes.EnsureClusterRatio(ctx, redisCluster, logger) + if err != nil { + return err + } + + err = clusterNodes.AssignMissingSlots() + if err != nil { + r.Recorder.Event(redisCluster, "Warning", "SlotAssignment", "Error when attempting AssignSlots") + return err + } + } + + return nil +} + +func (r *RedisClusterReconciler) UpdateScalingStatus(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + sset, ssetErr := r.FindExistingStatefulSetFunc(ctx, controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if ssetErr != nil { + return ssetErr + } + currSsetReplicas := *(sset.Spec.Replicas) + realExpectedReplicas := int32(redisCluster.NodesNeeded()) + + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + + if realExpectedReplicas < currSsetReplicas { + redisCluster.Status.Status = redisv1.StatusScalingDown + SetConditionFalse(logger, redisCluster, redisv1.ConditionScalingUp) + r.SetConditionTrue(redisCluster, redisv1.ConditionScalingDown, fmt.Sprintf("Scaling down from %d to %d nodes", currSsetReplicas, redisCluster.Spec.Replicas)) + } + if realExpectedReplicas > currSsetReplicas { + redisCluster.Status.Status = redisv1.StatusScalingUp + r.SetConditionTrue(redisCluster, redisv1.ConditionScalingUp, fmt.Sprintf("Scaling up from %d to %d nodes", currSsetReplicas, redisCluster.Spec.Replicas)) + SetConditionFalse(logger, redisCluster, redisv1.ConditionScalingDown) + } + if realExpectedReplicas == currSsetReplicas { + if redisCluster.Status.Status == redisv1.StatusScalingDown { + redisCluster.Status.Status = redisv1.StatusReady + SetConditionFalse(logger, redisCluster, redisv1.ConditionScalingDown) + } + if redisCluster.Status.Status == redisv1.StatusScalingUp { + if len(redisCluster.Status.Nodes) == int(currSsetReplicas) { + redisCluster.Status.Status = redisv1.StatusReady + SetConditionFalse(logger, redisCluster, redisv1.ConditionScalingUp) + } + } + } + + // initialize scaling up and down conditions if they haven't been set yet + c := meta.FindStatusCondition(redisCluster.Status.Conditions, redisv1.StatusScalingDown) + if c == nil { + SetConditionFalse(logger, redisCluster, redisv1.ConditionScalingDown) + } + + c = meta.FindStatusCondition(redisCluster.Status.Conditions, redisv1.StatusScalingUp) + if c == nil { + SetConditionFalse(logger, redisCluster, redisv1.ConditionScalingUp) + } + + return nil +} + +func (r *RedisClusterReconciler) UpdateUpgradingStatus(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + req := controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}} + statefulSet, err := r.FindExistingStatefulSet(ctx, req) + if err != nil { + return err + } + + // Handle changes in spec.override + _, changed := r.OverrideStatefulSet(ctx, req, redisCluster, statefulSet) + + if changed { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Override changed") + redisCluster.Status.Status = redisv1.StatusUpgrading + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, "Override changed") + return nil + } + + ns := redisCluster.NamespacedName() + + configMap, err := r.FindExistingConfigMapFunc(ctx, controllerruntime.Request{NamespacedName: ns}) + if err != nil { + return err + } + + if !reflect.DeepEqual(statefulSet.Spec.UpdateStrategy, v1.StatefulSetUpdateStrategy{}) { + // An UpdateStrategy is already set. + // We can reuse the partition as the starting partition + // We should only do this for partitions higher than zero, + // as we cannot unset the partition after an upgrade, and the default will be zero. + // + // So 0 partition will trigger a bad thing, where the whole cluster will be immediately applied, + // and all pods destroyed simultaneously. + // We need to only set the starting partition if it is higher than 0, + // otherwise use the replica count one from before. + if int(*(statefulSet.Spec.UpdateStrategy.RollingUpdate.Partition)) > 0 { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Previous upgrade not complete") + redisCluster.Status.Status = redisv1.StatusUpgrading + return nil + } + } + + if redisCluster.Spec.Labels != nil { + // get the actual value of labels configured in the redisCluster object + desiredLabels := make(map[string]string) + maps.Copy(desiredLabels, *redisCluster.Spec.Labels) + + // Add labels from override + if redisCluster.Spec.Override != nil && redisCluster.Spec.Override.StatefulSet != nil && redisCluster.Spec.Override.StatefulSet.Spec.Template.Labels != nil { + for k2, v2 := range redisCluster.Spec.Override.StatefulSet.Spec.Template.Labels { + desiredLabels[k2] = v2 + } + } + + r.LogInfo(redisCluster.NamespacedName(), "Expected real labels configured in RedisCluster object", "Spec.Labels", desiredLabels) + + // get the current value of labels configured in the statefulset object + observedLabels := statefulSet.Spec.Template.Labels + r.LogInfo(redisCluster.NamespacedName(), "Current statefulset configuration", "Spec.Template.Labels", observedLabels) + + // Validate if were added new labels + for key, value := range desiredLabels { + // check if key exists in the map element + // and get the value from spec template statefulset + val, exists := statefulSet.Spec.Template.Labels[key] + if !exists { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Redis Labels Changed", "observed", observedLabels, "desired", desiredLabels) + redisCluster.Status.Status = redisv1.StatusUpgrading + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, "Redis Labels Changed") + return nil + } else { + if value != val { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Redis Labels Changed", "observed", observedLabels, "desired", desiredLabels) + redisCluster.Status.Status = redisv1.StatusUpgrading + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, "Redis Labels Changed") + return nil + } + } + } + + defaultLabels := map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + } + + // add defaultLabels + maps.Copy(desiredLabels, defaultLabels) + + // Validate if were deleted existing labels + for key := range observedLabels { + // check if key exists in the map element + // and get the value from spec template statefulset + _, exists := desiredLabels[key] + + if !exists { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Redis Labels Changed", "observed", observedLabels, "desired", desiredLabels) + redisCluster.Status.Status = redisv1.StatusUpgrading + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, "Redis Labels Changed") + return nil + } + } + } + + // Check whether the redis configuration has changed, + // as this will constitute a cluster upgrade + configChanged, reason := r.isConfigChanged(redisCluster, statefulSet, configMap) + if configChanged { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", reason) + redisCluster.Status.Status = redisv1.StatusUpgrading + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, "Configuration in redis.conf is being updated") + return nil + } + + if redisCluster.Spec.Resources != nil { + // Check whether any upgradeable object changes have been made. + // Any change in these attributes or properties will constitute a live upgrade. + desiredResources := *(redisCluster.Spec.Resources) + observedResources := statefulSet.Spec.Template.Spec.Containers[0].Resources + + // We need to individually compare the resources we care about, + // as DeepEqual gets it wrong for CPU quantities + if !reflect.DeepEqual(observedResources.Limits.Cpu().String(), desiredResources.Limits.Cpu().String()) || + !reflect.DeepEqual(observedResources.Limits.Memory().String(), desiredResources.Limits.Memory().String()) || + !reflect.DeepEqual(observedResources.Requests.Cpu().String(), desiredResources.Requests.Cpu().String()) || + !reflect.DeepEqual(observedResources.Requests.Memory().String(), desiredResources.Requests.Memory().String()) { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Redis Resource Requests & Limits Changed", "observed", observedResources, "desired", desiredResources) + + redisCluster.Status.Status = redisv1.StatusUpgrading + + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, "Redis Resource Requests & Limits Changed") + + return nil + } + } + + // Check whether any upgradeable object changes have been made. + // Any change in these attributes or properties will constitute a live upgrade. + desiredImage := redisCluster.Spec.Image + observedImage := statefulSet.Spec.Template.Spec.Containers[0].Image + if observedImage != desiredImage { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Upgrade Issued", "reason", "Redis Image Changed", "observed", observedImage, "desired", desiredImage) + redisCluster.Status.Status = redisv1.StatusUpgrading + + r.SetConditionTrue(redisCluster, redisv1.ConditionUpgrading, fmt.Sprintf("Redis Image Changed: observed %s desired %s", observedImage, desiredImage)) + + return nil + } + + redisCluster.Status.Status = redisv1.StatusReady + + c := meta.FindStatusCondition(redisCluster.Status.Conditions, redisv1.StatusUpgrading) + if c != nil && c.Status == metav1.ConditionTrue { + SetConditionFalse(r.GetHelperLogger(redisCluster.NamespacedName()), redisCluster, redisv1.ConditionUpgrading) + } + + return nil +} + +func (r *RedisClusterReconciler) CheckPDB(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // Check if the pdb availables are changed + if redisCluster.Spec.Pdb.Enabled && redisCluster.Spec.Replicas > 1 { + pdb, err := r.FindExistingPodDisruptionBudgetFunc(ctx, controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-pdb", Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to get PodDisruptionBudget") + } + if pdb != nil { + maxUnavailableFromRedisCluster := &redisCluster.Spec.Pdb.PdbSizeUnavailable + minAvailableFromRedisCluster := &redisCluster.Spec.Pdb.PdbSizeAvailable + if redisCluster.Spec.Pdb.PdbSizeAvailable.IntVal == 0 && redisCluster.Spec.Pdb.PdbSizeAvailable.StrVal == "" { + minAvailableFromRedisCluster = nil + } + if redisCluster.Spec.Pdb.PdbSizeUnavailable.IntVal == 0 && redisCluster.Spec.Pdb.PdbSizeUnavailable.StrVal == "" { + maxUnavailableFromRedisCluster = nil + } + if maxUnavailableFromRedisCluster != nil { + if pdb.Spec.MaxUnavailable != nil { + if pdb.Spec.MaxUnavailable.IntVal != redisCluster.Spec.Pdb.PdbSizeUnavailable.IntVal || pdb.Spec.MaxUnavailable.StrVal != redisCluster.Spec.Pdb.PdbSizeUnavailable.StrVal { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Configured Issued", "reason", "PDB changed update pdb deployed", "OldMaxUnavailable", pdb.Spec.MaxUnavailable, "NewMaxUnavailable", maxUnavailableFromRedisCluster) + redisCluster.Status.Status = redisv1.StatusConfiguring + r.Recorder.Event(redisCluster, "Normal", "UpdatePdb", "Cluster configuring pdb by update") + return nil + } + } else { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Configured Issued", "reason", "PBD changed update pdb deployed", "OldMaxUnavailable", pdb.Spec.MaxUnavailable, "NewMaxUnavailable", maxUnavailableFromRedisCluster) + redisCluster.Status.Status = redisv1.StatusConfiguring + r.Recorder.Event(redisCluster, "Normal", "UpdatePdb", "Cluster configuring pdb by update") + return nil + } + + } else if minAvailableFromRedisCluster != nil { + if pdb.Spec.MinAvailable != nil { + if pdb.Spec.MinAvailable.IntVal != redisCluster.Spec.Pdb.PdbSizeAvailable.IntVal || pdb.Spec.MinAvailable.StrVal != redisCluster.Spec.Pdb.PdbSizeAvailable.StrVal { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Configured Issued", "reason", "PDB changed update pdb deployed", "OldMinAvailable", pdb.Spec.MinAvailable, "NewMinAvailable", minAvailableFromRedisCluster) + redisCluster.Status.Status = redisv1.StatusConfiguring + r.Recorder.Event(redisCluster, "Normal", "UpdatePdb", "Cluster configuring pdb by update") + return nil + } + } else { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Configured Issued", "reason", "PDB changed update pdb deployed", "OldMinAvailable", pdb.Spec.MinAvailable, "NewMinAvailable", minAvailableFromRedisCluster) + redisCluster.Status.Status = redisv1.StatusConfiguring + r.Recorder.Event(redisCluster, "Normal", "UpdatePdb", "Cluster configuring pdb by update") + return nil + } + } + // Selector match labels check + desiredLabels := map[string]string{redis.RedisClusterLabel: redisCluster.ObjectMeta.Name, r.GetStatefulSetSelectorLabel(redisCluster): "redis"} + if len(pdb.Spec.Selector.MatchLabels) != len(desiredLabels) { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Configured Issued", "reason", "PDB selector match labels", "existing labels", pdb.Spec.Selector.MatchLabels, "desired labels", desiredLabels) + redisCluster.Status.Status = redisv1.StatusConfiguring + r.Recorder.Event(redisCluster, "Normal", "UpdatePdb", "Cluster configuring pdb by update") + return nil + } + for k, v := range desiredLabels { + if pdb.Spec.Selector.MatchLabels[k] != v { + r.LogInfo(redisCluster.NamespacedName(), "Cluster Configured Issued", "reason", "PDB selector match labels", "existing labels", pdb.Spec.Selector.MatchLabels, "desired labels", desiredLabels) + redisCluster.Status.Status = redisv1.StatusConfiguring + r.Recorder.Event(redisCluster, "Normal", "UpdatePdb", "Cluster configuring pdb by update") + return nil + } + } + } + } else { + // Delete PodDisruptionBudget if exists + pdb, err := r.FindExistingPodDisruptionBudgetFunc(ctx, controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-pdb", Namespace: redisCluster.Namespace}}) + if err == nil && pdb != nil { + pdb.Name = redisCluster.Name + "-pdb" + pdb.Namespace = redisCluster.Namespace + err := r.DeletePodDisruptionBudget(ctx, pdb, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to delete PodDisruptionBudget") + } else { + r.LogInfo(redisCluster.NamespacedName(), "PodDisruptionBudget Deleted") + } + } + } + return nil +} + +func (r *RedisClusterReconciler) UpgradeCluster(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + req := controllerruntime.Request{ + NamespacedName: types.NamespacedName{ + Name: redisCluster.Name, + Namespace: redisCluster.Namespace, + }, + } + + existingStateFulSet, err := r.FindExistingStatefulSet(ctx, req) + if err != nil { + return err + } + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + + // We need to ensure that the upgrade is really necessary, + // and we are not just host to a double reconciliation attempt + err = r.UpdateUpgradingStatus(ctx, redisCluster) + if err != nil { + return fmt.Errorf("could not update upgrading status: %w", err) + } + if redisCluster.Status.Status != redisv1.StatusUpgrading { + // If the upgrade is no longer necessary, we can stop here and return. + // We also need to make sure that the partition is not higher than 0, + // As that would mean we are in the midst of an upgrade and should continue upgrading regardless + if !reflect.DeepEqual(existingStateFulSet.Spec.UpdateStrategy, v1.StatefulSetUpdateStrategy{}) { + if int(*(existingStateFulSet.Spec.UpdateStrategy.RollingUpdate.Partition)) == 0 { + // The partition is 0 meaning we are probably already done with the upgrade and this is a double reconciliation loop + // We should still run a Rebalance for in case it failed while upgrading the latest pod, + // and skipped the final rebalance. + // If it did complete entirely, both of the following methods will proceed very quickly. + podReadyWaiter := utils.PodReadyWait{ + Client: r.Client, + } + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ), + } + r.LogInfo(redisCluster.NamespacedName(), "Waiting for pods to become ready", "expectedReplicas", int(*(existingStateFulSet.Spec.Replicas))) + err = podReadyWaiter.WaitForPodsToBecomeReady(ctx, 5*time.Second, 5*time.Minute, &listOptions, int(*(existingStateFulSet.Spec.Replicas))) + if err != nil { + return err + } + + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + // Do one last Rebalance to make sure the last upgraded node gets it's fair share of slots + err = clusterNodes.RebalanceCluster(ctx, map[string]int{}, kubernetes.MoveSlotOption{ + PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance, + }, logger) + if err != nil { + return err + } + + return nil + } + } else { + return nil + } + + } + + // Scale up the cluster adding one extra node if needed (no purge on rebalance nor replicas per master) + scaledBeforeUpgrade := false + if !redisCluster.Spec.PurgeKeysOnRebalance && redisCluster.Spec.ReplicasPerMaster == 0 { + r.LogInfo(redisCluster.NamespacedName(), "Scaling Up the cluster before upgrading") + _, err = r.scaleUpAndWait(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when scaling up before upgrade") + return err + } + scaledBeforeUpgrade = true + } + + // RedisCluster .Spec.Labels + mergedLabels := *redisCluster.Spec.Labels + defaultLabels := map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + } + maps.Copy(mergedLabels, defaultLabels) + + // Get configmap + configMap, err := r.FindExistingConfigMapFunc(ctx, req) + if err != nil { + return err + } + configMap.Labels = mergedLabels + + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(redisCluster) + r.LogInfo(redisCluster.NamespacedName(), "Updating configmap", "configmap", configMap.Name) + // Update ConfigMap + err = r.Client.Update(ctx, configMap) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when creating configmap") + return err + } + + // Get Service + service, err := r.FindExistingService(ctx, req) + if err != nil { + return err + } + // Update the Service labels + for k, v := range mergedLabels { + service.Labels[k] = v + } + r.LogInfo(redisCluster.NamespacedName(), "Updating service", "service", service.Name) + err = r.Client.Update(ctx, service) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating service") + } + + // Get existing StateFulSet + existingStateFulSet, err = r.FindExistingStatefulSet(ctx, req) + if err != nil { + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Updating statefulset", "StateFulSet", existingStateFulSet.Name) + // Update StateFulSet .Spec.Template.Labels + existingStateFulSet.Labels = mergedLabels + + // Add labels from override + if redisCluster.Spec.Override.StatefulSet != nil && redisCluster.Spec.Override.StatefulSet.Spec.Template.Labels != nil { + for k2, v2 := range redisCluster.Spec.Override.StatefulSet.Spec.Template.Labels { + mergedLabels[k2] = v2 + } + } + + existingStateFulSet.Spec.Template.ObjectMeta.Labels = mergedLabels + // Update StateFulSet .Spec.Template.Spec.Containers[0].Resources + if redisCluster.Spec.Resources != nil && existingStateFulSet.Spec.Template.Spec.Containers != nil && len(existingStateFulSet.Spec.Template.Spec.Containers) > 0 { + existingStateFulSet.Spec.Template.Spec.Containers[0].Resources = *redisCluster.Spec.Resources + existingStateFulSet.Spec.Template.Spec.Containers[0].Image = redisCluster.Spec.Image + } + // Update StatefulSet annotations with calculated config checksum if needed + existingStateFulSet = r.addConfigChecksumAnnotation(existingStateFulSet, redisCluster) + + // Handle changes in spec.override + existingStateFulSet, _ = r.OverrideStatefulSet(ctx, req, redisCluster, existingStateFulSet) + + // Before we proceed, we want to wait for all pods to be ready. + // We might have just finished a scaling event or something of the likes, + // and if we upgrade straight away, we will run into bugs where pods cannot be contacted for the upgrade + podReadyWaiter := utils.PodReadyWait{ + Client: r.Client, + } + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ), + } + r.LogInfo(redisCluster.NamespacedName(), "Waiting for pods to become ready", "expectedReplicas", int(*(existingStateFulSet.Spec.Replicas))) + err = podReadyWaiter.WaitForPodsToBecomeReady(ctx, 5*time.Second, 5*time.Minute, &listOptions, int(*(existingStateFulSet.Spec.Replicas))) + if err != nil { + return err + } + + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + err = clusterNodes.EnsureClusterSlotsStable(ctx, logger) + if err != nil { + return err + } + + startingPartition := int(*(existingStateFulSet.Spec.Replicas)) - 1 + + if !reflect.DeepEqual(existingStateFulSet.Spec.UpdateStrategy, v1.StatefulSetUpdateStrategy{}) { + // An UpdateStrategy is already set. + // We can reuse the partition as the starting partition + // We should only do this for partitions higher than zero, + // as we cannot unset the partition after an upgrade, and the default will be zero. + // + // So 0 partition will trigger a bad thing, where the whole cluster will be immediately applied, + // and all pods destroyed simultaneously. + // We need to only set the starting partition if it is higher than 0, + // otherwise use the replica count one from before. + if int(*(existingStateFulSet.Spec.UpdateStrategy.RollingUpdate.Partition)) > 0 { + r.LogInfo(redisCluster.NamespacedName(), "Update Strategy already set. Reusing partition", "partition", existingStateFulSet.Spec.UpdateStrategy.RollingUpdate.Partition) + startingPartition = int(*(existingStateFulSet.Spec.UpdateStrategy.RollingUpdate.Partition)) + } + } + + if redisCluster.Spec.ReplicasPerMaster == 0 { + // Loop over the cluster partitions upgrading once at a time + for partition := startingPartition; partition >= 0; partition-- { + err = r.UpgradePartition(ctx, redisCluster, existingStateFulSet, partition, logger) + if err != nil { + return err + } + } + } else if redisCluster.Spec.ReplicasPerMaster > 0 { + // We have replicas in this cluster + // We don't need to rebalance, we only need to failover if master, and restart and re-replicate if replica + for partition := startingPartition; partition >= 0; partition-- { + err = r.UpgradePartitionWithReplicas(ctx, redisCluster, existingStateFulSet, partition, logger) + if err != nil { + return err + } + } + } + + // Scale down the cluster if an extra node where added before upgrading + if scaledBeforeUpgrade { + r.LogInfo(redisCluster.NamespacedName(), "Scaling down after the upgrade") + redisCluster.Spec.Replicas-- + err = r.ScaleCluster(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error scaling down after the upgrade") + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Scaling down after the upgrade completed") + } + + // We want to sleep to make sure the k8s client + // gets a chance to update the pod list in the cache before we try to rebalance again, + // otherwise it gets an outdated set of IPs + time.Sleep(5 * time.Second) + + clusterNodes, err = r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + err = clusterNodes.RebalanceCluster(ctx, map[string]int{}, kubernetes.MoveSlotOption{ + PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance, + }, logger) + if err != nil { + return err + } + + // The cluster is now upgraded, and we can set the Cluster Status as Ready again. + redisCluster.Status.Status = redisv1.StatusReady + + // TODO: This condition removal is not tested because this not feasible with the current structure. + SetConditionFalse(logger, redisCluster, redisv1.ConditionUpgrading) + + return nil +} + +func (r *RedisClusterReconciler) UpgradePartition(ctx context.Context, redisCluster *redisv1.RedisCluster, existingStateFulSet *v1.StatefulSet, partition int, logger logr.Logger) error { + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + r.LogInfo(redisCluster.NamespacedName(), "Looping partitions for Rolling Update", "partition", partition) + node, err := clusterNodes.GetNodeByPodName(fmt.Sprintf("%s-%d", existingStateFulSet.Name, partition)) + if err != nil { + return err + } + + // Empty the node by moving its slots to another node. + // If any slot cannot be moved, it will be retried. + for retry := 3; retry >= 0; retry-- { + r.LogInfo(redisCluster.NamespacedName(), "Moving slots away from partition", "partition", partition, "node", node.ClusterNode.Name()) + err = clusterNodes.RebalanceCluster(ctx, map[string]int{ + node.ClusterNode.Name(): 0, + }, kubernetes.MoveSlotOption{ + PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance, + }, logger) + if err != nil { + if retry >= 0 { + r.LogInfo(redisCluster.NamespacedName(), "Retrying moving remaining slots...") + } + } else { + break + } + } + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not move slots away from node") + return err + } + + // We need to give the cluster a chance to reach quorum, after all the slots have been moved. + // We might also need to increase this time later, + // to give all the Redis Clients a chance to update their internal maps. + time.Sleep(time.Second * 5) + + // If we are running in Ephemeral mode, we need to forget the node before we restart it, to keep the cluster steady + if redisCluster.Spec.Ephemeral { + err = clusterNodes.ForgetNode(node.ClusterNode.Name()) + if err != nil { + return err + } + } + + // RollingUpdate + r.LogInfo(redisCluster.NamespacedName(), "Executing partition Rolling Update", "partition", partition) + localPartition := int32(partition) + existingStateFulSet.Spec.UpdateStrategy = v1.StatefulSetUpdateStrategy{ + Type: v1.RollingUpdateStatefulSetStrategyType, + RollingUpdate: &v1.RollingUpdateStatefulSetStrategy{Partition: &localPartition}, + } + existingStateFulSet, err = r.UpdateStatefulSet(ctx, existingStateFulSet, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not update partition for Statefulset") + return err + } + + // Let's wait for the StatefulSet to start recreating the pod before we check for it's readiness + // If we check it to early, we will likely see all available pods, and continue, and straight after that, + // the new pod will join and mess with our whole process. + time.Sleep(time.Second * 5) + + podReadyWaiter := utils.PodReadyWait{ + Client: r.Client, + } + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + kubernetes.GetStatefulSetSelectorLabel(ctx, r.Client, redisCluster): "redis", + }, + ), + } + r.LogInfo(redisCluster.NamespacedName(), "Waiting for pods to become ready", "expectedReplicas", int(*(existingStateFulSet.Spec.Replicas))) + err = podReadyWaiter.WaitForPodsToBecomeReady(ctx, 5*time.Second, 5*time.Minute, &listOptions, int(*(existingStateFulSet.Spec.Replicas))) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not wait for Pods to become ready") + return err + } + + // We want to wait again after the pods become ready, + // as the Redis Cluster needs to register that the node has joined + time.Sleep(time.Second * 5) + + clusterNodes, err = r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + node, err = clusterNodes.GetNodeByPodName(fmt.Sprintf("%s-%d", existingStateFulSet.Name, partition)) + if err != nil { + return err + } + + // Next we want to make sure that the node which has joined is a master node. + // If not, we need to reset the node and ClusterMeet it again, + // to make sure it joins as a master. + // This is very important, as the Operator is built around master only at the moment. + info, err := node.ClusterNode.Call("INFO").Text() + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get info from Node") + } + if !strings.Contains(info, "role:master") { + // The node restarted without being a master node. + err = node.ClusterNode.Call("cluster", "reset").Err() + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not reset node") + return err + } + } + + // Due to an existing bug where a restarting node does not update it's own IP, + // and incorrectly advertises the wrong data, + // we need to rerun the cluster meet + err = clusterNodes.ClusterMeet(ctx) + if err != nil { + return err + } + + // After running the cluster meet, we want to wait again + // to give the cluster a chance to settle, and clients to update with the new node, + // before moving onto the next node in the set. + time.Sleep(time.Second * 10) + + return nil +} + +func (r *RedisClusterReconciler) UpgradePartitionWithReplicas(ctx context.Context, redisCluster *redisv1.RedisCluster, existingStateFulSet *v1.StatefulSet, partition int, logger logr.Logger) error { + r.LogInfo(redisCluster.NamespacedName(), "Looping partitions", "partition", partition) + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + node, err := clusterNodes.GetNodeByPodName(fmt.Sprintf("%s-%d", existingStateFulSet.Name, partition)) + if err != nil { + return err + } + + masterId := node.ClusterNode.Name() + if node.ClusterNode.Replicate() != "" { + masterId = node.ClusterNode.Replicate() + } + + if node.IsMaster() { + var replicaId string + // We need to fail over to the replica + for _, friendNode := range clusterNodes.Nodes { + if node.ClusterNode.Name() == friendNode.ClusterNode.Replicate() { + replicaId = friendNode.ClusterNode.Name() + break + } + } + if replicaId == "" { + // No suitable replica has been found. We need to exit at this point. + // We might want to rebalance at this point as a backup method. + return errors.New("cannot find suitable replica to failover to") + } + + masterId = replicaId + replicaNode, err := clusterNodes.GetNodeByID(replicaId) + if err != nil { + return err + } + + err = replicaNode.Call("CLUSTER", "FAILOVER").Err() + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not failover replica node") + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Waiting for node to failover.") + // We need to give the cluster a chance to reach quorum, after all the slots have been moved. + // We might also need to increase this time later, + // to give all the Redis Clients a chance to update their internal maps. + time.Sleep(time.Second * 10) + r.LogInfo(redisCluster.NamespacedName(), "Done Waiting for node to failover.") + } + + // If we are running in Ephemeral mode, we need to forget the node before we restart it, to keep the cluster steady + if redisCluster.Spec.Ephemeral { + r.LogInfo(redisCluster.NamespacedName(), "Forgetting previous node") + err = clusterNodes.ForgetNode(node.ClusterNode.Name()) + if err != nil { + return err + } + } + + // RollingUpdate + localPartition := int32(partition) + existingStateFulSet.Spec.UpdateStrategy = v1.StatefulSetUpdateStrategy{ + Type: v1.RollingUpdateStatefulSetStrategyType, + RollingUpdate: &v1.RollingUpdateStatefulSetStrategy{Partition: &localPartition}, + } + existingStateFulSet, err = r.UpdateStatefulSet(ctx, existingStateFulSet, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not update partition for Statefulset") + return err + } + + // Let's wait for the StatefulSet to start recreating the pod before we check for it's readiness + // If we check it to early, we will likely see all available pods, and continue, and straight after that, + // the new pod will join and mess with our whole process. + time.Sleep(time.Second * 5) + + podReadyWaiter := utils.PodReadyWait{ + Client: r.Client, + } + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + kubernetes.GetStatefulSetSelectorLabel(ctx, r.Client, redisCluster): "redis", + }, + ), + } + r.LogInfo(redisCluster.NamespacedName(), "Waiting for pods to become ready", "expectedReplicas", int(*(existingStateFulSet.Spec.Replicas))) + err = podReadyWaiter.WaitForPodsToBecomeReady(ctx, 5*time.Second, 5*time.Minute, &listOptions, int(*(existingStateFulSet.Spec.Replicas))) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not wait for Pods to become ready") + return err + } + + // We want to wait again after the pods become ready, + // as the Redis Cluster needs to register that the node has joined + time.Sleep(time.Second * 5) + + r.LogInfo(redisCluster.NamespacedName(), "Fetching new clusterNodes") + clusterNodes, err = r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + node, err = clusterNodes.GetNodeByPodName(fmt.Sprintf("%s-%d", existingStateFulSet.Name, partition)) + if err != nil { + return err + } + + r.LogInfo(redisCluster.NamespacedName(), "Meeting Cluster Friends") + // Due to an existing bug where a restarting node does not update it's own IP, + // and incorrectly advertises the wrong data, + // we need to rerun the cluster meet + err = clusterNodes.ClusterMeet(ctx) + if err != nil { + return err + } + + // We want to wait again to ensure the cluster EPOCH is distributed after the meet + time.Sleep(time.Second * 5) + + r.LogInfo(redisCluster.NamespacedName(), "Replicating previous master") + // Next we want to make sure that the node which has joined is a master node. + // If not, we need to reset the node and ClusterMeet it again, + // to make sure it joins as a master. + // This is very important, as the Operator is built around master only at the moment. + _, err = node.ClusterNode.ClusterReplicateWithNodeID(masterId) + if err != nil { + return err + } + + // TODO: We need to wait for the sync to complete before we continue with the upgrade + time.Sleep(time.Second * 10) + + return nil +} + +func (r *RedisClusterReconciler) UpdateStatefulSet(ctx context.Context, statefulSet *v1.StatefulSet, redisCluster *redisv1.RedisCluster) (*v1.StatefulSet, error) { + refreshedStatefulSet := &v1.StatefulSet{} + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + // get a fresh rediscluster to minimize conflicts + err := r.Client.Get(ctx, types.NamespacedName{Namespace: statefulSet.Namespace, Name: statefulSet.Name}, refreshedStatefulSet) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error getting a refreshed RedisCluster before updating it. It may have been deleted?") + return err + } + // update the slots + refreshedStatefulSet.Labels = statefulSet.Labels + refreshedStatefulSet.Spec = statefulSet.Spec + var updateErr = r.Client.Update(ctx, refreshedStatefulSet) + return updateErr + }) + if err != nil { + return nil, err + } + return refreshedStatefulSet, nil +} + +func (r *RedisClusterReconciler) UpdateDeployment(ctx context.Context, deployment *v1.Deployment, redisCluster *redisv1.RedisCluster) (*v1.Deployment, error) { + refreshedDeployment := &v1.Deployment{} + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + // get a fresh rediscluster to minimize conflicts + err := r.Client.Get(ctx, types.NamespacedName{Namespace: deployment.Namespace, Name: deployment.Name}, refreshedDeployment) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error getting a refreshed RedisCluster before updating it. It may have been deleted?") + return err + } + // update the slots + refreshedDeployment.Labels = deployment.Labels + refreshedDeployment.Spec = deployment.Spec + var updateErr = r.Client.Update(ctx, refreshedDeployment) + return updateErr + }) + if err != nil { + return nil, err + } + return refreshedDeployment, nil +} + +func (r *RedisClusterReconciler) UpdatePodDisruptionBudget(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + refreshedPdb := &pv1.PodDisruptionBudget{} + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + // get a fresh rediscluster to minimize conflicts + err := r.Client.Get(ctx, types.NamespacedName{Namespace: redisCluster.Namespace, Name: redisCluster.Name + "-pdb"}, refreshedPdb) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error getting a refreshed RedisCluster before updating it. It may have been deleted?") + return err + } + if redisCluster.Spec.Pdb.PdbSizeUnavailable.IntVal != 0 || redisCluster.Spec.Pdb.PdbSizeUnavailable.StrVal != "" { + refreshedPdb.Spec.MinAvailable = nil + refreshedPdb.Spec.MaxUnavailable = &redisCluster.Spec.Pdb.PdbSizeUnavailable + } else { + refreshedPdb.Spec.MaxUnavailable = nil + refreshedPdb.Spec.MinAvailable = &redisCluster.Spec.Pdb.PdbSizeAvailable + } + refreshedPdb.ObjectMeta.Labels = *redisCluster.Spec.Labels + refreshedPdb.Spec.Selector.MatchLabels = map[string]string{redis.RedisClusterLabel: redisCluster.ObjectMeta.Name, r.GetStatefulSetSelectorLabel(redisCluster): "redis"} + + var updateErr = r.Client.Update(ctx, refreshedPdb) + return updateErr + }) + if err != nil { + return err + } + return nil +} +func (r *RedisClusterReconciler) DeletePodDisruptionBudget(ctx context.Context, pdb *pv1.PodDisruptionBudget, redisCluster *redisv1.RedisCluster) error { + refreshedPdb := &pv1.PodDisruptionBudget{} + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + // get a fresh rediscluster to minimize conflicts + err := r.Client.Get(ctx, types.NamespacedName{Namespace: pdb.Namespace, Name: pdb.Name}, refreshedPdb) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error getting a refreshed RedisCluster before updating it. It may have been deleted?") + return err + } + var updateErr = r.Client.Delete(ctx, refreshedPdb) + return updateErr + }) + if err != nil { + return err + } + return nil +} + +// GetSidedNodesForScaleDown splits the cluster nodes into two sides. Left and Right. +// This is usually used when a cluster is about to scale down. +// We can work out which nodes will be left after we have scaled down, and which will have bee cut off. +// We can use this to identify nodes that need to be rebalanced, +// and re-orient the cluster so after we remove the additional nodes, +// all of the necessary nodes to fulfill the new cluster, are the ones which have remained +// Left identifies nodes which will remain when we remove additional replicas. +// Right identifies nodes which will be cut off when we update the replica count on the statefulset +func (r *RedisClusterReconciler) GetSidedNodesForScaleDown(ctx context.Context, redisCluster *redisv1.RedisCluster) (masterOnLeft, masterOnRight, replicaOnLeft, replicaOnRight []*kubernetes.ClusterNode, err error) { + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + return masterOnLeft, masterOnRight, replicaOnLeft, replicaOnRight, err + } + + expectedReplicas := redisCluster.NodesNeeded() + podPrefix := fmt.Sprintf("%s-", redisCluster.Name) + for _, node := range clusterNodes.Nodes { + ordinal, _ := strconv.Atoi(strings.TrimPrefix(node.Pod.Name, podPrefix)) + if ordinal >= expectedReplicas { + // Right side + if node.IsMaster() { + masterOnRight = append(masterOnRight, node) + } else { + replicaOnRight = append(replicaOnRight, node) + } + } else { + if node.IsMaster() { + masterOnLeft = append(masterOnLeft, node) + } else { + replicaOnLeft = append(replicaOnLeft, node) + } + } + } + return masterOnLeft, masterOnRight, replicaOnLeft, replicaOnRight, err +} + +func (r *RedisClusterReconciler) ReOrientClusterForScaleDown(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // Scaling Down. + // We need to find the pods which are going to be removed so we can rebalance away from them + // Are we going to have less masters ? + // If we need 0 replicas, we can reset any replicas to masters to make our lives easier in the next steps + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + podPrefix := fmt.Sprintf("%s-", redisCluster.Name) + expectedReplicas := int32(redisCluster.NodesNeeded()) + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + + // We want to cover cases where there are no replicas needed + if redisCluster.Spec.ReplicasPerMaster == 0 { + for _, node := range clusterNodes.Nodes { + if node.IsReplica() { + // We need to reset this node, + err = node.ClusterNode.ClusterResetNode() + if err != nil { + return err + } + // Wait for the change to propagate before we do the next node + time.Sleep(5 * time.Second) + } + } + + err = clusterNodes.ClusterMeet(ctx) + if err != nil { + return err + } + + // Sleep for the nodes to finish meeting and update + time.Sleep(5 * time.Second) + + // Reload information to get latest information + err = clusterNodes.LoadInfoForNodes() + if err != nil { + return err + } + + activeMasters, err := clusterNodes.GetMasters() + if err != nil { + return fmt.Errorf("failed getting master list %v", err) + } + + // Next we need to rebalance to the early ordinals + // We'll sort the masters by ordinal, and then select the early ordinals to keep + sort.Slice(activeMasters, func(i, j int) bool { + ordinalI, _ := strconv.Atoi(strings.TrimPrefix(activeMasters[i].Pod.Name, podPrefix)) + ordinalJ, _ := strconv.Atoi(strings.TrimPrefix(activeMasters[j].Pod.Name, podPrefix)) + return ordinalI < ordinalJ + }) + + // We want to ensure the slots are all stable before we try to rebalance + err = clusterNodes.EnsureClusterSlotsStable(ctx, logger) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Cant ensure cluster") + } + + // Now rebalance to the masters which will remain after we remove some pods. + weights := map[string]int{} + deleteMasters := activeMasters[int(redisCluster.Spec.Replicas):] + for _, deletable := range deleteMasters { + weights[deletable.ClusterNode.Name()] = 0 + } + err = clusterNodes.RebalanceCluster(ctx, weights, kubernetes.MoveSlotOption{ + PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance, + }, logger) + if err != nil { + return err + } + + return nil + } + + // We want to cover cases where there are too many masters + activeMasters, err := clusterNodes.GetMasters() + if err != nil { + return err + } + if int32(len(activeMasters)) > redisCluster.Spec.Replicas { + // We are going to have less masters. + // We need to rebalance away from the masters which are too many, and then reset them + // We will select the masters in earlier ordinals as the new masters + sort.Slice(activeMasters, func(i, j int) bool { + ordinalI, _ := strconv.Atoi(strings.TrimPrefix(activeMasters[i].Pod.Name, podPrefix)) + ordinalJ, _ := strconv.Atoi(strings.TrimPrefix(activeMasters[j].Pod.Name, podPrefix)) + return ordinalI < ordinalJ + }) + keepMasters := activeMasters[:int(redisCluster.Spec.Replicas)] + deleteMasters := activeMasters[int(redisCluster.Spec.Replicas):] + + // We want to ensure the slots are all stable before we try to rebalance + err = clusterNodes.EnsureClusterSlotsStable(ctx, logger) + if err != nil { + return err + } + + weights := map[string]int{} + for _, deletable := range deleteMasters { + weights[deletable.ClusterNode.Name()] = 0 + } + err = clusterNodes.RebalanceCluster(ctx, weights, kubernetes.MoveSlotOption{ + PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance, + }, logger) + if err != nil { + return err + } + // We can now reset the deletable masters to replicas of the masters + // Find masters with too few replicas + currentKeepable := 0 + for _, master := range deleteMasters { + _, err := master.ClusterNode.ClusterReplicateWithNodeID(keepMasters[currentKeepable].ClusterNode.Name()) + if err != nil { + return err + } + currentKeepable = currentKeepable + 1 + if currentKeepable > int(redisCluster.Spec.Replicas)-1 { + currentKeepable = 0 + } + } + //TODO wait for replicas to be in sync rather than just time + time.Sleep(10 * time.Second) + // At this point the nodes info is outdated and needs to be updated + err = clusterNodes.LoadInfoForNodes() + if err != nil { + return err + } + } + + if int32(len(activeMasters)) < redisCluster.Spec.Replicas { + // We need to call ensureClusterRatio to get the masters back up to what we expect + // Before we start with the next piece, we need to make sure the ratio of the cluster is correct for safety, + // and to always have replicas attached. + err = clusterNodes.EnsureClusterRatio(ctx, redisCluster, logger) + if err != nil { + return err + } + } + + err = clusterNodes.LoadInfoForNodes() + if err != nil { + return err + } + + // We need to rebalance to ensure slots spread across the new master set + err = clusterNodes.RebalanceCluster(ctx, map[string]int{}, kubernetes.MoveSlotOption{ + PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance, + }, logger) + if err != nil { + return err + } + + // We need to failover all masters on the right, to replicas on the left, + // to ensure only masters which have no replica on the left remain on the right + _, masterr, replical, _, err := r.GetSidedNodesForScaleDown(ctx, redisCluster) + if err != nil { + return err + } + for _, master := range masterr { + for _, replica := range replical { + if replica.ClusterNode.Replicate() == master.ClusterNode.Name() { + // We have found a replica on the left with a master on the right. + // We need to failover to it now. + err = replica.ClusterNode.Call("CLUSTER", "FAILOVER").Err() + if err != nil { + return err + } + // todo check for complete failover rather than specific time + // give some time for the failover to complete + time.Sleep(5 * time.Second) + break + } + } + } + + // We need to identify any masters on the right without replicas on the left + // We need to update one of the replicas on the left to point at this master, + // We can then continue to failover left, and continue the re-orientation + _, masterr, replical, _, err = r.GetSidedNodesForScaleDown(ctx, redisCluster) + if err != nil { + return err + } + // Check whether there are any masters on the right, with 0 replicas on the left + var mastersNeedToBeMovedLeft []*kubernetes.ClusterNode + for _, master := range masterr { + foundReplica := false + for _, replica := range replical { + if replica.ClusterNode.Replicate() == master.ClusterNode.Name() { + // This master has a replica on the left, and we can skip over + foundReplica = true + break + } + } + if !foundReplica { + // We need to use one of the other replicas on the left + mastersNeedToBeMovedLeft = append(mastersNeedToBeMovedLeft, master) + } + } + for _, masterNeedsMove := range mastersNeedToBeMovedLeft { + for _, replica := range replical { + err = replica.ClusterNode.LoadInfo(false) + if err != nil { + return err + } + // Make sure the replica is not already replicating one of the masters which need to move + replicaViable := true + for _, master := range mastersNeedToBeMovedLeft { + if master.ClusterNode.Name() == replica.ClusterNode.Replicate() { + replicaViable = false + } + } + if replicaViable { + _, err = replica.ClusterNode.ClusterReplicateWithNodeID(masterNeedsMove.ClusterNode.Name()) + if err != nil { + return err + } + break + } + } + } + + // We need to wait for any cluster replicate commands to finish, so we can failover and re-orient + if len(mastersNeedToBeMovedLeft) > 0 { + // TODO replcae with wait for replicas in sync + time.Sleep(10 * time.Second) + } + + // Now that all of the remaining masters definitely have replicas, we should fail them over. + // We need to recalculate after making changes + _, masterr, replical, _, err = r.GetSidedNodesForScaleDown(ctx, redisCluster) + if err != nil { + return err + } + for _, master := range masterr { + for _, replica := range replical { + if replica.ClusterNode.Replicate() == master.ClusterNode.Name() { + // We have found a replica on the left with a master on the right. + // We need to failover to it now. + err = replica.ClusterNode.Call("CLUSTER", "FAILOVER").Err() + if err != nil { + return err + } + // give some time for the failover to complete + time.Sleep(5 * time.Second) + break + } + } + } + + // We have failed over, so we need to recalculate the masters on the left and on the right + _, masterr, _, _, err = r.GetSidedNodesForScaleDown(ctx, redisCluster) + if err != nil { + return err + } + err = clusterNodes.LoadInfoForNodes() + if err != nil { + return err + } + + if len(masterr) > 0 { + return errors.New("there are still masters on the right after trying to move all of them left") + } + + // There are no masters on the right. We can reorganise, and scale down safely + // We already have the capability to reshuffle the cluster within clusterNodes, + // but we only want to reorganise the nodes that will be left. + // We trust the orientation to now be in a state where we can forget the nodes which are going to be deleted + var newNodes []*kubernetes.ClusterNode + for _, node := range clusterNodes.Nodes { + ordinal, _ := strconv.Atoi(strings.TrimPrefix(node.Pod.Name, podPrefix)) + if int32(ordinal) < expectedReplicas { + newNodes = append(newNodes, node) + } + } + clusterNodes.Nodes = newNodes + err = clusterNodes.EnsureClusterRatio(ctx, redisCluster, logger) + if err != nil { + return err + } + + // Remember to reload clusterNodes if there are additional steps + clusterNodes, err = r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + return nil +} + +func (r *RedisClusterReconciler) ScaleCluster(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + var err error + + sset, sset_err := r.FindExistingStatefulSet(ctx, controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if sset_err != nil { + return err + } + + // When scaling up the cluster and one or more pods are evicted by K8s the cluster can stuck on ScalingUp + // status. To solve this issue we forget outdated nodes. + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + err = clusterNodes.RemoveClusterOutdatedNodes(ctx, redisCluster, r.GetHelperLogger(redisCluster.NamespacedName())) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check outdated nodes") + } + + // @TODO Cleanup + readyNodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + return err + } + + currSsetReplicas := *(sset.Spec.Replicas) + + // By introducing master-replica cluster, the replicas returned by statefulset (which includes replica nodes) and + // redisCluster's replicas (which is just masters) may not match if replicasPerMaster != 0 + realExpectedReplicas := int32(redisCluster.NodesNeeded()) + r.LogInfo(redisCluster.NamespacedName(), "Expected real replicas", "Master Replicas", redisCluster.Spec.Replicas, "Real Replicas", realExpectedReplicas) + + // scaling down: if data migration takes place, move slots + if realExpectedReplicas < currSsetReplicas { + err = r.ReOrientClusterForScaleDown(ctx, redisCluster) + if err != nil { + return err + } + + // and scale the statefulset + sset.Spec.Replicas = &realExpectedReplicas + _, err = r.UpdateStatefulSet(ctx, sset, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to update StatefulSet") + return err + } + + if redisCluster.Spec.DeletePVC && !redisCluster.Spec.Ephemeral { + err = r.scaleDownClusterNodes(ctx, redisCluster, realExpectedReplicas) + if err != nil { + return err + } + } + } + + // Scaling up and all pods became ready + r.LogInfo(redisCluster.NamespacedName(), "Review state to scale Up ", "desiredReplicas:", strconv.Itoa(int(redisCluster.Spec.Replicas)), "numReadyNodes: ", strconv.Itoa(len(readyNodes)), "statefulReplicas", strconv.Itoa(int(currSsetReplicas))) + + if int32(redisCluster.NodesNeeded()) == currSsetReplicas && int(realExpectedReplicas) == len(readyNodes) { + r.LogInfo(redisCluster.NamespacedName(), "Scaling is completed. Running forget unnecessary nodes, clustermeet, rebalance") + err = r.scaleUpClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + } + + // If we scaled up, we need to reload the statefulset, + // as it'sbeen a while since we loaded it, and the status could have changed. + r.LogInfo(redisCluster.NamespacedName(), "ScaleCluster - updating statefulset replicas", "newsize", realExpectedReplicas) + sset, err = r.FindExistingStatefulSet(ctx, controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if err != nil { + return err + } + sset.Spec.Replicas = &realExpectedReplicas + sset, err = r.UpdateStatefulSet(ctx, sset, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to update StatefulSet") + return err + } + + // Monitoring deployment update + if redisCluster.Spec.Monitoring != nil { + if redisCluster.Spec.Monitoring.Template != nil { + mdep, err := r.FindExistingDeployment(ctx, controllerruntime.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-monitoring", Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ScaleCluster - Cannot find existing monitoring deployment", "deployment", redisCluster.Name+"-monitoring") + } else { + desiredReplicas := int32(0) + if *sset.Spec.Replicas > 0 { + desiredReplicas = int32(1) + } + if *mdep.Spec.Replicas != desiredReplicas { + mdep.Spec.Replicas = &desiredReplicas + mdep, err = r.UpdateDeployment(ctx, mdep, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ScaleCluster - Failed to update Deployment replicas") + } else { + r.LogInfo(redisCluster.NamespacedName(), "ScaleCluster - Monitoring Deployment replicas updated", "Replicas", mdep.Spec.Replicas) + } + } + } + } + } + // PodDisruptionBudget update + // We use currSsetReplicas to check the configured number of replicas (not taking int account the extra pod if created) + if redisCluster.Spec.Pdb.Enabled && math.Min(float64(redisCluster.Spec.Replicas), float64(currSsetReplicas)) > 1 { + err = r.UpdatePodDisruptionBudget(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ScaleCluster - Failed to update PodDisruptionBudget") + } else { + r.LogInfo(redisCluster.NamespacedName(), "ScaleCluster - PodDisruptionBudget updated ", "Name", redisCluster.Name+"-pdb") + } + } + + return nil +} + +func (r *RedisClusterReconciler) scaleDownClusterNodes(ctx context.Context, redisCluster *redisv1.RedisCluster, realExpectedReplicas int32) error { + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + culledNodes := r.getCulledNodes(clusterNodes, redisCluster.Name, realExpectedReplicas) + + for _, node := range culledNodes { + if err := r.deleteNodePVC(ctx, redisCluster, node); err != nil { + r.LogError(redisCluster.NamespacedName(), err, fmt.Sprintf("Could not handle PVC for node: %s", node.Pod.Name)) + } + } + return nil +} + +func (r *RedisClusterReconciler) getCulledNodes(clusterNodes kubernetes.ClusterNodeList, clusterName string, threshold int32) []*kubernetes.ClusterNode { + podPrefix := fmt.Sprintf("%s-", clusterName) + var culledNodes []*kubernetes.ClusterNode + for _, node := range clusterNodes.Nodes { + ordinal, _ := strconv.Atoi(strings.TrimPrefix(node.Pod.Name, podPrefix)) + if ordinal >= int(threshold) { + culledNodes = append(culledNodes, node) + } + } + return culledNodes +} + +func (r *RedisClusterReconciler) deleteNodePVC(ctx context.Context, redisCluster *redisv1.RedisCluster, node *kubernetes.ClusterNode) error { + pvc, err := r.GetPersistentVolumeClaim(ctx, r.Client, redisCluster, fmt.Sprintf("data-%s", node.Pod.Name)) + if errors2.IsNotFound(err) { + r.LogError(redisCluster.NamespacedName(), err, fmt.Sprintf("PVC of node %s doesn't exist. Skipping.", node.Pod.Name)) + return nil + } else if err != nil { + return fmt.Errorf("could not get PVC of node %s: %w", node.Pod.Name, err) + } + + r.LogInfo(redisCluster.NamespacedName(), fmt.Sprintf("Deleting PVC: data-%s", node.Pod.Name)) + return r.DeletePVC(ctx, r.Client, pvc) +} + +func (r *RedisClusterReconciler) scaleUpClusterNodes(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + return err + } + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + if err := r.ensurePodsReadyAndMeet(ctx, redisCluster, clusterNodes); err != nil { + return err + } + + if err := clusterNodes.LoadInfoForNodes(); err != nil { + return err + } + + if err := r.ensureClusterRatioAndRebalance(ctx, redisCluster, clusterNodes); err != nil { + return err + } + + return nil +} + +func (r *RedisClusterReconciler) ensurePodsReadyAndMeet(ctx context.Context, redisCluster *redisv1.RedisCluster, clusterNodes kubernetes.ClusterNodeList) error { + if podsReady, err := r.AllPodsReady(ctx, redisCluster); err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check ready pods") + return err + } else if !podsReady { + return errors.New("pods are not ready yet. Scaling procedure cancelled") + } + + if err := clusterNodes.ClusterMeet(ctx); err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not join cluster") + return err + } + + // Waiting for the meet to propagate through the Redis Cluster. + time.Sleep(10 * time.Second) + + return nil +} + +func (r *RedisClusterReconciler) ensureClusterRatioAndRebalance(ctx context.Context, redisCluster *redisv1.RedisCluster, clusterNodes kubernetes.ClusterNodeList) error { + if err := clusterNodes.EnsureClusterRatio(ctx, redisCluster, r.GetHelperLogger(redisCluster.NamespacedName())); err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ScaleCluster - issue with ensuring cluster ratio when scaling up") + return err + } + + options := kubernetes.MoveSlotOption{PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance} + if err := clusterNodes.RebalanceCluster(ctx, map[string]int{}, options, r.GetHelperLogger(redisCluster.NamespacedName())); err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ScaleCluster - issue with rebalancing cluster when scaling up") + return err + } + + return nil +} + +func (r *RedisClusterReconciler) isOwnedByUs(o client.Object) bool { + labels := o.GetLabels() + if _, found := labels[redis.RedisClusterLabel]; found { + return true + } + return false +} + +func (r *RedisClusterReconciler) ClusterMeet(ctx context.Context, nodes map[string]*redisv1.RedisNode, redisCluster *redisv1.RedisCluster) error { + r.LogInfo(redisCluster.NamespacedName(), "ClusterMeet", "nodes", nodes) + var rdb *redisclient.Client + + for srcNodeId, srcnode := range nodes { + for trgNodeId, trgnode := range nodes { + if trgNodeId == srcNodeId { + continue + } + r.LogInfo(redisCluster.NamespacedName(), "ClusterMeet", "srcnode", srcnode, "trgnode", trgnode) + rdb, _ = r.GetRedisClientForNode(ctx, srcNodeId, redisCluster) + _, err := rdb.ClusterMeet(ctx, trgnode.IP, strconv.Itoa(redis.RedisCommPort)).Result() + + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ClusterMeet failed", "nodes", srcnode) + return err + } + } + + } + return nil +} + +func (r *RedisClusterReconciler) GetSlotsRanges(nodes int32, redisCluster *redisv1.RedisCluster) []*redisv1.SlotRange { + slots := redis.SplitNodeSlots(int(nodes)) + var apiRedisSlots = make([]*redisv1.SlotRange, 0) + for _, node := range slots { + apiRedisSlots = append(apiRedisSlots, &redisv1.SlotRange{Start: node.Start, End: node.End}) + } + r.LogInfo(redisCluster.NamespacedName(), "GetSlotsRanges", "slots", slots, "ranges", apiRedisSlots) + return apiRedisSlots +} + +func (r *RedisClusterReconciler) NodesBySequence(nodes map[string]*redisv1.RedisNode) ([]string, error) { + nodesBySequence := make([]string, len(nodes)) + for nodeId, node := range nodes { + nodeNameElements := strings.Split(node.Name, "-") + nodePodSequence, err := strconv.Atoi(nodeNameElements[len(nodeNameElements)-1]) + if err != nil { + return nil, err + } + if len(nodes) <= nodePodSequence { + return nil, fmt.Errorf("race condition with pod sequence: seq:%d, butlen: %d", nodePodSequence, len(nodes)) + } + nodesBySequence[nodePodSequence] = nodeId + } + return nodesBySequence, nil +} + +// TODO: check how many cluster slots have been already assign, and rebalance cluster if necessary +func (r *RedisClusterReconciler) AssignSlots(ctx context.Context, nodes map[string]*redisv1.RedisNode, redisCluster *redisv1.RedisCluster) error { + // when all nodes are formed in a cluster, addslots + r.LogInfo(redisCluster.NamespacedName(), "AssignSlots", "nodeslen", len(nodes), "nodes", nodes) + slots := redis.SplitNodeSlots(len(nodes)) + nodesBySequence, _ := r.NodesBySequence(nodes) + for i, nodeId := range nodesBySequence { + rdb, err := r.GetRedisClientForNode(ctx, nodeId, redisCluster) + if err != nil { + return err + } + + rdb.ClusterAddSlotsRange(ctx, slots[i].Start, slots[i].End) + r.LogInfo(redisCluster.NamespacedName(), "Running cluster assign slots", "pods", nodes) + } + return nil +} + +func (r *RedisClusterReconciler) GetRedisClient(ctx context.Context, ip string, secret string) *redisclient.Client { + redisclient.NewClusterClient(&redisclient.ClusterOptions{}) + rdb := redisclient.NewClient(&redisclient.Options{ + Addr: fmt.Sprintf("%s:%d", ip, redis.RedisCommPort), + Password: secret, + DB: 0, + }) + return rdb +} + +func (r *RedisClusterReconciler) GetRedisClusterPods(ctx context.Context, redisCluster *redisv1.RedisCluster) *corev1.PodList { + allPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ) + + err := r.Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not list pods") + } + + return allPods +} + +func (r *RedisClusterReconciler) GetReadyNodes(ctx context.Context, redisCluster *redisv1.RedisCluster) (map[string]*redisv1.RedisNode, error) { + return r.GetReadyNodesFunc(ctx, redisCluster) +} + +func (r *RedisClusterReconciler) DoGetReadyNodes(ctx context.Context, redisCluster *redisv1.RedisCluster) (map[string]*redisv1.RedisNode, error) { + allPods := &corev1.PodList{} + labelSelector := labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.GetName(), + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ) + + err := r.Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + if err != nil { + return nil, errors.New("could not list pods") + } + readyNodes := make(map[string]*redisv1.RedisNode, 0) + clusterNodes := make(map[string]redisv1.RedisNode, 0) + redisSecret, _ := r.GetRedisSecret(redisCluster) + for _, pod := range allPods.Items { + for _, s := range pod.Status.Conditions { + if s.Type == corev1.PodReady && s.Status == corev1.ConditionTrue { + // get node id + redisClient := r.GetRedisClient(ctx, pod.Status.PodIP, redisSecret) + defer redisClient.Close() + nodeId, err := redisClient.Do(ctx, "cluster", "myid").Result() + if err != nil { + r.LogInfo(redisCluster.NamespacedName(), "Could not fetch node id", "pod: ", pod.Status.PodIP) + } + if nodeId == nil { + return nil, errors.New("can't fetch node id") + } + // Get redis CLI version from info command + redisCLI := "" + nodeInfo, err := redisClient.Info(ctx).Result() + if err != nil { + r.LogInfo(redisCluster.NamespacedName(), "Could not fetch node info", "pod: ", pod.Status.PodIP) + } else { + redisCLI = redis.GetRedisCLIFromInfo(nodeInfo) + } + // Get cluster nodes info if not already fetched + if len(clusterNodes) == 0 { + nodes, err := redisClient.Do(ctx, "cluster", "nodes").Result() + if err != nil { + return nil, errors.New("can't fetch cluster nodes") + } + clusterNodes = redis.ParseClusterNodes(nodes.(string)) + } + + readyNodes[nodeId.(string)] = &redisv1.RedisNode{IP: pod.Status.PodIP, Name: pod.GetName(), IsMaster: true, ReplicaOf: "", RedisCLI: redisCLI} + + if value, ok := clusterNodes[nodeId.(string)]; ok { + readyNodes[nodeId.(string)].IsMaster = value.IsMaster + readyNodes[nodeId.(string)].ReplicaOf = value.ReplicaOf + } + } + } + } + r.LogInfo(redisCluster.NamespacedName(), "GetReadyNodes", "nodes", readyNodes, "numReadyNodes", strconv.Itoa(len(readyNodes))) + return readyNodes, nil +} + +func (r *RedisClusterReconciler) GetRedisSecret(redisCluster *redisv1.RedisCluster) (string, error) { + if redisCluster.Spec.Auth.SecretName == "" { + return "", nil + } + + secret := &corev1.Secret{} + err := r.Client.Get(context.TODO(), types.NamespacedName{Name: redisCluster.Spec.Auth.SecretName, Namespace: redisCluster.Namespace}, secret) + if err != nil { + return "", err + } + redisSecret := string(secret.Data["requirepass"]) + return redisSecret, nil +} + +func makeRange(min int, max int) []int { + a := make([]int, max-min+1) + for i := range a { + a[i] = min + i + } + return a +} + +func makeRangeMap(min int, max int) map[int]struct{} { + result := map[int]struct{}{} + a := make([]int, max-min+1) + for i := range a { + result[min+i] = struct{}{} + } + return result +} + +func calculateRCConfigChecksum(redisCluster *redisv1.RedisCluster) string { + hash := md5.Sum([]byte(redisCluster.Spec.Config)) + return hex.EncodeToString(hash[:]) +} + +// Updates StatefulSet annotations with the config checksum (annotation "config-checksum") +func (r *RedisClusterReconciler) addConfigChecksumAnnotation(statefulSet *v1.StatefulSet, redisCluster *redisv1.RedisCluster) *v1.StatefulSet { + var updatedAnnotations map[string]string + + checksum := calculateRCConfigChecksum(redisCluster) + + if statefulSet.Spec.Template.Annotations == nil { + updatedAnnotations = make(map[string]string) + } else { + updatedAnnotations = statefulSet.Spec.Template.Annotations + } + + updatedAnnotations[CONFIG_CHECKSUM_ANNOTATION] = checksum + statefulSet.Spec.Template.Annotations = updatedAnnotations + + return statefulSet +} + +// Checks if the configuration has changed. +// If the annotation StatefulSet.Spec.Template.Annotations[CONFIG_CHECKSUM_ANNOTATION] exists, we check first if the +// configuration checksum has changed. +// If not, we compare the configuration properties. +func (r *RedisClusterReconciler) isConfigChanged(redisCluster *redisv1.RedisCluster, statefulSet *v1.StatefulSet, + configMap *corev1.ConfigMap) (bool, string) { + // Comparing config checksums + if statefulSet.Spec.Template.Annotations != nil { + checksum, exists := statefulSet.Spec.Template.Annotations[CONFIG_CHECKSUM_ANNOTATION] + if exists { + calculatedChecksum := calculateRCConfigChecksum(redisCluster) + if checksum != calculatedChecksum { + r.LogInfo(redisCluster.NamespacedName(), "Config checksum changed", "existing checksum", checksum, "calculated checksum", calculatedChecksum) + return true, "Redis Config Changed - Checksum" + } + return false, "" + } + } + // Comparing properties + desiredConfig := redis.MergeWithDefaultConfig( + redis.ConfigStringToMap(redisCluster.Spec.Config), + redisCluster.Spec.Ephemeral, + redisCluster.Spec.ReplicasPerMaster) + observedConfig := redis.ConfigStringToMap(configMap.Data["redis.conf"]) + if !reflect.DeepEqual(observedConfig, desiredConfig) { + return true, "Redis Config Changed - properties" + } + return false, "" +} diff --git a/controllers/redis_manager_test.go b/controllers/redis_manager_test.go new file mode 100644 index 0000000..620bf2d --- /dev/null +++ b/controllers/redis_manager_test.go @@ -0,0 +1,827 @@ +package controllers + +import ( + "fmt" + "reflect" + "testing" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/internal/kubernetes" + "github.com/inditextech/redisoperator/internal/redis" + + "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/record" +) + +var rc = newRedisCluster() +var recorder = newRecorder() +var reconciler = newReconciler(rc, recorder) +var configMap = newConfigMap() +var node1 *kubernetes.ClusterNode = &kubernetes.ClusterNode{ClusterNode: redis.NewTestClusterNode("node-1")} +var node2 *kubernetes.ClusterNode = &kubernetes.ClusterNode{ClusterNode: redis.NewTestClusterNode("node-2")} +var node3 *kubernetes.ClusterNode = &kubernetes.ClusterNode{ClusterNode: redis.NewTestClusterNode("node-3")} + +func TestUpdateScalingStatus_ScalingDown(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + 1 + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, numStatefulSetReplicas)) + + _ = reconciler.UpdateScalingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusScalingDown) + assertConditionTrue(t, rc, redisv1.ConditionScalingDown) + assertConditionFalse(t, rc, redisv1.ConditionScalingUp) +} + +func TestUpdateScalingStatus_ScalingUp(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas - 1 + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, numStatefulSetReplicas)) + + _ = reconciler.UpdateScalingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusScalingUp) + assertConditionFalse(t, rc, redisv1.ConditionScalingDown) + assertConditionTrue(t, rc, redisv1.ConditionScalingUp) +} + +func TestUpdateScalingStatus_ScalingDown_Completed(t *testing.T) { + rc.Status.Status = redisv1.StatusScalingDown + rc.Status.Conditions = []metav1.Condition{redisv1.ConditionScalingDown} + + numStatefulSetReplicas := rc.Spec.Replicas + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, numStatefulSetReplicas)) + + _ = reconciler.UpdateScalingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusReady) + assertConditionFalse(t, rc, redisv1.ConditionScalingDown) + assertConditionFalse(t, rc, redisv1.ConditionScalingUp) +} + +func TestUpdateScalingStatus_ScalingUp_Completed(t *testing.T) { + rc.Status.Status = redisv1.StatusScalingUp + rc.Status.Conditions = []metav1.Condition{redisv1.ConditionScalingUp} + + numStatefulSetReplicas := rc.Spec.Replicas + + readyNodes := newReadyNodes(int(numStatefulSetReplicas)) + + rc.Status.Nodes = readyNodes + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, numStatefulSetReplicas)) + reconciler.GetReadyNodesFunc = mockReadyNodes(readyNodes) + + _ = reconciler.UpdateScalingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusReady) + assertConditionFalse(t, rc, redisv1.ConditionScalingDown) + assertConditionFalse(t, rc, redisv1.ConditionScalingUp) +} + +func TestUpdateScalingStatus_ScalingUp_In_Progress(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas - 1 + + readyNodes := newReadyNodes(int(numStatefulSetReplicas)) + + rc.Status.Status = redisv1.StatusScalingUp + rc.Status.Nodes = readyNodes + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, numStatefulSetReplicas)) + reconciler.GetReadyNodesFunc = mockReadyNodes(readyNodes) + + _ = reconciler.UpdateScalingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusScalingUp) + assertConditionFalse(t, rc, redisv1.ConditionScalingDown) + assertConditionTrue(t, rc, redisv1.ConditionScalingUp) +} + +func TestUpdateUpgradingStatus_Upgrading_Config_Not_Changed(t *testing.T) { + rc.Status.Status = redisv1.StatusReady + rc.Status.Conditions = []metav1.Condition{} + + // TODO: pass redis to configmap so it has same config + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + numStatefulSetReplicas := rc.Spec.Replicas + + sset := newStatefulSet(rc, numStatefulSetReplicas) + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(sset) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusReady) + assertConditionFalse(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Completed(t *testing.T) { + rc.Status.Status = redisv1.StatusUpgrading + rc.Status.Conditions = []metav1.Condition{redisv1.ConditionUpgrading} + + // TODO: pass redis to configmap so it has same config + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, rc.Spec.Replicas)) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusReady) + assertConditionFalse(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Config_Changed(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + + redisConfig := redis.ConfigStringToMap(rc.Spec.Config) + + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.MapToConfigString(redisConfig) + + redisConfig["maxmemory"][0] = "1700" + + rc.Spec.Config = redis.MapToConfigString(redisConfig) + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(newStatefulSet(rc, numStatefulSetReplicas)) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusUpgrading) + assertConditionTrue(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Limits_Cpu_Changed(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + rc.Spec.Config = redis.GenerateRedisConfig(rc) + + sset := newStatefulSet(rc, numStatefulSetReplicas) + limits := sset.Spec.Template.Spec.Containers[0].Resources.Limits + limits[corev1.ResourceCPU] = resource.MustParse("10") + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(sset) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusUpgrading) + assertConditionTrue(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Requests_Cpu_Changed(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + rc.Spec.Config = redis.GenerateRedisConfig(rc) + + sset := newStatefulSet(rc, numStatefulSetReplicas) + requests := sset.Spec.Template.Spec.Containers[0].Resources.Requests + requests[corev1.ResourceCPU] = resource.MustParse("10") + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(sset) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusUpgrading) + assertConditionTrue(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Limits_Memory_Changed(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + rc.Spec.Config = redis.GenerateRedisConfig(rc) + + sset := newStatefulSet(rc, numStatefulSetReplicas) + limits := sset.Spec.Template.Spec.Containers[0].Resources.Limits + limits[corev1.ResourceMemory] = resource.MustParse("32Gi") + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(sset) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusUpgrading) + assertConditionTrue(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Requests_Memory_Changed(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + rc.Spec.Config = redis.GenerateRedisConfig(rc) + + sset := newStatefulSet(rc, numStatefulSetReplicas) + requests := sset.Spec.Template.Spec.Containers[0].Resources.Requests + requests[corev1.ResourceMemory] = resource.MustParse("32Gi") + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(sset) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusUpgrading) + assertConditionTrue(t, rc, redisv1.ConditionUpgrading) +} + +func TestUpdateUpgradingStatus_Upgrading_Image_Changed(t *testing.T) { + numStatefulSetReplicas := rc.Spec.Replicas + + configMap.Data = make(map[string]string) + configMap.Data["redis.conf"] = redis.GenerateRedisConfig(rc) + + rc.Spec.Config = redis.GenerateRedisConfig(rc) + + sset := newStatefulSet(rc, numStatefulSetReplicas) + sset.Spec.Template.Spec.Containers[0].Image = "redis-operator:9.9.9" + + reconciler.FindExistingStatefulSetFunc = mockStatefulSet(sset) + reconciler.FindExistingConfigMapFunc = mockConfigMap(configMap) + + _ = reconciler.UpdateUpgradingStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusUpgrading) + assertConditionTrue(t, rc, redisv1.ConditionUpgrading) +} + +func TestSetConditionTrue(t *testing.T) { + clearConditions() + initEventRecorder() + + condition := redisv1.ConditionUpgrading + + reconciler.SetConditionTrue(rc, condition, "upgrading") + + assert.True(t, meta.IsStatusConditionTrue(rc.Status.Conditions, condition.Type)) +} + +func TestSetConditionTrue_recordEvent(t *testing.T) { + clearConditions() + initEventRecorder() + + message := "Updating resource requests" + + reconciler.SetConditionTrue(rc, redisv1.ConditionUpgrading, message) + + select { + case event := <-recorder.Events: + assert.Equal(t, "Normal RedisClusterUpgrading "+message, event) + default: + t.Fail() + fmt.Println("expected event to be recorded because condition was changed") + } +} + +func clearConditions() { + rc.Status.Conditions = []metav1.Condition{} +} + +func TestSetConditionTrue_dontRecordEvent(t *testing.T) { + initEventRecorder() + + condition := redisv1.ConditionUpgrading + + rc.Status.Conditions = []metav1.Condition{condition} + + reconciler.SetConditionTrue(rc, condition, "Upgrading") + + select { + case <-recorder.Events: + fmt.Println("event should only be recorded on condition change") + t.Fail() + default: + fmt.Println("as expected no event was recorded because condition was not changed") + } +} + +func initEventRecorder() { + recorder.Events = make(chan string, 1) +} + +func newRecorder() *record.FakeRecorder { + return &record.FakeRecorder{} +} + +func TestCalculateSlotMoveSequence(t *testing.T) { + testTable := map[string]struct { + startingMap map[*kubernetes.ClusterNode][]int + expectedMoveSequence []kubernetes.MoveSequence + }{ + "simple-move-test": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 10), + node2: makeRange(11, 21), + node3: makeRange(22, 23), + }, + []kubernetes.MoveSequence{ + { + From: "node-1", + FromNode: node1, + To: "node-3", + ToNode: node3, + Slots: []int{8, 9, 10}, + }, + { + From: "node-2", + FromNode: node2, + To: "node-3", + ToNode: node3, + Slots: []int{19, 20, 21}, + }, + }, + }, + } + + for name, table := range testTable { + options := kubernetes.NewMoveMapOptions() + slotMoveMap, err := kubernetes.CalculateSlotMoveMap(table.startingMap, options) + if err != nil { + t.Errorf("Error calculating SlotMoveMap: %s", err) + break + } + got := kubernetes.CalculateMoveSequence(table.startingMap, slotMoveMap, options) + + if len(got) != len(table.expectedMoveSequence) { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, got, table.expectedMoveSequence) + t.Errorf("Another error") + } + + for _, gotNode := range got { + found := false + for _, expectedNode := range table.expectedMoveSequence { + if gotNode.From == expectedNode.From && gotNode.To == expectedNode.To { + found = reflect.DeepEqual(gotNode, expectedNode) + break + } + } + if !found { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, gotNode, table.expectedMoveSequence) + } + } + } +} + +func TestCalculateSlotMoveSequenceWithWeights(t *testing.T) { + testTable := map[string]struct { + startingMap map[*kubernetes.ClusterNode][]int + expectedMoveSequence []kubernetes.MoveSequence + weights map[string]int + }{ + "without-weights": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 10), + node2: makeRange(11, 21), + node3: makeRange(22, 23), + }, + []kubernetes.MoveSequence{ + { + From: "node-1", + FromNode: node1, + To: "node-3", + ToNode: node3, + Slots: []int{8, 9, 10}, + }, + { + From: "node-2", + FromNode: node2, + To: "node-3", + ToNode: node3, + Slots: []int{19, 20, 21}, + }, + }, + map[string]int{}, + }, + "with-two-0-weights": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 10), + node2: makeRange(11, 21), + node3: makeRange(22, 23), + }, + []kubernetes.MoveSequence{ + { + From: "node-2", + FromNode: node2, + To: "node-1", + ToNode: node1, + Slots: makeRange(11, 21), + }, + { + From: "node-3", + FromNode: node3, + To: "node-1", + ToNode: node1, + Slots: makeRange(22, 23), + }, + }, + map[string]int{ + "node-2": 0, + "node-3": 0, + }, + }, + "with-one-2-weight": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 10), + node2: makeRange(11, 21), + node3: makeRange(22, 23), + }, + []kubernetes.MoveSequence{ + { + From: "node-1", + FromNode: node1, + To: "node-3", + ToNode: node3, + Slots: makeRange(6, 10), + }, + { + From: "node-2", + FromNode: node2, + To: "node-3", + ToNode: node3, + Slots: makeRange(17, 21), + }, + }, + map[string]int{ + "node-3": 2, + }, + }, + "with-1-slot-versus-16386-and-0-weight": { + // To to rounding errors, we could end up with a 0 weighted node, which still has slots after calculation. + // This test protects that from happening + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(1, 8192), + node2: makeRange(8193, 16383), + node3: makeRange(16384, 16384), + }, + []kubernetes.MoveSequence{ + { + From: "node-3", + FromNode: node3, + To: "node-2", + ToNode: node2, + Slots: makeRange(16384, 16384), + }, + }, + map[string]int{ + "node-3": 0, + }, + }, + } + + for name, table := range testTable { + options := kubernetes.NewMoveMapOptions() + options.SetWeights(table.weights) + slotMoveMap, err := kubernetes.CalculateSlotMoveMap(table.startingMap, options) + if err != nil { + t.Errorf("Error calculating SlotMoveMap: %s", err) + break + } + got := kubernetes.CalculateMoveSequence(table.startingMap, slotMoveMap, options) + + if len(got) != len(table.expectedMoveSequence) { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, got, table.expectedMoveSequence) + t.Errorf("Another error") + } + + for _, gotNode := range got { + found := false + for _, expectedNode := range table.expectedMoveSequence { + if gotNode.From == expectedNode.From && gotNode.To == expectedNode.To { + found = reflect.DeepEqual(gotNode, expectedNode) + break + } + } + if !found { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, got, table.expectedMoveSequence) + } + } + } +} + +func TestCalculateSlotMoveSequenceWithWeightsMultiple(t *testing.T) { + testTable := map[string]struct { + startingMap map[*kubernetes.ClusterNode][]int + expectedMoveSequencePossibilities [][]kubernetes.MoveSequence + weights map[string]int + }{ + "with-uneven-numbers-and-0-weight": { + // To to rounding errors, we could end up with a 0 weighted node, which still has slots after calculation. + // This test protects that from happening + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(1, 10), + node2: makeRange(11, 20), + node3: makeRange(21, 27), + }, + [][]kubernetes.MoveSequence{ + { + { + From: "node-3", + FromNode: node3, + To: "node-1", + ToNode: node1, + Slots: makeRange(21, 24), + }, + { + From: "node-3", + FromNode: node3, + To: "node-2", + ToNode: node2, + Slots: makeRange(25, 27), + }, + }, + }, + map[string]int{ + "node-3": 0, + }, + }, + "with-one-0-weight": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 10), + node2: makeRange(11, 21), + node3: makeRange(22, 23), + }, + [][]kubernetes.MoveSequence{ + { + { + From: "node-3", + FromNode: node3, + To: "node-1", + ToNode: node1, + Slots: []int{22}, + }, + { + From: "node-3", + FromNode: node3, + To: "node-2", + ToNode: node2, + Slots: []int{23}, + }, + }, + }, + map[string]int{ + "node-3": 0, + }, + }, + } + + for name, table := range testTable { + options := kubernetes.NewMoveMapOptions() + options.SetWeights(table.weights) + slotMoveMap, err := kubernetes.CalculateSlotMoveMap(table.startingMap, options) + if err != nil { + t.Errorf("Error calculating SlotMoveMap: %s", err) + break + } + got := kubernetes.CalculateMoveSequence(table.startingMap, slotMoveMap, options) + + for _, gotNode := range got { + found := false + for _, possibility := range table.expectedMoveSequencePossibilities { + if found == false { + for _, expectedNode := range possibility { + if gotNode.From == expectedNode.From && gotNode.To == expectedNode.To { + fmt.Println(gotNode, expectedNode) + found = reflect.DeepEqual(gotNode, expectedNode) + break + } + } + } + } + if !found { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected Possibilities %v.", name, got, table.expectedMoveSequencePossibilities) + } + } + } +} + +func TestSlotMoveMap(t *testing.T) { + var node1 *kubernetes.ClusterNode = &kubernetes.ClusterNode{ + ClusterNode: redis.NewTestClusterNode("node-1"), + } + var node2 *kubernetes.ClusterNode = &kubernetes.ClusterNode{ + ClusterNode: redis.NewTestClusterNode("node-2"), + } + var node3 *kubernetes.ClusterNode = &kubernetes.ClusterNode{ + ClusterNode: redis.NewTestClusterNode("node-3"), + } + + testTable := map[string]struct { + startingMap map[*kubernetes.ClusterNode][]int + expectedMoveMap map[string][]int + }{ + "simple-move-test": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 16200), + node3: makeRange(16201, 16384), + }, + map[string][]int{ + "node-1": []int{}, + "node-2": makeRange(10924, 16200), + "node-3": []int{}, + }, + }, + "empty-node-move-map": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 16384), + node2: []int{}, + node3: []int{}, + }, + map[string][]int{ + "node-1": makeRange(5462, 16384), + "node-2": []int{}, + "node-3": []int{}, + }, + }, + "balanced-node-move-map": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 10922), + node3: makeRange(10923, 16384), + }, + map[string][]int{ + "node-1": []int{}, + "node-2": []int{}, + "node-3": []int{}, + }, + }, + "balanced-node-move-map-within-threshold": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5440), + node2: makeRange(5441, 10922), + node3: makeRange(10923, 16384), + }, + map[string][]int{ + "node-1": []int{}, + "node-2": []int{}, + "node-3": []int{}, + }, + }, + } + + for name, table := range testTable { + options := kubernetes.NewMoveMapOptions() + options.SetThreshold(2) + got, err := kubernetes.CalculateSlotMoveMap(table.startingMap, options) + if err != nil { + t.Errorf("Error calculating SlotMoveMap: %s", err) + break + } + + if !reflect.DeepEqual(getNamedResults(got), table.expectedMoveMap) { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, got, table.expectedMoveMap) + } + } +} + +func TestSlotMoveMapWithWeights(t *testing.T) { + testTable := map[string]struct { + startingMap map[*kubernetes.ClusterNode][]int + expectedMoveMap map[string][]int + weights map[string]int + }{ + "simple-move-test-without-weights": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 16200), + node3: makeRange(16201, 16384), + }, + map[string][]int{ + "node-1": []int{}, + "node-2": makeRange(10924, 16200), + "node-3": []int{}, + }, + map[string]int{}, + }, + "simple-move-test-with-one-0-weight": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 10922), + node3: makeRange(10923, 16384), + }, + map[string][]int{ + "node-1": []int{}, + "node-2": []int{}, + "node-3": makeRange(10923, 16384), + }, + map[string]int{ + "node-3": 0, + }, + }, + "simple-move-test-with-two-0-weights": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 16200), + node3: makeRange(16201, 16384), + }, + map[string][]int{ + "node-1": []int{}, + "node-2": makeRange(5462, 16200), + "node-3": makeRange(16201, 16384), + }, + map[string]int{ + "node-2": 0, + "node-3": 0, + }, + }, + "simple-move-test-with-one-2-weights": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 10922), + node3: makeRange(10923, 16384), + }, + map[string][]int{ + "node-1": makeRange(4097, 5461), + "node-2": makeRange(9559, 10922), + "node-3": []int{}, + }, + map[string]int{ + "node-3": 2, + }, + }, + } + + for name, table := range testTable { + options := kubernetes.NewMoveMapOptions() + options.SetThreshold(2) + options.SetWeights(table.weights) + got, err := kubernetes.CalculateSlotMoveMap(table.startingMap, options) + if err != nil { + t.Errorf("Error calculating SlotMoveMap: %s", err) + break + } + + if !reflect.DeepEqual(getNamedResults(got), table.expectedMoveMap) { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, got, table.expectedMoveMap) + } + } +} + +func TestSlotMoveMapWithWeightsToZero(t *testing.T) { + testTable := map[string]struct { + startingMap map[*kubernetes.ClusterNode][]int + expectedMoveMap map[string][]int + weights map[string]int + }{ + "simple-move-test-with-weights-to-zero": { + map[*kubernetes.ClusterNode][]int{ + node1: makeRange(0, 5461), + node2: makeRange(5462, 10922), + node3: makeRange(10923, 16384), + }, + map[string][]int{ + "node-1": makeRange(4096, 5461), + "node-2": makeRange(9558, 10922), + "node-3": []int{}, + }, + map[string]int{ + "node-1": 0, + "node-2": 0, + "node-3": 0, + }, + }, + } + + for name, table := range testTable { + options := kubernetes.NewMoveMapOptions() + options.SetThreshold(2) + options.SetWeights(table.weights) + got, err := kubernetes.CalculateSlotMoveMap(table.startingMap, options) + if err != nil { + fmt.Println("Error detected as expected from CalculateSlotMoveMap") + break + } + + if !reflect.DeepEqual(getNamedResults(got), table.expectedMoveMap) { + t.Errorf("Unexpected slot map received from %s iteration. Got %v :: Expected %v.", name, got, table.expectedMoveMap) + } + } +} + +func getNamedResults(results map[*kubernetes.ClusterNode][]int) map[string][]int { + namedResults := make(map[string][]int) + for k, v := range results { + namedResults[k.Name()] = v + } + return namedResults +} diff --git a/controllers/rediscluster_reconciler.go b/controllers/rediscluster_reconciler.go new file mode 100644 index 0000000..a2a7c30 --- /dev/null +++ b/controllers/rediscluster_reconciler.go @@ -0,0 +1,115 @@ +package controllers + +import ( + "context" + + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/builder" + "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/event" + "sigs.k8s.io/controller-runtime/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/predicate" + + "github.com/go-logr/logr" + + v1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + pv1 "k8s.io/api/policy/v1" + "k8s.io/client-go/tools/record" + + "k8s.io/apimachinery/pkg/runtime" + + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + + finalizer "github.com/inditextech/redisoperator/internal/finalizers" + redisv1 "github.com/inditextech/redisoperator/api/v1" +) + +// RedisClusterReconciler reconciles a RedisCluster object +type RedisClusterReconciler struct { + client.Client + Log logr.Logger + Scheme *runtime.Scheme + Recorder record.EventRecorder + Finalizers []finalizer.Finalizer + MaxConcurrentReconciles int + ConcurrentMigrate int + GetClusterInfoFunc func(ctx context.Context, redisCluster *redisv1.RedisCluster) map[string]string + GetReadyNodesFunc func(ctx context.Context, redisCluster *redisv1.RedisCluster) (map[string]*redisv1.RedisNode, error) + FindExistingStatefulSetFunc func(ctx context.Context, req ctrl.Request) (*v1.StatefulSet, error) + FindExistingConfigMapFunc func(ctx context.Context, req ctrl.Request) (*corev1.ConfigMap, error) + FindExistingDeploymentFunc func(ctx context.Context, req ctrl.Request) (*v1.Deployment, error) + FindExistingPodDisruptionBudgetFunc func(ctx context.Context, req ctrl.Request) (*pv1.PodDisruptionBudget, error) +} + +// +kubebuilder:rbac:groups=redis.inditex.com,resources=redisclusters,verbs=get;list;watch;create;update;patch;delete +// +kubebuilder:rbac:groups=redis.inditex.com,resources=redisclusters/status,verbs=get;update;patch +// +kubebuilder:rbac:groups=redis.inditex.com,resources=redisclusters/finalizers,verbs=update +// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch +// +kubebuilder:rbac:groups="",resources=secrets,verbs=get +// +kubebuilder:rbac:groups=apps,resources=statefulsets;deployments,verbs=get;list;watch +// +kubebuilder:rbac:groups="",resources=configmap;services;pods,verbs=get;list;watch +// +kubebuilder:rbac:groups="",resources=configmaps;services,verbs=get;list;create;delete +// +kubebuilder:rbac:groups=apps,resources=statefulsets;deployments,verbs=create;delete;patch;update +func (r *RedisClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { + r.Log.Info("RedisCluster reconciler called", "redis-cluster", req.NamespacedName, "name", req.Name, "ns", req.Namespace) + redisCluster := &redisv1.RedisCluster{} + err := r.Client.Get(ctx, req.NamespacedName, redisCluster) + r.RefreshRedisClients(ctx, redisCluster) + if err == nil { + r.Log.Info("Found RedisCluster", "redis-cluster", req.NamespacedName, "name", redisCluster.GetName(), "GVK", redisCluster.GroupVersionKind().String(), "status", redisCluster.Status.Status) + return r.ReconcileClusterObject(ctx, req, redisCluster) + } else { + // cluster deleted + r.Log.Info("Can't find RedisCluster, probably deleted", "redis-cluster", req.NamespacedName) + return ctrl.Result{}, client.IgnoreNotFound(err) + } +} + +// SetupWithManager sets up the controller with the Manager. +func (r *RedisClusterReconciler) SetupWithManager(mgr ctrl.Manager) error { + return ctrl.NewControllerManagedBy(mgr). + For(&redisv1.RedisCluster{}). + Watches(&corev1.ConfigMap{}, &handler.EnqueueRequestForObject{}, builder.WithPredicates(r.PreFilter())). + Owns(&v1.StatefulSet{}). + WithOptions(controller.Options{MaxConcurrentReconciles: 10}). + Complete(r) +} + +func (r *RedisClusterReconciler) PreFilter() predicate.Predicate { + return predicate.Funcs{ + UpdateFunc: func(e event.UpdateEvent) bool { + return r.isOwnedByUs(e.ObjectNew) + }, + CreateFunc: func(e event.CreateEvent) bool { + return r.isOwnedByUs(e.Object) + }, + DeleteFunc: func(e event.DeleteEvent) bool { + return r.isOwnedByUs(e.Object) + }, + } +} + +func (r *RedisClusterReconciler) SetConditionTrue(rc *redisv1.RedisCluster, condition metav1.Condition, message string) { + if !meta.IsStatusConditionTrue(rc.Status.Conditions, condition.Type) { + meta.SetStatusCondition(&rc.Status.Conditions, condition) + r.Recorder.Event(rc, "Normal", condition.Reason, message) + } +} + +func (r *RedisClusterReconciler) LogInfo(RCNamespacedName types.NamespacedName, msg string, keysAndValues ...interface{}) { + redisClusterInfo := []interface{}{"redis-cluster", RCNamespacedName} + r.Log.Info(msg, append(redisClusterInfo, keysAndValues...)...) +} + +func (r *RedisClusterReconciler) LogError(RCNamespacedName types.NamespacedName, err error, msg string, keysAndValues ...interface{}) { + redisClusterInfo := []interface{}{"redis-cluster", RCNamespacedName} + r.Log.Error(err, msg, append(redisClusterInfo, keysAndValues...)...) +} + +func (r *RedisClusterReconciler) GetHelperLogger(RCNamespacedName types.NamespacedName) logr.Logger { + return r.Log.WithValues("redis-cluster", RCNamespacedName) +} diff --git a/controllers/resource_manager.go b/controllers/resource_manager.go new file mode 100644 index 0000000..0355208 --- /dev/null +++ b/controllers/resource_manager.go @@ -0,0 +1,2029 @@ +package controllers + +import ( + "context" + "crypto/md5" + "fmt" + "reflect" + "slices" + "sort" + "strconv" + "strings" + "time" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + finalizer "github.com/inditextech/redisoperator/internal/finalizers" + "github.com/inditextech/redisoperator/internal/kubernetes" + redis "github.com/inditextech/redisoperator/internal/redis" + "github.com/inditextech/redisoperator/internal/utils" + + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + pv1 "k8s.io/api/policy/v1" + "k8s.io/client-go/util/retry" + + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/api/resource" + + "k8s.io/apimachinery/pkg/types" + + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" +) + +const ( + MIGRATE_TIMEOUT = 6000 + DEFAULT_REQUEUE_TIMEOUT time.Duration = 5 + READY_REQUEUE_TIMEOUT time.Duration = 30 + ERROR_REQUEUE_TIMEOUT time.Duration = 30 +) + +func NewRedisClusterReconciler(mgr ctrl.Manager, maxConcurrentReconciles int, concurrentMigrates int) *RedisClusterReconciler { + eventRecorder := mgr.GetEventRecorderFor("rediscluster-controller") + reconciler := &RedisClusterReconciler{ + Client: mgr.GetClient(), + Log: ctrl.Log.WithName("controllers").WithName("RedisCluster"), + Scheme: mgr.GetScheme(), + Recorder: eventRecorder, + MaxConcurrentReconciles: maxConcurrentReconciles, + ConcurrentMigrate: concurrentMigrates, + Finalizers: []finalizer.Finalizer{ + &finalizer.BackupFinalizer{}, + &finalizer.ConfigMapCleanupFinalizer{}, + &finalizer.DeletePVCFinalizer{}, + }, + } + + reconciler.GetClusterInfoFunc = reconciler.DoGetClusterInfo + reconciler.GetReadyNodesFunc = reconciler.DoGetReadyNodes + reconciler.FindExistingStatefulSetFunc = reconciler.DoFindExistingStatefulSet + reconciler.FindExistingConfigMapFunc = reconciler.DoFindExistingConfigMap + reconciler.FindExistingDeploymentFunc = reconciler.DoFindExistingDeployment + reconciler.FindExistingPodDisruptionBudgetFunc = reconciler.DoFindExistingPodDisruptionBudget + + return reconciler +} + +// Generates a slice containing the list of labels that do not have to be populated +// from RedisCluster.Metadata.Labels to RedisCluster.Spec.Labels. +func getDiscardedLabels() []string { + return []string{"scaler/opt-in", "scaler/scaling-class"} +} + +func (r *RedisClusterReconciler) deletePdb(ctx context.Context, redisCluster *redisv1.RedisCluster) { + // Delete PodDisruptionBudget + pdb, err := r.FindExistingPodDisruptionBudgetFunc(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-pdb", Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogInfo(redisCluster.NamespacedName(), "PodDisruptionBudget not deployed", "PodDisruptionBudget Name", redisCluster.Name+"-pdb") + } else { + err = r.DeletePodDisruptionBudget(ctx, pdb, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to delete PodDisruptionBudget") + } else { + r.LogInfo(redisCluster.NamespacedName(), "PodDisruptionBudget Deleted") + } + } +} + +func (r *RedisClusterReconciler) ReconcileClusterObject(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster) (ctrl.Result, error) { + currentStatus := redisCluster.Status + var err error + const pvcFinalizer = "redis.inditex.com/delete-pvc" + + var requeueAfter time.Duration = DEFAULT_REQUEUE_TIMEOUT + var auth = &corev1.Secret{} + + r.LogInfo(redisCluster.NamespacedName(), "RedisCluster reconciler start", "status", redisCluster.Status.Status) + + if len(redisCluster.Spec.Auth.SecretName) > 0 { + var err error + auth, err = r.GetSecret(ctx, types.NamespacedName{ + Name: redisCluster.Spec.Auth.SecretName, + Namespace: req.Namespace, + }, redisCluster.NamespacedName()) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Can't find provided secret", "redisCluster", redisCluster) + return ctrl.Result{}, nil + } + } + + // Populate Spec.Labels if not present (if RedisCluster created from template <= v2.5.0) + if redisCluster.Spec.Labels == nil { + discardedLabels := getDiscardedLabels() + specLabels := make(map[string]string) + for k, v := range redisCluster.ObjectMeta.Labels { + if !slices.Contains(discardedLabels, k) { + specLabels[k] = v + } + } + redisCluster.Spec.Labels = &specLabels + if err := r.Update(ctx, redisCluster); err != nil { + return ctrl.Result{}, err + } + r.LogInfo(redisCluster.NamespacedName(), "RedisCluster.Spec.Labels populated from RedisCluster.Metadata.Labels") + } + + // Checks the existance of the ConfigMap, StatefulSet, Pods, Monitoring Deployment, PDB and Service, + // creating the objects not created yet. + // Coherence and configuration details are also checked and fixed. + immediateRequeue, err := r.CheckAndCreateK8sObjects(ctx, req, redisCluster, auth) + if err != nil { + return ctrl.Result{}, err + } + if immediateRequeue { + return ctrl.Result{RequeueAfter: time.Second * requeueAfter}, err + } + + // Check storage configuration consistency, updating status if needed. + r.checkStorageConfigConsistency(ctx, redisCluster, redisCluster.Status.Status != redisv1.StatusError) + + // Redis cluster scaled to 0 replicas? + // If it's a newly deployed cluster it won't have a status set yet and won't be catched it here. + if redisCluster.Spec.Replicas == 0 && redisCluster.Status.Status != "" { + err = r.clusterScaledToZeroReplicas(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error managing cluster scaled to 0 replicas") + } + + // Requeue to recheck, reconciliation ends here! + r.LogInfo(redisCluster.NamespacedName(), "RedisCluster reconciler end", "status", redisCluster.Status.Status) + return ctrl.Result{RequeueAfter: time.Second * READY_REQUEUE_TIMEOUT}, err + } + + if redisCluster.Spec.DeletePVC && !redisCluster.Spec.Ephemeral { + r.LogInfo(redisCluster.NamespacedName(), "Delete PVCs feature enabled in cluster spec") + if !controllerutil.ContainsFinalizer(redisCluster, pvcFinalizer) { + controllerutil.AddFinalizer(redisCluster, pvcFinalizer) + r.Update(ctx, redisCluster) + r.LogInfo(redisCluster.NamespacedName(), "Added finalizer. Deleting PVCs after scale down or cluster deletion") + } + } else { + r.LogInfo(redisCluster.NamespacedName(), "Delete PVCs feature disabled in cluster spec or not specified. Not deleting PVCs after scale down or cluster deletion") + } + + // Kubernetes API + if !redisCluster.GetDeletionTimestamp().IsZero() { + for _, f := range r.Finalizers { + if containsString(redisCluster.GetFinalizers(), f.GetId()) { + r.LogInfo(redisCluster.NamespacedName(), "Running finalizer", "id", f.GetId(), "finalizer", f) + finalizerError := f.DeleteMethod(ctx, redisCluster, r.Client) + if finalizerError != nil { + r.LogError(redisCluster.NamespacedName(), finalizerError, "Finalizer returned error", "id", f.GetId(), "finalizer", f) + } + controllerutil.RemoveFinalizer(redisCluster, f.GetId()) + if err := r.Update(ctx, redisCluster); err != nil { + return ctrl.Result{}, err + } + } + } + } + + // Redis API + + r.checkClusterNodesIntegrity(ctx, redisCluster) + + // check the cluster state and slots allocated. if states is ok, we can reset the status + r.LogInfo(redisCluster.NamespacedName(), "ReconcileClusterObject", "state", redisCluster.Status.Status) + + readyNodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error getting redis cluster nodes") + return ctrl.Result{}, err + } + redisCluster.Status.Nodes = readyNodes + + requeue := false + switch redisCluster.Status.Status { + case redisv1.StatusConfiguring: + requeue, requeueAfter = r.reconcileStatusConfiguring(ctx, redisCluster) + case redisv1.StatusReady: + requeue, requeueAfter = r.reconcileStatusReady(ctx, redisCluster) + case redisv1.StatusUpgrading: + requeue, requeueAfter = r.reconcileStatusUpgrading(ctx, redisCluster) + case redisv1.StatusScalingDown: + requeue, requeueAfter = r.reconcileStatusScalingDown(ctx, redisCluster) + case redisv1.StatusScalingUp: + requeue, requeueAfter = r.reconcileStatusScalingUp(ctx, redisCluster) + case redisv1.StatusError: + requeue, requeueAfter = r.reconcileStatusError(ctx, redisCluster) + default: + r.CheckConfigurationStatus(ctx, redisCluster) + } + + r.LogInfo(redisCluster.NamespacedName(), "RedisCluster reconciler end", "status", redisCluster.Status.Status) + + var update_err error + if !reflect.DeepEqual(redisCluster.Status, currentStatus) { + update_err = r.UpdateClusterStatus(ctx, redisCluster) + } + + if requeue { + return ctrl.Result{RequeueAfter: time.Second * requeueAfter}, update_err + } + return ctrl.Result{}, update_err +} + +func (r *RedisClusterReconciler) checkClusterNodesIntegrity(ctx context.Context, redisCluster *redisv1.RedisCluster) { + + if redisCluster.Status.Status == redisv1.StatusInitializing { + return + } + + // At a minimum, we have to have the pods ready. You can reach this point when you are creating + // a new cluster, in Configuring status. + podsReady, err := r.AllPodsReady(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check ready pods") + } + if !podsReady { + return + } + + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + + // Forget outdated nodes. + err = clusterNodes.RemoveClusterOutdatedNodes(ctx, redisCluster, logger) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check outdated nodes") + } + + // Meet nodes if needed. + needsMeet, err := clusterNodes.NeedsClusterMeet(ctx) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check if cluster meet is necessary") + return + } + if needsMeet { + err = clusterNodes.ClusterMeet(ctx) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not cluster meet") + return + } + } + + // Ensure cluster master-replica nodes ratio. + err = clusterNodes.EnsureClusterRatio(ctx, redisCluster, logger) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not assign missing slots") + } + + // Fix open slots (only master nodes). + openSlots := false + for _, node := range clusterNodes.Nodes { + if !node.IsMaster() { + continue + } + openSlots, err = node.HasOpenSlots() + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check if node has open slots") + break + } + if openSlots { + r.LogInfo(redisCluster.NamespacedName(), "Open slots found. Cleanup needed") + err = clusterNodes.EnsureClusterSlotsStable(ctx, logger) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check if slots are stable") + } + break + } + } +} + +// Checks storage configuration for inconsistencies. +// If the parameter is set to true if a check fail the function returns issuing log info, generating an event and setting the Redis cluster Status to Error. +// Returns true if all checks pass or false if any checks fail. +func (r *RedisClusterReconciler) checkStorageConfigConsistency(ctx context.Context, redisCluster *redisv1.RedisCluster, updateRDCL bool) bool { + var stsStorage, stsStorageClassName string + + sts, err := r.FindExistingStatefulSet(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Cannot find existing statefulset, maybe it was deleted.") + return false + } + if sts == nil { + err = errors.NewNotFound(schema.GroupResource{Group: "", Resource: "Statefulset"}, "StatefulSet not found") + r.LogError(redisCluster.NamespacedName(), err, "Cannot find existing statefulset, maybe it was deleted.") + return false + } + + // Get configured Storage and StorageClassName from StatefulSet + if len(sts.Spec.VolumeClaimTemplates) > 0 { + stsStorage = sts.Spec.VolumeClaimTemplates[0].Spec.Resources.Requests.Storage().String() + r.LogInfo(redisCluster.NamespacedName(), "Current StatefulSet Storage configuration", "Spec.VolumeClaimTemplates[0].Spec.Resources.Requests.Storage", stsStorage) + if sts.Spec.VolumeClaimTemplates[0].Spec.StorageClassName != nil { + stsStorageClassName = *sts.Spec.VolumeClaimTemplates[0].Spec.StorageClassName + r.LogInfo(redisCluster.NamespacedName(), "Currect StatefulSet Storage configuration", "Spec.VolumeClaimTemplates[0].Spec.StorageClassName", stsStorageClassName) + } else { + r.LogInfo(redisCluster.NamespacedName(), "Currect StatefulSet Storage configuration", "Spec.VolumeClaimTemplates[0].Spec.StorageClassName", "Not set") + } + } + + // Non ephemeral cluster checks: + // - Updates to redisCluster.Spec.Storage are not allowed + if !redisCluster.Spec.Ephemeral && redisCluster.Spec.Storage != "" && stsStorage != "" && redisCluster.Spec.Storage != stsStorage { + err = errors.NewBadRequest("spec: Forbidden: updates to redisCluster.Spec.Storage field are not allowed") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster storage configuration updates are forbidden", "STS storage", stsStorage, "RDCL storage", redisCluster.Spec.Storage) + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + // - Unset redisCluster.Spec.Storage is not allowed + if !redisCluster.Spec.Ephemeral && redisCluster.Spec.Storage == "" && stsStorage != "" { + err = errors.NewBadRequest("spec: Forbidden: updates to redisCluster.Spec.Storage field are not allowed") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster storage configuration updates are forbidden", "STS storage", stsStorage, "RDCL storage", redisCluster.Spec.Storage) + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + // - Updates to redisCluster.Spec.StorageClassName are not allowed + if !redisCluster.Spec.Ephemeral && redisCluster.Spec.StorageClassName != "" && stsStorageClassName != "" && redisCluster.Spec.StorageClassName != stsStorageClassName { + err = errors.NewBadRequest("spec: Forbidden: updates to redisCluster.Spec.StorageClassName field are not allowed") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster storage configuration updates are forbidden", "STS storageClassName", stsStorageClassName, "RDCL storageClassName", redisCluster.Spec.StorageClassName) + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + // - Set redisCluster.Spec.StorageClassName is not allowed + if !redisCluster.Spec.Ephemeral && redisCluster.Spec.StorageClassName != "" && stsStorageClassName == "" { + err = errors.NewBadRequest("spec: Forbidden: updates to redisCluster.Spec.StorageClassName field are not allowed") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster storage configuration updates are forbidden", "STS storageClassName", stsStorageClassName, "RDCL storageClassName", redisCluster.Spec.StorageClassName) + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + // - Unset redisClusterSpec.StorageClassName is not allowed + if !redisCluster.Spec.Ephemeral && redisCluster.Spec.StorageClassName == "" && stsStorageClassName != "" { + err = errors.NewBadRequest("spec: Forbidden: updates to redisCluster.Spec.StorageClassName field are not allowed") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster storage configuration updates are forbidden", "STS stsStorageClassName", stsStorageClassName, "RDCL stsStorageClassName", redisCluster.Spec.StorageClassName) + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + // - Moving from ephemeral to non ephemeral is not allowed + if !redisCluster.Spec.Ephemeral && len(sts.Spec.VolumeClaimTemplates) == 0 { + err = errors.NewBadRequest("spec: Error: non ephemeral cluster without VolumeClaimTemplates defined in the StatefulSet") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster misconfigured (probably trying to change from ephemeral to non ephemeral)") + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + // Ephemeral cluster checks: + // - Moving from non ephemeral to ephemeral is not allowed + if redisCluster.Spec.Ephemeral && len(sts.Spec.VolumeClaimTemplates) > 0 { + err = errors.NewBadRequest("spec: Error: ephemeral cluster with VolumeClaimTemplates defined in the StatefulSet") + r.LogError(redisCluster.NamespacedName(), err, "Redis cluster misconfigured (probably trying to change from non ephemeral to ephemeral)") + if updateRDCL { + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + } + return false + } + + return true +} + +func (r *RedisClusterReconciler) reconcileStatusConfiguring(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, time.Duration) { + var requeue = true + + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return requeue, DEFAULT_REQUEUE_TIMEOUT + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + err = r.ConfigureRedisCluster(ctx, redisCluster, clusterNodes) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when configuring cluster. Will retry again.") + return requeue, DEFAULT_REQUEUE_TIMEOUT + } + + // Cluster meet if needed. + err = r.CheckAndMeet(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when checking if the cluster needs a meet. Will retry again.") + return requeue, DEFAULT_REQUEUE_TIMEOUT + } + + // Rebalance if needed. + err = r.CheckAndBalance(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when checking if the cluster is balanced. Will retry again.") + return requeue, DEFAULT_REQUEUE_TIMEOUT + } + + // PodDisruptionBudget update + if redisCluster.Spec.Pdb.Enabled && redisCluster.Spec.Replicas > 1 { + err = r.UpdatePodDisruptionBudget(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "ScaleCluster - Failed to update PodDisruptionBudget") + } else { + r.LogInfo(redisCluster.NamespacedName(), "ScaleCluster - PodDisruptionBudget updated ", "Name", redisCluster.Name+"-pdb") + } + } + + r.CheckConfigurationStatus(ctx, redisCluster) + + return requeue, DEFAULT_REQUEUE_TIMEOUT +} + +func (r *RedisClusterReconciler) reconcileStatusReady(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, time.Duration) { + var requeue = true + var requeueAfter time.Duration = READY_REQUEUE_TIMEOUT + podsReady, err := r.AllPodsReady(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check ready pods") + } + if podsReady { + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return requeue, requeueAfter + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + requeueAfter = READY_REQUEUE_TIMEOUT + logger := r.GetHelperLogger(redisCluster.NamespacedName()) + err = clusterNodes.EnsureClusterRatio(ctx, redisCluster, logger) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not assign missing slots") + } + // We want to check if any slots are missing + err = r.AssignMissingSlots(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not assign missing slots") + } + } + + // Check and update RedisCluster status value accordingly to its configuration and status + // -> Cluster needs to be scaled? + if redisCluster.Status.Status == redisv1.StatusReady { + err = r.UpdateScalingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating scaling status") + } + } + // -> Cluster needs to be upgraded? + if redisCluster.Status.Status == redisv1.StatusReady { + err = r.UpdateUpgradingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating upgrading status") + } + } + // -> The cluster needs a meet or rebalance: switch to Configuring status. + err = r.UpdateConfiguringStatusMeetOrBalance(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating configuration status if a meet or rebalance is required") + } + + if redisCluster.Status.Status == redisv1.StatusReady { + err = r.CheckPDB(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error checking PDB changes") + } + } + + // Requeue to check periodically the cluster is well formed and fix it if needed + return requeue, requeueAfter +} + +func (r *RedisClusterReconciler) reconcileStatusUpgrading(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, time.Duration) { + var requeue = true + + err := r.UpgradeCluster(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when upgrading cluster") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + + return requeue, DEFAULT_REQUEUE_TIMEOUT +} + +func (r *RedisClusterReconciler) reconcileStatusScalingDown(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, time.Duration) { + var requeue = true + err := r.ScaleCluster(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when scaling down") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + return requeue, DEFAULT_REQUEUE_TIMEOUT + } + err = r.UpdateScalingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating scaling status") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + return requeue, DEFAULT_REQUEUE_TIMEOUT +} + +func (r *RedisClusterReconciler) reconcileStatusScalingUp(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, time.Duration) { + var requeue = true + err := r.ScaleCluster(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when scaling up") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + return requeue, DEFAULT_REQUEUE_TIMEOUT + } + err = r.UpdateScalingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating scaling status") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + return requeue, DEFAULT_REQUEUE_TIMEOUT +} + +func (r *RedisClusterReconciler) reconcileStatusError(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, time.Duration) { + var requeue = true + var requeueAfter = ERROR_REQUEUE_TIMEOUT + var stsStorage, stsStorageClassName string + + // If storage config is not consistent do not try to recover from Error. + if !r.checkStorageConfigConsistency(ctx, redisCluster, false) { + return requeue, requeueAfter + } + + sset, err := r.FindExistingStatefulSet(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if err == nil { + // validate forbidden properties + if sset != nil && sset.Spec.VolumeClaimTemplates != nil && len(sset.Spec.VolumeClaimTemplates) > 0 { + stsStorage = sset.Spec.VolumeClaimTemplates[0].Spec.Resources.Requests.Storage().String() + if sset.Spec.VolumeClaimTemplates[0].Spec.StorageClassName != nil { + stsStorageClassName = *sset.Spec.VolumeClaimTemplates[0].Spec.StorageClassName + } + } + } + + // Try to recover from Error status if storage configuration led to this but it has been now fixed. + if redisCluster.Spec.Storage == stsStorage && redisCluster.Spec.StorageClassName == stsStorageClassName { + r.CheckConfigurationStatus(ctx, redisCluster) + err := r.ScaleCluster(ctx, redisCluster) + if err == nil { + err = r.UpdateScalingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating scaling status") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + } else { + r.LogError(redisCluster.NamespacedName(), err, "Error when scaling cluster") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + requeueAfter = DEFAULT_REQUEUE_TIMEOUT + } + + // Check and update RedisCluster status value accordingly to its configuration and status + // -> Cluster needs to be scaled? + if redisCluster.Status.Status == redisv1.StatusError { + err = r.UpdateScalingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating scaling status") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + } + // -> Cluster needs to be upgraded? + if redisCluster.Status.Status == redisv1.StatusError { + err = r.UpdateUpgradingStatus(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when updating upgrading status") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + } + } + + return requeue, requeueAfter +} + +func (r *RedisClusterReconciler) getClusterNodes(ctx context.Context, redisCluster *redisv1.RedisCluster) (kubernetes.ClusterNodeList, error) { + clusterNodes, err := kubernetes.GetKubernetesClusterNodes(ctx, r.Client, redisCluster) + if err != nil { + return kubernetes.ClusterNodeList{}, err + } + err = clusterNodes.LoadInfoForNodes() + if err != nil { + return kubernetes.ClusterNodeList{}, err + } + return clusterNodes, nil +} + +func (r *RedisClusterReconciler) freeClusterNodes(clusterNodes kubernetes.ClusterNodeList, RCNamespacedName types.NamespacedName) { + for i := range clusterNodes.Nodes { + err := kubernetes.FreeKubernetesClusterNode(clusterNodes.Nodes[i]) + if err != nil { + // Log error and keep trying with the other nodes + r.LogError(RCNamespacedName, err, "Error releasing cluster node") + } + } +} + +func (r *RedisClusterReconciler) scaleUpAndWait(ctx context.Context, redisCluster *redisv1.RedisCluster) (int32, error) { + // Add a new node to the cluster to make sure that there's enough space to move slots + r.LogInfo(redisCluster.NamespacedName(), "Scaling up before the upgrade") + // But first lets check if there is a pod dangling from a previous attempt that gone sour + // For example if a non-existant redis image is requested, it'd get stuck on n+1th pod being never created successfuly and that pod + // might be still there. + + sset, err := r.FindExistingStatefulSet(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error while getting StatefulSet") + return 0, err + } + + originalCount := redisCluster.Spec.Replicas + if *sset.Spec.Replicas == originalCount { + redisCluster.Spec.Replicas++ + err = r.ScaleCluster(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error when scaling up") + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + redisCluster.Status.Status = redisv1.StatusError + return 0, err + } + r.LogInfo(redisCluster.NamespacedName(), "Added a new pod, now we'll wait it to become ready") + } else if *sset.Spec.Replicas == originalCount+1 { + // Resume if the cluster was already scaled for upgrading. + r.LogInfo(redisCluster.NamespacedName(), "Cluster already scaled, resume the processing") + redisCluster.Spec.Replicas = *sset.Spec.Replicas + } + podReadyWaiter := utils.PodReadyWait{ + Client: r.Client, + } + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ), + } + r.LogInfo(redisCluster.NamespacedName(), "Waiting for pods to become ready", "expectedReplicas", int(redisCluster.Spec.Replicas)) + err = podReadyWaiter.WaitForPodsToBecomeReady(ctx, 5*time.Second, 5*time.Minute, &listOptions, int(redisCluster.Spec.Replicas)) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error waiting for pods to become ready", "expectedReplicas", int(redisCluster.Spec.Replicas)) + r.Recorder.Event(redisCluster, "Warning", "ClusterError", err.Error()) + return 0, err + } + + // All the pods are ready. Do they need a cluster meet ? + nodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not fetch nodes for Cluster Meet check") + return 0, err + } + needsMeet, _ := redis.NeedsClusterMeet(ctx, r.Client, nodes, redisCluster) + if needsMeet { + r.LogInfo(redisCluster.NamespacedName(), "ClusterMeet needed, starting") + err = r.ClusterMeet(ctx, nodes, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not run ClusterMeet") + return 0, err + } + } + r.LogInfo(redisCluster.NamespacedName(), "ClusterMeet not needed, or finished") + return originalCount, nil +} + +func (r *RedisClusterReconciler) AllPodsReady(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, error) { + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ), + } + podsReady, err := utils.AllPodsReady(ctx, r.Client, &listOptions, redisCluster.NodesNeeded()) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check for pods being ready") + return false, err + } + return podsReady, nil +} + +func (r *RedisClusterReconciler) RemoveClusterOutdatedNodes(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // If a node is listed in the nodes.conf file of a Redis node, + // but it is no longer applicable due to a restart and receiving a new IP from Kubernetes, + // we can consider the Node outdated. + // + // We need to find any nodes that are outdated due to restart in ephemeral mode. + // + // If there are the correct amount of pods, + // and the same amount of successful nodes, + // but > 0 failing nodes, + // we can safely assume that the failing node is due to a restart, + // and optimistically delete it from the set of nodes in redis. + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ), + } + podsReady, err := utils.AllPodsReady(ctx, r.Client, &listOptions, int(redisCluster.Spec.Replicas)) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check for pods being ready") + return err + } + + if !podsReady { + return nil + } + + clusterNodes, err := kubernetes.GetKubernetesClusterNodes(ctx, r.Client, redisCluster) + if err != nil { + // Ready nodes will fetch all the Redis Cluster nodes which are ready. + // It does a self-id to make sure the node is ready. + // If we receive an error here, it means not all the nodes are ready + return err + } + + if len(clusterNodes.Nodes) != int(redisCluster.Spec.Replicas) { + return nil + } + + err = clusterNodes.LoadInfoForNodes() + if err != nil { + return err + } + + for i := range clusterNodes.Nodes { + for _, friend := range clusterNodes.Nodes[i].Friends() { + if friend.HasFlag("fail") || friend.HasFlag("noaddr") { + // If the node is outdated, we can forget it on all teh valid nodes + for _, node := range clusterNodes.Nodes { + _, err := node.ClusterNode.ClusterForgetNodeID(friend.NodeID()) + if err != nil { + return err + } + } + } + } + } + return nil +} + +func (r *RedisClusterReconciler) AssignMissingSlots(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + + // First we need to get all the nodes + // Then calculate which slots are assigned + // We then need to subtract this from all the slots. + // Then we need to loop over the unassigned slots, + // and add them to the nodes with the least amount of assigned slots + + nodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + return err + } + + unassignedSlots := makeRangeMap(0, 16383) + + clusterNodes := map[string]*redis.ClusterNode{} + defer r.releaseClusterNodes(clusterNodes, redisCluster.NamespacedName()) + for nodeId, node := range nodes { + clusterNode, err := redis.NewClusterNode(fmt.Sprintf("%s:%d", node.IP, redis.RedisCommPort)) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to connect Cluster Node Info", "IP", node.IP) + return err + } + err = clusterNode.LoadInfo(true) + if err != nil { + return err + } + clusterNodes[nodeId] = clusterNode + + for _, slot := range clusterNode.Slots() { + // We want to remove any assigned slots from our list so we end up with unassigned slots + delete(unassignedSlots, slot) + } + } + var masterLen int + for _, v := range clusterNodes { + if v.HasFlag("master") { + masterLen++ + } + } + + slotsPerNode := kubernetes.CalculateMaxSlotsPerMaster(kubernetes.RedisClusterTotalSlots, masterLen) + + // We look for the slots to be assigned: + // - Slots not already assigned to master nodes + // - Keeping the slots not assigned but known by friends to treat them separately. + // Trying to assign these slots would end in a busy slot error. + var slotsToAssign []int + slotsKnown := make(map[string][]int) + for slot := range unassignedSlots { + slotKnown, nodeId := isSlotKnownByFriends(clusterNodes, slot) + if slotKnown { + slotsKnown[nodeId] = append(slotsKnown[nodeId], slot) + } + slotsToAssign = append(slotsToAssign, slot) + } + sort.Ints(slotsToAssign) + + // First, we delete all not assigned to master nodes slots known by their friends + // to be able to assign them in the next step without errors. + for _, node := range clusterNodes { + if node.HasFlag("master") { + slots, ok := slotsKnown[node.Info().NodeID()] + if ok { + err := clusterDelSlots(node, slots) + if err != nil { + return err + } + } + } + } + + for _, node := range clusterNodes { + if node.HasFlag("master") { + slotAmountToAssign := slotsPerNode - len(node.Slots()) + if slotAmountToAssign <= 0 { + continue + } + // If the length of slots left is within 3 of the amount needed, + // we can assume it's the last or only node left to get slots, + // and assign all the remaining slots + var slotList []int + if len(slotsToAssign) <= (slotAmountToAssign + 15) { + slotList = slotsToAssign[0:] + slotsToAssign = []int{} + } else { + slotList = slotsToAssign[0:slotAmountToAssign] + slotsToAssign = slotsToAssign[slotAmountToAssign:] + } + + err := clusterAddSlots(node, slotList) + if err != nil { + return err + } + } + } + + return nil +} + +func clusterDelSlots(node *redis.ClusterNode, slotList []int) error { + var strSlotList []interface{} + for _, slot := range slotList { + strSlotList = append(strSlotList, strconv.Itoa(slot)) + } + + if len(strSlotList) > 0 { + _, err := node.ClusterDelSlots(strSlotList...) + if err != nil { + return err + } + } + return nil +} + +func clusterAddSlots(node *redis.ClusterNode, slotList []int) error { + var strSlotList []interface{} + for _, slot := range slotList { + strSlotList = append(strSlotList, strconv.Itoa(slot)) + } + + if len(strSlotList) > 0 { + _, err := node.ClusterAddSlots(strSlotList...) + if err != nil { + return err + } + } + return nil +} + +func isSlotKnownByFriends(clusterNodes map[string]*redis.ClusterNode, slot int) (bool, string) { + for _, node := range clusterNodes { + for _, friend := range node.Friends() { + if slices.Contains(friend.Slots(), slot) { + return true, node.Info().NodeID() + } + } + } + return false, "" +} + +func (r *RedisClusterReconciler) releaseClusterNodes(clusterNodes map[string]*redis.ClusterNode, RCNamespacedName types.NamespacedName) { + for i := range clusterNodes { + err := redis.ReleaseClusterNode(clusterNodes[i]) + if err != nil { + // Log error and keep trying with the other nodes + r.LogError(RCNamespacedName, err, "Error releasing cluster node") + } + } +} + +func (r *RedisClusterReconciler) EnsureClusterContention(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // First we need to get all the nodes + // Then calculate which slots are assigned + // We then need to subtract this from all the slots. + // Then we need to loop over the unassigned slots, + // and add them to the nodes with the least amount of assigned slots + nodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + return err + } + + redisSecret, _ := r.GetRedisSecret(redisCluster) + for _, node := range nodes { + redisClient := r.GetRedisClient(ctx, node.IP, redisSecret) + defer redisClient.Close() + info, err := redisClient.Do(ctx, "INFO").Result() + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get node info", "node", node) + return err + } + if !strings.Contains(info.(string), "role:master") { + // The node restarted without being a master node. + _, err = redisClient.Do(ctx, "cluster", "reset").Result() + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not reset node") + return err + } + } + } + return nil +} + +func (r *RedisClusterReconciler) CheckClusterMeet(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // We might be reconciling from a pod restart. + // We want to check whether the nodes all have the correct IPs for one another. + // Due to an existing bug in Redis where a node doesn't update it's own IP upon restart, + // we need to make sure to update all the nodes whenever a pod is rescheduled and receives a new IP. + // First, let's check whether all the pods are ready + listOptions := client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + r.GetStatefulSetSelectorLabel(redisCluster): "redis", + }, + ), + } + podsReady, err := utils.AllPodsReady(ctx, r.Client, &listOptions, int(redisCluster.Spec.Replicas)) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check for pods being ready") + } + if podsReady { + // All the pods are ready. Do they need a cluster meet ? + nodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not fetch nodes for Cluster Meet check") + return err + } + needsMeet, err := redis.NeedsClusterMeet(ctx, r.Client, nodes, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not determine if there was any change needed") + } + if needsMeet { + err = r.ClusterMeet(ctx, nodes, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not run ClusterMeet") + return err + } + } + } + return nil +} + +func (r *RedisClusterReconciler) CheckConfigurationStatus(ctx context.Context, redisCluster *redisv1.RedisCluster) { + clusterInfo := r.GetClusterInfo(ctx, redisCluster) + state := clusterInfo["cluster_state"] + slots_ok := clusterInfo["cluster_slots_ok"] + slots_assigned := clusterInfo["cluster_slots_assigned"] + readyNodes, _ := r.GetReadyNodes(ctx, redisCluster) + r.LogInfo(redisCluster.NamespacedName(), "CheckConfigurationStatus", "cluster_state", state, "cluster_slots_ok", slots_ok, "status", redisCluster.Status.Status, "clusterinfo", clusterInfo) + if state == "ok" && slots_ok == strconv.Itoa(redis.TotalClusterSlots) { + redisCluster.Status.Status = redisv1.StatusReady + } + if slots_ok == "0" || slots_ok == "" { + if len(readyNodes) == redisCluster.NodesNeeded() { + if redisCluster.Spec.Replicas == 0 { + redisCluster.Status.Status = redisv1.StatusReady + } else { + redisCluster.Status.Status = redisv1.StatusConfiguring + } + } else { + redisCluster.Status.Status = redisv1.StatusInitializing + } + return + } + if slots_ok != slots_assigned { + redisCluster.Status.Status = redisv1.StatusConfiguring + r.LogInfo(redisCluster.NamespacedName(), "CheckConfigurationStatus - slots assigned != slots ok", "slots_ok", slots_ok, "slots_assigned", slots_assigned) + } +} + +// Checks if the RedisCluster needs a meet or a rebalance, when in Ready status. If any of both is needed, then the status is +// switched to Configuring to be meet o rebalanced. +func (r *RedisClusterReconciler) UpdateConfiguringStatusMeetOrBalance(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // Only when the cluster is in Ready status we check for the need of a meet or balance, switching to Configuring status if needed. + if redisCluster.Status.Status != redisv1.StatusReady { + return nil + } + + // Checks if a node meet is needed. + sset, ssetErr := r.FindExistingStatefulSetFunc(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if ssetErr != nil { + return ssetErr + } + currSsetReplicas := *(sset.Spec.Replicas) + clusterInfo := r.GetClusterInfo(ctx, redisCluster) + clusterKnownNodes, csError := strconv.Atoi(clusterInfo["cluster_known_nodes"]) + + // Nodes meet needed if known nodes not matching StatefulSet currect replicas. Entering Configuring status to fix it. + if csError == nil && currSsetReplicas > int32(clusterKnownNodes) { + redisCluster.Status.Status = redisv1.StatusConfiguring + r.LogInfo(redisCluster.NamespacedName(), "CheckConfigurationStatus - current sset replicas > clusterKnownNodes", "currSsetReplicas", currSsetReplicas, "clusterKnownNodes", clusterKnownNodes) + } + + // Checks if a cluster rebalance is needed. + balanced, err := r.isClusterBalanced(ctx, redisCluster) + if err != nil { + return err + } + if !balanced { + redisCluster.Status.Status = redisv1.StatusConfiguring + r.LogInfo(redisCluster.NamespacedName(), "CheckConfigurationStatus - redis cluster unbalanced, switching to Configuring status to rebalance") + } + + return nil +} + +// Checks if a RedisCluster needs a meet, comparing the cluster_known_nodes from redis-cli cluster info value +// with the current replicas in the StatefulSet. Cluster meet is done if needed. +func (r *RedisClusterReconciler) CheckAndMeet(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + sset, ssetErr := r.FindExistingStatefulSetFunc(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if ssetErr != nil { + return ssetErr + } + currSsetReplicas := *(sset.Spec.Replicas) + + clusterInfo := r.GetClusterInfo(ctx, redisCluster) + clusterKnownNodes, csError := strconv.Atoi(clusterInfo["cluster_known_nodes"]) + + // Nodes meet needed if known nodes not matching StatefulSet currect replicas + if csError == nil && currSsetReplicas > int32(clusterKnownNodes) { + r.LogInfo(redisCluster.NamespacedName(), "Cluster needs a nodes meet", "redis_cluster", redisCluster.Name, "cluster_known_nodes", clusterKnownNodes, "StatefulSet replicas", currSsetReplicas) + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + if err = clusterNodes.ClusterMeet(ctx); err != nil { + r.Recorder.Event(redisCluster, "Warning", "ClusterMeet", "Error when attempting ClusterMeet") + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Cluster meet completed", "redis_cluster", redisCluster.Name) + } + + return nil +} + +// Checks if a RedisCluster needs to be balanced and rebalances it when needed. +func (r *RedisClusterReconciler) CheckAndBalance(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + // Check if the cluster is not balanced + balanced, err := r.isClusterBalanced(ctx, redisCluster) + if err != nil { + return err + } + + // Rebalance if needed + if !balanced { + r.LogInfo(redisCluster.NamespacedName(), "Cluster needs to be rebalanced", "redis_cluster", redisCluster.Name) + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + if err = r.ensureClusterRatioAndRebalance(ctx, redisCluster, clusterNodes); err != nil { + r.Recorder.Event(redisCluster, "Warning", "ClusterRebalance", "Error when attempting ClusterRebalance") + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Cluster rebalance completed", "redis_cluster", redisCluster.Name) + + } + + return nil +} + +// Checks if the cluster is balanced. +// If any of the nodes has no slots assigned or the number of slots assigned to the number of slots assigned +// to the nodes differs by more than the established rate, the cluster is considered unbalanced. +func (r *RedisClusterReconciler) isClusterBalanced(ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, error) { + + // Rebalance needed if any of the nodes has no slots assigned, no need to check anything else + clusterInfo := r.GetClusterInfo(ctx, redisCluster) + clusterSize, crError := strconv.Atoi(clusterInfo["cluster_size"]) + // Update clusterSize with replicasPerMaster before checking + if redisCluster.Spec.ReplicasPerMaster > 0 { + clusterSize = clusterSize + (clusterSize * int(redisCluster.Spec.ReplicasPerMaster)) + } + realExpectedReplicas := int(redisCluster.NodesNeeded()) + if crError == nil && clusterSize < realExpectedReplicas { + r.LogInfo(redisCluster.NamespacedName(), "Check cluster balance - one or more nodes has no slots assigned", "clusterSize", clusterSize, "realExpectedReplicas", realExpectedReplicas) + return false, nil + } + + clusterNodes, err := r.getClusterNodes(ctx, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not get cluster nodes") + return false, err + } + // Free cluster nodes to avoid memory consumption + defer r.freeClusterNodes(clusterNodes, redisCluster.NamespacedName()) + + unbalancedNodes, err := clusterNodes.GetUnbalancedNodes(ctx) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Could not check nodes balance") + return false, err + } + if len(unbalancedNodes) == 0 { + r.LogInfo(redisCluster.NamespacedName(), fmt.Sprintf("No rebalancing needed! All nodes are within the %d%% threshold", kubernetes.RedisNodesUnbalancedThreshold)) + return true, nil + } else { + for node, leftoverSlots := range unbalancedNodes { + r.LogInfo(redisCluster.NamespacedName(), "Unbalanced node found! Has more than exepected assigned slots", "node", node, "leftover slots", leftoverSlots) + } + return false, nil + } +} + +func (r *RedisClusterReconciler) FindExistingStatefulSet(ctx context.Context, req ctrl.Request) (*v1.StatefulSet, error) { + return r.FindExistingStatefulSetFunc(ctx, req) +} + +func (r *RedisClusterReconciler) DoFindExistingStatefulSet(ctx context.Context, req ctrl.Request) (*v1.StatefulSet, error) { + return kubernetes.FindExistingStatefulSet(ctx, r.Client, req) +} + +func (r *RedisClusterReconciler) FindExistingDeployment(ctx context.Context, req ctrl.Request) (*v1.Deployment, error) { + return r.FindExistingDeploymentFunc(ctx, req) +} + +func (r *RedisClusterReconciler) FindExistingPodDisruptionBudget(ctx context.Context, req ctrl.Request) (*pv1.PodDisruptionBudget, error) { + return r.FindExistingPodDisruptionBudgetFunc(ctx, req) +} + +func (r *RedisClusterReconciler) DoFindExistingDeployment(ctx context.Context, req ctrl.Request) (*v1.Deployment, error) { + return kubernetes.FindExistingDeployment(ctx, r.Client, req) +} + +func (r *RedisClusterReconciler) DoFindExistingPodDisruptionBudget(ctx context.Context, req ctrl.Request) (*pv1.PodDisruptionBudget, error) { + return kubernetes.FindExistingPodDisruptionBudget(ctx, r.Client, req) +} + +func (r *RedisClusterReconciler) GetPersistentVolumeClaim(ctx context.Context, client client.Client, redisCluster *redisv1.RedisCluster, name string) (*corev1.PersistentVolumeClaim, error) { + r.LogInfo(redisCluster.NamespacedName(), "Getting persistent volume claim to be deleted ") + pvc := &corev1.PersistentVolumeClaim{} + err := client.Get(ctx, types.NamespacedName{Name: name, Namespace: redisCluster.Namespace}, pvc) + + if err != nil { + return nil, err + } + return pvc, nil +} + +func (ef *RedisClusterReconciler) DeletePVC(ctx context.Context, client client.Client, pvc *corev1.PersistentVolumeClaim) error { + err := client.Delete(ctx, pvc) + return err +} + +func (r *RedisClusterReconciler) DoFindExistingConfigMap(ctx context.Context, req ctrl.Request) (*corev1.ConfigMap, error) { + cmap := &corev1.ConfigMap{} + err := r.Client.Get(ctx, types.NamespacedName{Name: req.Name, Namespace: req.Namespace}, cmap) + if err != nil { + return nil, err + } + return cmap, nil +} + +func (r *RedisClusterReconciler) FindExistingService(ctx context.Context, req ctrl.Request) (*corev1.Service, error) { + svc := &corev1.Service{} + err := r.Client.Get(ctx, types.NamespacedName{Name: req.Name, Namespace: req.Namespace}, svc) + if err != nil { + return nil, err + } + return svc, nil +} + +func (r *RedisClusterReconciler) CreateConfigMap(req ctrl.Request, spec redisv1.RedisClusterSpec, secret *corev1.Secret, labels map[string]string) *corev1.ConfigMap { + newRedisClusterConf := redis.ConfigStringToMap(spec.Config) + labels[redis.RedisClusterLabel] = req.Name + labels[redis.RedisClusterComponentLabel] = "redis" + if val, exists := secret.Data["requirepass"]; exists { + newRedisClusterConf["requirepass"] = append(newRedisClusterConf["requirepass"], string(val)) + + } else if secret.Name != "" { + r.LogInfo(req.NamespacedName, "requirepass field not found in secret", "secretdata", secret.Data) + } + + redisConfMap := redis.MergeWithDefaultConfig(newRedisClusterConf, spec.Ephemeral, spec.ReplicasPerMaster) + + redisConf := redis.MapToConfigString(redisConfMap) + cm := corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: req.Name, + Namespace: req.Namespace, + Labels: labels, + }, + Data: map[string]string{"redis.conf": redisConf, "memory-overhead": "300Mi"}, + } + + r.LogInfo(req.NamespacedName, "Generated Configmap", "configmap", cm) + r.LogInfo(req.NamespacedName, "Spec config", "speconfig", spec.Config) + return &cm +} + +func (r *RedisClusterReconciler) CreateMonitoringDeployment(ctx context.Context, req ctrl.Request, rediscluster *redisv1.RedisCluster, labels map[string]string) *v1.Deployment { + d := &v1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: req.Name + "-monitoring", + Namespace: req.Namespace, + Labels: labels, + }, + Spec: v1.DeploymentSpec{ + Template: *rediscluster.Spec.Monitoring.Template, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{redis.RedisClusterLabel: req.Name, r.GetStatefulSetSelectorLabel(rediscluster): "monitoring"}, + }, + Replicas: pointer.Int32(1), + }, + } + d.Spec.Template.Labels = make(map[string]string) + for k, v := range labels { + d.Spec.Template.Labels[k] = v + } + d.Spec.Template.Labels[redis.RedisClusterLabel] = req.Name + d.Spec.Template.Labels[redis.RedisClusterComponentLabel] = "monitoring" + for k, v := range rediscluster.Spec.Monitoring.Template.Labels { + d.Spec.Template.Labels[k] = v + } + + for i, container := range d.Spec.Template.Spec.Containers { + if container.Resources.Requests == nil { + d.Spec.Template.Spec.Containers[i].Resources.Requests = corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + } + } + if container.Resources.Limits == nil { + d.Spec.Template.Spec.Containers[i].Resources.Limits = corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + } + } + } + + return d +} + +func (r *RedisClusterReconciler) CreateMonitoringConfigMap(req ctrl.Request, spec redisv1.RedisClusterSpec, labels map[string]string) *corev1.ConfigMap { + cm := corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: req.Name + "-monitoring", + Namespace: req.Namespace, + Labels: labels, + }, + Data: map[string]string{"application-configmap.yml": *spec.Monitoring.Config}, + } + + r.LogInfo(req.NamespacedName, "Generated monitoring configmap") + return &cm +} + +func (r *RedisClusterReconciler) CreatePodDisruptionBudget(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster, labels map[string]string) *pv1.PodDisruptionBudget { + pdb := &pv1.PodDisruptionBudget{} + if redisCluster.Spec.Pdb.PdbSizeUnavailable.StrVal != "" || redisCluster.Spec.Pdb.PdbSizeUnavailable.IntVal != 0 { + pdb = &pv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Name: req.Name + "-pdb", + Namespace: req.Namespace, + Labels: labels, + }, + Spec: pv1.PodDisruptionBudgetSpec{ + MaxUnavailable: &redisCluster.Spec.Pdb.PdbSizeUnavailable, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{redis.RedisClusterLabel: req.Name, r.GetStatefulSetSelectorLabel(redisCluster): "redis"}, + }, + }, + } + } else { + pdb = &pv1.PodDisruptionBudget{ + ObjectMeta: metav1.ObjectMeta{ + Name: req.Name + "-pdb", + Namespace: req.Namespace, + Labels: labels, + }, + Spec: pv1.PodDisruptionBudgetSpec{ + MinAvailable: &redisCluster.Spec.Pdb.PdbSizeAvailable, + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{redis.RedisClusterLabel: req.Name, r.GetStatefulSetSelectorLabel(redisCluster): "redis"}, + }, + }, + } + } + + return pdb +} + +func (r *RedisClusterReconciler) CreateStatefulSet(ctx context.Context, req ctrl.Request, spec redisv1.RedisClusterSpec, labels map[string]string, annotations map[string]string, configmap *corev1.ConfigMap) (*v1.StatefulSet, error) { + statefulSet, err := redis.CreateStatefulSet(ctx, req, spec, labels) + if err != nil { + return statefulSet, err + } + + // Add labels to statefulset and its template if provided + if spec.Labels != nil { + for k, v := range *spec.Labels { + statefulSet.Labels[k] = v + statefulSet.Spec.Template.Labels[k] = v + } + } + + // Set resources if provided + inferResources := true + if spec.Resources != nil { + inferResources = false + for k := range statefulSet.Spec.Template.Spec.Containers { + statefulSet.Spec.Template.Spec.Containers[k].Resources = *spec.Resources + } + } + + // Override the statefulset with the provided override + if spec.Override != nil && spec.Override.StatefulSet != nil { + patchedStatefulSet, err := redis.ApplyStsOverride(statefulSet, spec.Override.StatefulSet) + if err != nil { + return nil, err + } + statefulSet = patchedStatefulSet + + // Check if the override has resources + if len(spec.Override.StatefulSet.Spec.Template.Spec.Containers) > 0 && (spec.Override.StatefulSet.Spec.Template.Spec.Containers[0].Resources.Requests != nil || spec.Override.StatefulSet.Spec.Template.Spec.Containers[0].Resources.Limits != nil) { + inferResources = false + } + } + + // Infer resources if needed + if inferResources { + statefulSetWithInferredResources, err := r.inferResources(ctx, req, spec, configmap, statefulSet) + if err != nil { + return nil, err + } + statefulSet = statefulSetWithInferredResources + } + + return statefulSet, nil +} + +func (r *RedisClusterReconciler) inferResources(ctx context.Context, req ctrl.Request, spec redisv1.RedisClusterSpec, configmap *corev1.ConfigMap, statefulSet *v1.StatefulSet) (*v1.StatefulSet, error) { + config := spec.Config + desiredConfig := redis.MergeWithDefaultConfig( + redis.ConfigStringToMap(config), + spec.Ephemeral, + spec.ReplicasPerMaster) + + maxMemoryInt, err := redis.ExtractMaxMemory(desiredConfig) + if err != nil { + return nil, err + } + + r.LogInfo(req.NamespacedName, "Merged config", "withDefaults", desiredConfig) + + memoryOverheadConfig := configmap.Data["maxmemory-overhead"] + var memoryOverheadResource resource.Quantity + + if memoryOverheadConfig == "" { + memoryOverheadResource = resource.MustParse("300Mi") + } else { + memoryOverheadResource = resource.MustParse(memoryOverheadConfig) + } + + memoryLimit, _ := resource.ParseQuantity(fmt.Sprintf("%dMi", maxMemoryInt)) // add 300 mb from config maxmemory + cpuLimit, _ := resource.ParseQuantity("1") + r.LogInfo(req.NamespacedName, "New memory limits", "memory", memoryLimit) + memoryLimit.Add(memoryOverheadResource) + for k := range statefulSet.Spec.Template.Spec.Containers { + statefulSet.Spec.Template.Spec.Containers[k].Resources.Requests[corev1.ResourceMemory] = memoryLimit + statefulSet.Spec.Template.Spec.Containers[k].Resources.Limits[corev1.ResourceMemory] = memoryLimit + r.LogInfo(req.NamespacedName, "Stateful set container memory", "memory", statefulSet.Spec.Template.Spec.Containers[k].Resources.Limits[corev1.ResourceMemory]) + + statefulSet.Spec.Template.Spec.Containers[k].Resources.Requests[corev1.ResourceCPU] = cpuLimit + statefulSet.Spec.Template.Spec.Containers[k].Resources.Limits[corev1.ResourceCPU] = cpuLimit + r.LogInfo(req.NamespacedName, "Stateful set cpu", "cpu", statefulSet.Spec.Template.Spec.Containers[k].Resources.Limits[corev1.ResourceCPU]) + + } + return statefulSet, nil +} + +func (r *RedisClusterReconciler) OverrideStatefulSet(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster, statefulSet *v1.StatefulSet) (*v1.StatefulSet, bool) { + // Create a default override if it doesn't exist. This is to handle the case where the user removes the override of an existing cluster. + if redisCluster.Spec.Override == nil { + redisCluster.Spec.Override = &redisv1.RedisClusterOverrideSpec{ + StatefulSet: &v1.StatefulSet{}, + Service: &corev1.Service{}, + } + } else if redisCluster.Spec.Override.StatefulSet == nil { + redisCluster.Spec.Override.StatefulSet = &v1.StatefulSet{} + } + + // Apply the override + patchedStatefulSet, err := redis.ApplyStsOverride(statefulSet, redisCluster.Spec.Override.StatefulSet) + if err != nil { + ctrl.Log.Error(err, "Error applying StatefulSet override") + return statefulSet, false + } + + // Apply the resources override if provided in containers without resources after patch + if redisCluster.Spec.Resources != nil { + for k := range patchedStatefulSet.Spec.Template.Spec.Containers { + if patchedStatefulSet.Spec.Template.Spec.Containers[k].Resources.Limits == nil { + patchedStatefulSet.Spec.Template.Spec.Containers[k].Resources.Limits = redisCluster.Spec.Resources.Limits + } + + if patchedStatefulSet.Spec.Template.Spec.Containers[k].Resources.Requests == nil { + patchedStatefulSet.Spec.Template.Spec.Containers[k].Resources.Requests = redisCluster.Spec.Resources.Requests + } + } + } + + // Check if the override changes something in the original StatefulSet + changed := !reflect.DeepEqual(statefulSet.Labels, patchedStatefulSet.Labels) || !reflect.DeepEqual(statefulSet.Annotations, patchedStatefulSet.Annotations) || !reflect.DeepEqual(statefulSet.Spec, patchedStatefulSet.Spec) + + if changed { + r.LogInfo(req.NamespacedName, "Detected StatefulSet override change") + } else { + r.LogInfo(req.NamespacedName, "No StatefulSet override change detected") + } + + return patchedStatefulSet, changed +} + +func (r *RedisClusterReconciler) CreateService(req ctrl.Request, spec redisv1.RedisClusterSpec, labels map[string]string) *corev1.Service { + service := redis.CreateService(req.Namespace, req.Name, labels) + + // Override the service with the provided override + if spec.Override != nil && spec.Override.Service != nil { + patchedService, err := redis.ApplyServiceOverride(service, spec.Override.Service) + if err != nil { + return service + } + service = patchedService + } + + return service +} + +func (r *RedisClusterReconciler) OverrideService(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster, service *corev1.Service) (*corev1.Service, bool) { + // Create a default override if it doesn't exist. This is to handle the case where the user removes the override of an existing cluster. + if redisCluster.Spec.Override == nil { + redisCluster.Spec.Override = &redisv1.RedisClusterOverrideSpec{ + StatefulSet: &v1.StatefulSet{}, + Service: &corev1.Service{}, + } + } else if redisCluster.Spec.Override.Service == nil { + redisCluster.Spec.Override.Service = &corev1.Service{} + } + + // Apply the override + patchedService, err := redis.ApplyServiceOverride(service, redisCluster.Spec.Override.Service) + if err != nil { + ctrl.Log.Error(err, "Error applying Service override") + return service, false + } + + // Check if the override changes something in the original Service + changed := !reflect.DeepEqual(service.Labels, patchedService.Labels) || !reflect.DeepEqual(service.Annotations, patchedService.Annotations) || !reflect.DeepEqual(service.Spec, patchedService.Spec) + + if changed { + r.LogInfo(req.NamespacedName, "Detected service override change") + } else { + r.LogInfo(req.NamespacedName, "No service override change detected") + } + + return patchedService, changed +} + +func (r *RedisClusterReconciler) GetSecret(ctx context.Context, ns types.NamespacedName, RCNamespacedName types.NamespacedName) (*corev1.Secret, error) { + secret := &corev1.Secret{} + err := r.Client.Get(ctx, ns, secret) + if err != nil { + r.LogError(RCNamespacedName, err, "Getting secret failed", "secret", ns) + } + return secret, err +} + +func (r *RedisClusterReconciler) GetClusterInfo(ctx context.Context, redisCluster *redisv1.RedisCluster) map[string]string { + return r.GetClusterInfoFunc(ctx, redisCluster) +} + +func (r *RedisClusterReconciler) DoGetClusterInfo(ctx context.Context, redisCluster *redisv1.RedisCluster) map[string]string { + if len(redisCluster.Status.Nodes) == 0 { + r.LogInfo(redisCluster.NamespacedName(), "No ready nodes available on the cluster.", "clusterinfo", map[string]string{}) + return map[string]string{} + } + nodes := r.GetRedisClusterPods(ctx, redisCluster) + if len(nodes.Items) == 0 { + return nil + } + secret, _ := r.GetRedisSecret(redisCluster) + rdb := r.GetRedisClient(ctx, nodes.Items[0].Status.PodIP, secret) + info, _ := rdb.ClusterInfo(ctx).Result() + parsedClusterInfo := redis.GetClusterInfo(info) + rdb.Close() + return parsedClusterInfo +} + +func (r *RedisClusterReconciler) UpdateClusterStatus(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + var req reconcile.Request + req.NamespacedName.Namespace = redisCluster.Namespace + req.NamespacedName.Name = redisCluster.Name + + r.LogInfo(redisCluster.NamespacedName(), "Updating cluster status", "status", redisCluster.Status.Status, "nodes", redisCluster.Status.Nodes) + + return retry.RetryOnConflict(retry.DefaultRetry, func() error { + time.Sleep(time.Second * 1) + // get a fresh rediscluster to minimize conflicts + refreshedRedisCluster := redisv1.RedisCluster{} + err := r.Client.Get(ctx, types.NamespacedName{Namespace: redisCluster.Namespace, Name: redisCluster.Name}, &refreshedRedisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error getting a refreshed RedisCluster before updating it. It may have been deleted?") + return err + } + // update the slots + refreshedRedisCluster.Status.Nodes = redisCluster.Status.Nodes + refreshedRedisCluster.Status.Status = redisCluster.Status.Status + refreshedRedisCluster.Status.Conditions = redisCluster.Status.Conditions + + var updateErr = r.Client.Status().Update(ctx, &refreshedRedisCluster) + return updateErr + }) +} + +func containsString(slice []string, s string) bool { + for _, item := range slice { + if item == s { + return true + } + } + return false +} + +// GetStatefulSetSelectorLabel returns the label key that should be used to find RedisCluster nodes for +// backwards compatibility with the old version RedisCluster. +// The implementation has been moved, and this exists merely as an alias for backward compatibility +func (r *RedisClusterReconciler) GetStatefulSetSelectorLabel(rdcl *redisv1.RedisCluster) string { + return kubernetes.GetStatefulSetSelectorLabel(context.TODO(), r.Client, rdcl) +} + +func (r *RedisClusterReconciler) CheckAndCreateK8sObjects(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster, auth *corev1.Secret) (bool, error) { + var immediateRequeue bool = false + var err error = nil + + // RedisCluster check + err = r.CheckAndUpdateRDCL(ctx, req.Name, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error checking RedisCluster object") + return immediateRequeue, err + } + + // ConfigMap check + configMap, err := r.FindExistingConfigMapFunc(ctx, req) + if err != nil { + if errors.IsNotFound(err) { + configMap = r.CreateConfigMap(req, redisCluster.Spec, auth, redisCluster.GetObjectMeta().GetLabels()) + ctrl.SetControllerReference(redisCluster, configMap, r.Scheme) + r.LogInfo(redisCluster.NamespacedName(), "Creating configmap", "configmap", configMap.Name) + createMapErr := r.Client.Create(ctx, configMap) + if createMapErr != nil { + r.LogError(redisCluster.NamespacedName(), createMapErr, "Error when creating configmap") + return immediateRequeue, createMapErr + } + } else { + r.LogError(redisCluster.NamespacedName(), err, "Getting configmap data failed") + return immediateRequeue, err + } + } + + // PodDisruptionBudget check + if redisCluster.Spec.Pdb.Enabled && redisCluster.Spec.Replicas > 1 { + _, err := r.FindExistingPodDisruptionBudgetFunc(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-pdb", Namespace: redisCluster.Namespace}}) + if err != nil { + if errors.IsNotFound(err) { + // Create PodDisruptionBudget + pdb := r.CreatePodDisruptionBudget(ctx, req, redisCluster, *redisCluster.Spec.Labels) + ctrl.SetControllerReference(redisCluster, pdb, r.Scheme) + pdbCreateErr := r.Client.Create(ctx, pdb) + if pdbCreateErr != nil { + r.LogError(redisCluster.NamespacedName(), pdbCreateErr, "Error creating PodDisruptionBudget") + } + } else { + r.LogError(redisCluster.NamespacedName(), err, "Error getting existing PodDisruptionBudget") + } + } + } + if redisCluster.Spec.Replicas == 1 || !redisCluster.Spec.Pdb.Enabled { + r.deletePdb(ctx, redisCluster) + } + + // StatefulSet check + statefulSet, err := r.FindExistingStatefulSet(ctx, req) + var createSsetError error + if err != nil { + if errors.IsNotFound(err) { + // Create StatefulSet + r.LogInfo(redisCluster.NamespacedName(), "Creating statefulset") + statefulSet, createSsetError = r.CreateStatefulSet(ctx, req, redisCluster.Spec, *redisCluster.Spec.Labels, redisCluster.ObjectMeta.Annotations, configMap) + if createSsetError != nil { + r.LogError(redisCluster.NamespacedName(), createSsetError, "Error when creating StatefulSet") + return immediateRequeue, createSsetError + } + r.LogInfo(redisCluster.NamespacedName(), "Successfully created statefulset") + + // Set the config checksum annotation + statefulSet = r.addConfigChecksumAnnotation(statefulSet, redisCluster) + + ctrl.SetControllerReference(redisCluster, statefulSet, r.Scheme) + createSsetError = r.Client.Create(ctx, statefulSet) + if createSsetError != nil { + if errors.IsAlreadyExists(createSsetError) { + r.LogInfo(redisCluster.NamespacedName(), "StatefulSet already exists") + } else { + r.LogError(redisCluster.NamespacedName(), createSsetError, "Error when creating StatefulSet") + } + } + } else { + r.LogError(redisCluster.NamespacedName(), err, "Getting statefulset data failed", "statefulset", statefulSet.Name) + return immediateRequeue, err + } + } else { + // Check StatefulSet <-> RedisCluster coherence + readyNodes, err := r.GetReadyNodes(ctx, redisCluster) + if err != nil { + return immediateRequeue, err + } + currSsetReplicas := *(statefulSet.Spec.Replicas) + currReadyNodes := int32(len(readyNodes)) + realExpectedReplicas := int32(redisCluster.NodesNeeded()) + if currSsetReplicas != currReadyNodes { + immediateRequeue = false + var err error + if realExpectedReplicas < currSsetReplicas { + // Inconsistency: if a scaleup could not be completed because of a lack of resources that prevented + // all the needed pods from being created + // StatefulSet replicas are then aligned with RedisCluster replicas + r.LogInfo(redisCluster.NamespacedName(), "Not all required pods instantiated: aligning StatefulSet <-> RedisCluster replicas", + "StatefulSet replicas", currSsetReplicas, "Ready nodes", len(readyNodes), "RedisCluster replicas", realExpectedReplicas) + statefulSet.Spec.Replicas = &realExpectedReplicas + _, err = r.UpdateStatefulSet(ctx, statefulSet, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to update StatefulSet replicas") + } + } else { + r.LogInfo(redisCluster.NamespacedName(), "StatefulSet - Not all pods Ready", "StatefulSet replicas", currSsetReplicas, + "Ready nodes", currReadyNodes, "RedisCluster replicas", realExpectedReplicas) + immediateRequeue = true + } + return immediateRequeue, err // requeue + } + } + + // Monitoring deployment check + r.CheckAndCreateMonitoring(ctx, req, redisCluster) + + // Service check + immediateRequeue, err = r.checkAndCreateService(ctx, req, redisCluster) + + return immediateRequeue, err +} + +func (r *RedisClusterReconciler) CheckAndCreateMonitoring(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster) { + // Populate monitoring spec if not provided. This to handle the case where the user removes the monitoring spec of an existing cluster. The monitoring objects will be deleted. + if redisCluster.Spec.Monitoring == nil { + redisCluster.Spec.Monitoring = &redisv1.MonitoringSpec{ + Config: nil, + Template: nil, + } + } + + // Monitoring configmap + r.handleMonitoringConfig(ctx, req, redisCluster) + + // Monitoring deployment + r.handleMonitoringDeployment(ctx, req, redisCluster) +} + +func (r *RedisClusterReconciler) handleMonitoringConfig(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster) { + // Get monitoring configmap + configmap, err := r.FindExistingConfigMapFunc(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-monitoring", Namespace: redisCluster.Namespace}}) + + // Monitoring configmap not provided: delete configmap if exists + if redisCluster.Spec.Monitoring.Config == nil { + r.deleteMonitoringObject(ctx, configmap, redisCluster, "configmap") + return + } + + // Monitoring configmap not found: create configmap + if err != nil { + // Return if the error is not a NotFound error + if !errors.IsNotFound(err) { + r.LogError(redisCluster.NamespacedName(), err, "Getting monitoring configmap failed") + return + } + + // Create Monitoring ConfigMap + mcm := r.CreateMonitoringConfigMap(req, redisCluster.Spec, *redisCluster.Spec.Labels) + r.createMonitoringObject(ctx, mcm, redisCluster, "configmap") + return + } + + // Monitoring configmap found: check if it needs to be updated + if *redisCluster.Spec.Monitoring.Config == configmap.Data["application-configmap.yml"] { + return + } + + // Monitoring configmap changed: update configmap + configmap.Data["application-configmap.yml"] = *redisCluster.Spec.Monitoring.Config + r.updateMonitoringObject(ctx, configmap, redisCluster, "configmap") + + // Add checksum to the deployment annotations to force the deployment rollout + if redisCluster.Spec.Monitoring.Template != nil { + if redisCluster.Spec.Monitoring.Template.Annotations == nil { + redisCluster.Spec.Monitoring.Template.Annotations = make(map[string]string) + } + redisCluster.Spec.Monitoring.Template.Annotations["checksum/config"] = fmt.Sprintf("%x", md5.Sum([]byte(*redisCluster.Spec.Monitoring.Config))) + } +} + +func (r *RedisClusterReconciler) handleMonitoringDeployment(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster) { + // Get monitoring deployment + deployment, err := r.FindExistingDeployment(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-monitoring", Namespace: redisCluster.Namespace}}) + + // Monitoring deployment template not provided: delete deployment if exists + if redisCluster.Spec.Monitoring.Template == nil { + r.deleteMonitoringObject(ctx, deployment, redisCluster, "deployment") + return + } + + // Monitoring deployment not found: create deployment + if err != nil { + // Return if the error is not a NotFound error + if !errors.IsNotFound(err) { + r.LogError(redisCluster.NamespacedName(), err, "Getting monitoring deployment failed") + return + } + + // Create Monitoring Deployment + mdep := r.CreateMonitoringDeployment(ctx, req, redisCluster, *redisCluster.Spec.Labels) + r.createMonitoringObject(ctx, mdep, redisCluster, "deployment") + return + } + + // Monitoring deployment found: check if it needs to be updated + patchedPodTemplateSpec, changed := r.OverrideMonitoringDeployment(ctx, req, redisCluster, deployment.Spec.Template) + if !changed { + return + } + + // Monitoring deployment changed: update deployment + deployment.Spec.Template = patchedPodTemplateSpec + r.updateMonitoringObject(ctx, deployment, redisCluster, "deployment") +} + +func (r *RedisClusterReconciler) createMonitoringObject(ctx context.Context, obj client.Object, redisCluster *redisv1.RedisCluster, kind string) error { + if obj.DeepCopyObject() == nil { + return nil + } + + ctrl.SetControllerReference(redisCluster, obj, r.Scheme) + + r.LogInfo(redisCluster.NamespacedName(), "Creating monitoring "+kind) + err := r.Client.Create(ctx, obj) + if err != nil { + if !errors.IsAlreadyExists(err) { + r.LogError(redisCluster.NamespacedName(), err, "Error creating monitoring "+kind) + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Monitoring "+kind+" already exists") + return nil + } + + r.LogInfo(redisCluster.NamespacedName(), "Successfully created monitoring "+kind, kind, redisCluster.Name+"-monitoring") + return nil +} + +func (r *RedisClusterReconciler) updateMonitoringObject(ctx context.Context, obj client.Object, redisCluster *redisv1.RedisCluster, kind string) error { + if obj.DeepCopyObject() == nil { + return nil + } + + r.LogInfo(redisCluster.NamespacedName(), "Updating monitoring "+kind) + err := r.Client.Update(ctx, obj) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error updating monitoring "+kind) + return err + } + + r.LogInfo(redisCluster.NamespacedName(), "Successfully updated monitoring "+kind, kind, redisCluster.Name+"-monitoring") + return nil +} + +func (r *RedisClusterReconciler) deleteMonitoringObject(ctx context.Context, obj client.Object, redisCluster *redisv1.RedisCluster, kind string) error { + if obj.DeepCopyObject() == nil { + return nil + } + + r.LogInfo(redisCluster.NamespacedName(), "Deleting monitoring "+kind) + err := r.Client.Delete(ctx, obj) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error deleting monitoring "+kind) + return err + } + + r.LogInfo(redisCluster.NamespacedName(), "Successfully deleted monitoring "+kind, kind, redisCluster.Name+"-monitoring") + return nil +} + +func (r *RedisClusterReconciler) OverrideMonitoringDeployment(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster, podTemplateSpec corev1.PodTemplateSpec) (corev1.PodTemplateSpec, bool) { + // Apply the override + patchedPodTemplateSpec, err := redis.ApplyPodTemplateSpecOverride(podTemplateSpec, *redisCluster.Spec.Monitoring.Template) + if err != nil { + ctrl.Log.Error(err, "Error applying pod template spec override") + return podTemplateSpec, false + } + + // Check if the override changes something in the original PodTemplateSpec + changed := !reflect.DeepEqual(podTemplateSpec.Labels, patchedPodTemplateSpec.Labels) || !reflect.DeepEqual(podTemplateSpec.Annotations, patchedPodTemplateSpec.Annotations) || !reflect.DeepEqual(podTemplateSpec.Spec, patchedPodTemplateSpec.Spec) + + if changed { + r.LogInfo(req.NamespacedName, "Detected monitoring deployment change") + } else { + r.LogInfo(req.NamespacedName, "No monitoring deployment change detected") + } + + return *patchedPodTemplateSpec, changed +} + +func (r *RedisClusterReconciler) checkAndCreateService(ctx context.Context, req ctrl.Request, redisCluster *redisv1.RedisCluster) (bool, error) { + service, err := r.FindExistingService(ctx, req) + if err != nil { + // Return if the error is not a NotFound error + if !errors.IsNotFound(err) { + r.LogError(redisCluster.NamespacedName(), err, "Getting svc data failed") + return false, err + } + + // Create service otherwise + r.LogInfo(redisCluster.NamespacedName(), "Creating service") + service := r.CreateService(req, redisCluster.Spec, redisCluster.GetObjectMeta().GetLabels()) + ctrl.SetControllerReference(redisCluster, service, r.Scheme) + + createSVCError := r.Client.Create(ctx, service) + if createSVCError != nil { + if !errors.IsAlreadyExists(createSVCError) { + return false, createSVCError + } + + r.LogInfo(redisCluster.NamespacedName(), "Svc already exists") + return false, nil + } + + r.LogInfo(redisCluster.NamespacedName(), "Successfully created service", "service", service.Name) + } else { + // Handle changes in spec.override.service + patchedService, changed := r.OverrideService(ctx, req, redisCluster, service) + + // Update service if changed + if changed { + service = patchedService + err := r.Client.Update(ctx, service) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Error updating service") + return false, err + } + r.LogInfo(redisCluster.NamespacedName(), "Successfully updated service", "service", service.Name) + } + } + return false, nil +} + +func (r *RedisClusterReconciler) CheckAndUpdateRDCL(ctx context.Context, redisName string, redisCluster *redisv1.RedisCluster) error { + // Label redis.RedisClusterLabel needed by Redis backup + if _, ok := redisCluster.Labels[redis.RedisClusterLabel]; !ok { + r.LogInfo(redisCluster.NamespacedName(), "RDCL object not containing label", "label", redis.RedisClusterLabel) + redisCluster.ObjectMeta.Labels[redis.RedisClusterLabel] = redisName + if err := r.Update(ctx, redisCluster); err != nil { + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Label added to RedisCluster labels", "label", redis.RedisClusterLabel, "value", redisName) + } + // Label redis.RedisClusterComponentLabel needed by Redis backup + if _, ok := redisCluster.Labels[redis.RedisClusterComponentLabel]; !ok { + r.LogInfo(redisCluster.NamespacedName(), "RDCL object not containing label", "label", redis.RedisClusterComponentLabel) + redisCluster.ObjectMeta.Labels[redis.RedisClusterComponentLabel] = "redis" + if err := r.Update(ctx, redisCluster); err != nil { + return err + } + r.LogInfo(redisCluster.NamespacedName(), "Label added to RedisCluster labels", "label", redis.RedisClusterComponentLabel, "value", "redis") + } + return nil +} + +// Redis cluster is set to 0 replicas +// +// -> terminate all cluster pods (StatefulSet replicas set to 0) +// -> terminate monitoring pod (Deployment replicas set to 0) +// -> delete pdb +// -> Redis cluster status set to 'Ready' +// -> All conditions set to false +func (r *RedisClusterReconciler) clusterScaledToZeroReplicas(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + r.LogInfo(redisCluster.NamespacedName(), "Cluster spec replicas is set to 0", "SpecReplicas", redisCluster.Spec.Replicas) + sset, err := r.FindExistingStatefulSet(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name, Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Cannot find exists statefulset maybe is deleted.") + } + if sset != nil { + if *(sset.Spec.Replicas) != 0 { + r.LogInfo(redisCluster.NamespacedName(), "Cluster scaled to 0 replicas") + r.Recorder.Event(redisCluster, "Normal", "RedisClusterScaledToZero", fmt.Sprintf("Scaling down from %d to 0", *(sset.Spec.Replicas))) + } + *sset.Spec.Replicas = 0 + sset, err = r.UpdateStatefulSet(ctx, sset, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to update StatefulSet") + } + r.LogInfo(redisCluster.NamespacedName(), "StatefulSet updated", "Replicas", sset.Spec.Replicas) + } + + // Monitoring deployment update + if redisCluster.Spec.Monitoring != nil { + if redisCluster.Spec.Monitoring.Template != nil { + mdep, err := r.FindExistingDeployment(ctx, ctrl.Request{NamespacedName: types.NamespacedName{Name: redisCluster.Name + "-monitoring", Namespace: redisCluster.Namespace}}) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Cannot find existing monitoring deployment", "deployment", redisCluster.Name+"-monitoring") + } else { + // Scaledown + *mdep.Spec.Replicas = 0 + mdep, err = r.UpdateDeployment(ctx, mdep, redisCluster) + if err != nil { + r.LogError(redisCluster.NamespacedName(), err, "Failed to update Deployment replicas") + } else { + r.LogInfo(redisCluster.NamespacedName(), "Monitoring Deployment updated", "Replicas", mdep.Spec.Replicas) + } + } + } + } + + r.deletePdb(ctx, redisCluster) + + // All conditions set to false, redisCluster. Status set to Ready. + var update_err error + if !reflect.DeepEqual(redisCluster.Status, redisv1.StatusReady) { + redisCluster.Status.Status = redisv1.StatusReady + for _, condition := range redisCluster.Status.Conditions { + condition.Status = metav1.ConditionFalse + meta.SetStatusCondition(&redisCluster.Status.Conditions, condition) + } + update_err = r.UpdateClusterStatus(ctx, redisCluster) + } + + return update_err +} diff --git a/controllers/resource_manager_test.go b/controllers/resource_manager_test.go new file mode 100644 index 0000000..720af16 --- /dev/null +++ b/controllers/resource_manager_test.go @@ -0,0 +1,96 @@ +package controllers + +import ( + "strconv" + "testing" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + r "github.com/inditextech/redisoperator/internal/redis" + "github.com/stretchr/testify/assert" +) + +func TestCheckConfigurationStatus_Zero_Slots(t *testing.T) { + rc.Spec.Replicas = 3 + + clusterInfo := make(map[string]string) + clusterInfo["cluster_slots_ok"] = "0" + + readyNodes := newReadyNodes(2) + + reconciler.GetClusterInfoFunc = mockClusterInfo(clusterInfo) + reconciler.GetReadyNodesFunc = mockReadyNodes(readyNodes) + + reconciler.CheckConfigurationStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusInitializing) +} + +func TestCheckConfigurationStatus_Not_Ready_Nodes_Empty_Slots(t *testing.T) { + rc.Spec.Replicas = 3 + + clusterInfo := make(map[string]string) + clusterInfo["cluster_slots_ok"] = "" + + readyNodes := newReadyNodes(2) + + reconciler.GetClusterInfoFunc = mockClusterInfo(clusterInfo) + reconciler.GetReadyNodesFunc = mockReadyNodes(readyNodes) + + reconciler.CheckConfigurationStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusInitializing) +} + +func TestCheckConfigurationStatus_Unassigned_Slots(t *testing.T) { + clusterInfo := make(map[string]string) + clusterInfo["cluster_slots_assigned"] = "1000" + clusterInfo["cluster_slots_ok"] = "500" + + reconciler.GetClusterInfoFunc = mockClusterInfo(clusterInfo) + + reconciler.CheckConfigurationStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusConfiguring) +} + +func TestCheckConfigurationStatus_Ready_Nodes_Empty_Slots(t *testing.T) { + rc.Spec.Replicas = 3 + + clusterInfo := make(map[string]string) + clusterInfo["cluster_slots_ok"] = "" + + reconciler.GetClusterInfoFunc = mockClusterInfo(clusterInfo) + reconciler.GetReadyNodesFunc = mockReadyNodes(newReadyNodes(3)) + + reconciler.CheckConfigurationStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusConfiguring) +} + +func TestCheckConfigurationStatus_All_Slot_Assigned(t *testing.T) { + rc.Status.Status = redisv1.StatusConfiguring + + totalClusterSlots := strconv.Itoa(r.TotalClusterSlots) + + clusterInfo := make(map[string]string) + clusterInfo["cluster_state"] = "ok" + clusterInfo["cluster_slots_ok"] = totalClusterSlots + clusterInfo["cluster_slots_assigned"] = totalClusterSlots + + reconciler.GetClusterInfoFunc = mockClusterInfo(clusterInfo) + + reconciler.CheckConfigurationStatus(newContext(), rc) + + assertStatusEqual(t, rc, redisv1.StatusReady) +} + +func TestCheckAndUpdateRDCL(t *testing.T) { + reconciler.CheckAndUpdateRDCL(newContext(), "rediscluster-test", rc) + redisclusterName := rc.ObjectMeta.Labels[r.RedisClusterLabel] + redisClusterType := rc.ObjectMeta.Labels[r.RedisClusterComponentLabel] + + assert.NotNil(t, redisclusterName) + assert.NotNil(t, redisClusterType) + assert.Equal(t, "rediscluster-test", redisclusterName) + assert.Equal(t, "redis", redisClusterType) +} diff --git a/controllers/suite_test.go b/controllers/suite_test.go new file mode 100644 index 0000000..f9c8d15 --- /dev/null +++ b/controllers/suite_test.go @@ -0,0 +1,269 @@ +package controllers + +import ( + "context" + "path/filepath" + "testing" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + v1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes/scheme" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/envtest" + "sigs.k8s.io/controller-runtime/pkg/log" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" + //+kubebuilder:scaffold:imports +) + +// These tests use Ginkgo (BDD-style Go testing framework). Refer to +// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. + +var k8sClient client.Client +var testEnv *envtest.Environment +var cluster *redisv1.RedisCluster = CreateRedisCluster() + +func TestAPIs(t *testing.T) { + RegisterFailHandler(Fail) +} + +var _ = BeforeSuite(func() { + By("bootstrapping test environment") + testEnv := &envtest.Environment{ + CRDDirectoryPaths: []string{filepath.Join("..", "config", "ops", "crd", "bases")}, + ErrorIfCRDPathMissing: true, + } + + cfg, err := testEnv.Start() + Expect(err).NotTo(HaveOccurred()) + Expect(cfg).NotTo(BeNil()) + + err = redisv1.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ + Scheme: scheme.Scheme, + }) + + Expect(err).ToNot(HaveOccurred()) + k8sClient = k8sManager.GetClient() + Expect(k8sClient).NotTo(BeNil()) + + maxConcurrentReconciles := 10 + concurrentMigrates := 3 + + reconciler := NewRedisClusterReconciler(k8sManager, maxConcurrentReconciles, concurrentMigrates) + + err = reconciler.SetupWithManager(k8sManager) + Expect(err).ToNot(HaveOccurred()) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + go func() { + defer GinkgoRecover() + err = k8sManager.Start(ctx) + Expect(err).ToNot(HaveOccurred()) + }() + + cluster := CreateRedisCluster() + Expect(k8sClient.Create(ctx, cluster)).Should(Succeed()) +}) + +// Add Ginkgo decorators +var _ = Describe("Your Test Suite Name", func() { +}) + +var _ = AfterSuite(func() { + By("tearing down the test environment") + err := testEnv.Stop() + Expect(err).NotTo(HaveOccurred()) + +}) + +var _ = Describe("Reconciler", func() { + BeforeEach(func() { + EnsureClusterExistsOrCreate(types.NamespacedName{Name: cluster.Name, Namespace: "default"}) + }) + AfterEach(func() { + + }) + Context("CRD object", func() { + When("CRD is submitted", func() { + It("Can be found", func() { + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, &redisv1.RedisCluster{}) + Expect(err).ToNot(HaveOccurred()) + }) + }) + }) + Context("StatefulSet", func() { + When("Cluster declaration is submitted", func() { + It("Sets correct owner", func() { + sset := &v1.StatefulSet{} + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, sset) + Expect(err).ToNot(HaveOccurred()) + controller := metav1.GetControllerOf(sset) + Expect(controller.Kind).To(Equal("RedisCluster")) + }) + It("Creates configmap", func() { + cmap := &corev1.ConfigMap{} + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, cmap) + Expect(err).ToNot(HaveOccurred()) + Expect(cmap.Data["redis.conf"]).To(ContainSubstring("maxmemory 500mb")) + Expect(cmap.Data["redis.conf"]).To(ContainSubstring("cluster-enabled yes")) + }) + It("Stateful set is created", func() { + sset := &v1.StatefulSet{} + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, sset) + log.Log.Error(err, "error", "statefulset", sset.Spec.Template.Spec.Containers[0].Resources) + Expect(err).ToNot(HaveOccurred()) + cmap := &corev1.ConfigMap{} + err = k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, cmap) + Expect(err).ToNot(HaveOccurred()) + Expect(sset.Spec.Template.Spec.Containers[0].Resources.Limits.Memory().String()).To(Equal("800Mi")) + + }) + It("Stateful set is created with custom resource limits", func() { + clusterName := "resources-labels-cluster-test" + + // create test cluster + scluster := CreateRedisCluster() + scluster.SetName(clusterName) + scluster.Spec.Labels = &map[string]string{"belongsto": "team-a", "other": "label"} + scluster.Spec.Resources = &corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("1"), + corev1.ResourceMemory: resource.MustParse("599Mi"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("1"), + corev1.ResourceMemory: resource.MustParse("599Mi"), + }, + } + Expect(k8sClient.Create(context.Background(), scluster)).Should(Succeed()) + time.Sleep(3 * time.Second) + sset := &v1.StatefulSet{} + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: scluster.Name, Namespace: "default"}, sset) + Expect(err).ToNot(HaveOccurred()) + Expect(sset.Spec.Template.Labels).To(Equal(scluster.Spec.Labels)) + Expect(sset.Labels).To(ContainElements("team-a", "label")) + Expect(sset.Spec.Template.Spec.Containers[0].Resources).To(Equal(*scluster.Spec.Resources)) + + }) + It("Service set is created", func() { + svc := &corev1.Service{} + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, svc) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Pod template labels are passed", func() { + rcluster := &redisv1.RedisCluster{} + err := k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, cluster) + log.Log.Info("ncluster", "cluster", rcluster) + Expect(err).ToNot(HaveOccurred()) + Expect(len(rcluster.Spec.Monitoring.Template.GetObjectMeta().GetLabels())).To(Equal(2)) + }) + It("Configmap is deleted when passing finalizers", func() { + err := k8sClient.Delete(context.Background(), cluster) + Expect(err).ToNot(HaveOccurred()) + + cm := &corev1.ConfigMap{} + err = k8sClient.Get(context.Background(), types.NamespacedName{Name: cluster.Name, Namespace: "default"}, cm) + Expect(err).To(HaveOccurred()) + + }) + }) + }) + Context("Auth", func() { + When("Secret passed", func() { + It("Creates Configmap with the correct field", func() { + secretName := "test-secret" + clusterName := "secret-cluster-test" + + // create secret + secret := &corev1.Secret{} + secret.SetName(secretName) + secret.SetNamespace("default") + secret.StringData = map[string]string{"requirepass": "test123"} + err := k8sClient.Create(context.Background(), secret) + time.Sleep(1 * time.Second) + Expect(err).ToNot(HaveOccurred()) + + // create test cluster + scluster := CreateRedisCluster() + scluster.SetName(clusterName) + scluster.Spec.Auth.SecretName = secretName + Expect(k8sClient.Create(context.Background(), scluster)).Should(Succeed()) + time.Sleep(1 * time.Second) + // get configmap and see the value has been set + cmap := &corev1.ConfigMap{} + err = k8sClient.Get(context.Background(), types.NamespacedName{Name: clusterName, Namespace: "default"}, cmap) + Expect(err).ToNot(HaveOccurred()) + Expect(cmap.Data["redis.conf"]).To(ContainSubstring("requirepass test123")) + + }) + }) + }) +}) + +func EnsureClusterExistsOrCreate(nsName types.NamespacedName) { + rc := &redisv1.RedisCluster{} + err := k8sClient.Get(context.TODO(), nsName, rc) + if err != nil { + k8sClient.Create(context.TODO(), CreateRedisCluster()) + time.Sleep(3 * time.Second) + } +} + +func CreateRedisCluster() *redisv1.RedisCluster { + cluster := &redisv1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + Kind: "RedisCluster", + APIVersion: "redis.inditex.com/redisv1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster-sample", + Namespace: "default", + Finalizers: []string{"redis.inditex.com/configmap-cleanup"}, + Labels: map[string]string{"team": "team-a"}, + }, + Spec: redisv1.RedisClusterSpec{ + Auth: redisv1.RedisAuth{}, + Version: "6.0.2", + Replicas: 1, + Config: ` + maxmemory 500mb + + `, + Monitoring: &redisv1.MonitoringSpec{ + Template: &corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Name: "monitor", + Labels: map[string]string{"l1": "l1", "l2": "l2"}, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{{ + Image: "test:1.4.36-alpine", + Name: "test", + Command: []string{"test"}, + Ports: []corev1.ContainerPort{{ + ContainerPort: 9111, + Name: "test", + }}, + }}, + }, + }, + }, + }, + } + + return cluster +} diff --git a/docs/developer-guide.md b/docs/developer-guide.md new file mode 100644 index 0000000..5cae9bc --- /dev/null +++ b/docs/developer-guide.md @@ -0,0 +1,402 @@ +# Developer Guide + +Quickly provision Redis cluster environments in Kubernetes or Openshift. + +The operator relies on Redis cluster functionality to serve client requests. + +## Local development and testing + +A *local K8s cluster* can be used to deploy the Redis Operator from a pre-built image or directly compiling from the source code. + +This will be helpfull to develop and test new features, fix bugs, and test releases locally. + +As we will see below, you can use the `make` command to deploy the different components, as well as to deploy a sample Redis Cluster, or use the scripts that automate the basic workflows. + +## Development profiles + +Three **Deployment Profiles** have been defined. Basically, these profiles determine which image will be used to deploy the Redis Operator pod. These are the 3 Deployment Profiles and the default images used to create the Redis Operator pod: + +| Profile | Image used to create the Redis Operator pod | Purpose | +|---------|---------------------------------------------|---------| +| debug | inditex-docker-snapshot.jfrog.io/production/itxapps/delve:1.24.0 | Debug code from your IDE using Delve | +| dev | redis-operator:0.1.0 | Test a locally built (from source code) release | +| pro | operator.redis-operator:1.2.1 | Test a released version | + +## Create your Kubernetes cluster + +You can deploy your own Kubernetes cluster locally to develop Redis Operator with the tool of your choice (Docker Desktop, Rancher Desktop, K3D, Kind,...). + +We recommend you to use Kind. To start a local registry and a K8S cluster with Kind you can use the following script (from Kind official doc page): + +```bash +#!/bin/sh +set -o errexit + +# 1. Create registry container unless it already exists +reg_name='kind-registry' +reg_port='5001' +if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then + docker run \ + -d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" \ + registry:2 +fi + +# 2. Create kind cluster with containerd registry config dir enabled +# TODO: kind will eventually enable this by default and this patch will +# be unnecessary. +# +# See: +# https://github.com/kubernetes-sigs/kind/issues/2875 +# https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration +# See: https://github.com/containerd/containerd/blob/main/docs/hosts.md +cat <**The default namespace used by make command is `redis-operator`. This value can be overwritten using the `NAMESPACE` environment variable.** + +3. Generate the manifests, according to the profile you choose to use, to deploy the Redis Operator. Use the `PROFILE` environment variable to define the profile to use. The manifests are generated in `deployment` directory. + +``` +make process-manifests PROFILE=debug IMG_DEBUG="localhost:5001/redis-operator:delve" +``` + +>**If no `PROFILE` environment variable defined, the default value is `dev`.** + +4. Deploy the Redis Operator. Uses the `deployment/deployment.yml` generated in the above step. + +``` +make deploy +``` + +>**`make` will install the needed tools like `kustomize`, `control-gen` and `envtest` if not available.** + +## Debuging Redis Operator + +If you followed the steps described above to deploy the Redis Operator using the `debug` profile you'll have the CRD deployed and a redis-operator pod running. + +This pod is created using a `golang` image with `Delve` installed on it. This will allow us to easily debug the manager code following these steps: + +1. Build the manager binary file from the source code. +2. Copy the manager binary file to the redis-operator pod. +3. Run the manager binary inside the redis-operator pod, using Delve to allow remote debugging connections. +4. Port forward `40000` port to be able to connect to the exposed port in the redis-operator pod. +5. Connect from the IDE of your choice to remote debugging + +To follow the 3 first steps simply execute: + +``` +make debug +``` + +The manager will the be running in your redis-operator pod and you'll see pod's standard output printing in your terminal. The operator logs will then be streamed to the terminal. + +To enable the port forwarding: + +``` +make port-foward +``` + +You can now attach your local debug from the IDE of your choice to the debug session in the redis-operator pod. As an example, you'll find the configuration needed to launch the debug from VSCode here: + +``` +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Connect to server", + "type": "go", + "request": "attach", + "mode": "remote", + "remotePath": "${workspaceFolder}", + "port": 40000, + "host": "127.0.0.1", + "trace": "verbose", + "env": { + "WATCH_NAMESPACE": "default", + "KUBERNETES_CONFIG": "${HOME}/.kube/config", + } + } + ] +} +``` + +Customize the configuration to use your kubeconfig and your namespace if needed. + +Before redeploying the operator code using `make debug` you can delete the operator pod using `make delete-operator`. The operator pod will be deleted and automatically recreated to suit the replica set requirements using the debugging image. + +>**!! Go 1.16 or above is needed to use Delve debugging !!** + +## Cleanup + +Delete the operator and all associated resources with: + +``` +make dev-delete-rdcl +make undeploy +make uninstall +kubectl delete ns redis-operator +``` + +## Deploying a Redis cluster + +There are two sample manifests for creating Redis clusters under the folder `config/samples`. `redis_v1alpha1_rediscluster-storage.yaml` creates a persistent cluster and `redis_v1alpha1_rediscluster_ephemeral.yaml` creates an ephemeral cluster. Please note that some of the following tooling (such as PoMonitor and load tester) are dependent of the Redis cluster name, so both samples share the same name. + +### Deploying a master-replica Redis cluster + +Create an ephemeral cluster `redis_v1alpha1_rediscluster_ephemeral.yaml` **IMPORTANT specify at least `replicas: 3` `replicasPerMaster: 1`** this is important to promote failover and renconcile cluster when master fail + +## Getting the metrics from Redis Cluster and the Operator + +The folder `_local_tools/tooling` contains manifests for **Prometheus Operator** and a **Prometheus Instance**, a **Grafana Instance**, two **PodMonitor** instances and an **InfluxDB Instance**. These tools can be applied by running +``` +kustomize build _local_tools/tooling | kubectl apply -f - +``` +The operator serves its metrics via the port 8080. One of the PodMonitors scrapes metrics out of Operator instance and writes them to the Prometheus instance. +The other PodMonitor uses a label match to find out all Redis instances and scrapes all the Redis metrics and copies to the Prometheus instance. + +By default, Redis pods does not expose a metrics port. To achieve this, a sidecar should be added to each pod. This operation requires a change on the code where the Redis cluster statefulset is created. The can can be applied by running +``` +git apply _local_tools/monitoring/redis_monitoring_sidecar_apply.diff +``` +and can be removed by running +``` +git apply _local_tools/monitoring/redis_monitoring_sidecar_remove.diff +``` + +--- +### !!! WARNING !!! +> It's crucial to remove this path before commiting the code to the repository as this sidecar approach is just for development purposes and not for production. + +--- + +After applying the patch and running the operator by running `make dev-deploy`, newly created Redis clusters will include this metrics sidecar on each Redis node. By this time all the metrics should be on the Prometheus instance and ready to inspect. + +## Visualizing the metrics + +Grafana service's type is ClusterIP and the exposed port should be forwarded in order to reach the service from the local development machine. + +``` +kubectl port-forward service/grafana 28080:80 +``` + +After forwarding the port, Grafana interface can be reached by accessing `http://localhost:28080` from a browser. Grafana username and password can be found inside the `grafana.yml` file. +The data source for all metrics can be found by adding a Data Source by the type Prometheus and with the address `http://prometheus-operated:9090`. A sample dashboard can be created by importing the `_local_tools/dashboards/redis-prometheus.json` file. + +![img.png](../images/redis-dashboard.png) + +## How to run a load test + +The folder `_local_tools/tooling` contains the file `redis-load-tester.yml` which can be used to deploy a load tester. + +This load tester randomly generates keys and writes them on the redis cluster. Load tester also writes the metrics about its load to the InfluxDB instance. + +The Influxdb can be added as a data source on Grafana by using `http://inflluxdb:8086` as the address and `myk6db` as the database name. + +The dashboard can be added by importing `_local_tools/dashboards/redis-k6.json` file. + +![img.png](../images/redis-load-dashboard.png) + +## Tests + +There are some basic tests validating deployments. +Tests can be run with: +``` +make test +``` + +## How to test the operator with CRC and operator-sdk locally (OLM deployment) + +These commands allows us to deploy with OLM the Redis Operator in a OC cluster in local environment + +### Prerequisites + +1. OpenShift 4.x (full installation or CRC) +2. oc command +3. docker or podman commands +4. bash (to access environment variables) +5. operator-sdk command + +### Start new CRC cluster + +Download the latest release of CRC. https://console.redhat.com/openshift/create/local + +Please note the openshift version in your project + +Set up the new CRC + +``` +crc setup +``` + +Start the new CRC instance: + +``` +crc start +``` + +### Local Registry + +Ensure that the internal image registry is accessible by checking for a route. The following command can be used with OpenShift 4: + +``` +oc get route -n openshift-image-registry +``` + +If the route is not exposed, the following command can be run: + +``` +oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge +``` + +We will dynamically create an environment variable with the name of route to the OpenShift registry. The route will have “/openshift” appended as this is a project that all users can access: + +``` +REGISTRY="$(oc get route/default-route -n openshift-image-registry -o=jsonpath='{.spec.host}')/openshift" +``` + +we need to log in to the OpenShift internal registry + +``` +docker login -u kubeadmin -p $(oc whoami -t) ${REGISTRY} +``` + +The output should end with: + +``` +Login Succeeded +``` + +### OLM Integration Bundle + +Export environment variables + +``` +export IMG=${REGISTRY}/redis-operator:$VERSION // location where your operator image is hosted +export BUNDLE_IMG=${REGISTRY}/redis-operator-bundle:$VERSION // location where your bundle will be hosted +``` + +Create a image with the operator + +``` +make docker-build docker-push +``` + +Create a bundle from the root directory of your project + +``` +make bundle +``` + +Build and push the bundle image + +``` +make bundle-build bundle-push +``` + +create a secret inside the namespace where you would like to install the bundle + +``` +kubectl create secret docker-registry regcred --docker-server="${REGISTRY}" --docker-username="kubeadmin" \ + --docker-password=$(oc whoami -t) --dry-run=client -o yaml -n ${namespace} | kubectl apply -f - +``` + + +Install the bundle with OLM + +``` +operator-sdk run bundle $BUNDLE_IMG --skip-tls-verify --pull-secret-name regcred +``` diff --git a/docs/images/badge.png b/docs/images/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..d5739127774a4d20b594185d23ddc352998f7afc GIT binary patch literal 1992 zcmV;(2RHbMP)EX>4Tx04R}tkv&MmKpe$iQ>9WX4i*)0$WWc^q9Ts93Pq?8YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2ziIPS;0dyl(!fKV?p&FYE)nr@q^ zL|n{dSH-|9g6PE%0vME;Wz0!Z5*^3aJ$!t(`8@D`M&FbL25y1in%7%%AEysMnz~Bf00)P_ zc!9FlJG{H6y|;hQH2eDjR7`T3h54iq00006VoOIv0RI600RN!9r;`8x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru=n4xL3@5v!<9z@C1;t53K~zY`wU=FQRM!=TpZCnz zfNcT+N&^%^Y!6W5GbSI{V^Gzmt$I;aO>bINRquM={)qmAUgZx|RTZ^OZqi;vsS2q) zHVq#hV?t-fxEOXj-xsh?+1Qk@eAN6&<13(fPn`<88i!?05*Bf!_WY310MoCKn^&TO|$>E z;T^$*#T-!o3IuEbBSKTgdBIPCm!ed_JfdW{3f#$!Of;XjfZS-Q3CtK@N0fkhAjy6% zkbp>XBNG9jJd|&bd2WLOTF%-?~h$cmnPP$|T+=tSgz6Tra~n{J!KZe?{8 z*p&DfD5V*F9q5ob0^S9D0*nDGNJo)6s>69bQ$TOA0J_055|B z(hVZYl2>g_VXgsr;oU}M@C{qb+r`>eKyR^BuMFi&z(eH2z#2ib5Ut7qvc4<)dlHTS zmOZOLt$XBVQn?r}Al}1VL9{FKL!(Eze~veHEC3*DHSgex}T0G0(I

XO|TXzNxn4Bb`S5oepZQi5qKRq3DiWmUMUPr37Wy~1oBt| z;3jaDh{@_;Tn~xcfL_c1(21$onQPU-bG4qa>pOb~n%T@g!A0;7fMDD%I3B?t0$vgx z0DgrS0wscvFmGFw1;>D&ARPyqhFB1xFq*#9&&CkEAGxp9A-O7;7dm142zFPx0Sy7) z1p3qa9MA=R8F(qBXdK8GodRB{7IuK41X1LWmR7)SP};P-wT(8@&(Dg6Xi7NkEdi62 z+0}~SMv#-9;?o#DC7@@dWY7}Qcp9W1*lSTm%pz8|wq9Dz>k4q$aNDpFp()_5;4p9+ zSO-sncaEW8#Za_Zl6@SgA#NcSY$dX9$$A^~4@1-PP2=fYabja?IDQbBKN+0??~#4S zP|1x>Jl?T@?vavjUx-&Ca|%KJE1eki`>|;k%5OabMOf4kQX8Pa8^u_#a zl6cJ~3tGmk|4$eKL}oYe4bU;fvXiJfb)kPTSPrHQa~Sy~D2almmEqykg}4cd5_7=# z6-#?S_tGTlI~GtK&UYBUhWR;g8na~dKJad9P3cCw1v(0tDBP9wXPa5!1DGF!&H|C- zMd00PA)f3hmg+kaV0(YsZhu6J>t^fn$G~hld5_QoaGP5==75^*Zliu65iDX(2;vmW zXA7tl`UP$W9RPNvzfp^Ex`1}fUc|CtQh1M07pBuKr@I$uV5U+d(~0N;+Ny%AlXkunCYgjYDxyG#j@K@lRVULNb;D2qm4L>R1Gj+XV<4I-k z?0uv6g)Sp)5WL_JZT60pTrT7nfsxep1n@!-Yo|s_pr1RH6wOnyLY!^$F zLc9vRXYo7CHRR@&Gk)HqJQPQWEaFv}UjuJNsi{1Ki3P6#uat-TvtL2*EO1=t93}=1 zZ5_=rz$wAcfQvF80e}3mHT!>uT0{+lzpc-YW|=L-j + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/redis-dashboard.png b/docs/images/redis-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9d1d8d2a17ac0b2f6b2f41bbcc7b5472119450 GIT binary patch literal 98362 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

@fKy!?PW)8vua3s#?m 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 z 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 a5n`KW4^tU?jkRupf3nXNrHUmD{r^9A-ajb- literal 0 HcmV?d00001 diff --git a/docs/images/redis-load-dashboard.png b/docs/images/redis-load-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..1bbf4fe0c86a0f507214bf5a6fdf98f6a8fd20e3 GIT binary patch literal 51161 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 Y%do2LQD@)J7YjjLPgg&ebxsLQ061P8i~s-t literal 0 HcmV?d00001 diff --git a/docs/images/redisbackup.png b/docs/images/redisbackup.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a303c2a271eaa5601eb5122980acd981bd7780 GIT binary patch literal 261004 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

N5mStpMG_`j;1*VFK3M zoooM^lfy^rf7_7}K3|wVe7*`o9BolSiWevvrH{Ios-QD-%=B&;7?b==XjP}Ru~)%_ zint$yG;D53eEVfba9_UY6b_3C`O3xK+Q58Zo6?{21kC|Cz{i(I84!i_fMI&j2?J=~ z%e~f*Kw-+MK>6R^`?8_{ru*UESo{o)WhIv%42UW(^yHezr}-e&lYZ%mWi-qW9TDJ^ zWie36uOY?H&lc9Ow=Z1@J2y;r#rCOf3d@sY8ctFaCNfBO!{OQ?~UjlUj6qI5E1qT=rJZ1%hb+GSHL~VXOBKlz;4NWfrIA- zf_efta^7K&x0&h5A=bfmg?fviAIAH*&}s;iChBO;wl@K616$QxlloIM5srC|_OBip z7_Ls0FSUd~B(Ww!WQXPopV&~Xciq-HIjx-bB=7LbLLL9%Ch5~x@3hDJl#s(hCeu2%W8{a|`MH69nYrpCrB z*fzA)c*={{z2-rD(lKYs;zB=&drXJA@29!|$;5iX_hLrgF5*uBK+EH<=>PS;FTcPf zY-~xklOOg`lhyMAu(FfN&=}j3dhu>_KVFnwd4iW1^l;!YqVq}XAD>D-t*F>AZlLK= z_zAb4J|E^sUkVcygR<%4ToL^*9!0sHox*k4$Gwj~S$k3tHaWMMsOvrab17d9-38vVBL&OV^q8s$2@Gu?$@P zm+FwB7vdMhR+INI{OFyv|K^Q~$X*UPxDImyw4-@8Tlf+9#Mlp;t+`Oij%TD zpt~2t6&7zl_#NF>VyT5_BF5F`9N@JGBb<-|!|$)hu^!+Pz@%fP3wookhOSaM8$^i2 z_=j#+^|B4^bKX0IvGA#AlY}ssB-2JjScaZdyf}@rQ(Xs)Z`Q{VL;mRRe7b7g{=d7E*wN|ZkXe|=g~Ej zFe{m0bKiM6C*ppI!_a?yWo(QsqjJU>-AVe&;44UZFu8Bn(hTD-p0#QQc_do9h3+uK z$r@1#D}5x=HCu46D=i4*8xns$;^jJ>Tp$)M7b0@t$PYqS(}4Wsa9p9g#TFcZDDQHK z837Y%qO|i{aTpr79=Wk`uQrWIh>THj^WVl_vQ^Q;ICt~zJUF}5*)4Zvwi#Q>^pY7n zN>HqG2YjR9dL~LyY^MQ!GTP6lBdtNVS|C%#GH>+-AX#+gx6D(w;f7~A+-Y-{Bx2<_ zSG`@&Hr$XI2VyYK2i}V}=w(>ylOG4)Y38KwnTT3_tUvid@Od7D05>w`8WXe)s=S)( zypC!CpC(rJCS%6=fPlqI*q=!1)+5=CP~uoWuZr{Ts1Y$J@J;xP(+={xgC4}mX_t_9 zdeyqNf*XgYcAe95#N3DGt-3*5K?)=;6nh$iw>C=WL8*M|)8c!Z@bf{u622hd_ys+Z zcX-&|Rs!ml>+ktx9xrWjQjS0#`FH|JT#{x|K}X z&%St0UTyGJ+$&|t+=|IOXsApVlTItt=aqQbr$O~&bc~t6ljCAL{^H?Y_2C^AN6^db z%8-pW`Rn9?56_&rP1kb8Ze5^#(s9J23U z#H4j4OW<_8She_$`{^f*`~JuMgRSbf;R?cgfV;x+nJxL9h@ zLYcE@Z8zGv_&j;g7~XoK2>`w&>gw*0lHkflpnD~gW{KE}at7534wdaIa3>u@yQVwb zTsxfK^S!i=kL%Qz37&2&AcLfXgSK>lq_7z{P|UH9k{uG-4NsxbY2Opo&Y3v?TcE;W zy_2rP!uw#RN04>s>2^^Q`mAFNUqoux-!dTwE1PCK?^Vv1m5(3N=u!fo&W6K^>!cp%5aJI-lIGk zL}%Zy=_M?x57!aiD^rYJIO`iyz3`4`Ozf!9mJ|VSe6GXirZ}a2P8kG%^f8 z^6`n+i|gE~+@`PVC;Vtw2M#`@z|m=VYx%LB^l@QlgXjDRJWTUH@<*32eV@Pp`1*(T z>M6V5r`qxzoGOdE!a2~Plr-V4E?n|&zOw;XbKdYoIqgsOj^?weOVm_nmc#d>jL#9$ z^J6U6h48#tP#cOCNVA)i0kwPg-LAy5ejtCLi+F2vd{eMo>iX6OTeM^O7KmpyO#9P@ z+!U_1omVc!=!=>oh7U};`}|N3n5e;_bIZHvt@UD=Q0i}c4?rg@z^V0 z>#cAl#cyDpI{VbBhvML~FzXM{+aOTj__nd<)T3Lb;*#jP`Ao2xo0`j0oC0MRzwsUy z_!fnG7E`NtpHwXK>_9G18{YYCgPp=@%Xc*?fEiQ+$}0}ne-c0m6%M6OCwG_NIUk&R zP3?jlNTM+D{UlkROpN4;V{-7Y2n1Ovn$jc(veN`k)2X8`_${(l%qJZ|!GB~K1lt4m zqKM*4Q4KU)((CNBJ!E)f?me0`Ro+M7geb$Axyjb`()*6>V>lpEZqxQ_*ICv*)AV8L z!Oxxwg?XK?U%d~cm!LH0^*MD|81p5&`3%8e`C;tXzBJdwdS2=11=saRVLWk~j%flX zhk~(#%~H3I`X6@pmLt`5*=MTzbe+E+am_41q%y4lq_5R4Rw`(%(@Trb*|H|`~oiS*_Jyu-OtWr%&5Q9+cC0riv zMUAJ}&Ij`X~%HdyQ>nBpQQt(IV0v?oc9{$>_^0-n8* zR*Bdnl@&*J6I9$dt&_uvd)MJNCPi)cY8!|~N{}K;vlX+qr6XrD@)O9~Kl!*W~~ zVlf{PIM|--8V%$;=p;q?c%6BAz{1CV22{fxLkMG~dTxu-*xUq}XnpFz@2;R4jbj9v z02eod5)nUIj0hVk(s>y=5=mWqY^p}1nRh8j+xgo~CQildiUFj>`k3;zi2z!_;v{QDI=zswp6(!zs z*t5)=gc#U(EQq2=Cd<{KLhX%()YT;Q^HLN`Uso2(4op-9+iOb|dgN#3B4;~R)H1bO zHo8L0blgfnai7|C1)?8mWv--Sdu}nuHNH8Ml%X_-J6Vj7Mr4Nal&yX}W5;!A-Rz@< z#Ciweu7+j5EgHYueH1Em ze|qFn5F4y+pGu!5MfXMypH9N{al<>(?Sg`HCSSd;|1gzs%mAUnxa*>(9N(aNB|msj z{Ot^hd(Q*1s-v>qLo@)-6w`!{Ow4_3K__G#UpDfb6RI!mhD+@%rlBiZE z41IJCMVx0b*re>xzjALcNlOLL(_c=}pzZ(oQu^b?ZqtL0b?-lJkviXb82oXo|B-|k z;Tcj3e;rlHk1zdCeoX$hl{mH(J3U%aSW&oVZ{jezm(Vs_87;VhazM2VSI!RGIBjyJ zN(VD81SLJ9XZ#9Pwvik^`dfT%j1i)6Ga1y55LOl$rh}5!8uM2K@8?!7%0vY&tb_Wc zPgr?MK?W4uC1HhT-1&R&csSZ%Cz3Z2izCP z!ojv`I!nV^02HpsgUd?OwN2ffhv?RV-zSQ&!Zlu zo84wSKr_@2JKSFFx+_9DMH&%ICbdaPxH4vY{Z}W;loNMS=8O)k)0(h*h%@4`-fF;DtqGg87cF4__)MTip3f#qQwyP*jJ5B=5C{Fp7!M6jGwkubh27D4EFf5xmg}*9SIjuEDd8z2&7G1=A zhJPB=rfh1aAFsc$o|JZn6xyPOCz9D;d_uiIA={Edvl=XdhrbVL|SrpBIceCMV; z;tHqJ(#ACVv`)JVZfue2_npzoE$EKtfpV`TiI>GXFkoZ?y{{L?={<%a;*qmZdkVD< zvcaqMgV}BrcTi{D(gLh!H-=t)f_BgL!}1Z0~pfzL1-Wg=! z{Dy55Ti0HFe7U7X+oh)B*)V?JZ{rG>&QJG zHs%7(88aSO_%{*RFd~dA)t=mNo~|Kc<A}N+6qv{PM zv|N&lX6z%-kE$)gn+{1gFO>PoaPK>0le$lMO)BG55pKMRW~aE&2HRt*e*9xY@b=Nu z+m>WfXHSq0r{$dv(oan+tiRZ-lS4jH9mHJriu_=#9W?8mUrd^4ij=K&GuMFvN_R%*Q`(PWqnN^L@^0s!mRYwj{LHWii zm?@CP6~=j%>-$BWTv&|-&TkZ(dVH2Wj(*EbHd~Gndg`oFHgjPM2a2_x@%gm z(GL^ccIVqKyVab$NY_tW`W+Nn)bp1i3R#eX<4wEb0W@y}XgBb9SU-whakccWCrvUfRz<3bw9esBHd-AM9^^QpppbAxg^iRJZ$(3UJ75?|51tK$wH_6yw%N^XPx zUIJ^~VuH_p)ZMhL{<^ie0=4I98E2^>ZnGF^bPhZ2UVKUsO z3E^a@e6Xy@1a(RZ@0t8dxhwf_`T99SZN+9l&g{GeJpRFY$+f`oS0!0LttG*R(L#(u zO};QPuuVH`dv$T=rP zoP$22rKgIxZ32)TedW(sYx9Al&ev|DSc`%Hr8$G(`%I*AeD7=I;mP)ysf409k7xCh*rC|EQRsQ0M{26dAwYGoTC0#zofWp6DGy8_t77 z4*o|UF3jU}*EseY_(g+ca8&G*PYhw4Ue^5yww+ZS}mB6oOu6{m0M=EZN_KiM;LtpeVV5Y0RT9U+o z_UHh4hzedGr}$={ngPS2DIbDrHs=9mtmHe!@~ioo!J%ht3K%wvi8Y2TIo z2%LefEvI@d(YZ3}M$TCZF=Ug9?$LQrU3So$IDtbbO3;qA?lF7WiC`+>MazEMQy(9X zk1j;Nsl_5xCc?;iGE&Z)ieMYg^)@U(0Cpj&x7k3jM~S+PilVq$Q1)EFGj}7LhEU6O#JzaAF!p z*>5Y?-e_Dke4icFY#h6U!!%4yCq46fvRe zM3x@f4`p%-J9ksBEkP)F@D}1QSEx12jbd-0MDg@+^ohCrA?9@%b3-AwZ;{jl@$igBJ-cEWBqs%Rb z2U{Y}HmUgQhyeN7K64q3R|)-BX9JN|R0~}1n?G7m&4hI!uUBDf-?wAwSyER(=Pq3B zKmF(8#XsGMQ2^P1yzR~O`&rWaJV|G_>|+}fLPI_fn_K_RlgxQ$`)+C*I$h45oL-dY z@%hG2a6-z|PMG|9vfeV6=M4+28@tO-KDvIxXgH3S+dWU~6Eu#vEM3W?T(CG49c$+$ z9DhFf{LDtu_c7k`iiqgLfja}|&j}mFs1y|O8%h^v(_;_fVEA@aL#Hk7Wk=(+VEy0I z(8}h4q14ZX8u0}R!aHe5tZ%_%dZ*Y+R>P|+h-3aJxnpBZkS|<2q*_5ca}KbS$K4o~ zFDbF5Lnz5!d}EmnQoJ)GH=E!4z&siRx!FIjklQ)blc-05F6uxJC-_A_ibB=u&I!_) zj%@#$T)xL4wBqo_eYFNhO-F$n|Fl5ZhdZ+JKUat{-DN{+dH!6iA>xR}H!A)9Ugg%1 z{Q)l@>Pm8qO;2GSx6AhGO|LiS3|qPTxZ1!8Hj3k&`gxM%2s+Eu-4>GIKJ3n)hchnxBVJgPk|%`VBzw=e;#&_!!z$U_Zgjq0%#jg?6-Mg! z=Ni47C749v6jW8hDr{sXo5aeO3UB zo;DYFR0t@HoAi~amy5)3RlO^0B{zR(fD&A}WuloaE)<aeOkzo=Z3-4 z$%yIvA9sWVzoTt>Duzp~^k#{n8rS{4PKx@LcT%c0iw7-Uxz6@Jf!X`GXtGtstit+% z0Ouru$UQyK=5XrgKw)MWZ5B%p9}DC1{mMG4RFuHtJ85}5n>Hbb6qQ{|)n($Xp)V%y zEdd~UHAlHA9oRB0D7HPkynM8oPI%%=Ue0r~LWQd^@_iA*hB$XZ$n;?La%Ot;P9mJX z23jUZCS??ZR^yeE)X_?ojCh_)M2Lp)nX^L+qQelKAF;`wa@PWw%YqA!G22x2?aKZu z+cCN!?oV!jC_Q~`Hd7kLKFWLb0|eTgjgBC99Wcq&En@6ghuT4*Xhcbd%BXvX3cVA? zDMw`p%G&I3xUve5dS4OKuf`n|MW7dq;*rHehGEz2RCOSwK+{$9xKdOX?t^zUoBsu+ z_ZI?rl=8ao9OmQ^>>b7L6WD{a7>CXXun`Sm>~qQ;hz}06#2TCORg)P(dw~y(n;{Q3 zxY&%Uh78*-SbDltDKe+oYB4g$u#?AZ>*q)-C_&6nE-d7Juy2yZLt2l8(F+e)1HB8e z{v>PF*mH+%BSS^IhZEQU=U&^YFgLBiXAlKx-jFydNl#?ppyA zg`J!vQ56|AH&O9T?GgGYl})fO|5HvtKJwcSXsZaFmC z)S+%-%xJo#;q15C)&T=gYtKQ&>N2VAeKrTSMs;BeD|2zTvV8~r)-p7Q=b4#~jP>wR z*olWqx_`q)DxO=A?o%kY2<7|XpR!S?{u$ueZ!`nx@{h=tEjvtaN@3(rLqqoCOR3p< zxp`t3>8MB<>SyB0X(jdD&ZA4IM_MB*Ptp{swv~wM?mm`y9VoERozwmXDRx-});bmD zv(f7JPzJL}Qg~}^BGrh)VqCHHKH_l~Z&Z(m7;o=Pg)0Q+u~vMh-c{dBvp7!p&d=#% zM+lfVvy|Gt-yJ(VDBS_IkU01YxnJXgmz!>m0`bL52eBTaee{_H5wsQ?#Bg@ya)-a5 zd*Us*XPU!>XI~+^R$pi3e8Vzz!4aNK@~@$gdQ|E(;9VeWjCpJCC6L{OHPq=TVx(63F{M!GuAL(?!(R;NqK|*}nS;P@9bqpPW z6?rF2<{NR`f_T!v>3tYgG{BjMZ)(N*Y3^#_dgq;3Q2PCl)TMgm4hgH|qNDV?XtT2pB`Qi(UI! zwKIEv_S1Uv8$Lhm^zBs{(j18gVf=FJUC&6AzV`8wVZYHdCfh4Q?du)xs&~PREI+ft4e5 zE#CcL2lb%1@1ll2h6&l9yYCA`CxRz#f#}247reVKpgC{;Gj(Wbr8bEBT%cA-%!c^Y z(4>4fPaZ}5+ZtAWPHU$3E0c83n~GyXC9K;|mV@8%(7k%6)#@vXhs@7tHDUr9WP|QM z0&WB)R`ia^qs{`_T~??e{R3EQd6$^r3LB?;L77b;-n;q@K#dz(ob18%t3)uHFvpWg1CN;zGh=YF+ zDBGO)OA7!1O)hA&z1Fm<+-LzfH&v%L`|L85do$;sTt4C_WY`X zE7c~}w#;D21^Sq)_kT+(QFkAx z45^3VS#;PD6Y=Mx;Pau(sLa79m|Kq9SmvY(mk*NJHfpL4^`}JGfa*_KrT_Dzs$g#J zPtW$;osOy#R#0B&S=lYc_B*8GSvnq;m?_`C-Vw=T>Dq8^On6^Xie#zOz-Wgi6&=<4 z;>+E5ok!_b7P+mOd~(W|VV>NB344TLx7`K69FvyTD$fY6I&Pp15XgvM<1Z1+K6XOt(cj4b`(#D%{!Mx&LpX0X@RRqD)qNfW8}yCFKo38pWbgUX79k|=BJl@ zZH(>?AlFHKuXSn-Iv)Hva&9@xbxf$F55Zhs_oST;pEuK7jv~9|m|qU1-?G%i=c`(# z>v3@c!rS9mlc8_I3j@k>YPVq=(`Iu8Ho_cbvW-lN0ArwM+zA&YoTrJxu0aA5YU=ST zkhrkjUc5YeiNEX}06+&v;f=sk$?|4e-QTOBZ#3{y4z(y$4z#aWpn2S|7ZhUpBrJ5J#M_tW zJ{@83-H1s!I=T1>!E{rdnB9v#zK@--_qQ;{#@737G6so66V2NqXnXy>z^zIya7J22 zo%n{7Rv=NjsiG=2|JAyHIJU@6QKh`VbUqbl$>pcj%M&y!z87_GA_*=f)xPDACP)RG zF0tQ{-nrd<0Njp>l!rB{C;~UUY~`^eAlWoDvVXnE&&d3-?!rWIb}PM!_8y;E!!URt z7&y-lUfzAn0@5GnQtj*cl@}8zZQI2*XLg~V zo5W0JC}oci5d49cQGTK-MB{ry-KClLBD?mwL!M+iQ*EKlyJQE;Y&aM7n5z?Cr|X*0 zlG-Dc4;&psf6+G{~1TX{xPbUR}|O4+%@wUF7~P8}GM}A5o(g?^9x0S3M?6 zmiJby{59d^<36^W%nXE5@GuqA)W_u`3L{;u-Jk!k;ghR&Ycsn9K6aJqdLP)|wZhsx z7!S$^Uh0d~`fjp!C=)&6j&XSGwxqc#60^Sr^^3!THUvUDF|%m5V7QtE3eYYuW!?yD z>GqFPmy_o%Ej-l+2KmETL;j-`5lu?Hfb=%zJmxc5{2dz|S!4ztqHqJR+9MV(cGB&?h@aoF zyh-*Wyo6|~g)vjQ`dkh%VKK23xnc$CB7bw!GrN{3_8Djc*bLf&C^cT{tt?maKIxtn z%(3r00##S57|bLoaddJ~3?|BlpNgyB>xAS?#}TI3u=^s<D*I4K__0? z3%A;^+9a;ENqmdJgenX7>}gKx>n9a%Oxr#;yjzpaid`ToDywqRO$RC*Y^$j&sCk*Op9C?l)Akkk78K56eRsNd+q)y$Ka<5SD_DSZmOz|4wsAB zC|snIC{otgU(`EfT$H@xU2VO@xGa8wH1JCjelPT`L`txF-}_y?q;1!uHUoxo>Y|OvSc7*sXXP;+@ReDlGptN29%bQ3fy=~eQA_cvX>e^N(t;i zQ}SZ))A7VqC8OY~u1cgs*Bp}8g)2Ui2(2w<%5xf)@r&8+J-q?wKkd5ZXpg~u>u+jx ztWx`OSIw{(^WF}2x_$Ce-eU^<3W{Ge0%G(JyeQ>2mP@7NtF3Jn*K?6Oz4o`r8c$^1Go;btT z^MATG7@n)KjDjA$`UGF7ysIUXL~{E&Y^prfbeA_)VXG9;l{~1(&IF zVFgd=8AYmnZ7--sFIznd%_IDQxA=jwLQXI#Om9Io;tH=kSCcHigVE}J{0Da9j7ycu z^29?oT6cHs5q&wSE)IiajK1B%PRW0A~8Q7<7F41JTqDklr5Z~QaEZ>Ovv3Vu)%atn;yXy{Z zWxSLk=k_o^(_+q1>|Vc-db=HGJz3dxoBQeQeqQCv_hLt{7#LTS3`7%9%S&OtlF_F> zs-xqfj{cKKc^rQpXppNBDo&lyiWofe2V@q#9C8AEIKO#VOEKC%mM`+qz11~12JL!j ztJMN!L}q)tUE=)bv&%Q{MW{@5#0B2X`@b*wm=G~p4(fE3a%Xy9_AttxX?_Qxo~=P3 zpXOEH_4mZWnQ8tD)wq0~@C&tv5VrIA&HUaiQNG(`M~LET#d+83oE)uCG6{2t=lYRO zi}t+p`!IToBc)%J=(tb#Z(l}{4Kw#$LEsMfFs-?>Rj$7-2bGr#i9Zn&(vlHyqrL~u z*>Oh4Jyhsad{rbd02gjZbPI_W}wKo>qP@C)xPQP zw>G_|xN`6$gvLYuPfF;C-+1~qQ8Sr8$1TPlKgEE8H8$8+J8vU}U%#GvB+E}lU0%3K z^MAf_d)Vovf@W6KbSRC;==$mIUCw6 z8`P$_Xmz#y=yMYrP%LcFeXV?xxoq5P20ZP!ph!?z;sH|IO^|KlL9VJLCsOefn9JcO z#>O_E>)EO8^0eGq3u5>91iov#<|;Z*j}x6L3r06pNL-K&-R_9VG7}uO*WY8R>9lIe zNq%`V=6bZ%LQ_4*?{ni3I(Ii_CK7@#{GUURByr)D*es-QoInFtTiRd}s!fv(4-}w9 zL?veeZX|pmyYhzm%$4KqmUo=d>!^9-+_J!&^S&pcYZ76Jxtjkt?E}rvf!L}DXaHJC zIF}HZqunriHxNj?aJq6CaKuRB$0mwu)kge`EFSRo=#g1HZEILHCWU< z80$3|2Kfq~_{KZ*sYmByKSzoAVc)XSj+cw|bGDcJ_dopKFXy>?{&vM->{|I2A@yqh z=_CT4b62k=5d`<(Y%R6wHYG`j7t*Hx;adEEeV{+DJO0W8|L?W`Z@;f-gE?S-JL>xx z9Pt6QS59kB+ob>CBL5ce{_UTNG?*JdS7x?Ba*SvcIiAsJxjcfjoz@+=imB64cT$zTCZ5qAIRAm0o zCi&NXX%zM>+N~HO?BacP{D70S$e;wH{_wrSv+=sZrcB} z+R%ds=?Y^$>!;TB50cb?O%S4 z84j*ECZsJlp?`9J#Plo~N1ZLqDm-amvm5V7m5GHBlNnybeGO{lr_fhJDm-K0GwetK zn=wSwz?bB=k@4krQq0Ua>p*CeTK)Fxw=5k2z>PVajq|u^xcu@9a5`H+CiyGRn?cP) zklsNW+AU?zCR?DL-dn}`Cim!m_T(Wfn|gf*0nx%mzJcQ9lQ&>Ae3Ua>&i(sXemi)9 zR$9S0z2ZINLbD%JAw;&Dcn?r~V_y{R@4I-^ro0QN!i(_yT3Q6-dNoe2Rbm z#RKD<&FxD9wpobx;qShZR-PeZyW7ZQ#A9ftm+zNAFZ2rj>F4AvMUfr?WR`w!i+dlO z@$)GWH*!ZF;l0~Q*S1?TOB$eSWaS2Go?he-tT){}E^1?+Ioc~p8Q4>lB4DPu&pu5V zDj`md!+E}u6=U~MW$CbC)T{FJ9>r$E{TtXzAMQPINA;QrdE=iRZN5pvkle%XSun(x z%^zyPz*l@!L_uNe`=vWur4?zz_Qbnx4%~aos)MXHoDN$qOlwI#@OTjzG_tAudsm*o z#0LaF z$wXW>i|+X5xNL(BF70&C?hM@@gI;`0xp~r8BFLffM>f;n4NUu(4E#dL5EIX1D*6P-#_^e=D;Y5l1d@OmF!UO9rm40(!_#azF3| z5J!eJr7`|~Q_&>a^KgPkfTvQcwL-FF)lc)Wnx`7guVv|RR)EfD6c=M!pON6raG$5O z*{y=~aUiSwy+-gR5K3TUcQrC#{FUs&59ds=^Kqtr@*!w?e{DX_Z{aCddd!Zk%QCb~ zhn#b-lHR_Tq<)a60%r!-V2$8^yr74u88+|;O1e??0e?O|@_sP^fB_7TKp`n~JLU@# zVRCT#Wu8-86G#{zm^}5D&7H;J*R>|R+Bx&;hzBuu2^*YJjn^;A&Z6R5LAv=8NwYi} z-7^40!?m{~9|m}UxWLwefF^)QoU;~L@RneeU&Hbyf36S`f{T27a zX1y8lGc1O1b-y4O`%rygh6n*72E1$EZzLjYoa<9n&>W2l<{4~c21?hCYi@Lh>vMo8 zTk8UdTA{ErLCQbQK5ZK^Dn0k3YE$3)Tnq5RbXzALZAAmqAHiZ;ArcWKsP_$l!g}HE zLT>Cmo`E`3L$hM##XXhx)Oc&I&?fcm`wd;_C}d<}j(T&hqt>EoXC?zCHK*~FtkJ;b zF+nCP*4iZqqJc!zcw3JS(eJwp?L-MG4akp(MiN1MooqgQ3UJ(WnH?fMTDv5&_Y>Q) z4(=jZS&{D-;G#VE^|N^UU~c5y%4ZgE1Z0owokfo0Ztoz+%ICEhK#*vwvpSYTe@!;T z!l&-~3?Pg2SSG+IHS0?Qocks7dl@Bu8Jb}LdGT8)%xf{0Ab4>93uVD^0{3liXz9DD zY${g)-zlHUz^Wgltm-VAOht;BQa8nmEMRd@4>>56_pig>vjc1$1)iRF9re=s%xtoR z$~xtkqPcrDQv2V3Y}WD;_E8W)b5%ddxcob9(52)vtlSJdn6q|bb|MIUtYl+-zH7Pl zE4s-2+J&vVk&kjV=b>-5X6afST(4k>o^vZHcFiW=}x`kmm6o1qT}7?-%UGC z2>4Z`j@gg(weiH`Aq+mfM@wu^{VE3g<}jQT?-LYkwYDWmcu`Ax8V_E=A5gJ2JL|c5 zcO1%HZiE4RZ~>VXK*&<;daS%qNX`0C1$Edj?0*9GYU;x-g&rk0fViTeh^hFZp|7qR zG?n$Mv>M%tScV!2hSe*@JA`G?YEcz0yz1FGfO1Pj@~jV${7nGXD|djEh3+xffvHD4!Icl7J5cx) zkE!m7ibXP|RQDBkz^X|v-B@x(d}{N%wvdS-D8=+;P4MjmF6QP^QcrnY_a-3lo{ z%2gHQE?o}spxiaYjc7DAc}dwaWnua<$nP2IdGY?iEr76$yYBH8E108T@_sdTj+t3S zu|jkVTWhMH-tYTu@}2`nfL~h>R4&zgV;ahsW;W%fAY^uDqO=5NJ$9z+jSVI5Yt@sI zN%Xkoy#)vbf`;HNzq4=aCGpDym+~bXX^gs=ujecR!Sv_5DggUieK;Wy0@ z&svj05OS|WDg+cq#bw%pK~p&E@jJVVAC}cnp9e1>_6CUS0wvBx6WZL%weLr&6e*P2 zf+SIxW=uMunT`U^P7RLVaxT=%E4^WNO*Q(2@+9p6*J%HBZBWMYL2<>Ta)ArXSj~V8 z0vF8oSdMyf4z?xc2)*0=K9HvT97qx3I+ui9%EHzZ*~8Wv0BAOc3Ul@gEAhIl8ohOt z5DY&xoR`%Xw#I?lMocY@KV;T7xRRvYVAZ`R z`{^0HYb=DD%DEL)*!HY}O1;RY=^N5ri^am{ zL&BFpKuPIV&*!sO0!c5^7B0UVx5_M#rp*KPfB}y6@NSvWf<^B}W7KkJUC@v&RhPBy zD`dkRe4pY%3V8(g~ymzTO9ysFucP?2Xx`Y(Kp3{NQBH3zq3PB90E ze1fR=l6*T=Kp3tTgV|gG-|!|lR}>*%UK521{B8~i!iCZ2irpfMmm|4 z)OGS?W6C%llcjp#%_3)eBoFwTEI>Fpp&KM`U5>93^4G!c7BI|=_raLjM1 z2}kbVddUitl2ie5Vo4ztX(?;;cXP$3uanpfnq#ZI4%tHbzDtrX7cJBluzdqrNK4eH zvYnTU-}Iu(_b9DhOmBN*F2 z<`93*OT2Q3hC|Yf%jF|a7){vKoH3veQA)?XCd}8AM7=QUQ+;ql3cDZ3x3!A_6>qM+ z)#l(D99$&s)O)d!c2y!rdUPm-9;05mzj-^y{(a()+EI}wx|V{)>M&h?SeM6Ie%DUb z&{KK&E3}KNE;Fj97QHajP z?Mx;@ez&uiZe9*6^q{mMHcG$5RJ^g={nTD4B0=JlqTJY&WU?hOnn^xo>_UBK3nGqh zoSRp|xJ&IXnDM3u9&MKXCsuxfYmtIK%V=#cF>K1;aiS~%f>})1-@Vej6^tb-4BP~q z1V3Xp>X=`#I-ljCTiRHO_4N+k=*hcSn2&8t>rvQ{KZ?@gHky98nJt%kKH&EpV}Xaj za(8l0hX8rKu)$aC)ciDS#e6CG({f6$R1s_Er|Z!r>a)L~a-NeIQLViuBm8kvVC#P4>0%-fKa>LVso z>Hg^ajm*U7xmUeHYJslfgzrb#NpDzH0j~zQ*RSr&?LOUC4RRrt3!>P zpASkw=~$nxY?aKI@OKe6P))sFAr){s{jLNpZ!DClZR^_&H|t-fjrv(C-De5v+M5{@ zLc_qJeJInJonU>vBaza`LP;{vG(JOCpl=y{M4@}djVTvET)AZ!R3v4vk!siR{|Gw^ zs4CaBT?O}?)!QU9<-gR_`UJ+^Pj^k_!{-<6kU&pbhF~@7ry61@0O+YUsq}q z2qd)jc#mF+yhSP)BrIlUplgU)by295g^T!3n)f@_7EKj8R!#)gmsNMMEP(?vHXUzg zQSnix2A5siS0xR$=-CNq`_2dZxTD9W1z8FF95blZz;OQO3sp+ ziBuQhYL-^Tv-#X5fEBct!^XCYMtXLKZkf>7adBKP;&a9I zZ%AJAth{d2rMFZ8%l~4YiUO&T*0^(=?WoC5@U$qptO!*pJLkZxe#HHx$k0RzGGgG-$O_w}>gr{?Siye`}t8UAzv$#>oqWZFpzD$lHYl`Ba}S z(=~~AD4aHFv#o@?_1)1}vd~bbHQ^JD+kUb(&~9 zEjGx7xwso(6h#a;1a2h_u=HoWev(_ild@a|Jlaf#6Km|Ak0VVAB+HjM=P*@lK;kuesw*! zwk*vL40rK#-){r`Enf2@y6s2(rqdc_MkRK*+)WHC0qzwHE4U75X_97@3|zNsVHB6W zM`pw!hzqhl;SNvM-xPVttn6s z&Rgk!*VJ}fY0vI|!MJ9irL=Z=iS}t(_)y(|u^6_Rlja*Na!}P=Fmi<&^@bftVJbBl z>k1L)E$muqxwtUvVb;}YzIi+lOg(aoK){~Zj_R({D+l8q^bywZsF^gzyLgnNb>qi| z%V=qA`iS#2HJKAmfq@^gNCR`Fm1oLk?Z~2jbBtGv2er@k|9YS>g4=9uV(y5RCX;UO zo*CqZQ#C1%fyAg|Nj3Er=r$T)bj!IaY1Sqe9`(B3vOjY?C1x=D@dZd~t%Qy9gpcYc zW!|9@lnWLX!6HIP!W6i^1;o@Q@rM^#oz|uhVR4IJ8bg zPr|0@oF^xQU+Kmb=Bv6x_I{3Zfsh9@qWo8eQcIgm{S6zRg z&!eQ(W;GGzo~Js3*YEgsrPZe7*sdnRP`u~Cn=gBxp%fE^1WG@G+bxP6w;9&&9+cw) zQ|h=KD6PNf=kf6M4Quu&^%JC#OCQ8O8!}r%3cSad^&|tG#$Yp3E|Z!EmFZzMJDJ`4 zKq#WOA&b24+QX+S5c$(6n=3c})8NFUjS*c0?}S|LX537_kNC*5GsWPU0H&IggTSmz)Drt&?h6p-Un+} zR_0nWQ6{56EE*&vi}6J{p4V=`N@=k^hG0?P$n`#z*Gjgjm}RsB8w06D0d9Z2fWd; zQX<=bF)@WFgH?M=Zzt0tU;CY9#*2&3f{R8iUPQIc7e%lE>?WP)>W0ZG8-n#@j>A-` zrW{maKN;3t7UJlRF;7_+)Tk?Db=;gL>k?b-h1=qW22aSioo+i<&^eK!<`$n0kZ;V} z8hvzQS8}&}mBXS%d-zGc;0C}6%gLM>aCGi! z6vl|v!7h))#(5roYdcIw)Cw6P_Na%>(>?hFin{(1Kfsj@#Rbvi&JY_-MO0oK1b3;1 z#Yzo2*Zn6id~N1DHO|uAzxI}>RbHMSd+M-~TWP3&xB#)Qj~h#C=10*Zz*MF_aG9__ zPW)0_l||AG$#TdnJ-b&CWPhcqq~2|0 z;i;GWY9D3=)UnM#l2^(!@J%G9m|qtLoQ8I_>Mx_C5<$`N@pn%JHT#R5eP_OdAwH%9 zUqPfA-!%OO@dPu;UX*%FQr=EGaGyKM8Gj+jaB^E2PSQTDZqK_I&~SaRb8&Pu@{<)g znB7I}HwZIq$jUB1n6S#_`rX_TIEZ*6=URR|#Lr|HKz^q?Vyi7ZNm;ep*yFw|5mZ+~5gZ>6^$`?cLXPD0;!n`{L@dbEsa}}I#21)Z zFK0bzhn7=MB*5P-NfX{~;;7@+symb5^xOHn;JQ1uxO-Slpl;FOxnh{^xnMZgJMlLf z70k%;%qY25PX!4XPVEWo`v^e{@h%8f4{ctDJ@{DFX6patD&<^_|NNXwI&&{L0~#oZf_YJp@z~wiq9czdaTK?%0Z4C7OSYGZ`~8^q8^;d;M6gY`y*@|Js&1ovW zVK8yT(5)XJ)HAoCS%I6k%rs8FrH{^!PCPt+c>q)gL^4O?Ak2u7(emNUDmh2FGady* zfG3#$tt%JPG!B#&ApyYBGL3ZRS~T%ANj~Dm#wXp?6~1n`7Jic+DF}wi>Tyl z`U>+qx7>G<#LZ1!&Zo6<46^=;a#Ggf(dKWQ1&dE8MxAqOa-Lq!Q(dDDp;|3mfVZGv z=MYZZ4-}d!B_bhw9mN|NQ;CI4xF1E>8m~6_ z&Tj&{ha~|1Y;D-yAv|oysWE0V4EASN!qZWl)Lc%idBq<2Gb>z2Q3g+f@JKA8vva%f zJ=1brmKA6A~tN3oul zeUBp1R0FuJA<;vBx-S&M`URUr(KKG8gpJ*!53YrVmk#J$WxuoV6VZudy}IsYsdp5e ze$-R|0?7CMmFn6OZ>2iT*dSd(Pyn=Ke99jHv~!r)AFF6$T^p* zhZ$E=Zxjh>0@%%YSVM|2OIr&%>6>RW|cdrhC3`3ca za!gpJb!GXwr;_P@F1CSp!UTviYrc1<+v)>CIAgU~4GbUogb(NQp0u{+cKKdeLTupq z$lB^QSmM449dds%D1nhsw+^fvK_YspAmbQY^dH7-k%M3dwb)pZjbxi4b5S-l&xfbe zZ{mm(ji=aFtjdTmX=hqZfxsJ855HSUf>k|JizLGUUXJf#oQW`oYMQ`({l$kwdP;bA zX_NWw_3x@!zhbWsCl=HsS=~IZJSTZuEj7D(d9I-%ELmL2YjX)z-yF*wuUmLvl@6r& z78kM%-7aNSxuD?M(WGf@q?tXpw*kdtA^PP&fq|N`VUqeMKD%E{$+WO3BFW!_P`CEs zxl-}qg@-X;nJ*);Y}*;6%UPWwT$}}nzW1CRO!(4Zoj;;5$h~y;5$9GM>~tKspHnc4B=in%p9X#PBrk12%|6l(_M&9&{QpYTmDF_NRi&%J8jQo(D0@ z;OAJvVmpw{r>$J**$_>Kj*=nfB8gJUZ5-vmcVHRrB7htYC2L%){tGdUFNGe0@cThf zS|O>sJD5^o{-j?E@Laf?Y=<+2CO6Zn6JKi<>M-OCh}h#r7Y(h@yKk`^*c}{$11(`x zYsry_v!Hi3g>w4u`Y*ByR$nfQ-FP3rKBqgXXG(D98w7a)VC)&X`zK*Lfv*7KCR}Hv zB)-6?w#3RQZF@fq21hMbJ5G%9s+2$feBJtEmZNlz%%=@x0ZKmAoo|wmB+bj%E3f_n zq5KSE_QGH@Y&5^7P_x;CM12WnEW3g5a~r9?$$@mYk7i?Lnacah>~#rkMdpG^qGs|4 zZ(6?#(gVy7j@$sf9WxQLITYcB+!q~Uk#a5*)`c(qUAELi*y;|o?+E77;~87l#%>LP z!1L>k4EQ$>-U#9eY&7n&^W&VPz7)4nalblyZTL)PZMuH!@tf_qEL7}~@T1Q(*`zKT z&>{Js(AENZmM#)d5M|*sE@u^Ige?@OrY>TDBT$IKX>t=)Fz<8TS4$c=K;0%y0D;Po zEDw{T3Y>Fr>qxB&#PcQl!%wjI$El+-vUcA4O;3J!I^NB4pK|6ZyHqrn)X^NYV$ z%NK~&KK|wkbrkr7>hi0(7X#C073YF*WfIf*ii*)qoanjHB0mEbG#bb4G0gp|W33p( z`WlHk_gYPilkaK?A-OR^ENzdQvUqQ`&X-0FdDJpQdvGqr%@~Jainj#%Lho1UQX8!B<|-sdInr$<~}$J zyV@1m5uty9V?MKQuj~A*IWFRK!aQ%I zC3YdGim4IUK|OP^SxBzt<@kx7&Ms%N*BkP6kIWW!Vgn3g9>iKv!MB9v=Z*u4&BMBE zJ?%ala{M`RLBeMOs?~n}7ctW|!Y}5>PnhZE>P<;*qRU$H&^0Ch$$N^~;S9Bj+s3sI zv2Vq*fvCVej&hk=F$ewiBl+Lqv-+fp^A*`f-GmEj)A*0yL2WgBAev>AHcgWd~3xwf{YlPD(F@2I`j@SIupDiu@ z9hPs&#OQ+F1SVc|8h%2M#Hz*|J^SdP-{^%$NgB$9!ZYWwO!H(v%LG@serKCYzrp)| zeDt=?Utfwmq|g^jzS040#mF5Ua8!hUjTd_wYtbc8D_@UW;lF@$aDklKP35j{d}x!<#G(0K$6?*peTfsOEH&* zk>mcgz(du{K6gLS#jbPj64H~9V~z-IGd--jPFwY(y-AF#i6b6fT&Tcki^}|vg~7!50Xf-IN7ey#X#g_ zCiv9etSNmH&Cd~XOw=hAWCna7X4s9y;(;%uu0 zb|_#%yaZ`^61nd)lZyfjYN057;AcB9=A5##%kyJh2GHDdP0PQnK7T)wF8_@e81rr+ zGN7G=4!$OPu-gSPHR9y?`Pi!NoggJ+y96rl^5KXc#Ki{(QAqJMVan2}ag2df4z)gz z=z^RX_WsNSqmF!<)ENu?d%2L29G(d=Ki*0_Gr!((E5oW)P<(QxOanL-f&*&Q)jH=c zx{m5(Jst`lpj zDx(g3@~H6>ZNaS*o5Jq+e2v}7l4!fawWbXwG$mh+Xsu>rzGX8iR0(Q!kV7VC3~4%s zBwFk|Q5P!)T}KZx#53CR`rwt;z9F_A85{X_T%$d4%Q%Z9RAE}rhaVmb;DTcy3^p;p zf*0+kQ8bE#Bf>?ln7@KXnp`&^M@EFJYc(dzwxtf~S zf>a)D6#cU?*#Q!$qNlg|3jI18D*B-bd!Z%Vx*@4gAK>EAHAY8D$|pKKO17=kH~B_h z*Hv;R(A)}?0~%}GkfJnG!mpICt3_d#($~+g_EZr+`loDM4i#;?xGw{xbq4L++@gL>4CF3iiaj-#dNwRE6UobdD9MW=zV9k8mmYRG3 zS)L77^(OfPgO78qYKC91Pi4A@-MFz23gKfFjW(jzm z6&Vo&WALif$j%{UHnu^mrQ`q>IE%!BbsHp8*V6i~%jegl_$yG>^(@o*K2~~Iu=s*& zi9{2gsI8YrAwZ#0Rs-TT@^^p0dfpsjNXZm(x9RMee%wnKjemW403Mt8un$l7k?buy zPW4;!6|ok$EAPPu@zY68As5oj%JmI4G(&Nzro zIiXM86k&&d_JR}%x>oU4Q+L2-m{qXPm#LQT?tak$uRjT4{Va_Wn^!W0`;U zimY^ka2F!^x6DYM8c63Lzlpz@lw2%yH2jP7l6l#d0hrD1@POl=VDkxPdZIhqmzVgP zL~i7aiScyuDN6GCzrH6`(Q~8+v_y+u1M=<^Q%Nv;tF)ANlX%zedYD=TFJ~Pl|Dd)3 zHaP1vcZ%E`o`yjxu~nRV;@9bn#dwmszW>p&Mraqn{EW@8*t&*86go5p&gDkXK)kyh z*C3NBFu8U{XrF_(7bbquAy~fE0rYV5K-2L7Y-v5<)|cUEz>@w8qJcRy^hZeEo>PEi z0y_fW_5m)Sd=q&K!)?TZ6?L_h`AO((f*7@-u-v+S3|B@4LP_7DeNXcdX@rLyXv zUmh+zf^N$^@;2^>v1Yz`k&IhU{mJIV-*|=8cTiNBiBwW!V4Gb~b^P#&@8JlB2OKaS z(kuuVRe2KyVDRVj(Y;p?21?Tiq_orbFgQP&EOcr_oG`PyQP`GM$uWc#t=31j-usUK z4~*e>2}tOe8nIZx%2$RD6oXV8qMej#*N|>dSV=Rmb@$`0nAO&?WPR&8$kB!yg{GkM zFOmrQ49>)}BNx`=T5ZFc+}CxSBDjN+2;6l}DGC;ktV0h;E%-q)bg7g!*oVP1Xhhwz z&`J#;0-|6|#Kyd9ToG0Wi(uMinh)hnhJOaOIX$t==#N; z+hle#W!%B?f6^8_H~8vQoiO3{EYsI;3cALEO!{a{q`{}FjjEs?y?rd{`fcagGG*~Ue%=@ zHUcUy&p$CdI=b3v3}8kG5L-yYPuT^5JV#H{sp{o8+)zz4ju7h;c7=55Z0stKg14eZ zSX9)eGyoyBL*e<2LsIL!0cSlz_l+|edy99mulQ$-;gBp5LiJlZKVi(Tk)*&N)dnem zeL+is#RSbL%wPF3xxK@uly4dNtx?R~E>ay^f29GQm->B=l3umwq-qMm+U&J8WiWx8 z>Os_m6Vunucp1p)p2RhMGOB#x&g%#Qw#a?6z+bZBxR&56{ROCF;>U4k$-@!B><+}1 z%Tk9^ki`z}gX?b=z{>0e17H6g(V~Vqu;;la6}4!TrJFkz)z1U%S$g~~ zZfYnxg`$gR*A1U0!NG%Tm zZu(8|c{IjVqxth|NZxL#K8!X}oW`^lE-Gb&&1SRCsK~>3bjQ#w-Zk<={S^pUSzoLm zLR1YwpiQI*?G4n&0FucUfgMl!0?2)RlEL`?3BXCKY&yKyQ>7YXbj!NpIimpxNDqP6 zD(&eH#q(j!NA5|?Efc^eV|a8NlJoO&H`d=xLjg+se~TTSB^Sy61cEho8!L1|n~<;O zpgBL`2@sYc_o)?c>Opsbs9PQZ-^LMUu#emC(72xyc!f=8d;Z95j`HoT0Yhf#2$d;J zso0t;SB$y~AftZLJw;b_rvXSvE5c)N+n#+=fVsV9lDO-7vNJo&R0S@d-I!$jKOuVn z)6XlQO8@M8p{~#ym{OZHjIcKIN=6-rS4x#eo~U5x4$0~^xT|qBl%@~q&AtR2DRcjQ zt?t&R;c^YuA<5#jN_2}O&PD1;O_nZ7aVN~kwQxXo(;nap50rbddNL5seqWRE!((OR zi;K^sqD4O4&d}!Wwg9xb9vqsv2X1f(XS5?WZrTW`Ke;|u3#E+E*u4_^av5)bkG+duB3EIcsYCO5aUThWd@B{wr@v>2Jx|2D0 za2KT$V85~e943N#wBf7gKxh6F((d)ooK4tP{%XD}OQ&Gt%C${qpZU_&P(|eYc20DW97wPmVDezs zEb`BP6E0(455DekL~K2+>hu`A ze~Dc!8_&FOi#A=IC0-$q=d9dmt8qDWZ0_2DWm$lXqHuahfI@9*5tm`vMYLhya^PHN zjNTFy==jA*MM29EY0|RZvkUeoA>c`&I!8I8+Ato!9;~|FZS5I7ukX!->r?rK$`+2w zSB&lMQEGIceR`|5!`Iao6=YFX$rqbII>z0V>zjI0bCwo=~`VXlcl4io?r%Umv;oyBS8hW%Zg1$JPjm6RCpK7Vik( zqYRN>Om(tposTsm^=f0~HdZOe(>Kwt$zNV4Ne2s6;X&6dTqgSdqU~6@(DTsEA`k!5 zZsVL^1*u&pCGm%6uVgmk+pZ2PP1WHKeBVUMI=q$+Cg(_zT%bPzQE=hj0Gn>8js}}=RWY%d*zd?=;Vq zmlA0|po@48&i+O3y@n+LXG`u*w#RUQi|$mLzrQQE16kI)%AKlMd_0t;ctLRQA!@E< z5y4*7cgk1pa%vey{=Dh_WxQQ$Wv$?VDVF@GeB?l98b%lK^VZ{EfS(MC_B`7XYyXeJ@( z!4J%0iqBe4L&da>R`2t!J;7s6ksZE0TC`(^P3OD1K+LojI^pkJe7m+dM~9hPDvc-TK&`jL?}Ps~p*!oDHCYZp#LIMA zdVM21mZvp2*k5GfYN?OMI4xB!lhhBG+NMfencbxY3o-MD)ed+C_s(eN8~ij^9__a> zb%p1=Ivv2d*wjkOtxZevI@%y<5PE2jw;V++k8K!6E~*rnErrK7m21*2}WRylmtZpsfDJ)mo}jz!UCP_ z=ZTeK75l6hKZgg3M0$YwJ5PNgGB2kSX)aH-*G4G)O-AACO~PU+iqe!M{1IK#>_l%J zy6ha>ep0^t0hh$cn8LVnmuJikZ3lAJNW+p9>Ms`aM5m|>OQSel$Q!}c0q8>ZlfygE z7}HD$`MrwsllFA)u(SG9X1-}!`BwJFVib0B=^?d|so?w?HGkz1%~pza2tbsfZ~>CX z-4TN!%w-=Zut|I14`~ZwbBG&mFy?dzBVSlspTV)!~zQ zCVFlZF2qV*%Bq}ahQoHfr~_YDDRNN>y(+pzQIu*5JQ~slh@26j2761^1#QtC1!8X@iXg3gB=uo0*D7_yz&WfxTQ(jifkUM)0CRSb(%3oiK!+|8&_7}hk}JKpM4xXI=i%&8?_!&Y{Rl!rk=7D zW;dQVj1V^d%Q9a89XLFwHjF-^JjdCgbecv2wt19vw;pz7oYwN z@)gNL=E5WHjA9;aw4Q@@-hG_#XLB-!;DYkRXb$8hcfeR>fk+zMMs`!b0oI}(q;n*z zOY0jLH0Uc4ddc6T6JEm=m~l7_x^A}YTq(c-9BvJtxV3lVQ%yVN+Vug18eTs z(>S_g&gV!b50?a&M8CPJ4IN9&#Bp&OV56yQvg1vv&1c(hNRxSMK1TgdCw105-aCLv zd57NBx|e4cC35uWTwXv=J0onIR-13%qx{0t8=C2Z6)S>)x zem1ScJDWt4WZkS!TFmn2q60Yv?E+ZQ6;Cj(`` zP;|=8gS)~6gJ_V;8lJ#{>G77Ow^0K9=41`PyBi46btvsrS9fD=pNfRik=tI1scb7h zdBbA?I1?|df}7=kd4+4vs1wx91GgviDgS)8>PIu5FgV>f=CXpZT>wR*9}gAe+V3oZ zIBb`(4KQY6#!Kx9yn`|Yw*u>-Xvd8|QrMAKrQnZ@CdA*4O(04b`V0N}_lH`^Ap#F;@(TcR-`8Fr$PN2tU6_7jV#Y(gAYG6Z-)Tqc z0dV7YZNF)xL!m^}@;@|>37LQVt(}V0Sl$F@p}=M;DD27CXOJpZvAQjyd{$^TPa?gD zIjzC&B4?5!6vjU-_BW~O??wjl@TcEn_&`n}M-RvWKb43B&E&I%&iGyna_2921t0|5 z%Z-j}^{WiEjtfxT~&ZyE-;(~?0nZ-aU~@O_vm z&Vp#Wch-(*{}PT}6AGX*28k5xWzf1PWu>vix*fi$`JW9UfDnB}DdzM1*Y@}C~eGDAGLM(Nbwq|R2?fiW-BT0W)v zB=&8;{X7e)4JZGK&S_BjbzAHPh z+gPOLkjKsAIrgoaUkW580MY$h+Idzg`h^Lzfnqx%J7S$JC_;PZ@4sbEdQouzoXB2y z)TbJOjDXq5oynhPGq!ne)kRN+4d?{L{(Z24A%uzh*d!47XN>TcRYI>RP)GDhL>JS- zY#vE4lY)!yeb-NDjPIbxEby{d9x={_-;CG(D!^BU46j9gN0b?y;HPp!%$UTM0)Ww_ zr}s-oRwzZ;9=hVFv{u4bN7bv^855j1v5d@5(!UyYP zeSkF2_p8?qInYC9=H1hn`v#6Jb;-QeuakjOuxC)2(;o6SdbquOf`0Q=cqzbiTRk`* zo2+QxZH%1__uKGlRA6)pknVo~A3Zi3@_nzY%LEZt;;%=0(CHA=dRZMsUnGn&j)III zI3d5mZ%4>hbi^FFVRi)m#C_~GARB#!i|S^M2oUzJDY>y`wpy}M|xL650SyDAt}L|+VRoC^^DXPf^s*Khhh z>n`+25?ii&A~S(vd6qbkJKc6^xqRHSM)57EOwzGyH&A2Z8-<*_7xmUz^!duWKTfT` zC(pmujz7^Wo8U)Dro0&=fknA&!r_R-X+Qk3u zeV{+CDc=&7h~fO_5j*5E+kwA_;%>fRoMn;^z8wyG*XnL(l#QnP&F%7E-{;>S)yWGQ z9{~QZ^DM7tLA%et=Yl>8AZVy<7hS82-;l`oA6=_>e%M6rQ@jFbw+_G~^mUL#%;u9@OO7W*+W( z=YlPxPtKh?p#|i)|D)aiHT0{cW^=$y^@A=y4@MAfPyugW z#w~!0<*UT(cu24oY}kVN6MEwh%RKZaLTVX-(hw{5eeXB6|2p@HVIXWFyvzkECFe;Yy?^B|r7 zPE#Qa1V%2Q!*t7x#?|ZZS9mKh59$pQFTNYE&x{Dlr+Atl;E^k)_%HbH_q-6u2f?>4 z745&^NB>)UQL(=173mWX z)JzP>a~E?UQfuR{yoAntkXm`bP9+`3M=ya}-F5#k;>hE)qgH$S zGCRkAU(-Ecp!V|$IVdUQ1+!@LPvJg_Zx;x^y!V`+mX2AZAEiZTAS~v%rQf$N2B6FW zJ5d8YUK&sS=C!B%HDGV^r|i)G-XtV6T#!Jd0EAA_?d;;?RZ4^WoVx_EX_%j9;fPRS z)xF&noAV86;lChdIDHFxGub>U)~LDza<9I&BAWbvPaH5;S*UlwSxLy?*wD=R?7GSy zCKM>jWa;*uGE@}zoM{_r-FM}$K>|CUC-BM`-)RYpKivA>bWbG3xVV_+zcjXaSUU)+ z+X9Y8Ql-;dP=g3$3Z2wISsTZw3dL(Nk=Y1}=wtNlz@uHtPJeEm`)>dY$|xz?SMQlr zW$|BVm;c!2{%#)gkaj4;JnRPSv}j#-dnUpLqRu;gzf^obk2;pvgd_D@)~sScbrF`$ zt+kE10$=NK?gK2eS7JfX-_N*d6bTK0Nux2bw41`e%6O;#>@P*nt2kB$Rl0x&0QSOR~-Lrr=hL>%s+CwDYVTr9kP51NQzvmd&Y-487N2(H0PV zgE*Xkgc@(DjxJK2H#JQ3AL}BMqRFV9rTZvQFHbRR{=Hyk)x-QQcIB4?t{TSm6cIq7 zoOVFFSbnmpgmkvt1x~Hx8XJ(wVW2?*g%|ZPfh`x8#dF?Nu@I${bbsi}wqYLPCCN}d z?ONUGOn-UZBiVkObKJ6#nw#`DCZ^vH^#rbeZSdQ#B7t?42?ma74$B%4zOC@#-%uCu z-QNkhm$*t?8*G&2L0r^7C89h=v~SlYtzP$$$XEF<5F!F5AT1-p-()(g%ZJa*UxPWL z)0fvN9bsKslK+)~E@euxWYv4%+~|k`hV&LF8KG8Jhz__eKWzJ2tQ|rinI#8SK!}?n2n^;ND+$a1GlTye6cg(KWbVwi14_}RR59PP+N7bi<0TQnnSVJW zFMu;rxn>Un=fpFbguHW+p?y&P0O!~)fmHcVYmgZT_kt`X^deUNunWiXYjy{J-Je8t zo`|p5s>59)sC;$;H4FaUwj}J)Zd&ZgWQ{W~s(ElbAWp1lxoy_n)?d5MbrHd^2lm{SmJkMz4t* z{1Km+deikcdpa(^{uWEM4ZiSS<6g}G5!iR?UE6`KP|yM$cO@JuTeAA(=xn{*K5-o? zKFB`a!6q_eN+3aHM=C@hl)1se-Mkz)d)|yXmbU@oHB+4Bp)SXr*ryZXU0vgM+>8*;dNIVo! z!}oqR+a&Vi9B(9$N(A89V+Hgw-|U}2_`D-udkUY!#tM7YM;{0(B>XBq24dM~yh>Pq z-BTs9j$rpxQp^v^>%LwSPp*R?hCHS&ur7u53sPeg+Ia8TSVb{dTB z;q}AuuAdT6F)2mH1&2T~+!|Wo{^t6F@iieQ0UrgI^lriMYb*~PjQ|N0Y9~-`TS&L@ zGR{7o`;SQq`bCsL@MV53FfeCt*jW6TPt=I54=#6RKa*(@sQz_41XbriOI>3*z;*jZ z>MRij$A;6rZfY9KfF)BMLBa^ z$NH1cC8)HVHwcP-w1=3IpLZ@y{oM$ImOpn4xb=k@G~e`X_E%*Mzyz$mVFDIQ!h9UP zXtT1CR-W(P9V}lFF_bo9mP|c&;!7YA8>lCEio&SwLN``Pf+4LD(xOOvO z11m6!-~*69r?ZZGmG<<25iZ>Q@c;87L*N`9F|?K~)2Q93F*lG<^4pp9Yj}N(_jaSp zpEWl&Ks-k!_Xo*95~Y8ymOr9Dpg5$zfhqz-kqZv~3+WZOhPskk;#kUl)i7rCT?95E z90=k{<0q;@&0BkgGu4`F@NXIYC1yL=lF*%170-nnx@an&^?Nl`bNwigmYOCg9FdN2 zDXqx=LWhwu)v?wYUXShZx$()L7fBC*>n-_vYgXbihDb!Cu{AEdhIn1hFMS2KYCbL9T)eBTDXIu|MK!S+}5FGz&J)k;^hTtnZ(9>rX;qu~gk#doC&`A;AuZ*}Iey5cw3%cd@`W(csVmy7OKA9S$Rvh zc5&>jZfs0Dpn_R!{`{HD1Lf>T`O$9*)uU4H9KzfTN+z{jf7rYBEI*c~-a<@$;Ftt5 z<==&V`sp4WcGr!eF}PqMoXw!_BS`cBYy<$QBn z^S9&XrjkRSJ3XM}?y+9b{hby!(<7t!ASLBpwG`?A-JYr8JK=Z2%^9o{=seg0HqZwJ zrV!0Ug0dY8BRQO)VxF2UBhZv#HG(8hxjo^Z7m+a8hFzU}7w>`;Gnae73In|)x}wSF zP%IaqanKJF*%@nlJvV1o$NmNCnw@*oT9`$WRxN5&govkM&z)+;o+pk+Q(>zrpgvn$ znNeUw+g3$O_`K^x_a4KUvoWU}w@>JM6jTE}&N1+J>F35AcKF;!KYNT?N4QZ1z(v_U zsA#+LdI3C6|MphLh#16daiECJ@hImie?6!d0CgeZ>-Nrgy7Fc^Ub}IL(2J$95(DA8 zn0ak*GQuy?+8E!wKap&kevH15zH)y6|8R)*sRIp7Zt?vyhvLly?SsY1@8!2RYg>BK zE&7P;UlJpbbAq=DkWfKiDgESbV8hX9Uw%ryj`~G*2I%=iA8J^4YE?W5I`A0F( zcl&E3r=dRcKCN{r!<~1?)8b5eqlQ`&c&IcEEF(U8uN<31lmuizucR(2ym1G5r2u8b zGaDyg?GKGkvZ=)#UTMgrd^Yrex>%2`{;0PR#CyyB>A)--gsEpse%iqf1~>p-RdS7F zfX8$zaQ1VUf&7c#&J26awqZr~U@T3x#Xgu`Rb?A zh?nP4j$Ey|YoV0OgW4gx9N*3d-w1@GtbL~359}q`VgtiTtxj#xoKtxJF$VS)%rkq- z+FiHS5OAJfDt&UMgWiaGrw-CxSrbkkA5%({=)~=)W4O z{musr#ojEYrl@Yh+7+1^v=$3%!&V6 zRf^c!iR=?q0QN$WF`XV9^ebT5j0`)6Sc#9vZyHQ33(-r%cFP>5av#*a6WskmfT8vB zvz&x^Z<-)C$RxZn>u)d3lWyKFwm;Y(a}WnL`PNGmp@s--K9tB5_9RAOr03Fn27lHy zoRBKq(UTE*oc_{_AH0ZoTyla*yTgBnIg9KpA- zs;A3e>_6KpjDO&YV$OH_C(!^OpHav9@YZv@tCKfzvWKT^s)Mo~u7pIMd@QB5suF}^TLk5A;sDQ% z;@+ReL{~ED2tqa@dprWu5hcm?KHfrJ?C5BsQBzkp-Ly&^&GQ5&^OZbAH=W4$>si>Y{>}RM2t)L|82W2Ks7g2Ut4e=z^bCDoH$20_d7Mc|bZgIs_`|hC;p-7myV( zm}G_;5S1EN7h!5?werWXeOBX&u-&S`Fb_$GmZ_)`qOixtdyhf~Lq0)joL5&YzW@Q! zpt7v3B-@~Y!-nkg+)unUN9}3Jb6lJ+!4)Vr*#hs=>DP&S0=K1SLQ6 zoBG)s0xaR-U2nta;(HwQ|Gf6Dt8A*Q?9J+!B>_7a`Q3z7wid}RN+Q{i4!(|>9>h5W zNBtLHQv>48H-Hjrd!!VwAs57CZ#v^v;A7MkepUa_VSA&k97ZOnpzcGPo|oC=%z^9% z^^earD~&`;pAfu!vA?8veRWy>RtRYP8qX`#ryrADo<=#I%->~^86Icdg-!{pZi>Ft zR4c#k8j&+awnT=xZ3yhm%!I(i?}-|_J3QAyG!@SK^}}m0DgThLueon=F8@xw}=MwtDB!lnMw4 zMy#>yJDLD1(4t@HaF{E=4|V}%pyTX%E4fG`a(y@11Bcp}6QJp->N+<#0p-r}K|Er# zn;svnal2LgeDc%Q_oYjxF~lzjV7#c|%%z}QOl*F6^nj86F^^0FkA?X7Cl@E$+Fw6P zUY1Q+pa?IUvg^+Z)SiY*0k4hu*GQt#?kKABJJzlf)>rlK&njO~eXP6nXVD7& zu#C`_B)mJ+gNBxz%(hC@<@dh$SHbjaM;u0})buh{>JMOIPWKsp$YIwF;l62pa@c|A z^m=KXCzzY96RE5db58Ywq3@BQjiwVA2ueR11Wmt%w4i54o2>A&(S`*}@$=+|X#(m8 ziLQT59T|0r2KA=$LHi_!W+*v2(2!YaGjPeGoWzDVMO;li6Dgsmmt0rc=&4bcagp*8 zq;GYbq(}LrZ!5vOy~uQzLWlj+x38Ry;IT39ztQb{Gr+)gTou@%+Q|}Cln>&;kz|S8 zz~)T;#q+LhZu99YDv_D((rMRylCJFM^lRjHUzJ!aGGOb>=-8-`$er7~6BjDMSMqz( zV{_sMFoG>z()i5;qUf9gLI89Ol%S48Jd3OcWp9U@xtp6*7XZfQ2XGt6GP)2xqCQ{9 z3&`-vYQvX>Q|%gZo~#$r4>0E zR5DWe0HAHPv2dC_hKqFdhHIO6PTAQ&V1Wtn6y=dMS7Jk_?FgIgsb@d}siA#6n zALiWL*k=xufW^|c(URjz?n`h?v zygl|5SUiw+;}m13$36&b$G^_+JMN);6SV@J+ASEwIYvK+0;*Wqb`t_zj^ zm!%@08r}$HB<0D#b%}x7vM9!%jfao@z4)Ec6~A~83s5>3GX(>rqX6F0OoH=Koz0bf~e;{sF$TdI)$QTx^-<`G|`w(X{##%4pdc|-+ zulN^DnMqOXMmU$Bv=`ct(gRn2)#C z))iWIRBa3-OSl)lH7e)FJGF}cboLsJ#9i@1kwACcRGD_lbVH}H?231J_9W{!(5$@N zm9zXY9<(W~{DHhBgIFSoU9WS`*Lk65`4j2tbvcHf)F1Z8bij+8xlj_tDRx)ETc z;tEH3Mo`5?MqfU1vL-7K%=s(59~M1!ADmU~ppSJIox?714_+qa$l>i-J**BjW}N~A z_1S)Uvm8I)W@~62AiHy6*26F%5twz@MRG4Dzif5IyQ3fTkp?P1NC=!^(*+uV+Psb6 zdw^PE+3t~H-gpGD=hCB?a5Zb_7GB6zcfPwf7@A`adlzPXHvE47>micx418Iqy+0d1 z`k14d;^!tAOUg2?-DsX3<}p^*Lm~LIn$$I*Q3(f~mG56S+*21;2n45Slh$LNk=yRK zM6*wm+m95t?Iy3gPPi+?Tr%bcTQ34|)vpb{Gv)!;Ne(#HI&vHd=waP|A^nBY;}s9* z5+?UD1s%uq3Bn1Rk>Z@kxI83K#Bcqcf1*?7_*|eV zHo9i`&duYKg1R?&TonUv(NSCbZqqpwS#=?5Vu3SlxUyip z|Hx6QV2!A*SNLbr{fAKtAr~~oPoc>CyvP^Dw2X`r-EF*MD_*>Kp%O=Tm?rzyV{tLv zwT8j?6M=}Qhb1X)s*g~|JU_B#@0&%E>Zqfq-H~CN0%(H*_z`pnBjdXHw+!Ya>Dt@d)Ab5W_&rhfD|*NwK^4#25f2tq)`O*etGzic zF}qz(o?9SI63T}3lP$}24U**vh4|E0Q&3p-Qa*`Q5RY5vW5ZnOVxBjUhHNJSbYP-( zdEy1nNN%LLII)3W>bYHNW#BJ&+3i4>lW~ZISEum(al*ddckBC`A+2sdr&a?uCgda5 zDYxdkA_11(`ht$$2nb4Lf^<#nVCVKZ*5;SWPW+km( z_{xM?Wt<&JWQWyWxc>G)!43tR9e#dNR;TXzGLK7HbP(S(leo3!fs>H>R~ z;eN-$phpr#u0I3tpI&x9uKxAM^T)|%W|zP<-GVO%F#sd60CcRuk15}OZ2nN5yy0t5 zNqB`*JyUlD$rMES66p~xWoXg6iA?SfHmE5EU7hb*&Y%RB9j`}it-W~#5|7_Y`S(vo zG_NH+Kb9l_rCo^5;4@Ha@8HTx)S9z++S}VV_lmS2w~f4dz-hh`A2-zFqfjj+;5K#K zOO8pOR}kWQ}@mnY&cLBvjMkIjC=WnC-4brdA436lHZ*uTfxp9G~r%G(HcP~m?Z~@6 z&RV}qP5W$>gA|*syWM%M-6lZ7vy5(XmG|e#{vR(=<2`X-rfN|L7KlIJi~*77MEcX^ z^K6Ti=Pvpzz?Ry`-PfHmec_wOnq5y%-uB{4+>}H(R3Y*QDims`zJtao?_$%p*SPvU zGQXrI>V+=02znBZjQ?UPy>f2oE-#i+w0JecXrvjJuRjISjr@kqg6(#)FQ3x3el}fx| zPVYB8A%-{U=|N*VyOT;lg1_iwUBx=Kd8BHyTLq`N^umpWIWVBQfGoGYtQhzcKeMr2 zvrYxXBd&^Jy#qFMiZm%Gv6qdqIf0Ph2;f=_9^*nspIlkjsGOnRnSqCHUYveW_QJ(z z?c=l1iO6+T#Xy(uWnpL2=o?p$|M#Z?Fag%fP7@La@6G%^a8!|ho>wf!`nEPW1vw1)JqV=YD&l9wOg=!u7p1R!2Q{?#ID*FN7uTe%! zX!Mie?=(EkzBE)&V1&%`(K5;s+4Z{Ino&Ai=^Hl$DTP6us&XcMOxS9}Cud?HMfqhX z?5?Y=W|T+DAo@c+-XyA?Gk0@a-22;9|M)2|wJu)Bj@?zZ0V!7y{psaIl%F2tJ15)c z+I6^CGkpV-X&vK+nTGz5G&rtVnD;#1^C9b+_nOm8yV1_Lx}9)B+xg}XN?}OB z*Jm3oB}rmmYYhiGmodlxhUxyp{jz8g6WXkZ-)@ZwGvJcp$wrM`sPplA;A(WePquMTh}O8!js=8sx!OChnC4cu*$NoeqZ zzXo{JAae3gPLz>ifj=a<~02ZBhSnN2_tLhAkppkYw7|opD+YS+~ygav>ew4`xjSBQpDGK;wn!kRPeoNZk(P24N=Qnues?(r~{J77J zGVCYxdgwe-6keZB$+QNtYiWrcfIx z4BVNLijV6^@gqt1ETvi$wjQg4P@TQ^`6qe(05xB2)BHYyT_1MoOQ1eI*`u9kG<$^fNc!_b)6opW#d|Ulb0#UhIhh zp|)E*A9d=hn zL9PK=)msIRg%SKVAQ?EZrKKh4{1cMRvCMC&u+9pUmfh*j7=9fajUjyZ5ehh1Mv3rLK3M`gacSq1Jsf>LiGP* zcel(lLp7nV2ta>)^H?v>-;YiMBHKnX7)!N-yfh7Cs*#hubyYy_Wg%ynQ)nQWU}eBT z=Bb(jarc>oad$M$mWFm#bqmu`CgL|fCtzoSEfF8FZ?eSoPJ8k1^+<1&)!F;9f z>!BZSHr2!l-!DfM2JO8+1)Gxb`F@Vo6n%xs>Yap$TfkF62dn4DEY(>qLiElhU=KP) z&eE3w8JZi&81ly2?i4gbVb|pq_ z6f3|-&leAC9^h)~j6pTblYhATS1*8o4$u?SmPuMk=|tS#S2nEzA4y+NeQZM&Wa8Fi z5yC*rMD8qS-0LQ(_O}J=YxkMsdD&U^hYiV@n=3yYbau07Y!PF+$q7!`qzv3lg=mUW z$S^3%Tv}t@ChNmHCX!S!gkEWo>FG}KIn4qvcX<&F7y=GeaU>gD5qTeqx|Ew3V|?>t zR^r^};Y*YMd#EB}&~YedTj&^&l||a9tHxYiUO7{EgB)9rUU!;D7G((p?d{Z@Q!oa;T0J+dvxzvN?fd zcUiGVi(yiyF^!FDkQPQKW8}@VZdAZKElRU6XG4}mvIjP8@fXX!_kE$DsPE+6xX5GO z?z2wS(fI7M74#sNB77L6>$7CA9Y2-Vm+ME&u|mg+tkfdG-7Gg8AbI#$9O~Zg=w`E_ zp67BYd~ZKxZ=6^lsT~C4fRx=t&1yazYE*LhM9;JAgGW&~Jl~bTxi(S~Ib39I=xLO%=GC1?J)5@uT69yxZgZ;kg8*ziA#Cc? zN8HI2z0NqTD7nr5WpXSd#Gt?ziCP=&AnbT1US3J#`I^f&MzR%r`vY(r8kkxJUzUj~ z1G0YMWyYCM+}MfcJ8a_24&Jtb`!Gauj_pw`8II447Xns}W9zIS2Ru8!Y|5zE*c+fb zM3ry(?$yHqN*x+5P5__Y%f8x^_*?) zJINBe%4=-uycGCm^uiHEcYq@cd|U@8N*OwNy8O=R$@k3oGBUC{R;cFN=Dc^auZZ8_ zCw8T5_IJ~W&N$T~_q_$aqkSdJF*Y0WB^P4rWOQpRAw#S6003bg;vKpF5fct@?YO$~Xkz9gertYk($E40$cEe=2m_sF zi4c!(xTm0`Mprw;hlXSEH!JZ9Wd0_dDJf@T6hO%_y{c+VoCFhKGBgTsu>Xw03CE-C zsmr^nC33RHsvh7PCq1R!DgyxqNssgg8-qev3GDcAy@t9vmi!1ASHJ*%qZTsZ78%+K zo1MJ7(3q~)ul6&y4qCP^P<39IZSvG`>D#O zJ9;)zoo;BUUXtmX+mwvN;)@hJ5)i_tJV`mSl}3MaeGg+Ta7`}}M8tISRQrjTsN zED6XG!o13Upfwg$Tw}!6S8d;CEyZ1{4?f4-clleH;N8zGBF86Y2*tGjHInnL@=AXW zTj|&y83U%$?pVk@%zdm3FZN>Km+TH; zN^zSqr=)>o9zjRA1?ozC^*n)$AQXZbRET)zq#JxY3tI4?R}S)#-Qe2~?Z2o*e;TBp z?8(+O9!X4g+DSQ|T|0MgueFNjWXzd|HqC6q_<{o5KKXkKYVwJSu(B?vZ%)*LHk~74 zbpv^NhX2o`=TRA_QYn6tiU`ZP%<6Y~=N2&shw9r&(-PZgoyp|m%Gs4_FfY=`R8bs*NpVYm(MOfJ)G${EJOEBAx~TF!vqclQHB5G<YlAx(U=a8DlN*uFB_mgJC@hMEkMZWug9O1HoAaEN=Q|n*wH#jZz8W z7t1ACS)&EC0}7ce+z}TXTq=-Kpa}K;|Cu)uqp{TwOSnIW6gW9S$?UfO9Nt{ovzF*0 zu5X-XkvdxdMGXgAwC$I;Z!9tJMD^9vg(!?}d@On5j@v{3f75puP0pc)CE`X_qw}la z^e(~l>3PhAI7%=ogai?8%J-cGwiCq4ycs5ya7m&}l$BM$g-i0zGiR~EhD{ONXcqzc z?r!=4%*kS+$~}&s=a)7AGWB2S&>M2X6`O?*R|Y%3frbuO5Do(Y@#ss=n1a5m-?mMy z3%2L55^mF>J6k06t^g|}1B}O}bZ#2$fYWEYgd^82L%>Y~~+04#93VY<0yjNS*w{PAeE^_jMH zuXbk_*(bs-N~D^X{euc$l--l;7RR6EX$PI*EV+1iiau)o>EnNSujz~50b8O26fkZx zO}j6^^V+|mh7dk(0w$?Pz9Adj!evwTPcqVQNR|JC8HHI+_H6FRx7U`&8CYL``;-Rj z<1q?|IM1PVYou9B2=r1dJ=oSnsAf??$@k@R1VvG&AGZD+XsB6)=)S_(aaUUe8QP@F zub#DEL~%rJf&0WTfV+EsC7W<62zCH;dyKOqN)(-s<;WVnrL>ld<0FZv|IE zAAG*Bbc0uvO8;OfojMk0huQGw>1U`-kqU#flFjQU19oN$11e=j)}L;j1{`o~iZ%p-u|)^P7Z zv8wg)id=r|kO@o(i{w7luu|}&CCd%A3`Ga*r6CTXg$L2X(ZvhU>^_HA8HP}mb6SD8 zr%#`*3g&C&7<0#_GwNVd?C9o-<;s}z4Sf~VwDFym;I472@P`MaeJn9xsc*92gSS8# zR(D&k&$M9LIMi_Qz4hLcO~&S;{S(`~>mwPilwxs6g)b*cD2CZSr1#D?Cwrj1aJ`n2 zP@CLgnhe0L})LxLghXv@waj^N*D1b0XqqgAYF{xgsd^KU}Cck&czeqi;Btl7K zT6D|P-glJPX$SQyHg8(!8ov&E-_@_Iv-*Acon)Fa{<&ylptC+RtU5glj0Nat`~Wex zV?5y5O0%dD7t~;K3FMAJR_t~beI7ryf0)Ny2*T{P&mBAj;slLIca|T|$(Nh2fk6jD zMrhF#6x^x~LSG_01_MS~gH!KzUf|~93TGa#jLT94o$iPZj`IQ|r5&M*&m=39BJYIi z1e|{5V~FzKsuOw9E%J-I6iXH{x4*~?t-lt@24j`s=;+GSEtFM7XnfF)6i{-j#%`_l zEzr+%Ad0iG0vg+00=hqs}+!)e? zmT(YuCD-uXRGrn4=>aCEgcomCk201hmk&x{kd;R8;7&wr?cVi|_L>VXe(^>BW354T zAVZxa^o|Y5G{y7m@nieiSTz!43%^4|l+9NYV?e=`|jrNk|`vW@IjQcb4aoQ!|Pr}8_nVpme9IaCo zkJq=xin%;lr@sXV#}L&ntNRLJw@OA}J#Inm7lY}!4(l9efU!X%L+`*L5#no94FjLB zgZdsPVRqMjWS__yS~pm(11^FN)M=kCZB|SgL$jd5oN$3-SgIjAuXPQp0if% z2L?#*C>Lwgw${myFwZ#uDE_vyGk2SEj%BJh)aJvrGAZQpQ0&S(rrXJvoMamSRs3&;`>*5X zw-Ll1egIv_)=YbAT(dr6Hw#*xq}Imc++mkw*F)(i_|}r&#kftqA#GJy5+Qf>3iCSo z&h=T1+oV2iL~(QPtE_W?$4x=ecC)avpL>WPP@wg89EiQ`Mm5*!28shET3WqLFuo-? z0h~JUKq87g40`c9uC3p1iEiC^SJ^x%kAGl+$*MllfS&TY?9;TvFcVO$ev2h@O$HqT z>iMd86(z6(N|S>XS;2$2S-BZ!qf>Lo-&SQnmoM-^Uh1j#a0DPxtzfqzaH998uf<7u zSCqUuD6|7qLqOhU12>^(m*ffW`MjRw%P;MPG3DTFy2)lZgP|E)wCJEcmEDsas2r~> zNmiK>PvB6MwOK|uzD*C_7;n}6I&(I^UIOsY@gg*Wg;*-`P#uVKlkmOEahxy}F zbdh=X``m%n`WliWuMFoAf{ra z3Dn&EJ~2k5^}){Np2ad1sg^?Wn5AtxCx->zqigk1vFv}mqN}SVj}ZkB}97W@MXEe+W|rhG6R{2Y<2n1I#S>*ZmZ>5mf)xG zVYeUd0Ngh{+L#ZNCGOBKi?xj-+Pl7l0u)C-rbyU#KR*+!Mv z`5!UnWg77f#ofis449ppIc_o+Sm$oza<8LZfd^^6yWmRlwLid zv4;y6L{l8cSIr>UFX79f-9}BV?%%3j`}gh_cRo9Qx&T=n!ChZ(;jlX@`J*j6D(Q7t zm@>OwoSAqj*Xn7~P$7RItCj%}bw$@ynC};0J{*+hX`VO@h(Ezl*u)4gR_EAwg=>bX zm=$&?Sm3m2KvxPcG6B;ydki5xyH(enzntoQM{{8CjGS=ti~igbCunK4wrg@ex^yfI zr?V_=G*fU>SXLHZtD9NB;;L+8!?<-)8K8|8AjkPzRP|>fEA2qp2`V(;#tNsk28LXx zt@SHuSf3&C?b2KRi>vChm_|`pGdtOI-MWRAPTk}2%?~P$ju#-U@MM%dUz{6r$S}8O8eTj#5NOcb7*Cc#H+&F zpD33G@?sD6Z5oWk6$M&94B|U>Hh(B3^r>gz<8V8x=_i}nev;5GE4}oRmLeC0u6{-2 zps!qi(Y~U8XK^s{IJd|Z)^9uA+C$s|*dD_OI`K~lL=mEGwl0~7l{opRw8i^Cv)dL{ z@4pxM8Yk+BT2(Fz$u~{;^QHVs3}+3bC%cf(=uO^F%*C_ThS$WR-qgn79yLQx`(8O> ztP>BQ;%3f1P;R8LlKNVnucFmv9M{8bd#!4<>0PLI_%O{kI?nU#>DZX~kcp!-R?G}a zrjx8P6qXTYf*olJc%=&04cla8cR)|J1T~}oVI`-D3Cv=O6X*4v2GSIS%eO)_!#A8> zdH7!5&Dvc;UXS{+TClKp&nHlQnG@ZXv{&V_#W`qASF$kpwH#^DM0rV7QUCVH+RpNw zfxtZ8xMm~HW9^sRB*gANiTbEnDk>0j!A>vQ#F&=%#YjsXDh!RF^2A<}`PA^$2Pjx?0IL z_>m3xjyClbNo%z^M_b&Cp^!SeWSX)X9Do~nZlf-F3Avmz+}xbH5p@~R;_p!9{YUKg zb5_z_1Ql~xZ_@E)K;pr0XDKrxA0FEl=CPJ6%c94O29Y(J{={0>Wb#V`a&DH-PO!dN zC*rbO9fS1W#XYc+mF+8nj--(5y$&7~_I{1MoWgj$`tU0@OHK)Z+VTlx!gOr38h|t` z9mp_nSH7P(pi+=cTQyuTJCKT^?m^tjYtCNiwrSsGVix$>TTxjbDXQNxzi;%*yu|>1qGLT-^sC$N~($} zh0Upj%i@?px_Vlxbp`hTd&q(mU4! z6V?`c&{;0fU_woOx$Ldr56F)K;qau~Yd`$#mKU&tiN1oObEo24kwmL!^ zTb7lkmlKzu`iP25K5 z+38gZeSYqHI+(~Ti-B4E+Sk3Ho2z4QpU7BVH|E-&)}d~H=OO4cq5_)EmG=U*2;S=q zY!|u0i7~x?{n>|TodckUx>J8~V6_NGAnc7Y&`m_fns~_o?wGPKph^exU9M@^p`Eew z5tor-hsp~=byr6&dZ>&Uao1=Loe>a*znrcBvr?1tT(%OD8^EXqJ1`jOrGk`yrqWn;PlH(1)_xN4c$CP_M9F$6b_713k+~3>TjK2K*DEgHIa`q;0 zGA17UPjGaYNMlf2+dE#{Q~+<5AVV;(We~iF7IvJ=<2i6ddl-o@eMUq zMMZ5~2YXlI;emPQtfy|{47axz#Vz*AYU8p-4NZ&hh7-zn{PthpA3PaKJ?S3|%QcOk zUefEy?(FV-05v{M+#^inl6vT3^m~)XwD2a*%_Ru;3Z)D{4o|vyf32ub1{p5L+Yioo zf7N1NF=2q~s&ok}mA>;8ek5SLH=7%(WjRa?Z+iev!*)>7yJ5qKG?HA5xC6sU6 z7)XEW+g3-2ohJ;3TyHFnl;mwM58Tjw``L7|{>gu_Y_R>FoqG=?JOxhg4NDz$Cg{w= zmbLr6UplA_(MxT=l9*0##(s=Z^|so9o>@2y&daDzrYAxZC^QQ zaA&SrJKR_&Zlu~0&~ZBYP2i_j-6MNf(tXl&mn<0VbwcCfe3l%dunfLL;r`6(FahJ| zMlMMN)rkn@%6)LV#e|;dS?5;P!AFE*5>O7%Vj9Cgq-%+B75#G~S`%T1KV)Cbu8pD*0shr zVT<8#kq3Knkadw~)IM+3{)ymn<2>I)_<++`xVsvbw`_IxlD476RguC7?8-nm(_m#> zMAMD=bw`6z!Ev{oy91m-arZtT7XjLH(O~c6(Y=Rrl^lx#1^7cYy?`SNn7=?)bE-P% z01W2#xs=_#2a~2sN=nhDJt+{E&vm99)6bl8+Q`Qj`7&#bu3z&QV|lLE&Ci@_C$TUD zAFJOvO;FCXc)ds75IW+>i#lD7y!n($4d|EQj3$Drr9S2QpI$3}6dQGeV8We^B$t`* zJ>En2xVGKEd&!7BS~YwAr1YJ&0^zn7XCT?~42An(Y%(Uz|5C^Pc}$kEy|?N*lh>pE zgJ}Mebxut~tVukZYiPOlGP7HXM?CH}rsLu1%O-Vh6f@UnU(qooC%a2U`Nyg$Ipr1B70z6DO|re5j0nB4fll#Q70t^*1?J-*%H zfcxABTOFr(jJw}Vb(+t-N^$NH!Vkt3v?9PJ2BPy?U7PhP3ae<*{-XOVsKx0?`roZo>BXt&ewE zu^3ZUy<>}fpFTYdo=n4+e#ZEUnz-Bz*x>|hc6)z9IjJd2s!BMk_U7tHBE`n^wcN&_ zq|BQ5;i=Cr+;z{6IQZ(tcCH#^4xS+sH*uavY8A*(=?wLoFU4s{Os7mwEm>!F_(LQw zs>38D$)m@m1`A9l6QWXTC*G(gTIF)9p zd-_!R3E(8&Q!*RK)j@!}Ryu&-XK5TQtuFr+co`EW+0gZI5M-JvyCM~9`LGk)y8<|w zeP(Mb$^9M@!y2QD&}tvgd6x*W8B1O;_wbM)JD4tp11F&n_B%RJrOnwo~#b=i$mm>nBOR z2smz=76g-s5*%Oce%lX16j=s}YK01x<75H?0V&NVm~FqR@t zjZ(?TJY4B5jb+Pl--X?`KD>VPLrYw*6ZQu$P^$`9N$@yTq2Vk~ZD+5zhJBDXiK3S| zn0{@}HxD(Wd}Fkg)L6{ZRrW46 zNqcD_1MV7%t-4<;8#6Pbc4&-3`q&+3g$E;z#P*O$Uvz1q%ZhbekIMCkipBJ9ZD^1E zJ^N2f6cl+`Mh`yE`=2n)InU*yirf8o(WqEsuwXI;cj5r_ef6a@z{%5f^0cq{(#hF?ZGh?&n05t^CRKdbzzI~X&{$9HyS)UT=E)JNl#(cjZTXMuz(2DG6w0{Y6l z^E_|$Cc}S3+mBZa>~;gjlKVgX_22PElW|H}nf~%%J`aHaDMu}O?M$u`*{d_c5qLBl z9}dVQx0K@r!>zg!+9+C}8__fC^_#z0XS+P_5z#9aEippFv0U63%MPfj2YY3Gb&1&e zT48ldLV9{LGfg|MQdp#^kM4CDfKBXI*>q5zZ3 z5ig=~^4vz$knkL8q~ep@641ZR47vX4p+6gvIdX2<@doLGy|}muKiSS6;g-Bx3e)0& zsMTod`cu>JofMzLC4LwJjegZq>ht8ViP1ux%D7TCUhjh)qmSp(LcQi>ApJB)q#SBt zgD%MzwSd=#Mjt{4dR>#s4F`X)!o$>;d|%4p)0k&Io@dKer@SuyQLW>=vhYxFI8+!S zy@BkFlZ5IGTy)8M(HQ?Ircr$_u9B=Nd0#T#WWu8P;PJ!YoLRMhRsMjeZyV6epX4#q zsOYX{uMZ9X?CtS8P@Q^Qx6r{H{SeyOxtepP)wk;U0vEmIRgns<*+n12$|PlWW?^A_ z%(jq_DSP!Z1t{^~?CBgbA3-Z$Em#h`zh|*ueVGjzj#2bx2b6!KRuY^+JC5Bk$dGJ>$Cq(pXKy`u|YwQ@|Dq$utT-1_M8X(8uL zWiMJd1JN=kQsBf<+h_Z6@7qHls0@2`1aZfFFhCWK>o`ixbR=@-GJ^~>N-S+te& zkn`X4$EbK`N>v)db87odm-&#fJ$PKenSJ7%qSVDIuQHpiJnrvBk;iF+nhMKQVC*Y9(A&eJVkmeX%brEER8^9OA$@8JoW{v6Z}8 zDo_*>_fU+M(#eW$6E3y!#ssZa!#cUjI=Mq9up7B^^Au=7!O{wyg)mVNM8sm$cR_t} zmITIh7YJjFp}qWZWM1}AiSI1FnSCVaNR(Uvv9IY4-4pP{{sJQ!A20`go}@Ays^ z|E{KmX2X@gXz59r|1@*AU-RN$?){$hq}cpLQA8BaO-*Pnz421k1z>T9kx%!X##1;X zw^ojLQ&HkMG_;t^?+`K+qkyHdC4ocQ0H@>bg8xl!F5rp;bacnNwE=qEYdIae^Xk!_ zvyTWYZuYuwekwsBDE%0ffC2EcEs1Yv1cZ_o>Q!+!(SB!#BaJdW*?!n&8QLKw;W)BT-X}$Aq;R*^aAv%7 zuEI;vRb7*eKFoxF$rc6~DoD=jmV2Z$AAH{$e&16SpFvwWm&5?G(=fVel1cqe?cP1W z0+yzh%r&k!y%)|babp;t#so2a3|vNMzanri=%9dWUxc5euSjM_RQ9t0Rreg{#NEl_ zL&%qy>sW*f5un0KO9jhGspNF`rB0LZ58N`o&erxKso1sn2ltV?8~k+s;LEZh!^;F4 zCDhv)h;YnPTeNU`fq^$Mqb;xOOrnK0#$v~r!i_<1A&I?Wsw{`g!p-KAF|LXt$R`Rz z^c)s%-Je{2n;d!RNSiKf`B@>{>z8Gim!UuRhz-Mc0#<+|5EIHLh2Iek{JkF>=Nnf! zm4tu5Q31a`d-mz0{;Q;gxYcZIiQ32w`->o+>UA*4abyED}=c^+EAtzHg5cu|NDFtuK}C z4C?eK1qE+~igC8q&WU*nL;N>;9gECpCt7x4iSIxVC5MvZV{Veu2g6GZ!)NbIp1bH< zwK+)K#JFbqc}Wg%8VE=d{g&TkyfxSi&7~<)+Hm8yJ-|B_oMQ0}uWdE`ja@eGEHplZ zN^bb>DdBHUw*R=+0aY`xa0u39{RpbIqRPt4CR;|{I;c$h(eE`QC)owC_B8z%O}?m2 zR;fLYpCa+C1W2`f%Z{I`Pxa=fSX2_qc!8*TpZ-OHkTF8|!3PRqZBDbo2u3vTCG;yV zc_}t{cu%V}&RSyMOP_A>DsyP095zD1SK-dK`DOYzTZcdc)!2Imi8<=hq_J$hMOk$*u;M{eW8)JhH*;_me z_=~I|4*t@@4frT3T<&4`Aj!5XeHIw`O!9ZcRDFQ)W|)N(gR6;TqZNlGPx8) zLWq|W4}#4ylSZx?uug>s(Gku-DT`bZw5E3d1D{TyR1?Bts!ZfxdnE_#aMT1A>~Bq- znKd@_vprd#&BG|}TB}r!YFTVs;A%9~#4Up~ke-wPfoeb{h!8~R$6l|M0=CKQC`VdU zq{EDPSxh6G`qc^QbIsZ)gt}PTODK{ddH^|5JZiU2LA!Y|VTvl{x;CcI{@btp*^ikcC$@)c^M_Q@S3lUTw7sUI1eGYI zq%5g->k;2yxZ`S!gvKxC^1W|GAE9dB*=O;}coV1(+Gf5p^K~L zlPJdZyI&BnzZpf*6W|hERxl-sY@+Bb?^6M`5nvw%8=h(a{EiWp>J_LcRj6X zdowJvxCGW-ZSvA}f;Youk50?!$z|Z|iO<@48Lckha`B14vrd<$=mycP=OU)MZZy!Q z06Lm?0}#6fo%#~2weOlh;4fnSB#7MVe?E*xT(f_E&;rf_fnN)3_={uRS_ahJ@~;o;kOYM z5Q5Z#sw$CRQ5%gN!7Nw$I_iI?X}}7kRStu*ga>}9W>PHvg+-xp9u+gFO$EEZNm&m| z>6zn7%IdtqK?{jnc(}H!uFP%F-6>?n9cL~>h_?OrUzrdbx~f-z9$MHNZul*12>5I2 z{VcF+lHf&uLchSEZ{t@3KmA(g!XNAO3vBjh_8h$Pc|LXhclOFbroCB7m zub`Fu_O8z|sruXEtEZ&jOcB;;lh++N85=cbn>@*7X4}pFk)_-GUD6=o9w^z#z*b-JJR)W3=V(dv6$? zxKT`s?)m5cW?_yxwB`>z;w80xf|x)^FD66+cm3jf$iSdRHvCUK(hMo@^FLvIt4C$0 zq*|Wswp5R(p)8D;YOQr|VsP%X@z=RRXRj41M$Tm|^PLb)^n>Wq>pcvef?%TU*CYEf zakxH%If!rC4|U#f@6&oe6CN7yeymR zD1$=aa2*{M=qxYvq?ea_VKYR^S7WkOc$Sev8lNOfh~3%STH3@dsKJIU1mC(N!+*^V_!O0M$b#W;8$bIe8XKgrttOVp_jhe(RWrdmFdgc}0^b zZz736$oOkAf}Zjz4aCHR`gTZ5D^>b76LeeFhXwXD47z8=HbI$D^M%>s+(Z!Fi2t@t zs${z4+hNq@Xk}&1O`DSeR(v^&Ce26WFS&Ma0!PvhLC87G$-$^L`{;;9sP;cEy-Mic&B~zq=u;#K zpH@@PumtODC!lpS#4R)K2cxMzb1NH+2&(;akF|EkcesfK8dJTi-)(XD;oa-k2lb16 z-#LRg%Bkd%X8VE37=C7}fqhaRYio#mS8UMq>gfAZ-b5=e zzM8qV#m?S9SZXjL;`yqDgYJ8$Nwz)@r?M+1TfX?IOsZLO^4iXhR!-DOI$yR((whpg z>^z;~?1$Bl`+DJ~xAZg^TU$U{M+iRty%9CE(Niz!)Z0hsLapU)S<0m}vY#S|zVF;5HByCln&5~_bH*cvl7~1yuy3w<%S(`Jt9l9hTjbp|4GJpR4 zIfYvAb70iF86TW-dwN4f{`38Bd=m=IDH@BR8=X4_{$kfFPvxoiDjYdQ=Dp%3x?agf z0MrRlMF~e8-G>s6TBnT_G!k@HYuUVi z@?W9JV;+Dh?4HLH|5&9i82)f)p)Jc;#6j+nws`?ClbJoZM}68#WKNS%^Lf6p! zyQ_=8AF@n_WHW^QhDZ?m#kYqV9cK)z*gS1?+)#S~ zCSq$6ii$yTWFNz=-KYBEk78jYx%Bo6^Nw{8>Ln`g`PM`3xQNtgCyPR9*@w5;c^(~i zy7d?%@16GzBab&dKcG?D$~Q}oxN()0kV6vC5f+U)v{?r|)m)meBZU1)3)!tl$-TlC zzAsYU3wX+X?%U%gVV|^Hk&vz|DMLh9dW1Mu)nraNvJep>MSM~(sh zS8qI~=2tHObH7qD;4cxwy#ae7t+>6EyF-tJnmZ$SXwrkn)<{iFuCAmyF0U{qUuCU% zxNYEUk>@jiesEun-9S6_;_Lf#yLs;?Jh$!U2i)igQ5}!8XIRNS^H-?4XGKj?Vi&@+ z{0|LGu-4bln8*HG#2tHh@Zwn>Mwolsh@}vySOfgDFaOm^2@nQpsInyX+bjz#$K$`u z_c7iybI_M;Nk+$@9W9Uv6Wbw);-udtOzMlF({ehr%K;BLk4e;6`CJy@U-?3xQlmZD zr>VS~#gYvXGK8kWiH7C0AMX?l@3frgd4Q$FbqnS(u5}IV?LNU=^X6YU0gf9QNb(`y zTCOAen_OB-gBToW-yBE$k+yHkUbKi7Kv4~Y_|R3vdol4OL)CfT8E zGO`L~WS?UkqsWTPY_jLE_l&al-kW33<8V0V{BG~>@AvsV?teWVxL@~uU)S}#p4aoq z>f+#k8GOII1=qC3E(@C+qhan1?TVNGJ4zP`!0k8U;|-Qk`Ei6ZCTxA%s|U{-WwJW9 z^FwYw1^f5@iw0Nr6cg2(cRjfelezGQ6nhu(?DB3#wLJ6@wL{`e0z8oXk&x0!k)UqF@43Tyjl0Qv??T>#= zAHM!|%l=i6kzz|Y)SRASgea`q!Kd(RwIL^T=j#Z;CnLMv6Av`2 zA_Qk$rK5p>91wfYblezbKN(RB#kw5rBEb+mkY!{Ip%;u+R}qp?5kEDv9LCkX2Fc~H)z<`YPjcw?_?)o-slU;|i{qFvi+0O27gJ3EXeR8&o`%z}9i zx8qVU)=}4Pn19irG<01cg>9FQEf1+mL?w#2D1tdyvCvy8FQkCVd+piSXeDaYUlPwk z_(?dHAne2b^s<$a8PfDwa~#P|lHeJacHg3#(TAm< zBSb?D2d7@HSq+DnM+n=^D`Cf8|65Fv$M0uyV-G-UlNaH8itz6kr%B8_y4X-P$*d>Q z^|y6+^VU9Dy=j+wjwF@PIP*D?vPQNN1*v3Zz`y8#+?%0UandvBB zDq(r9>SgNcwIsK6PaL*d)eU(DR9bmU>w)e}iSxGJK&V?O${Ww}#Bc?0V&)o)xfMlJn@tx zYP8aJjtgjJ9eozGp43=BeJ>3}F3nH&763;M^F9LC?&5dGIE?Yg+m+&9@K4643G4W{ zriksmvVh!{*4+O|&mHOEor0ggNgt|F5(v=ut5@L*?h(-TP)~#Z@${HadH$;j{yV^j z&Em_xoS)`?hR)uNeSS1bjV#|1J*^d@XV+qRZ=|Bv!(BW^rA`gM&ihy;lQ`o4;feQQbp@wRs_4VqKCyY*q< z>?k7n{1tFPUbF%kKcNARwgM`2$@-qBE48rlE%n_-LPMF=h$7J9Wv-0}zoZR#xw4AE zkHUHrMciD>+ZzIlW&b;*?SxY+La>JV$dhgFf|qV7coi1t&(MRYP^+`U9|kiR!lAP@ z6tb(@@W3bnxfF-|f6=;-^HqdBE2u^oy8LS^3h#)~eCA}I&`MG?G`3DFdPnr=;Z}5; zXNgQq4h4tW;MlYt7}Lpzof#t3SC8du1aiKWV8eboH~n8yax4f%iI&8h1KkRHU>D=& zqB!1zgsB29tj8<^q#NmO0T{)CQc{ioE}RAcHK5#37L1P=;r2Q?kUCRfT<^W@``PIi zP8%AfRa5Bcxe*uBY;`ubvzci^{_gvfUBx|MZM7`U`uFeOsETz;U^hl!WV1ve^DX8Y z>M`YaR)bJuPubb`cLwc%V0N4;Z1Y0Q_7RT;+yv1lNSLz~22$n`y>c;D5OHa3-d1^TPi5Te6j*Apetc4p*c_BD20CgTWo;C9V8pUn3Y2LFEV#bRX43HhfVS``lpscB{ zGZv_1^S(RMR+;uZ+df!{G3q3Px-$jQa?{|j7j9>csD9={H~0#0JGteNMfQmq|49J9 z-x|@U?HPFWe*RZeS__B(>@@CJ@-Jy}+o>oc=6Fa2k+55pZ2Kd$&$oGvX;Scj;lGM} zPXf$C|5pbaCmp6X@cA&32+*RVS@fLaL_4PcVUtLY+;2vE+|c1IT{GQiG%&%B$zt)ckvLqCR$eB69mpzUT8-x2!#@%e2R z&L-MN5e20A1mm^dMEgn0tbkJ|%04kn!ug)RMEAKK3|4*L<7hxlODlTf81OIx z@xuNyoY);=ECH=7LlE!9=lz5cu2?!>wGsqp!h1Ts7@AO1@mGvAnEjn>p7I9=3h9dlIJ} zlS<;;m&=*Oes!*WyDlFFwSe$Ggnv6`>bcn}mm(c|{BU(!VS`ZW!npTVV+tw}AJ(6D zWC*GbH6JD#Nj-9(6mk=3kMDR+ug6$M8uw^6lU);Ta-wv3IpIOK-OJ>xH<-#EruPsM zCK6|2CnkCxO$_5^R0W2165Vz&Np6|bd~2Cm>Tm46KiWV4ZkcvecKb{KG&+phSD?Ew zc8F|sPt-1ISLI97nHJ;5MIpgYTm^lF@DlHbOGnQk6GdKxEK(8Hg+ue%kK~4C-$L%X zm~_z+?}g1%um-)j8r3D%J#_PPKQvI}i0yB(&IYy3TP!vIN~raomuQNFBy`;NN@*@+ zTd#EqL01*SeIiE3BLAl+UXXqevokYQWIanxNtprs&Hog+O;uR?S;v}4W$N|&1M$dp zLC&$Bq374>cw2dsU|FtCH@L5wTwY+mV1UohNG%qCSz*qayR^V8>0go2Ae>h=?EAr= zGhkzv#cSUAVyHl;_)qnYzIWY6)!Amq`SQZEJZwo(SE%}c4ssqozv#0`RQh-efG-qV zo8R(kr^c8d-kcB%M47}6^b6rBT$1>R=zoj3kW9CM@n73hCqY@JDeO4)M`#5F4gO=a z*P22upIhdopt*|eN_MxkS;CtdW!=A(u&DBl#YrMpCnt=|?9F|42i`%=W_GlzvdI9OoVR zla=hbF--ubBm?Npu^ga>)a!x0led1){keP?J6o=1UZzCi3f#=>;r7&;J-gG+v{0oh zaD91H@BQtrkm%V~sm*@3NUm0aqCFl+o#*(sihOl-Ag7=xmFp=IJKfNgKdW~y9?$qB z$jAHH_Y(O@z=h^Kujs8pGTB!!m>6n$h0D~qh?JNq%;7Te2|llAR{OUh)l&CM?6lXh z%-Ox*D@<#y+O@D}FHJSv^pf(i zO?Ybh4V`5FzAwRB`tkRz2$+aT;xwLp#6~bWFvj+4&|{m-FMJ{KmM9{`I+2p{*5pKn z5^cDVY$`B6aoiez_OXoC$o*%lt7ILO>ot>Q9xzg>>OX=5s$MLyR0|-8ZyZN)Xb-dB z*=abl>2g$x;mV+(<$4i1W8cL&4CFo6DzfhEk29Gcvkn)$8@sW6etPI_5(|yZyG5-fdFir!!lgp8o$rSS@Jk-3 zS;lb^Vj+kPC_B49;7|}tFDR!1%!&9K!4$VI#aWeyOqdjP*>Q$ivX_iDnh?vrx2ZqG$ z^OiKLVsxfrRBpdAr=A*SN6eyso-F%gpW$$g^1EE!Qh__%Zv!RttAoVPwkQG@Adjz^ zc)$t|h)2X9b5G_mt>0?rSRQ$b?6_L&XusK(p3X*b-=IirFn?^BwT3~bhnVQ@Lo=c{ zAq5>|b~0?P3yWh9SktwW_+7TF^dp|3x+CiDWDi$GGs%G${*uQ$w&YI?p6QDySuFQ- z%!OfExRi%Sm?fndg0_ILbf9Xq=s<{uA6i!$E}$Xkr$MzPCk36dBzly*|C zgA-MvbZLyl#RujlX2%UV_5!4Qqq&odRu&xNzK z>aXBFjq}8bxG(}I5LkUmW=6(O_pb-jhkfeX!e|Q~`ltF;kCUD-?}lN{Id?6fWuY?` zH^$bchsSc*VHRc z+)4YZ{s%m3*X34>oq(&shAkL7(I~TcTeI{-L|&BWd$U(Mnx?fs71(u^f$Hx0WQJ0V z1@OQc2G*?7ys?E+5*{x@8O1bA$)z7c=)sf-#_r)^t-6|;e5P(c*|W|)r8iR{eaoL4 zFAdsm2@Kwk<}_u|(`-DvnHA5!;A_3tZ|En*=)MC9?tIsTZlY({G!=r0dEti&5#5Z~ zxi3adPwjAB#;_aJLqQe$+Uh!Gn^3((<|2r}hjtg&vM7UyIgjIVb4>@^M)yS)ebz%e#U zCWt0SVn2?F@y4v@nKgLwO&#MCi0}o~I z>V-*(KKrw$WH*~mW+5RURTn||u0PocC)B?}g6=a!@Su@fpBLfpvtlB~NKlQJ>ZxA# znXC4BLr>_g1fK|{_gVs4URrJ2zFq=&TGLp<$mj7dJO#CbZ!4>WVsWYDs7U01Ht za_PVSX{=jJ{;@Y9wRU$$iGrp(%f`j&FZ#+D{Y;9;QBbDQ4+aSpr_FoyU5uhdq4xx= zE*n;nwG z?xCSCDIGYPj8B-!!bsY^RdJF?9bA!Np}r6tJ)*r1RR7ArknTM(IDfgtfY0BbQ!NkL zhbe%?8B2g5i7ljMQ9;U=GP+(F_iR&Q*azvR74%MK`2WrBqMVRi%=cRKwU%nkXW$yg#pd8zD|Zutf`A zBWE$-Y778fq3&J#Xmyi6&xIXUZ(Gk*L^9>62NXMKxa=D}!axHW7T=T@eZs3@QnBGQLU`Msh@g^6p+I zs#ilV)#wb(fjZ#`f3`aWgew*5SiwkCBG7{XpJvpl%M#?-qPz3&D{+%l)e14}jAeHF zi!$Nt_sW=tWLp3JwTwUanod3!qVzp%70(A^cTMlTn9b{*x8oq}9^a`^2iCH;QKD}M z-RmNI2fba>jpt<{o8Hq2lO%;?-9)&4H;K#8z2?KGN0*N-{kJ5k*1a)pjjExd*zApc z$y$l1jJmW_@YkW5@byQ%BDO=@l}^9I-W)%$d?J?<&T2W2!wei*s#|u1H*(Hxx7Q}i zK^X!)gFUw%Nqm4^Yu!fEk8aj7e)ISDjZo;j{9FI_zb`$%IH3bkrSX&py;fhC5w4y{ zuyf}x!OnR$qddb0SF)iT8Jb|@dh@d)ro_!xdfcp^j_UZ3EMLN1f;YK{rD$ghRdHP* zHF>xPEN=z|(&Q{b%{*M~@KO2)NIZ^&?YM^oP`;jlS8z40&)P<^y4IbZeZAqbg0)+0 zy^6~mb9!d@!VwjANDGDT20~HT9+^K4G+>_)`n%__dOi&D{^UP22oIvjFKa${Km2hP z-cR)6koD*Flk}6&p}Z9u2~yl4uvnu!rB~W_MO|-fj~9n9(hElhwrfPwCCG`)ew$kZ zLX^SaS=bPcHQnBAjOp)X5E^(6 zSy4p7@w-~*0uI@fO+MPIXL>1zk~jv8$5W~*LKhzQqZ(muOb>#qMHOQT;-y6K^?CTW z%_w-HpSah5Yk9y1Mbf~vS|~0`=MawHjs5sST|3P3xy0GgtvLR5mnR0fj?qb3R)_v~ z5qP1Vd1ke)g?QV>zi22%0<|mb5z{%;Ycu=#+(dsiWVJ$E(lb9}5C6FBsC0wQTY^dO zo73MQHq7=5JFDN85&}T@7#u8OOQ$%RpAlRo^&g-+&*P8U{;I$19))bxCPZugxI6A_ zFn#$ds2Gm-NMMo(yX=mwr>#6G0AuK#%hkLhC%~v`a1lt)c4{fxLZK2iIkbYW zT%VtCyT1VP*@x=S+f}EDt)%K$E|acoXHXskI>sV`XgH5`7@c_DJaBu=4dT9!YQ+j) z?ZI~6k%-Io@77mKuAf~+_QSl6wXRCeQqV*9>kYWPd_lnI@R2zm%(`s1n>N^zu+=21Z9h|MRYY5elmBu1CAXq9^m=Eeca?ofZ(pdNx`}VRuh}p9;<46 zwZ*`L7Uc~J?%>}bT{?-JjXA4&%OW>mgxKeR8@zBo;bDFBP;H<3T)bu2i2JY6?@w39 z63)7!IORazY-gi%?(0uA_=hwI^{V@-um_eu>Zxw{MO_G=*qTTqQ{`@M;m$l<{d

@?rgicC|87c@Sv=OPOa1Ne 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 n!t$s6Rt}#Q{h)!NozTpzLNz>&*c^ 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

K)K-}5kt0Ja`?KlVm1jj}i=Xe- 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

$qu}NT}$a4Sd;CAdH!>>=jzdnC{GI z1XG4>TDgQjfpdghXhfFxOvJ1_i)IVI{_f7A_xeLqS{(JObz8+QHDWoHZ|pAp)Aj*^ zaux8@cfXz_acw^uCFFD&|4IK78B_*DNzy&S5M&4Un$Y^UE!#!moE{YcS9&BWEl?K! zP^D^jY+wF@dz)rT>^=x##%)L~`DXR97JA~u?#I7_eKu@c9T+ zuy@UbPbRKu(y}}C-%Gr5ohgeaU3x+_@TPY^&~Q?;%y8}>WMdLubsb-7;%Rj(T2P_A zZs_q#N}%90W%p?={f=Y)i1E8od%c?}awaCaz!8W~G<*Q22?~kZUCg$S_QQj?Q5G54zd-zFBh=-yoTiDidE=|ShDl>z`qFNb#!GXA9y^bfLE} zUa%hTx~DRGg9-R&gSC=zxav>zvjO8*0S(3;R~fC_R0{XQK|zo-UWYE!#`O`ptIzTG z(hr5G%Xryxb-VUqlT*aOqRV4b^wI8nF}o?Z2ekwKJzvAi)$Kk!w^+bqkVDt{h<^B& zNB65R`(8%}n`9>xa?vY&U}vh2eEGgY+#o9OZDLnv`F##MWJe4GsI&79y0UPn&c4nP z)12)9%CymaED1d+p|)o#rJ5|gY1Dl_2XZm(lRf59qhMxbBr zOgCk2K||5=yyP2L*cVfrBcwvlP(>haybrPV!R%$>(1WDI9qoX`OFEBz$t&w;nTqJ< z=*)_(v4Gk=WIf_mU{C|})lg_b?QW%jZl06V$1bL4LvLE*6-76UWzD3&YbI(ykbuGB zJ!j))Lk7HKPO(Cxd8RvY9%i8P2QyGQ zUUs(aaktA`-Y_`w>7k@eOQO~?+zv-G>@}r$?f>8wxc!om*k|z2K6QIL!+X!9>l!0? z-4X@vrz-r&=@c=0)n8)4m?j;{?cDt|bVg=c5gJX(nya=QPoIE@EASnYoqoZq(6oCa z^%g`_=E5j7%(*)e#&nb7U=gkFqc&QgsZzVHk5*k=;+ zuMc!VaMT;-0KVndV$&;MXF?_}Ihj_Cy}X-X{W)EMHerz|6rAOXl?!0$j#i^kOIB6S z!JshF52?qJM>``oGOC9_C~FL9ZFe3&eVYeyOVYa_YUEws6AAP-f*Bf{q)O+4>WJjx+1yYbC+NO z{WFXB#`I&~UAc4WsgSQPE}`k_F=RqOOyS=i@9nG$fVvEpLMm-Qu;_PvkUiTx{;vH? z`1)(mX+TQGSu+QC9049^<_u$65$@6Bd9*Mf7%S$?JB8D58$Y$KS?#&=0()mNM>*{Y z%q#tddh^xN^l*Ek?CEO#Q{P@=aDZ?N*{!wt@9aaFuOMgP1(?jy-%+ffu6+HX^@;r{V8ftVw|6!lEPq=(!{LO6k{_htvknWYY7HEHM+x?4;e!|G zKCFsD=FwWay8VebdPb@2(a1jL1@ivo@@{n7n?2hjtmt5Q%Jg9yJEp^VkrX~YAX!@*HxIGV9`J<9wN3cw%+j)$b~NTA!D z=r;E+m-%e^)gYMmcb(*ZhTbD5nP$GMS8s$I-4Z!#6!NB9z|FnG@!j-6yfl*5in^9q z>Ro9)iUryWGVIS`Z>hy7WOK_&{#{+Ik>Qov_R<~V?MFWYYsq#WRQzteJgxhT67f7> z>g%3Wk8)kHec=h83q-j$4&dsO< ze{%WasRJoK|J<@lSnx#jzG#OE4A!t}j7*;S8U$dIx&#BOtG$KPgUcYt)?m+65PIIn zc7P5apg4ctA?!Jyez;;&6^x)xH*TKZCNW3m4^VK4%#Nzg|Azl~Cf%+&DJ$<~Cc$n6 zfioPBWYw=<>BKMl?mVz(wkS7}N8Ky78>OTs6Ze!rnVXm4k}8VZz~25vY?H&2;4J}% z7t_+8!e`6V6Oc(PVz+lAwAhZjt(w;O-!Hc@tkZv2WAxq;7P$y{JpN3w+Lh(#+- z*oOVjw_`ItL#hnnr*KYCa^x2A=$Bb*yA8+UP-B`e#tuDOM}_-(*6*-n{(>N0UUW}P zt9>&lbq686$rKcjWmGh)eK#Yef++%=)3XvGet)&C2(32gBc14;A`6EB(;r!MQ-wik z1#e31O3t3v3PI!Xqe2U(fs7nFnD);!3!efEc>&Rj_Fys;w%cK!Sp8XbV*0jmM*bZO zl=MuIvWpRY)>F@IY;SSWHp!J!B5c#u9b(De5xW6&Kv)nSpQ3lkknt4{IA;BRW5NWb zp5OL7`bJJx}v3aE=Dds4*zz9Op7n=yIvh7~sB&P}xU4h8Udwi=hH&J@MaC zKN~RgoKazuDg2o{Nt5*^+w2o3f;f}kemwW7d&nT;^-nC)ISB<{u@TZD+=ApVIy`s` zg+o4K$>39P(@MoH3Hv%lA7L)WdFrX`2zYveH(yW>zlWA9<$*awj=4hDbhD92`77C_ z4Y&oU2ANpk6DJ&r$lEZJm zg~FE!b_2!duZ|G#BB6r@QIFhbvy-nb60}=PB872mG4r{P^m=j+1lT&%VH3sx^49DD z+gv6Pl{VrYwePdgnTK2J`;N=lCJ4$jCU~IB;3&>bJu%4k5|N_UPuF9^#{Q zR#Q)!uh_O?;|621$$YzeXG4$yqi2;)fQ=R!ARJ@TH*7=c@B z&FJ_DDV#eQ;73%lCB#YFC0DraxoLG!j^X3nVQ9ZO zzqBlr=)P1w3^bn1mU(x!y7?CDF$$a^&w}y30olHt5(b96PS>QWbD^}t{3{!xo||uG z`)g^wY{Kq_ICvS@Yvf&RqacC{EUo1Ib1?I=on@lx_aVZwq`_XGyfo`|$EMh@h47E2 zK%4;#e73h}Y|AyzdbJ}Y)Me3#UW`)j@O=a1vnS0AWg90aaT5xqMP5&@Kkw!K>v^gT z`-J}Nc^I3muOYq*^m=>~S2q(iCG*syE?0)l&Z}Q(-J5soqQ=uuzA*eM6 z=9qIs>AmyFrf$Nl6jhr!<6V*LYSg1Ja5kNxLf-HHQ&4aD;P{T6LME$b2$Q4~`T?;A zJt0&)S4x`lm`*8cZw$(L!dv=Q+orU8uvs3^{$>cABG*Ckc;gYn0h>+rtIvOAm}GZ*c&xm7b+&30KAmUDaPluBr=!3OuG%qBm*~-h&6zp zu!VHtQ+mc^f4RWW9vD?YZh}4!>jlhz0rE;qWYC3v_`Q;foiqv_(IAq{UN1#8Y!#36 zP9+NbUEp|V<7PP}gM+=<{B=g)YCY=u?LUu7djzt7kCgI#%6)5n(e^b&e?uhv`6`82IuM&0^X9F9 z37Dq;J%klW_tEi?v)i^MOPELIuftGcR`9Gyc2lbF9C>xtj#a#owpCtf6JXZo^gg;D zy98cQf8$WnGY`Hc{M!hP>{p)Ql}?ul^n3 zCioNR)??DC50E=JnLl7n(%FY@zXR~0>!9meSQ8gj@D+b~431gf9@(wQXt473hj^mD zy!%XT6@!@jwjp3c+V@FpP!TEY5&Do)C-Yd?3>DbiQ+-Gj&?1q{4jH2C(Lr%&f?%8t@D0TkSqY<gd;31u1dnn1dvrxtu7!uyJol>Mff}*?(Q^QRV`~+Mgxdz4S=CpMsiC@9?r_3 zku?6e2-t6=hgGLibHm^u`VhxBuIFVHX2`|fN20{w;xy-h*?_w~gyvy+3L@u5%MHvg z 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%0Da2r<*j_olT21(!2Db7)pmfaU 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 DDC*L$ literal 0 HcmV?d00001 diff --git a/docs/images/redispvcnodeslayout.png b/docs/images/redispvcnodeslayout.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4484d6b1183ef6bfdd927f39ef2a2b23788949 GIT binary patch literal 256605 zcmeFZXIN9)8ZAr_Q4nH7R3HHhs2~AFY9JsYTSdV_limbG2%Ur$BVwcpN>!<%g7n^- zB3%d~z4snU=mCk3T#hC!4^1if8Aspo9A!cysC8vc@0rHc?Pl(6)DAFh2b_uT>#^ zrQ(5ihBpJpDa3iY0%Gk-!%BSw+_YgM&Umzei^jfl?TjWkfmyaBOBM{-^WpHz7nMgG zXm)AP(D$*JR+ zWj+jNP_#53RpN6aZ*bo<5dOH`_8|Aiv$w>x{6gPZzdek==U(z1JKs%1^SpAbE|a#= z3gfI6!_7f3gWqpgJr(p9ZKLpgaTV@SW}a&gks9u#V{DQ1>GWBlaz*rpj-%?~9pru- z=kVA&JSHJe^P2Fknd?x#oSt;P6MCrcYrS zs>wX=e0vh6SZOY^@gEIrUXFh!``&YjUg@!p=SJg+$5(k+Lq{tvSS&u*d}a;)Xq_E> z^EgA%h5ByKBMKT19@!PU-f*3!X?SKQ@ghIl6;-Mi?B;Vu%qw=Fl=r~=_EkN0uYEVU z-_qT`&V0N^c(;Z8z3A$zk8gD8t0@>-eY)?beJIttZ@Xd6Ux)X+8m(%|93GfI?4ns> z$gP)jL13W5%vu2>E__1=axd$ zPR0y8^DpvyGK$3gq^}(qQHWnu+x_wc(>@Wq`KJulHVJFjogeSJ2Hh}BQkW%-yy#B~W5F_Y8WN~yzqL)^% z)KuTFMA&=vb8YR{wNIWf*>OBni_@wxrG(~&pc&lw0fsXK|$+%okho?G(nK&x?o z`l4sQaDZmFN>5wc$~wEwEk>I4$Z|{fb)N4L)Nz0vL~UprmR~$X!^EGS}Pu+ zx6^0g)W0}0H%wrB&%Mi+E}eVN>jyj28VvIyNA#J(Xh$FHRoNbbY0>9u-8@iOPmf$S-hKvjQeKUFDxm(aa|C`{8VT?4^PK@x)jF^Dp}bsWg@Ya)j=mGmB}r!z z%PGQi^+Hu_$GCCUjtGB2IsV2|_UyN@Uas4BBua~isEiXfW;U(7_wC^5fg=G2IKeWd*%Q-8y9?=TusTmj+$q3R` z66Bjb2I1A?h96nEVSh4bKm4+Q!e7rXYF_TRZ2met)?UT=o%1c1yENyXzL1Z&k{sQ7 z!~Z7Yx}LeYxu*HrUBA!I%<4ZUG1+?Yyfb$KCE?^XHc&6l98<5~DD-cE;3e#r_J(>l<1&sEolgs16i`|QcON6BZQ}|}7H!B)ZuMu&Ox6tOO)KUd<7|CsW zW!fF!hV^X2IbADlglpF} zF`F}ojLuXT$JW>cro?QQ-^4OK3SsS$T6}c!?xgWygk+Ds&xGa|@L9Xe9cQ0++|D$* zqcf_spufPmpgM}JmpXm$0Or76AJqej0+DIEG&$A4i4R&nOy-DW`)1v`ZIyE`dpbKK z_j1OmoK8!Jt`~Rfa~d*qO?vM2SQ;6e?Y#5os$V^emiOr{wR?q?%MbBdQZ9x23mF`j z9R2Zr)2L;I<#Wrqoa3x=tbtq!oPrX2xjLTYKjGlSNyS{#y=EA9InJ&jJ~KD-Bg(_B zOX!18pFxv>YI#aQqqex9r{Fn3C+u0QA_xlBg>Q81c)7>?Xo$bK@L*cx2Dj3jzOuemFQU)IHHuUwAdZDsk33X=|qHs&EYphY^SQ% zY1L>q?$^`eF-c{(a4eh0FDN8D=XA2Ec6(mSkYrPF)0L)F-&_dXVdLFS-hBjK&KL1#pTceQw(}f4 zZe&`i=q^y|-4|F>rybRCx}T|aM#zvJZX@o{8O zaHo34HNp|TGp08iy1LuD@%e73lc>Ulnzch~jIW7J+U9k~7B1c7%dQDGIi9gx;~uE4 zJQJc=lY4S^1yVsCL%V^5C)%r!qKmW+YG`P#T3sdtx!qiPdpRyLVpPQPbC#mQfC5~( zDvtTB7%nYb*r~GTdHC~}raYNvOwZwRBBjxeRpE~%q(*OyjW%p%wr3+1=BH367Y>iT ztdBZNCV}?An}f_ktFNR8&grF@^OUG$q&YmTdX?=X6UuZ&IW#{cIMhvBK*N=&m{E|AwIa}$^{C)t z{@das1+NT}>pM*>;3@l33$+j3$ag88ASz7tS?#vUOA|&K;dwK!n!J?RIJP#?Ir_NX zLDf-pMC-8@Q!cFgMbXkn+;mi8?(=*6UCZW$_AcvBR=G~M$h5RbU3C&nma_;t7g5;c z6hS_|82adTXlH%l^TN92`_i@2%I@{6OSQf6#r5m$>vz$ao0gmIm82%g*H*W6oQm^G zig~hQ@MZDz^?oG3bu@&uzU&dg$PYRMzU>_5j3f<|992+seqnr7M={gC7ZKU+y3pQk z6neWdD+}x|=}z#UgFlJr4;QyR(?9(Frh6P~_?@T}_>kM%nWVOkO|GOL>cySDky8*u|I-i@o7? zKGungIWu^I)LW+nlI@0tQ=!v(Oks=@uJ=lw(?Ur<=?kMbBSdNx{u(ZTHlB|srmqiq zL<~fXMftik&EHzi%1sbM8-wu8GjnROQOhg>^WCPGVPO9N!1Hu+k(bFMZU% z?~L3f>USao*4?5lf*j&0nwoMk*-rCr&wXV=Nl7n@n_E;r7h55#>=)xDotwumAjMWs zYIq8A_?5pGdsTvU4<5>uR#E8RS%N1sJbCTq-1Q;P8DJgSCK{LST)j$j3OL?DvyFB; z4Lxu~OG5|zv-jIEKuc&({5X#_r`fi34GoP9@IMU=T{PYIGt5EJ^xuyevM6sd(oL)Y zm*kn>(y-UKsw8QIuoN^fMi`n1A}y^c7tp|vlE9&*iM;_g((;~_og`BF$kr8-z%k`C z^a%IXCH5B5M>MXgaLXfXO}NhqiU}b|@=*1LSEdyQ5z}MUMOpxaPVHo9|ufw*U z>+9FSC?6(y!^948&w+ARs#fOqGG}00-$8x)$4!16rEF_%0z4*Vn2hkZAwQp^zFr<- zX>Ds_XZQ2*)kWSC&kzpYY+ z>Cs*FFd7dr(0-EpE_NH>=>vrdy}#?{EKjY$s=B*g;MYBgSJ&zJ7@h zG2lr2#|GP?f}x_KYo*!GRytAWWBd_$dR>RYMGy|DqM~$s{@dOi+bfkG*zRx735q@? z+;Qjeb6;5{Iu_NqmHe?87u;zk+Vkho4Y!+$$GUIyXhjvSIFV;$;&RTX?ctWaPeV($ zZO88a9sF++{$~mQ^Me0*!T-GAe_rtaUoXJy;|qw$LySo6;hs}t0B@?z7OAuDTH-wX zq9xE_*NXkaG!fig>2g%>zQL&5$vIhh_3|2=Q5KHXAEsfrF=LcXsi@S$B6orP>!`4O zkf*}Oo>=5cnIZqv{s(;nKm$(X}bu1Peb<)bBVl!q=DV}9^ zHmPN~?UB?9Tx@aUEW55-)q7$0;u2|U=%RmnXI`}H?cxacuo^+@J}!u^W1b_@?SN#f z!$Vh{c#|o@Zt||NsUZu!P!oe1WAdRQng0lW%8U;@_L=9b&X|q~7y+5`xQOo>1A!{K zo-}O4bPhCNaYe*BW#!Sf+3ep?RHarK!^qI-nYB9)WJQr<%cl**!@1OV_3c$}e4IOw zwQ8!fk!j6KvwCRff5csZ8vUNDo!}>EurIl5s&^oOrTNi^-ul_Dbf>+gcc6aMQA+3z zo!|+`+1q_c-W}b=3!OJjTO=ph{XnK29oYhX&qCP)oIX8_>cjo@AJ-!6BAxs^I zow-vg9E-VKgf>Q+^;^!aFF>xvMt$}_PdyYFe4n{iPhpS-^O*rWUTW}}AK=tn*&BG9 zrFowrbvAU!6H-f+lSrb&!zT@>d0cm+aAKYxdNMb7b1;3CZ))7v=T7tac|?W)>0O`N z%FvKz^3wUiU1pEf3&q6NVOiKaPLCrLTpGby*kjS~YI;mvc~aDrcY0aRYkj_bu5n-wc@XKCIa`T#Xq&SpDMxUv>6ls;<4cCt z1W7E^AE|$42jB!}ikNlFU++HH{>9~XmCAA?jCt0J>^Jbn1``onwf^Bwz2?EuPkLao z0JB}eU=&hITSPZWwDOs3bCV?WtLH9Afo&y46*haK^6?mJ~wFCAf51Lz6_}k z69OLu`7&1055+jkN=JiLK=F*t^plwMc*aLh_OpkV?q)4s4748a|1z(P(&CirJ$(%? za|m8bHi9iJv@||NJJbc|N+XN<>Pml`W8Yj^n~NVV>R)7XU4N1|hMNjskGu_r9svzV z?=krD(sO(~oCA6gp)Ibf4eQOjUle;*SN!*t`r%k%XXxY=^`5XlXJ-!+BZ&x#LnMi{ z^BcR?2ff-;Sxwi}^<;>(>d+$M6OXEes~a5D0ig^@nNC=cbk*xUc}{H(?4#K+D<4&l z3^ELN;EFrg)siG-5T9QNAqFOqE;qu?rt-P_yyDP2S$$b9ol8UWHadWj(1_fPRX~}+ z(rjN4Rotc*FgV3Z`K9|m&mArBQs23SzT)yIv~&)+u`oomOec@#Zdlk%PA7I)SE=I) zCPNUVYv@_M9}o8}Raah%4(rI>6V^(%PIT!D#!kOjl|O)PE&UA1X%*(v6$eAXdi#OD z$QzqS2!;v-TZ{1h7Vc-)mjaDpS^fq0Nzw5Ad_GNYrOiN{@{=s}KHe`F7eSlyWHU$X z;uXz$dLot-gBB_DAniGs#fazGc@VP52)LsMj{U1`1Z?Bw1$nd8>A4T2w3p2x}W(szG)<&@+qTzhmsV=Wo1zZ%YXM#vInuH<1g#~^;79w=abd-=mi@EDdsX@bwx0Y89mv3rMF2i5q0d3OK$QOa&6}-;A9!`qkYjCi~U|1kAjcpa?7nqhfDxmFrTVppObMT|`i$w>H)2G<4F7(Gp zS2O;Xb^m4&Mj`YlnfCZNl)Mehz6Bg~{7)%VaOH#iv6~=WykRN&kYE_p%y9)JT zGj6(k-ii`CJ^tAke=$>`>k>jRPUtDLkgh%$D%hu|t?j<55m)M6#agkTt@r8ta>Z3G z#2RtRExqbDuz*-?Ver^u*@GJ@IvOMTX~n?t5Ay4c@L>;F5SBWh{4lVs^s*HqFE`WUq|Y6UT(6NuPIN#jx}76V*I7;O z7+^NF>Y2x-E(C*lsnfRaDPRS!YjTF4z`Q4wSPa5OtA5G9f&sUbLz^)jgfw57d~?T12=G@w|Kyoy z_%~Np0sOVa=Vwzt}mdn2* zWI#vnw3w3YU<|?eFxM_Wlp#}NJrL#XXanR4@`sQ_gv+po-ncN;4d~xtZoaeZKN}ad15@av>oVCt zQ-U+)>L|Byn@5vxvj;jkAa?K}3V6ev-z%0konwFaq@$u@xWaq5BGIuiLFGZ~rxE^3i$iPR8?X&z2ZIm}x0b^N>r#`NZ-PXBSp_I|>c5ptio$ zRfu^wzBJuw(O_HagZ>=BB&jdQ9FcJT+=qy7Zh`?C9y zYo1jfGL>DSu$5uys>R2ASU7t|C*)qIbDezE#(B_QDq?>2av9Ue*-3n47{t-Kjj;{i z)w2?{;JT`q>L83#94ktj4vN|tr?XgRP=Bavuwpnd`GVE)<#zpK0V9*=M{=|1@v{Fu zKUK9Dluzr!b8!fkxXndq8!n%1toLG`42DjmXAg;sc`hFwYlGy}BA3s)he$st_97xGDY+ z_(FT>!*b{>ycNCCh+o;hDF^=a z2^Mc+b3Jb1LnSl(fLfHJ!ik3Z;>u;X(?>gJk3u4;UuvGS&%)KOoXTs;MA+k%d9E%1 zj7#hZ-O5ZaX{sDW(waZX?z@~-VXTU~#O`@K5tob`5i5Ob=4E45n%^-NBP~)Wzxf&j z0$-Aqsa2%F4b+)1M*m~nkdau}U&V4VwOasQZtvEezwV8e**d89I3`rS(BHvV!XCLc zPi9vaK#O|$7P;{ZuOR@qmea?vcHfO^W%Qky_kZCPr9)`yTdyon4Q~5_s6=F;vJj#! zx=tF0p~q%*Rg*4)OJ9W*IsB;y(n<)WNX$(e^|9b!%eYjO0m@Zsdu9Oo&O%O?qpxEx z?zgx=+`0dzy(nGP>9pB~sa|22$c9!rkB)Gs*mG&8OGN=2aZ}_sy=MMW)JFLWb}n0G zhOMtU4SJ6NFjbw^mpH6>V40KaFbQwhyAq7>BQmg3JKdLy(V~{_d*Ri2Ox<>44spAd zS2oRML^kR_3-YEqeA>w`S|oL^Xl^LR<*IgYQTt%hO_Ww|JFq|(Fc;5$wI{%OmUN?a zRiMEv?^oNcg=AWJ08kyXJHX%1QKfe-z<()(8^W=99$>z&wxBuPq~}Gc6A0u%$mD4` z8BwC=^4x8FjLXuR!H`1KWQRd)_mGo}y~TF)Lt z|KRJ{TELTce50=KxA`%0WsYHk<4WS(Q&Ppp#A-$P8^$)5_0h9V%S#CI+I6tgW2!(M z_JPj)vLO?Bhb~crxqCgdG|d{>8s6u37Fi1Gw5!)iODH+A_Tf!jaG-02v1zCGfje;X zxz7N80O<3x`!K-ixRK|HGHdDfpd3y|R^On$a zG%C}sbtBEN+{9q%kXCs(>dH{)$BrUH+uX2beo;Vb0pJY~<%TfxDnHo#KcKI#XkRJc zS$`{hPj;(>g9HRmLBKLMo|sO|3TOwlNs`x92|h2>956Z8 zWokW|Ifi5ZVESaiN)KQM!IGSj&f`-99aW`WlP`l^=AABDNu3c{8K90K)cD3rw+M2J!T6|w_ z+S+DXZ+hVT%(e9y}!OVkTlSp+^!$M=%^{G53 zYp1?cHP*r_zofx!JCt}Zm29au$Jt!o8Sx4=_7&zI$iP+PCpq~qAFFHAJsgr;_&R+0 zik`m7E^x)LX(td@yrzs%UD z0B8MwCVuGFr$=Hr#F{`CL5!fySV3;cV9ia6cVb|V z>40!@81$kXL)r~@wg428y+SfTyrDSqGipopI2p!>lUariyu+640W^@@-m1#tys(zg zM;7H#owg&ExS~lpMk?fwxpZ9LlW=Lt(RbG8(DZB}@27~RVj!RB0f4_9IRMSkQ_@v3 zWYc=_DFY|((g+!rLuFh61F>u?+zDJGaeNiyFy9O>fg;BJFuYG`&e1OQ3f zilK3AEwK(j(jvIP6^ccBCUD_yo__o8O3k5G} z1(ui-zF4l;>;}UU_^?|xCS+Cp-xL@M1=-brF^yWaLJqz!^@@Y=lYLAj4?V}?tN>L= zIZh{+8U_vTwU%2Oc7|7Ov`iPqu9y-UrtNINV-KDxi=yW{)9wzrl!vE`@UGvPGuG>3 zTI3AhuqMcZYyagg?gOM8A;iea~|pR${$*_r%#Yy$)~#Z+Td4paNhs zUl+*0hS2@9V)_p;cCKKlOc_kV&Mn6F`Rc7qT8e{8ZI@MZNdt)x8*0TQ>;$Isf^_;A zmmY=8!ohe$g2aN$hfcc`eo9(=pU5Xq37WV0s&iW+|9<)CCe@D{sW& z@uN{TH3@d*3150S+Em6L2TIL<7O82`MhYk20z($WA^2FEGZ!fExe00DDnRDj_tl1j zummA@mBqEsVqs*V!!=Ukcun9mYWt4%ey7qrR5OJ0c0CBM>Z_FhQlV4Ungz2ck{kmNh!>CQgm+D@G89KRx#(Z_3&HqH{_V7$_2=Z zj**1n?1ox}Omjk?r3Hhh;hAto5MCA@K>rVN>rc#j%NxtQK4D-GR)2USB+})s{_wj` zgHGp4&PaVCj!$%1xsy~ulD{c7?_|Si)335)+@xHf)fOG~^J5Zr!?-K}!NiQc_Tk{S zty1)Hl4+>T`%?vk;`l?)>DM8}{II3QwxiDLA!8lInu>V_3&Bz)Ur3LCL&^dSca7HS z-DcBkJHOUWd{XBGX>VEa5@1Hd z2sH&ENuWer`++<4y2i(C`7^Yh$~1U}2EMnF_$W$|m@66nP3jXGkgy&O9xERLEn-7i zVf*=JyK-T5GU+B$PoPEx8+LZTtUJAv3PVY?7VTk&`j0RboaTLrldiOYT-xUF6KB24Uf{fUXfG`)Qu2 z<}_PG0Usqju{ug6qrNMCd10>8>a1o_#*3~nLuE7Fq#tv!8T#TY$O7i0{0QS#`Ro^G z{XP+tYTCtAM(1lK;z<$R7K1OUY|wtG)tQ1DwE2OaD)Fn=qYt_ z9t6v9x^t?ZLeD>k+*0;GKo(xG<4M%XG@m-Hhj1xlrOE_A4MYv7ffUTIV?7Gjb1Hml zW_@w(zzjW89rL^?ijKDxMup3mzg*0~9nE<$YMi$m4R{z){vQ33&G~OR90L=u{iQPd z8_v)tw9;pHPFvT8l%yHAYf@kY059x-Ov{`i)3_*35?$cA}rC zyN7hr$XR}tv8e`7u?-v}F}F`eVwgI0TXWL2^d-Wdpl70dgUk9O@etnY<}3+glVx?NkIkP{ussFPQJ{SJ+o zje0Y`FKshZeWZ63GLb)D95XgNXh;y}SC8^F@9qRdsgG7M@Mb%J`)@6e!4DibV(^sy z7ck-bgP4V>Ey?0e!uP2~5+euc_0~g1&dKdDaJA~~sd`5n_Yb^}eQ~eT12Aooq0hCio>Jh>v-|Uuc<@e4 zL{QKie;E48bNTb#-Gmze2U^7btv+pj18NlY$z$gy4|;zz6h`WgY(D%lSF;+PZQf-W zg#cS)sfZ3z9`HJ}ywcEuf`>~E`d*e#ONT+01ddPt`{ zkOpghS~>WKWKjz?(x}KFz$wzJl*2yL!|1luqHca3ooa3-C+YuWp>Il zEdD*EnV%li_Sw84SOR~0g5_tZ(@-qn5w81#<|XZCBTMRrIA;?{pqv(SS4vPEOnYvCY zw8T*y)c`$WIA1;73Y))uzwe-0trAqiMLKfN!VgPLuCXiI~Zhl{mC5&OF7v<(;iXRsn zw2Qpy)@xz`WvOc`&V=347SP%db2ZNdOysZPn4+-oKPqi(`Rd>DbeJ$|E)YwWfo)cc zX~7Yjy6!76@`}9Uu|`9igkP=pHGe*m8NgL(giaK%NS6 zi!hw3(--s4KYNkRW7AEn0Q0;^)A6`&1_)ya3HXKCyJG5FHKwTT-5% zwkfLfP~5w9gMcFcpEY~^J0tIhK+~*@k*m7Ifx0eOq4|QUluWC8Bb7cM)&T@eNZbls zSBdm|^_C@&fHi=ojN*B30$a2CEw4aSOR%c9kH_@F$!%HwkAapw55s3tRz&#=f7j85 z|*6B*T_O3n#r6r}gUUZ73Z6gkGMeur{r zb+{XZIxBAjN^KwCAh}? z$-<7#>2LV%2a-*|HeVpu0ws+1WBgx5lAk5`E#k73hr^zugkbjKu#HXVBXwQpGY*f4 zmLVol?O6_0?47KgRQ7!K7Jzt-HY#VQW(%E%D~2O73qD*jC7nkJ=Lb6uN$uuKO-j

q87SpvjHpP*_FSn`w2uvrYt(@q7i6?XgUShwCFJP>lR=Dp%xk zv&#ig2Flt0;T?1$8r>+%0ibM+CiCR@pDrhXO)`t+6b&em0v|WtKj0Lvjh?{*?%mp% zZB&E^%TJ`q7>$JR3&Uty%r)7L^Rq}Nnutg9kCU85xKEjD@FXEOfa>J?4w;6Ij+}<( zy`7yMDDf{FK$KAP^Xmv#x>5kYikrfFWj^|&NMCi44_gPq{vWf;n%%FyoV4B$1G7S} zQStNVPZ;1vmDe*s<28UU=$)BSo81b6{|e+Or&p38mCJ5>-YnB(XEeQuF<pL;3k(4qik4^XVNx*~i;pT*zojnfV=MI_(Ctv`8@00+fE;{uxjCyUubCpJ#b=G(UoYwkVgYf`Ez28*AYXAwu zBjmC70~8!hFX7!VI3uO}a1x;mfX!V$I2Zy{HYbpL>tqAiXvOEnD<&r9hqH4Y!0^Dq z!F?nkD1Pny2f)lB14P2^TqU{B^BuK+uVmJ(aV9)(wx0By-sj1F~X`?J|C?)<|)A+u;9RGaK0o0H8BKB0UH8 z-xXG~jM(%Ve-2{y0DVM=HlWq9Zu?;E>?dn#*NGcK1?<`m;uG6051=joCFF*r)dFghZW$8jSgl? z0h<1`lo0q0kWxF~dhyZZ66cc&LIYfz)4l)&e16tPa?y*U$80uA2>8ZtK=msd`XtN_ z^UAV7AP~=oqk4cG3;M!pNWUKsaC8@ocI{{XWSGzi2}=MMYo(G)Io-?8v_G6R^dFde}MC0=NlueJ%i zT5|&u{yIKl0r%4(ruN;YlE8e50I`hU8qR2Q9LSM~spBiA4*wS<(UwO~%TDJXg^iQe zfJ;fvBgw|{bE{7`(Kxy!0&D*~7v#cRGK4h-M%pDwAG;@9-Q3rw$B;j`Fp2x%%5UNI z*e#0=A2C8ju-l!8bEa(@o_wxHxf==(+io)1SJd4GsnY-M#{IAV3t%sjXK(6~A(myt zGfsxONQSlJUz}31_0_5{imbQh^XE4}4T9D^cIc5GmUT1TTtaQue67@=+6p{bw5H_| zT8UWmO21UrC%2DQ50VpkS@A0!9?D2|fBBoAT7@WnvtZ+5t97i5g_)Ijobc>;c<)H= zxQsn5J8W~XSjl6|TnV7)HC4Bq_jx6uP!TfaOA6TK+Psu5aLF8s;mo+nvE!vAnN+L+ z)ymiK1S>rCQ{WHxldWs{LQk{|3=G359HGEEtzEEJRkamWRV7xG&lF^6e;jJ3XKFbW zuFd6lBoy@20E9nk=Vp-i>2DHM?a^g3cG6$(Lg2>aHWp+h)2hRv!D)$rijQf$`9~Y2 zdYLr}L&};fq-y8!$clR#{bKTLQNaa6+&Q_o#cK1niSql<>P`mOoLDr8lxpTTVeCBnhQg*W(jF)RcCdHT0N?@`1WZr zJX;SxPPELEhK=SIc59N}?N1vp-_q}A$NI(}>%RPFJs9W1Y-6h0AtBOYs(l(;zqSDx z)Q}xNx45`?L77-u*Yiy5&R_5L-F%Z%F=lA5#Gb=0Q#n2dQk*>-OTP3UlT3G%?* zL`-$zDzk=jNFS{vqsqB&8Lv{Jh+*bYbZ6Cu#%_J6clV!u)jM6nk0)=_%}rB#8>vaj zc<`1Ca7?1fq(e31rdwH+ld^3wxPAJ`2ZbGI$53Z$QfA-vOxj{xc>Ye}@{@@$piJF_ ze$uhUz917D4n6!7v{mL3#)KAR7EJ~cc}FXnmaR=lzn9X}FPOS(w%aqeAO9n-#3ouZ z4!b%@oBxx1Xpr&W=4tw426-iHmjQi)zs8ATCe7AJLw8j+7#@d)Y2`sSg(`0q7RB1# z|ETT+sauC)DrsS|)awq_yA;YFJ~bYQg>O?hfPG8z#wVMnXpWCSP~9WUMd500Jv?+g zq@aHVSVuZyX%FIMwI{nlm(EGO4gFMg@w$6j79SserS)&U0So3yy12(E+2ajh+A4dK z(vONaJ06_|HFq;^`*R{@(916CiBn%z?_K6g9}!&y85FAfrY=Es%7PkmW#AnswNdzu zFfN3vlW@L3mlA1~t!te1nk#XyL%?9g<2CGxDG71$zm=6r&c{n`fjk8Tp42bcOoo|~! zN2F($UJH}-3|(Ka-f#Rvqjhl=0j`n>3xyy&r}ccemVPw+)hn#d$>9{xzzcxoZ>K|Bbh|jH;{awsau`2*H9o1b252?(P=c z-5r9vySrO(hu{|6-QC@x7Vr0+Tc@gSwUQr|*7A$S-iy80nsbh4^xjADvJy>T?;4vI z7wIOo6BG=JfkBcQP_GuKt#)U-V4@tpi5aF5HDFaO5@8_k2Syw8<7{j4`&JlT3XW9D z=?c23U<%IbATOI$eTIh{ejG96&a=H_SrTXLM+0s(%OqKLwY^_jHjjv)krOKSc@2)0`|h+`M3Yp81X z@uF)6ckjw>{im^CgI)QOh=hd@$I*or-QQa7sDb;;ntJ@lK146KhQbkA$*<&nH)0+R z!^4CTJlHV%LcW$ji8cGPU#EqyyJoy;!rrAbYrtpg>DOw}?Fnqz5 zch1=S5*wqJ(>b?+jlA7gUb>J`W8zdQ8do8^5N?{E5EI0b`}Pn7*Bw3;Bf2AcARdf{ zRBW_bXY$j*?|O|3xP&7v4}4*_fP_^LU^mJil7&akmd9FEl;KV!y(vIqbez!=llxq# zF2?G~5;14N51Fm>o7McVOm^pHn3XRAVfsbhbSXvstI8G1vxFU2r^X%d=xOh5GBz939*Xng_31yMnY9e$pT`FW>G^8Yp4t5@nRyWnI?uA|VCI2i-F}PO`P|w$ z(&726T5mRMS)?NO_*+i9L&4SLL$C+v8VoMC`i@%K?m>j)f(N$ALc6QppQ^6wt2`@~ zVk>hdC2fq3WSw9cT*`0IWFjZpZ}v&qrTeflRxylP^q_K=Ee>iBxJE5+UPS$LGc#vo zJ*Gxnh2%-~@~!V`7G2&H_S^-)Cuq-`OI>Z)_&kzaLtC^cy_drIgwiBu*y-;n0Vz85 zw?ll6w@(`MG96!12f`OP+CIbgLpkppa58xaXi?zBWf41Z$V^+x3&c8hD|=(8cwH?K@&FUXz5fd&AY1jM3YN|rV>La!Vft>LVUGyVNzQwL~^ zrbg#&cLJdoNdy5A(mf=em8yc_Gn1GZ^Nc1I5mBid8S^@meg=cE0`sjQWbkZNd~GRM zI_0TsZ5;w{0`;G>Iihx*QJK?m8S4axwWe1f*Hq|J^m=N)xF$!HJ*<`O5-FE^nY1Nd z1Zx~#POPvg-9$k#D}3EmXg$s4A6V|=3I;D&pc9L7=atpbCF0y@quwsB!p&icN!>F` z@+(ecjf3b#_{qMO<%6REqmv6 zcH*UtDqD)d?3qmP-^D2q^Ygj20r{?ODvVyyqPh5M%3#FhDaUFRZ-g5z_Dnope zn5Um3AF54BxwhuWnmC=d8(V{!XL7P~ik!-W3;8>i?van29rZjL(tL10-8%RCYZt^V zEkQ9?KC75-%zXCImwO3&HsNIbWnUP#5y@u0OzklLMT5!aiN&&}9&+9dUfiBK zyTDQe52Dht)oNiT>|PM-Ol1`2)gsem%N*pRepBZAAVE*KkO*9qvW(5<&FWT_=czexDozF-wX|`syV_~# zqFg)P>@$y|tBI>d@8?Fg4C#;KWye)Q6>wY@80ma}?%ck9{76#(aKuqW@GvCN$i*>K z-6;zUrYMhbm%_Bj3r0^x+?oUpaR`jhl$D@FB5oSL+wzw#q1gmS>mj7&^55=1<9!^b z!)WhZxLz)Tcy~0`pHMq*Bsv|UZcB<+JZCWU6M_3t*OEy$2!0LTuRSXosxVnaiR zx%WQSx`(Nxj^3)*rK-u*RV_<)3JSb0w~5lbIYpI~kwBOL&uxj!Wm@NBTHF1a`)uOP z#8rrlhc6f;+;77X)I=Js(y^(sVy>NZ4#&`O&og_j$DO!Rh4L%eY>s{kJdB@SkA~^e zq^My5tZOcLOLn+s$`$H;K*!oNqu8y$w*1;)e8~)WAT1ctEH&+28}~ueJB{@@!&$ zZmwOD3vgsnYjvU)iNw|&O=X@<%*(Z#m&MUfh{CR@sPH&RrOqjCLTsV8Czf)nUxQ(W;98bTrKnjablIp+&)y&Jm%GHnCs}lf znrkS^R`1X07rN>w%^B2OJc@d0#+xpdPb^fpPW0xUH*;vETy!5O4V%s8m-Cuy5Us~1 z^gkD)BKL7IL~iYwADi{|qzK+FtJgNGC`nwSbiUm{U0t2c(G2<9Vb&W|+Gv00>vHGn z>Zh^0X%z>?Z%{~P;}iBoo~J9S=^bwzEo)zp*35MuW)CbYb)NBS*+jRpUn@`N3v=xn z9~Q^G`T;csyYm_LdD}Idl$6xRCuBD-r#-InD4N$nb+vgJ2At-Ad(-J;q09QE-`Zy5 z52(7j`kC~eI&~@~JHxpMut|z6=49E_M7D^8?$8z-tRo4vHYJtZafn(mZkE9_Hi^OO zi@g}(-3CEcW7BOm>+}ewt^_bG3ghLpJ2~i+Kg~5Aip|TtH-Qq$$y3{Q!+NFu{Ism< z`}gWwP9jmqE#H=Yy$!~VdCQ@O@eg}^{{3N)5Owa`2sb8uolk6QL*=iihzJ1}3|Kwa zmNxiOBniT;g;5h6V2|5g*cy4VRU+1vq@JPz-!Xc*Hqp3m+XBY2>U60JhcwagxtB!@ zvT#-th`6yl{cB`3Kr*<0jH5EDU-f3%*Iui3IBe0gu0F4zn^n##yf^tg5nKqCgabB_ z4EI=M^Bh_IKaEvb?gBA85;QBXu19$D`ZI>)lDgIjkYS1xLLwrNVW`ww(Y`x&ta~vo{ba*y*9Gu-P>1T-qR#3>)vIJn1?{m22pBjqfB5}ef`q;z6dh=c z4A_HhWmX_Occl+TtK3Af6MIz0D_J$Ew5*fuyH^8+g%t)mN{BUmu+7OY?;A% zkUTI!cgWDKZ*C*rMp}@F6zupWSA*3CvZBB)d{hy|4ag`7?qjRa1x=&q z&0C9J9wU+fI5A0OgpR9->zFP;9x|3v)fQhTas;P=MPkovzjbWnJ933i+*iP(iqrd? z@8yZJVkgs9|{=lN` z;*#tK318!Sy$7GTxVXxuJn)-q_eT+P&foc1&)Ip;OtNvW@fkVi0@3PZy&X?NRD1G;?%y+kCEc~a zDRjG~e#R7fr|O>)>r6Y$F$AToBF;xIMzTfpNip4_25TOXa*o*YgbS)UD_`PPQ?|0G zKYTajNq)~55k@;0K~=Y}r8iXH`|Fh{LkUp{J8HN(2z8>-wxz22u9rTrXO*kf26nz3 zcfM_`E1@Jn{&GhWuVxd~yObI;ezt9dEOEz|%+-ntBq*8Zu%$ZBe>0%Hbyl}x5WHxD zb|1NEs4QpcV|^{hsi9*#5z+?J#4svam02ebs0249pbeTxJw-43W|7RhCbm3>z19QO zZO<(G7jf07r~an^*VdjBbvkaSTqBR9OB^n`!A7A9ni!9{{;4V2W{#}suhIU6W;5!$ zRM0J%^$e}wFykxy17LGmxJ;?3sX&qA;NbAv;ZXkVsp>sd#_KAsF=PCq>sx9BeH)IB z=;B3NX`h3l-)nZ{78GyHq8B2T#g1{)Z|l<{Ho`!!X6Ip>(BtGQl5)1qz|P=3Gos%R zW+ZG4sh5mG1j`&Dy!3;ANIV}&*qMahghCtbr=5#fgY`ii$yy-}Gm!gYIm-At+k(2Z z<~eIh_DNPVq7uLeaX}-xqz;mkLVPIG584E5DekefABR=g-0!H?U(cK$6SN-_%tqwo z9%Yl=`X2;IrA9a|7pa;$Vgf0}+?3U-sjBrX8@Aj`o0yjE@cE5vp+*oPBa8UM!{1f$ z&J7aVvtCqF-)@zuLQ%|X!H=K3ru3tqgjsv2`Fu~Gt~PSICMKmk$bv1mOdJdF2GXVV zc0IzXIFsw?AryAq$wRF*l6MejE0bb>WG>jlm5(ZyOHirK-^5Tz%QZsf!#nFSYlypA zQJGR_1W%Y+_vl%4*U-zSPF5Jiz0kF)sQzZssAl3^aMhb?n<*g67*&2bN6k^qrt7Z< zwGB+E)c13s{x$O^?H0IwQ+|aolvvNK@tdYvM~&fa&J#F$1=Pzl|EBQL>r)(}83n*t zq-?1!u>QhH3R7B+Xr8Pb>CB~0X>1)5@+_rFF!G=-*L(EP2GMgZ`?*`WZph|@q}JLml(y)5Jd51cinPAT6ar>$dn%*lPC%EKYn=eDV2@=fjpt>I z6luM)DIUJTdUSDin`oQ?lEFWp!xkeIXl}{e`~oaAT|V#4(sPw|I`oaz&x*E3ZwxG( zL%j}93I%sOlVZ~hc&)5eef8a;h9Oz19R^_s4J=ef(5SU2^KV3t+ZjxYZk0R;8}2-k z!&YY-i-Q6^gi&1G>o2407r-W+_;GUjI9s-za@9qd4YpS&bZTWp%r3;Xyl2kM-$k#+|a)o z#rM|X7~&Lyt8a?l zN|opyN*a1Yuf)7^a8jCPW0@vQNW1Nei*&cf2_ibh;2=${iAL-0OK~tVMBlW_HCubH z(>8M&k>A$Jw^&JlcS1D6>>wgqFo%(*lB<~f&zN5Ry`I{#MXUet5Ch~%t~N#os$UZ! zJ~%?m-)x6Y2Gz>z;Lm6n1;_cpnrPQaF|w_d$k!_5!Zu7aYr+LHi3+xq+^oHVKk+)* z*E&%2nG`_j$8XoZF}jXiiS%rxn?_e|%AXkipCCHbPz{_$^B2>+g`Y!;#XBNVXJ=NA zGetbaK!dNf-5(8-c)|*G`-97p>v?m0&s5GsM{6aH9~=BL%|cH@7v>6J=tvrdwwC`!z<^O9?G)>r)p}Z&>F*RZ0odWomRQ`9PC~zMm$fb`)Pp?KD}XtRIet+;N?8K3K$aOYVBvhgL={Bve452vg96 zN~jVk*4l)6oK|2TpogIFG*E!vJQqT57dKa${y(zFruKorxD*EMWOP{d&?Jcs^(hq& z8;q}vQ*`G~51nQI1Bxt=4f;Tl(!tYd!z4vl$^Ce@ThR? zz+6taO^kj#@#8AMHED)E)|!AiEG$vG1T|q2CjZnmWc{NG$7ISd0~RnGWo}(+Y$s_D zN+8*MGowhK>WLDX{_~Nfm|ibcn?j0HL1I(9L(jXp<;ODhGq9Y|@Z*@k7)h#wz}_-4 z?^NxGb!Pq0rwK~`D|^6^52B+AS~;)ak~M^c%doLj7-$;4ed$tMRaI0`5n=6hoyL|i zc1WCFGJz6e|JtE}#M4gq%Thj;{Qe;Il!(bgKSeBi?jXlG?Cl9j<;VJ@Ncn1TA{BST zH=%Y^RB#M6hf@YEch<{0s6*vto22*Cj9e}wXZsH9y$vsY1AgvRn0%1Xd}Gxw*r&p# zzqUf8sd^xeNMBR2GDGYwE9ZX9PdtzkX8PH3u_BiXE#i`NcwX6pWeS8q%|lkb6Oo1L^EqufDtjo~>#P9=vrf-=o`!j^*OZQGDCk&gB24YLbRBbx1K-T$Se?>ITx9?^@Ka2e#+7t4=GOp~GyC9+^Nt$M*5cu;cyp{Q6-# z>Vq?g&nEYmA}8ogS>X`g*G_w$cyLEp`M}=aS$W9h2WOG%9USy}bO$}xD=y+tw|nd_ zVUzcPMk(Y8F(%?`M7oBNDj@&T3-DlO*7T&$mv39SMHb7FO41YBSEI|uF%b%IrUAXB&Z_6PvJ8CR7g*Bwf;YjwM|-Sm=2`NIH4E!vXBUII)-}=pZ7udM0}* zGGQ?4014!w7OtCg!ZuWxX|9G=(>>{sjKX+DF?wE!+(mg%<|yaLDc|ERCnTqgL7`=o zEyZn;Mn>mc7R7*}GJoeE!8iA6`E)m1^iE6aSG6Dee++{+y=g)wT@}#Y2}g2;!qBm? z4FK#6cyel&?C8!!>DXKw(8Xmu;QGa2U>VqujW@uTgZ9#o)WKk21~9_=LI(I<_R6@$ zcE^JI^ge_$+5lMDt7u%4&(KSV;+nQI{9m!nDs8KSeXP`p6FdDy6^To+ zNj*in-piqE*u_LaalXSox2sp`;ybr z{A*aM+2xYpLo|`et>G97_`0myd?rnR4s#43kSmj}4jm=}AS?<>!gJ>PL)805nDz^S z{oY?)fOP`6%`PiOx~O{j6z~{@e-Px^MEms`$75w6YfjMFnN|B`3pfw}_@+b9FYiK%#BGkq35!71DHW_r$w9r@1QaaX_#04<@C6XEP%U05B?87r=XM zKa`*FUKe0*&))CnA8(6y0snph4;@4d(E$GKI2uU%;eFxqVnk!BeHIyj4!rs^d-t5Ma@^F_-Ct<#%!R6}E=g&VTGjF4^jE#pZw8ZE)11d3u+E2bd~y>I_>Z1 z3Ez`+MptX$U*At6Y5v6i)|Sxl+Guu6RgI>ly3agmV4|1U<$L_NP+wqh4$*j0d*5Ka z3YUPhUHf{2vI-;E?Z3o$gPo$YP|fD~>gdppK+-nfeNi^~oXc?kIU-|?ah2>Sl=tIy z&wA)34HhKuIM!H~-;UtT#pd-&C(ZJR1>#&UA-yjkXA>Evm}bnFX4WFA4Q!)(`JScb z_+%z)yM+Xog>L?SAuPG>)m9RdVqJO#@7#=a>(a}5_Xrzufw()(CO?P1k z)W#yXaKjWua%ETidHmi(>fILCP+@9OMS{-G*!{>z-^Tc4Q*qvEC9-a6Pa-UNPU`eW zY=qGd#v)k{=dKL-A7T+5vM~X?A;MVJmk9?w>boSK1F7N9RVaV+6|OexTW`Nq$|C$)Ja@U`yk zNj4pcOZ=dxHLEw=mK{7%+vX{^rQL)0q?q3uY*D#K3H_6VZT>>bb=G8V1z;1J+O#8g z*Mh{-HrwF+1>h%~gnmqigw@zNf}OWUI!HN8-NgJ_ z@ns0oNHSQF*pPor@;?Pfjd6>G*2@;tZ!FJ8wC7A+e&z7la({hbagNJH?XOGDI>evI zCG=j2(lgdS);QXo;${%fsO}pk&YO!4b0?ddSi$w-FJRV8+ zXV_=C^#PL!6Q+U)KWT@l8^ncvM1#bjFVy4HwUZ)b(DmRGi(oev^m*;ya_kL%3044C z%$-V42a0`eFy{pw5}a}4#oF;k#U-DeUA@8kt@kdE$IVWfpA*?(SMDe0x`4?bCdePd23H_eA192iv6G?h_kDWJC_?2E_8Gb>QOr7bu5HP6ZMVSXh0K*!$PZGY<&c+J01j2`H=0R=059UI0)Ei(4R)iOOR!=eJ(AnW3e2sN#T6Bpy`` z`qqO}`n7QuGjTi>MaRimEw)&*sAML{pCG}=7{e5v2_P*{`c1xcV)tKIe7#?(SuUQ` zb;lRxs-m`BaBPVhD|!;0pOGgsk!`p|FbU`|WC`3~-r!G_q=;~m!ppg1>cEj>I3KXJ z41`_!PCFZbu_Dh~U)lccMHpudpSItYRI+FS&;)DbwazKWo#upXFa%C;9uH-X(AiZ6 zZ|~BrflE$0`!0;Fl#j1Tua|C!NS(=y`+8r3L~ed_qP8I(ULt*x4eVw!UfU|8Kq1R_ z>s!l4@hnr}A4(U+CvBd*8XAFuYA_MvoTu>_bR`$%vunn>Mqe~U)pD;g5EK;N-pVKw zy_XRLG&6lo+#gjtzh>KY1fr<4xW`}WCjenH6EHOK(cZoJisDnIzLr)W>Es z4yeW{qqweufmN<;NnVlX^FOui`0L8}&__E@S!4K=k%MgQv7lNIcvJ7cdbR5pbc#4N`6+j|O_}h~lV3*P&7lWsnr& z0R2xKZpB7?wupjB9Ps1s)Vjff5Te+jH2$Rb6FC|IfgJlf*w(d}D-qSeCQi=cnSpi2 zQv6>6E2;l~9HV-NL9tK-v=IX5u97`mWj~FyGenPwI)}-%1llt^)DaBdHSG*zZqqIZ zR!xUBuM%px_aMq74U9}SxnPalwxa_V)9TN#+k*Ey%nMLT#m22ES0p>fd!n(^g1Ng9 zdo?>~d4%QUSI5%In}*Z$_AM8$958C`wtYs!>P4b1k^mPny&2TWDK}oB0d!Mn4q|$W zmDgF74UWWG|LCYFpFby@$lX=61denpfG&?dk5NCJ)IBSM^B(oT#mD);LR8~XHNIh4 z(U-$%-;!JR&oK5IJ8!Ed{cs)TGg|Ox(3ZH{Wm#eNgmK8fq`i*SJ`*?`*U>B&v3Dc2 zbcgYWU$RbSpX1dfAC;LiDVYX@N<*=183Q$as;Tnx$#UTsPh&f}Z&D42X@f9?iQomC zl&4%sEjZ-z#$ow;AIZJ{D)fiv=h1&Bk2vcsxgAY|a^2xFF@E>Nk0OWEl#Wf+Cts&G zt!Bc~JqU~~svLJ0l9Z4*{$!3?m%{`jL$0Aur$6<{q&TYt-KU2ovTmwDtpk{q72AJ)MC4tz1pNP8S2x zcZn^<(3`$`)pe>2O60KQDPEcg>WW?F{SQ%C+!|>Ky{<-TPveY`S&DDPs!y$)z@5RN z1Hzfb^5fS>ySpXgLj~KZq0g1Xo&{h@Idp`u*CcZlpNtXnaq&8Z!#risf6aVDPer+5 z{vpME%Q&Kc5`RY?%ais)-zlko2ji<&5b}2kc%j&5>>KSGq^L;Vh&dfEw_n%CQ!wy- z!C7B6P49BnnMGZ81ubpm-M|Z8bd-!6vX|4oa~J-Q!YK?eTn}(Nswej?!*(!d+8N&+ ztlz^=NMAxLVG`D+c$Fz|S<{OZ9R8tU-%M<*K{qET_7lWX3Xp{jGhY283sZ{RtjIrB zR;&wxG7C>0?g(%yOzckJnjurT&)D95;jvjyU5ZLA<(1PP=p+fx@OZ=DeSNq;+YSp56O$5_LYcbVQ}0=cYR65Rv6~h?mT`Inbjt! zYo$-@uu`e=3o|AYG9_f-jLAeil0oNY&wWRjOK(Udl_$$cJ$3Q9KRwB8$xE??IF7=L zDEB8!zqAQ@+Iempw|UmvOQej1dK0P#0^M{*5^PFg5(`mowX)&YKPsJ1N_%4&BS4ao zT9b`#{VtacfE3hOJ-ctd%szGUW0G z8v2#(o?Jh$NRAQ`6l$1kwjd*lMm9sZp!N>8mWa%GJRUw z>0|X-{v!3~y&R&GXUH$IC!-tDDRs=BLKpn2^U{BO?ZV1cVx?eVKl4>z%=uVZ%gxPI!QVTt;q-s;cW6H) z^HyWMn;#AX8`lha^y^$tcaTHMY2UqFezAa#3G5i;mqI|*^KSy(Dz5)cT&J5 zy#L{A0z4)=c<+~ZWz>g0AATd?JjcPoQA#beOLKi{?VT1G2?q!}a5an2L2wESP>+f@ zI{p#WF`-8MH=;V)AMJpsPIqb{7O!x>kL+>a?*i-RgT-P}_VmC2T&`OLE{(kW5gvgz zMfkG>9*DK94Z#_c$#BC#RM61gxRNPO%7m+m&C=`ge=F*S{;jBE2-)0Iqxg=j>?i-6W zH7oet2!Nt#ziq3&EWy>p@>ESU zDW*oAtT@M?U^~nOr{QAcYC5sK;o#=*&u=W8o_Mckjv&l!}|g18k0vijNfRk(FeB~iS4rP&Hm?$&5S zqfS)o#Q}D|Ix2;O+=F1}A)x05jwjP@ldblxv~~q_fgu1EYi%hybb~;Ym0Ft%y+(rt zkXH{rn|Sx<8w`Z0we@}!fDImNd7o>6u4^+i(C#mjz68UwVnXfG|1y~fx1H`V+*A)g zE({+kFL6qCkO+P->3dfKB1MUlEPXIJ&N9W+c=zP5&i$kb;(l#qh8OS&;^kRfAv{w+ zmuVcR5}Y0VgqLri7~~?#q)y3I?R7R)#2FaT7qaXOuX?KK5z)u;S3PJ>+<JU(W< zySf6Ns*i@yE=zGHt)2auiq?JNU;H9;&TfXjr*9~(!OHuye*$<`Mt!EVf*T_KoUY(| zM8_KMgm4=YvMED?(^($(@odi>Dk>IkZR5SO@npeQ&5vlm^l5K6a6Haxzbdgr3w=^2JT7b@b z1hl|PcvML63ZoXFGI9>6@_s%35WfQ44Kr%MuV=HkA^$m5<)`aEKlza3MR}g+e}E{g zw%a+4x`u|Uy)^49AbC$&BN8YiL||s=mE~N2xd85EU_9yOZ~`SjjbZ@LBJgo}j(lw8 zg8mNWn?%cm$;M+eh0P+!<1b7MepV!}cv|o=@03}05H|^^b zt&+x^XV8#=9poY89(4=gw!Xk8sqE$5HE28Nm3YSlS;yQlB6?-Pr+Kw#v6$ zBTaBF!=>_{s2I=aE*6hPD1zowz2HF2%_8+l`9;6^EXKbDcucQE)uXjGZBAKBTDzIG z21AIE*z7>ab_ZZD*<{RmggKtC+TR(9n@x1mo&*Lj85@%VfUK+mIU()h9=|pGp)%0h;)B zBlC`2WPinP1dq`7g(fd+lYYa6RO&ddQBt0H?RK)R{G11SzV?QSev=pcADv;z*;d{F zXNuu@Cp9N=R^t@Y`0$wXc}gjK#+EKx?VO0uvj?JGD)1)&M*tN&gS99`u5=O8%%*pB z9LFf+A#L%=PSQ}PYS&@bH~Ddm-&QLj)}!j0fWCu8n5?3c>+cx~DwRaJY8o}$Pwb9r zeZ#y5ivn{%$58ny7W(7T0?!-;8nw^YFeU2%T!%{N-HkGFPu^>86k%%Km}PTh=D(9c z;AV?n5kr#XB{Ue)I9WN;nUChlv>4<-HFCz`rfavAnh=kO$j4C;G*@n$ikVeshJt6A*hp*uy%5d5g7?IHf zcs)aZR_!ikg@Q7i4L~u*z79+={ zF(h6DL9erXEvQNwBkddbDgNbkksA23ly?vn2O2IR$pI#?zfM6d+Fiaqn?!HxU zs{;Il>NdD>mTC-aJ?TujwyBX#NNt7KFOOg!-c?Y|0JWfxY7aHae_EcRYLaFRHZ+-4 zN_D^ykXt-D9k!DZ$VXp@R~*d2#`kY$IfPlt{SXdp1IEyb>tsm93qjCRoyB$mpOrL( z^Ma6Ce(;nYs-dH`sn&{}nieP5*4ghc*BmL|?d>(CudxgJR0UcVsP<(l5DWwa7#J@7 zBzply^t6h-%~d;CJ9?nivL54`P9rlR=HbbE zNyGDFGxANbL3*(dLrjyFmIW!B%=ipDqVMJb+etM%E850WI0ybKw9p7A@a&VyWMttrU(Nn4OjEPCEWH+ef@|J}=Tw}0#A zbZDE4VNi!kddC#((IRH+5~O3=iJ-@JYoOJH1A!osHnusxtDd)iqnb}|`RKq^*9;Gg zi7wG7e@yD!=Ns6%3E``F@Q!L|rZFMbOv3#2%+)ikNE?JaKSefSQt9Av!(`14$VKv3`svVP- z3~K{dTlsfN4APEAl+73n`jI~kNLV(s(sz%|PesFSu9tOrdqn$)ej8DJ>aW3@l;w&W z_??$Dkpt?{;`OvfCC`Pavro)AnF9)OM{XcfSk$R-5!4%R7YH9XVG+K03L+g!a~N#Hy-cFpnMoY3L-Z=c<{LJdn@+i zt{M02jQ5`7p6m8E$!oDl&HRBmqCU=AECmRQ3x&tF_o7`Fl2B{7sPRY)OAWv5dYWrN zY?4B1j*w4|hsm{50TD&yRz1a^p_K&RdL|5T>94oyrQ?%F%AL5Dhw0HE zj|S=t5~D<{>kB;^p#}90={t=k0@o}7IcX|_x(J}y+h^(ya9}VmFKA@jF3>baK@}hXYu7PMAuxw_bFD429 zrO*x?I3}Lj44{iHsWWkZt_}1@V4vb`uImfcDiJ8Uz>znpBl}suX%g%ot$-v}6rB^H z9HV7Afb}!LGaDhV_1m!(ZKXJ;#uvEa|Ih*~eP-4XE;OT3kZvM?vChC6prMR3!y?an zO{2kskb&=1m|4n~v*#z6ByAd$6z$@X4&tE?+3{gGp# z%ARk;)=S;b;yJSz`mQn<^{r-?1R}h&NQ-SmU!SqWaZDe zRtQc}2pBo#U(*iwbYaD)(9&oB2Kp$DGJHC_a0HSbU-dilI9y>6_ze|>hHh`PeJbO# za=Ub&DYB2X(J$`h2SW+@yZA|1+* zL>c0duF`Il6c>MwO*8HCKJUb0zkZ@@xSyUJ#@UgXiLL4Nwk+qRHunoSAvf9?2Xc#$ z6<+Ehf7hbm1UE?cW?W;RtEFE}pCErSu2(=ZzD`lUJ8vH0aL1CK-MNhjQNF5Ezn^4!R*u^rb*U3SM?~v3mE1~D<4QfuZ7)!k>@{q3^1y)!lJ}i1?$? zY86P^!OZf!!vIR-eP9eD5MFG%?s;Erv)NrXr-sd9fex%x-+`?5x;iFIOiW~9X_*1VoibtIa}(%Ec%ySw>wb90lqTp7d* zV)49RVt`QRoXPYaS9ZTYNQB0QHbfLb;3Hn^BE|{e`x~N)#`f|k9Cfg$SMzR@W;FbD3bP_Xl_DF{@jV2#Rg^_b&>IDAx+IT9yrVGwt)VYTBewU`I?0&=Z!pBON^sgK zSX6A7Al4|0PfX%oHru7p#5Bp7pg6xL<-Dyn;#M>%HPl)DzHvr4fgh3PK!ZjNv$rHl-#d|S0^Drh@zyzDvM!<(A^HQq=;;o@?3DmZgI z=mwEu0^g;*n<7JTW?o-8*XbEq?~lv-K!q%%(2`s0F(NFJe4Wu0H?V?f-W1=`xkM6q zeTo`Aj=b+Eg?$Z1hf`R0h-g7T5;Pq!A>qUAsa&qw#rys!Gc`ReCN91OnCaRn<`Nt^ zGCovrfXD~HFhEXx4v^~%0!(9gkDa6T-x$F2?mcv<0mepr3`YUX@(Z2D@Q`<>J&qe7 zkgHa3I6Q({s|Z{_;YHeiM&ecNt9o+Z!omUtP;4CkcmHf4E8pQ{!Uss|nqnvNugu__ zE|4&888QGSn@;7qJG&|PB-+DexJojS(hDUfnjj{_^p9FJcZKkDIwdPK1 zj7L-Zyx*?z0G>mmk&zS{fyF8hEK_oF2pk!afB#DMN8!EKjwtae1e*pzWzfV=xXFf( z;J<6qhqlKJWf&84(+6&4ZhV!CyKe!-Fos^0&Baoaxckbz`1MB)pHhb3YsgA%py05c zJ=uazFEWmRNipOT)=-Dh};8twV-VY0D}W1`~m7+-|g*^^F| zMGNV!=cYUM+m#7V@C?FKd3K4~qR`F&$P95OF^Mxc?>rASSJK}945k&1fz11>&{TdKE_%$qxfx6`A?&xAu zYO;6JdLG06kIj;MM-qc6%8}&i5^vPvObF`y%Maf)GLs`rLl8U_$%jGJ6_4mD>sWv0 zXPl?nDBRY>g!k2V&{l9|rVFVZEFrT|DnZ0p~GgOYds4>3)2R`(nV3Ksk z!BjONJ`Pw_>7vaQ(SS_m&O->23zqbTDO*=epj#xi^@gk`cTg1G{>CK)TqajY>*i-( z9L}+hJds8B13Jew{hQ2C3VblrA zjHVUI(2HquwXw}5ZlOnqSMs{d7vy;gNj=)>r{&t084JZ?7!_^}UBlot#a<-F=2DOv zx`RHUPG|Fuv+#z!&c-YI(#S<%lRmoPMDCjnw)-YlwRW$8!;si9$)r__(^g1`0y7Y3 zr>3SvB_#BLw5*SuQeXm4xG*7*w@5@xYzxFJKxi1HiAhTv^#&s(OOgO?>OVj(dun8c zHCe!_)jp6@wKGD?Qr)L4^!_-`sB6?jQt1*yQL+hyHP^v zknWc5?vigGpZC3ge0SV&9gl-C7(VCxV(+!rT63;B2kUM3mwqJk-d<)uy0&an?m-@b zMaE7k@2}=ep#`92tqLiYITJw#b;C3hd+*3{Qi2=VN3sT2~!6#=u;Eznr9|>_5Vxj>7%l-0$aJ3fIcM!7KkJ=7I!4=m?OB zmtMhI#|&UIrXwbHB!V@kYGxy5ZMyd^;=X*506O@j;!();wH#-#4sNjE{bw-w49-08 z7T-P#QU>}fA;rZse=quYI7%Nu@B0EPJLAK(>9PRwHd_BDyKH3mA5m!^UD|$^HJ;xq zxI+)h18f9WSN2GWtS%2bl$U?v^Q zB3Lp7ghRYRRt8Laj?p^1F8gkq&f6|6HG}$@U05oGa6)RhTW#v6nu!cRQH+1?l+_27Gkg zI$WA2J@U#_u2DxjH14^!dVE?>z}IdzEzH5=#=M&;kz;Heiubk$$oDTNT!k~X0%wR+ zFq~eYONVd`AjV)Y_5Wzx7e@|H40Cgi7P#GhIT$A`AyKRU-*uY9G}bBsV+<&Dc7r8^ z%V|ddsvA-Y3W}MrAt?}l!D1r<2gbMk$E4%fF39rX;wbdW^xBpGIx)w-l3efPe!eL= z@{p%E{p0M%b$DYJoSLjHUhw_1WXtk=_^93t67%xYeU`)3@9!;v0mx= z5x!X{{c7JpYp*+a*}jxZBycm@XD&#%?%dOG?{&}R%W6t*c!JIg@5@vOmbFH@0sFme3H>blGw-JQAN#F~`B5)lg z_m-+nkt%>|o&8U@%cgyN~68fDlTH*vFg{69bQkg@pxB zh*Y4^x8~FYaz|v~O<{PxJ&JR1@JPt(cHDk8>s@*N!I$@(fnv!GgP+H}mC95)UC{O7 zqWSS4`u=FMjPLfigD)+F=s^=4005%1wH@+L;f)t2%pn&XynlCM)KORoN|m z$L^t}rG*I~0;`M_P?nnk(RNUo2Z0A{*L>1FFp3GTpal8fgJ{fw!4n5_buhQOXu-c< zT0UN#{t197Qhtz;K?e39dz!w?T|R%%y~%S{QoGz`)yD4Q$@atVq|KLu4UN1( z$5))ot1yUYyb2^Oall#ycnrM|a&zMVsTKfr6ciPIfgI~Mcv8YPHgvh-(VL%N5y30b z!WKWpe~Uk?d&Pl``vZ6{RG5fBI|}%LZM*Pzf$frTRThZkxnN>6)j}$`XFEAOo!4xP*j>+E$key_W5%vbPyLu2$cL!$Lz>K#Y7{?F74Hlz(?@ zq3-?nW(&05%6II6p%mZo&*%4*&Xh@E(VmVoi-qOMZdBIx69f(?`}y<>Ug9s_a@gho zCCRQ6Am?diWtF$M1umL_It~_`NA0*BS6^g#pCT}>uN%~9X~v>TA1P>7no8=tzvI^< z(rk&!y+DCNp{VHS5M5nDO8Lw@5JzA(K|u8Eg?2vJgsKtixUgVk-9OO(m7i<(_zb%9*C;`^vWOr(}@1t-*fElq6@zg((X?GlpWA5)w;2s)DQihevJD(U5G&t z65V$9xxsH{V9MUDR-&S)C>zLOBI7c>m*|JR9XE(Sy$}R^7=&7*F{V|Qr$Mlw5#|1P zd00Zw;W_DR-)MesGREFktCObf!=ciOC7Go|QiA7RdKF~Oolg!Ao1@$4?ou<|U2>en z#q)Q>QQbH8I~OU4nlH@yFPo@5jEODVvX&AAfN0G7Vz6==v170=6Jla48t6RRpw|NG zTd&=8d4K-p561I2(g+Lc9lmb%+rs|a{0R4#Krr>&T29JT*RQPl{WaW?z^obX)z@J} zc7Ae>q$fV@8X(Tv;DLxUjXM@m1%-RFh-J`ikZkk~6C=<6ZH zYJFqKd1f$d_9{&v>(9Vk%YyH`0i4^j?cas-x2OIGlmx4ALfs+0KHHLarZbT(DR-j< zzmkAPtYakczp!?YG@bcn$aVRU%e|X6q5SmodIouSqxIGhefqp|mb}w8*ZKZ}4G&iy zD?iBGxP*ck&aDbqyCQpkxRF01C|8<-K&4|Wk&Ov1_#lZ=@8k32D-Cd=JaX<|(gfV| zl969ezY}!b_uvoy;bJ*m(>dt)jyGs$^4?$|20XX!n17MQZJ_eUs~XEAJfuwB=PpJe zIgGq*51F=XI2aFNHl5OC72lhkb((d$c&K}&^mERl29PoN*%ag##Nc z^Y&gk)92O_c&Yf)i-S+b7x{1H^QR0CleiYg)(#64Y<{8z|DNGf>T`yOEFZaD6;k=( zR4f~A*!rMSf~}8E)epkHMA5_E{#!@mF&@$$l^YVZvEP;_S$RK&!>0ug1!EN(6WgGL?pK!;3HXBT)YYpN)Tf*L4-N?;s?=DtYExqWuW5A!$J*N>p6>Z za1ry8FOn{g0!C$g3|!~g5Tpq^Km=Uj7`0PH0%iNjxmE}E#(%l zF9a#d&2-yeQB_qeRaI4JU?8(mCp=JC{yA4?4U5e{!TQ5Dr7DjTBUpBz2DbG_&hRCV zfSkt%eJ{7&-kD>8h!%1J&*}2yCRKGokY8#%JVck4FAis8P=4XNX}~RzFVJuEHRqRy z|0NFWhIc1RG(m=Oad8217VH*1d9Wf0d8N)^%P9Hve`o6IHE2fu`wLWs3rkC30?G>? zk6M8FDjPn^%1SF1C6ELLI@S3gw}wef1Md}%X+<@)Zb2NZ)0N^$v6E?MEbNAB^3(`RW#%AwKGZGTumr>q|& z9aM~rTR`hqykZ*T-8*@2Z$6*f^QMqp@Z8A$J8ltSQ%K%mO@QOsph^Rm#RUEh-|>^H zMfZ2Gzd#FIa4j9w86!33@?fvRG^m+UWN=g(ruR$%n}JUM{^>ham63*z?qW+bX=sKm z+t}#s=V2Fof-G^&4H-W9XIdM}LoMEiJe@)OcmJ|tVI2l=)aRu$8C3SPqWSn3n(IQ0=ysxv|Bp6yZ6P;b-as+SyUCGMn?qf>=Ai9g@ocv*{kZ4l6fV;(s|(qluHof$JraWz&-)|9@buig zl!0F_dlh~8oDvp;qmS24;99S|W?he&crW+AfttAx?yvt3;3?UAjE0QI@*+{{NP1P~-!_H7OwE&F^*o(|{=^A)%Ae z?`FV2npY6NIHjad}Mgxg{3lb6TxKZ8#hKak64ru1HQN19a=<=bbVwG zsz?kb3R{7{#5UWkAf&H)!ju-O;3jZ5=~@T5)J)>JD=Eg3iFiH^Qr0h@YJ*%9iur@Lt*M1+%btbD|ay9!7AvK+Wwi!F#fH#TIDJr z!MhC3wtE{;UA^-@ej1L$xCwBcl~{42m1w_v(tjXiEr+tUwloCttnJ~zet3Wyt`YRO za0R@%fWEol+80!R(9cIJ81Dny<9~f;+s6Ce++D4>HF0gbIa@5tPY`nZ_w20{_6(fd zdPPl6D=&}y1Xftw)Gr|Lu$R#Dnh^F9GCn}I=bBh`dEE203nLUXsrbLU7pPZc>QJ_Q zuB_Z^YIV22rN%tpnNJ2iWT&-A&Kw1*#-02$->Jy{1Zw3ktmdzQHpf~o+Va%ASxpKM znjCNW=&n;vYg}d#DF%wbm2b&@>k250=VFzkY_x>KTSH?i$ZrhKw(wxqDC*A8kBrNqU(&Xi* zv{TCS_2!BK8=iz#wFn&yf}WWcj*M$_9TU1L!&YfHJ<5&Y9my1m4lS$o=CYP9f6+z{Sa)g)iHyVoTDD05)%mkgv|xl@{35DRL-k`(?A%HugT|szVi%$QO~oN7_AV zX84VBL}D#kcm0%J+7S7O_QBshg}DGQ6F81WjeeYXqG2tA+{@Wy2r7CR!739MqkZ=NW5z; z>R2qctzU+gIrl94$QQF4WlwOGdm46wx5LygLk0<#G31Twy6EormY;wX7CSG86#c0P>Ms9 zrk4nahE$Gqn5swUb$9mMzA~o zhFR@vm7S$Yr^a^a`d&A9K*UKfqt`jz3{$N)3#*)x1?JQDYOMKbvj1X-J;LWh^Q@^xJ#o(9!SoT(QM zDNL`~LRNjA2Ag2~E4Cf=Y?fPf?*YLT9Ssc))^13=o?re;kuGOmX{yWg>NNps+wEjU zCu~;TK-$tBnUJTpkNR-Q(tNe`f4KlHKYE9U-_++J8G(MF5$NmZ01Hl-3&tvFjy2a} zshPo>wwV}S>gU-GTi*|bqvo`Vtw*SYr_)0;vQ!WToALE;FLkoxt+jZ%Cp97bG}A{h zP0+eRA&o0fD7PvxvS>N$9#-TzpGnYGsh84I%uDo+G4$!8O&mlz$h_X47CM{OjYQf8AB@JN_pS=_-hb!pY z--r32VAO>pL%2ujblS-gSJxq|^P4|b3d>ME?bWX5^+}z?Z!%6`>uh;DW-@G5Bv64* zjiR&FD3LiZZii%P5 z;oIl~QR|YPDe4?>_k7`xu9{rlZpaq@qMS(5)QMrh*CaCQqB?%{vu1%xMfrEZB3*qH zrWD8$M=1b4BLmv9Amh)=&p!o5nykPf*g4DNr859;h`hFmjf{=Q5Dzdgndo}`sw$tgn~AASlk3QzZQ@A zyXrFM7s@1@(J;x|ln=sKGFyH*6(bgk%~l@gmhN7JLkIz7Q#X)$fwTX@=oK@3-Ijakkx{fJP?;Ie8#(U@mX_dmFBtA~Us5 zLKtMH_wpsZzi`HS+thu{m5g~qa1dQM${GcdX^9lG=tg{X4)US_`K1)?67{W_t4CEu z4axZSGixh4L7^r|`nR8)AOcuta@sq_EjP9Gbz(wS^q=yl_Mcyt3Hex4POid_=FY0i zEWwd-lbU|QanC?*(g~&b6$1XFX2=j`Oj!L=XggZ|vp433v)iRLLvphmv-DdZm4i~@ zw9?|2GWOwO)?O8{uxXQ#Q+6)S;-{~rO43b`ZLsy{|A561u7x4gALwCUmNBkB_}=~X zl)VsZrRMh<{BY&aLz_!@%Q6}6+m~uCKZ>dJRmJ{_&<74{QYGEJd0eQ%8q<0M;xDPP z#7Vw#GdIB<1Al&D{mU5Xv?0*3NdE=uX;1K2@%TKLfRwNas5oH7BiMd$+H;~S+oQRB z=OZ61*zf_R9S7{XB;e-kFhJkHWHIvo35+!cn%o~mMY}xPetLY%Rw{xy4lR41p@4K% zf2Prq6ub?yu{=r8lD{RH%6sqhgr19Rny-+ja-1|Oxqe-t z>ma9;JmVhtyuUVG`O81|>9JaDnS5?1!q-kF(&YAO7Y#ErBgcS`MX|jzHpTc|f4ZtB zUq2*3KM()1egY?cTYGS|;iRVN@H$GwHTC(n(~p=d_3S6j^S=}9POi_XRjC@(jZ2<8 zD7Cil@~)IiOuR@UVhC#tL(1!Mwq8G@@;1TaHt*!l1=l*;dU1?Hnp1s-o<;cpL$B92tO+XW z+^Mf$;n!>l)~BL5@D)j_bPS`f5{MS@TrJ|zx14^Vk(2W9dGb}7@+bi+l zeDlO3Bs$t0bY+^aSHpiLjUUc}^e%iDa2QMhb^!2LLpFSBIy&U2%JAMV%*L<^xT5v; zpK%w^hRM1HlQ6xYqD}$)nuptm=7aXhVN9b`Lr4Jf^sR|WAnv;l)#=I=CZI6U_v@b_JBDKi!1o98OqBqRunZ+heV zGz~~Wj2_F(_JFA5we60`hg!8&2~vVak>G!-F^VOGa~6PB+vYlut6Dc3RAvJ2XOAKZ(ATO_QqUxNI1N zq{>^!AAcpeb4B3_`~1`Rvbjgi+3OXq{3jCTz+=t8ZR|Q9R}@P^V}wxabQnwo*efvc zUMA3S%a=_H(yMq=Un=cCy(d~R4Mb?Jj)8IgEA1iG;XKKBE~j;P=_ER0vi056;G*K< zoWjBoKqm#JR5y!9zV4I0_GCk^C{>TkO`@VWbVJr6z>!#gUO}Sb+GDr%ykswIN zKD}wGc@ArGcCv>r+L?nY0w6_J*4D7z5U|u+QT^z6<-xao;RTu>vUu<`9(zE)Zj0^)4I@x=+viyc%GI0RPq=-j|?}I`dU(yx( zB5;ENE`YoOPA~uZ<|dr>5PMHLw=)$3!)Cx60hqttuO#O_jW%C?`?d!TAQ^20oOE#` z#cH(q$qMBbZeKPYzGOyOB+qK;$nN zwm24iJQHkw{CfwQk{mNm4Ag=T=NN&3ftc9XpacaRiXT>bI*BojbFe;oXh}LCedu{^ zVAb0%554<){0f+sq1i|#M|Qi0vExUc=PY9V1W@!BE=LkiPfuV`$qqge2^6gU{?CB# z#UqpL926$47hFp}Rg9ieb3RLlw@-X-orb3_U#D`y0 zRz}Xi5Cz(GQoM7z*}#v`xJm=4Em8t!*_0ZOi*Zb`syZm7BDPwIwJWr4ozvY7zZ5eG z8e6vzaidDFYM7GR;A4(r&0fP5)CcjzfQSdaOw5;D7hO>HU#!=(M{MCojlCa=S>fGUC#{@ykU9% zQu}nIED}nv)tNY?p>z*@tE+Mr>E8jrx8K#WEZ67nv_6`umYh~SJc`arAD>s~ zv1t!?HD_Zq5!)FdO>%Hyg@4s|W=BsZTOe98o7+4=7MUCy1)t4PnI*LA~Yik6~JGWFpdyE?lhgcV!Q# zc%zPak|L`->AIt*k$DR$WFjOzmL^tl2Mq$RsBMB8_M;kF=UdPlt{RRU&gip6k}Kic zA{GM5Wf?l`0vv5-W%7st{+#;W_Y)Z5qGhP`0WF~VOe$hXp_5OmL#5_-H-R2}@6+y~S=aA9-V@fY=8CuQ~g_GE>=r4g}s|53(1%7PZsQ%-XC&VvVQe^_k&_{`!?ab=_ zyHlWCIa<@a_R$CRI?Z)~e4Ny6lUP+FYs-OKM8mL=aDSiH=>G~^G$ZM#k%)dYc1Xya zx+~vE*3_{ci@e^ zbwPai=)l?4p3ZnzLZ!RM=ibV(mhZ6eo@M&+w^8bHcHPfVQ#tgx6~I8(BAL{R+tf%s zJS3o%dia>|>N#anvT_I>UkLcLh4QhuQ~#G+FPDhFPn)3^g^}&lNg<+WZNkksohwZ) z<6q(!h3I=EIl7JZj86^&k`g!%kO5tVYnbm$2B5U*l(0Yv8mB-L@NUk7*nZDDE?;9r zAQ1{73biXF*wUuXYuX8qaUe6xi4V?=QX`q?%gUpa(ncvzcs-tj{IuE4s#Ot< zd!h}?E+I*n_)`P^9yXR%B%?0(w@<6icKh!?#HNNj`Y~{qq)zUZb(^VYN1i5%La|*# zGIj}{?skXT#uJK5rrHN7X33>YOP4)&3B|V=?u`$-`t$qWNo9{&C_aG}D!g%6nK|r+bt!nF6F@kO zh%!GEbMQI(S=ARLgRwKP{6TzbRp-2nFRZd9kJ8D5EOvJuL7l=dl;*2L*eabHQt5_F z`V2=?D8Wv{$p~_ozPy+)*NPLbXMDVbq#SX4qy4^Etkg!!Sinu((rTg!8| zKG7A#kjoe}ns_uX<^+)~qi}%%M{|VkPMvl=7Gr4@l8*3)MVB~=JdD<=Psd1Q4d1^k z)KTLa&G%3sEUC`ssah2k_8&idol<3|Znl?am_h4<%)1L>3s-SdLQw)|xyZFoAZ^n|gv!B$1LyFpdw) zR(k*j*$>V#S%A#=)9=M8sH#NR1O-N@D9m2`{|#)SXQqX)$~-l}*v7ky$=HjIPML~*x$4$dzf-5|spMSzkec5nU7&b`GsTlfO zzk!DRjrE45yR0iY84B0MW!}{TnO&BlCI6JEA9u=dN|9cwa6j$ji--g67F*dDQ8z{O z!(^iGKIGBFB{bZBKKg7kX7yW+^)fl02nz0Y*6N$TL5C2Nv>WNZ3unxsN_LvvJZ|uu?iZdeyOnCt7Y@eCI4tTPnDmGngB;~uGD5MKOePX z^mf0_mmx)(Us{?O z{_3r~cn)raGKx%K#`M%UH#JkH)|Bt%?vd*bGJbO3J>{6hjVs7*W;GVdqA9QDT;O)j z+&elvAi}{I+WuEe3G@9P@$-U!IXDF{n!3#vTdfvAeMrEHMN9*C(O`Tg_|&z$ z#=!cC$-iC&jnDLptsm5#zb)~G4_tXFd9@u)gUn(uRON<9f{(thGY-r(nsjkumllpL zVSly56nPzQtZR6ZvHU;1AGv=0p`Nj?BAmZO4yCDki%W*CWt9YyKE&|{H;Yy5{ZH4# z``zN+X8c1rsl%XC? zGQShCF!`*7d~WIT|K9^T%d*hNxjhY*Y6Ex;@n5 z&TWJrZMpijz262Q%)3!B*Fbvz2I^8l!{-HG4 z+ZEWi)OaKfg^+!|g_(D1vCJdyaOx^Fa7mDJX8g1cNWd4dA*r`$l3l4GjN|*IE7}J3 zeynL<-o%gPmHLNzSs_7N{i>OMKv8qlFez!Et5wxM9gQvtvYTi>XuMt9m!pg!T4_+v z)!pZYj9XNgzg?TK64fh}PcC57qFCw!wp zTrF{!s9f~6CMr4KaVqEpv#?FnG)Uo+^VW77ZByl&1j9+KK<4GF$P|;Va(eoOW!*^I zEL~7(#wi#c3LP0yP=xUasnL@^0XnQSU{p!MoZWsUIi1X^6FZ@^L->_Q*>YXlk6oge zx{3mM=BUC5>vHxjTNK`m!w*tLj(jrm=bCVu3`Z+aYPjlRHIO&;T z#3a0Ky54pU3Q5l@kM-herR@4QtN%bv7m^$D5(flgHwF%bMTtll)MuBVXF^wDi*4*( z>?IFwy>Go0*O<6-Xbd^~DytxrHFWjBT>gy(#*YfZRE><0h_Ud}?!DYx4P5bJD32N= z@^}r@G2!qx?wZhaA@)RAwfO~vRcUJ+b8p(E5n_U@jOYp}zcz9HED-SuC20%99i4p8MD^qqa|~9J1I@33ew~`;tKlb18fOtYw#;mtR@U^V|~_s!5}`4 z*tDd7B~CV|3X>g&5o=0+#(H;ZyLsR+(+|$x*aFnd`$M6n!acSw0jRo!t{^ z)54H2?%$k+E>%3)c*W@X8$V##^Oq^MOnVH?53cltYaME_7-i_YBJsVRH8L}o2rJG+ zn2@$@bFS{Pr1`PfqLc#cQ+U~Uvqg!z5k71FGTVZ}lmfKf+4^xM-JJKr+Q?KeJg~6xO6=1CaWYm`@HoXu%b(VeAg>QLYL{qW6S7H+0)GwpA44a7)tS5d^ZCTxfvV^C7A<$MfH)hP#1mu{Yx|hXVVAfif01Y%yEL8YRU@HB zhUC1K?CM#qkeB*ADp`4LUuTV4!SAE@TG8lJ?AA2VhqSt<-SMcr`eQfULM^H$5i;0a zpWEOL{DJUK7#ODu0Y72&A$g}&9b%#sIe^*%=tUu`VYxe6PA?tEEpM7$2qut-g!&dQ z;p`#4k9XYt9Lva2WE6Qctfl)w4>IlCBX?u0)Soq;>yTs=7DoB_7O(i1)PCaBxRHMI z%(SLMx~*BOXYVh(jm*s1ck^r0I*O(pJo4jG^QmZ5n+49+p-*kbbj;7DCb^HrEV9|M zP9Gve?H2T6E|hcS2j4gJhH+1duB?tHOY;nX0dYK*N5if86qCa+%C-p^M@50|O=gv{ zt|-o~(3^R~Dn;eY&&6%2!gjP%n{-PN-`Zv0z;$;$l10jQ4ySX-r!GO2n4@GHOT zGp(CzE&1xEmaFr5=6Ny`iu$0*ILfM)`C1wN*>#jU2hi13BMRA67-!J)dL=l3UVIfj zXVl^vMyGdQ_UQqr$qkqr@~4-Ck+mtWqnHs%Flx)1ud%5(b{3e0dY*OW6)KI7mJW1Y zmoFX>-08JSd*;+`lrs=JnV{5hJ)Ce)S@9A*>-pXb`2?30Bvi#u{}0Dl{L+^ACF@f? zqCvcxvD=dronS}3r-8}`CIX877>ugJmZJiyzEUb!t=m=c+J0)RBfv>W8QWyhMDh_$iZCMrIzs9sf#q!yzecr2dDZS$OG}Hb<88e9s zn)H-oaX*P?BhBBSBZ#z6V(%xrRGp*B@KyAS7d8WLKG$A1mxu3JWo>b9H4l5f=5{{< z&OiN2qqa!mMqlA96kfK(>i7#OXC&u8#aE%k{WO?uw%$jBDdds-b~tJ(EoL#{48*?dYh4hhI+DV)O*}`lGIYEySY^g*)+vgX{4NT zW35gxLC4yy76dx*_O_^#QN|(H|H}n1kPSXar{maNKP$?;T6A3INtX{J_)Wuj*>q8O zc5Z$kA8|H_#Mmq(Ec`T$!`29JIIEIK9f=x&d8g;aq&gmt3l$)hnE{4rRT3HTD7nJ$ zi8B8KuP2=mM1AbkC)7tRjN^@3V)*{ov}O#uBJ(8U3?tEsXv)7#RAO8X{lWqr!d7;# zQ}N0BG1-eAqU8&mG@WRwNszvGopkDtA+{h=4aI$?i$1+D$g&kv#$;Alx59{;-pAeO z*)LAmsfy72v}n?umL9?)Ea|O{tNH4p-+f1troV^jM?ydM>;9!`gFzx3CH3+%#_*9gT{uyrootxhUN-XJmcQ;X$;UV&qrE-%5R$u0cT(|) zPEwYo&;3gAb|74fW~-6vi)BY)y|_-4ElYytw*)yAp>*U7ju6{MJhdh&hSONVu}^za z7E#K|-)Eo^YwowjVwwsYsiOxf+56_*JoH%eHg8q;4lp;pD!;vTxKz!SA4T;;joDhE zI*HFJ>2NmXD|4hd#S#7cp(yKI;j%QtGo@&~;VBFGtt7)jyy~ao=lli9d-4KfQLbe# zjlaJ#)hDEJH9E&6(JVL^s8rUm{#9B*!d#B0w2v9R$K@;{ezwso!u#!J;@90_<>2d0 zj9%s_sV)v}Nk^?Kws7!A^ScW*c(1EKQ6RjIAoT1vFto$va(EADhfKb0S+Jq8@VY#P z9$;obMMDFjh*#9m2>E3YQb&dmYS$wQfk(4OL&u?!ohZ8`eP<~`9&p>lQ|h>Joyo;( zIXv_w;KIX7SWqc4og!U~|Cc5T=9|#6QfF!SBQ|~{I2A?is=IHW(*OtxlOucMcm14m z(M7p*L!vV#Kc9jKOv=s8&3UW@;%tKfrBZTNZr{hd!b-r?J;SpF7Eg5U%C5wGT&BJVlb=8?s&t-@!0}#ZSbGBC3x@HaOLa%@zI#T7;LC zkz;av3%ZGb&79B%h~hvEQIjQ%T!9J`48_3M5&$G2ir!ie^fiECx-e7$jDvg<4uE5J z-jo4mphlqQpQHWW6UM^+P6vk6P#I`kCDLE?{hOlMu&}mXYrQ*M12SzZfTWomVHE0i1BgCh z%SYw_WLN;CNYFSYor?QTfEefxly_?E7I{Dys0YTF1ojVT)|%+(y4Zb8V6n{?g8W~tScO&DczY`ZS!4{vj#Hk1r`p%sYjC>W2NVk1LSbJVB9{AW>ueP8vF&~w za8PeKzS0565STnT0R;F&;HMh^rr?jkxKp=Q5>zDl{bf*9=PY?H?xU1)1OHFq)!;rD z)D!fYu)jSJsc(2V8up<>;O%Hun;^hsUT)8Ks*=V{@xUek^PN8dR}RLp@VRwqz1=O* z7>J7rp<>`m-PtTlPp`U*05C%zdIE~e4R+b?YDE2_{%#gi!mpI_d z2YX`5JD6mG?KA{3TSWLKiV19#k+<_bTQC0BPZ}z3DfptkkDz3X&689`8{QM3oZUHt ze*%5ZMQLg*Ay2MqADs!oZs+BE1-_|+i7@D7BR2j#$98sWlhx4XHIFR^Qhny10b3*` z=DtsI_8}G-DrnqwbSgdmqdYD-1Bs7&4@R7lS z@>ufLc0~!7{WAD%*uLP6{M-gDx&Mzz zIABIU%b31sfW>Zs%k5xJl#3uAl+0j&j$-%-&@#h}qQeL03NoJZ&eXJ)viD zJV&kKVi&WG`R?96ve|(%mOHyeIs%u?^Da`0pXPn@544SRsbXs%F3b%s&L9N)D&zUs zfRg&u-9bG>jPw~bHqjw0KHN{gjr!HT7p1-!+Gt(lZKz3K{e+g>kh(iZL$FiE7WlQb zGfZ1Is-hl$`HTmDN^MkxG}6|KK)bl;@>XMHxT9J1*X66Sj{4_Z<{uT3uM5kalw(kT zGTtPU8+Go_*1+^r+1c60sCCiJGoa8H{R0D4vo>I$v+WPC9*F?^Vqj8Te=v?*S_3RH zFjxiyfV@xpD65jli5-`A;DQ`6{+2!U$HHJjW;I~iRK|NfjvL`2m>A$f6-{76m>fbO zOUQiYb`4K;v7NhxM^(#%`P8rT?b`xK0skm&LiT{dsKVR#%{5U%f=Jk+PnKJm{?0x5 zF5|jRJsHchK}L;^&;W(EyFe>t?Be_V$xwsiZ0Yl6bPk+#I{x5K3GGuNCoOHc5CyqD zimf;&Cz+eyA4h}f2K)hg;%^x-o8@Q+6CCy*t@L1jvbgo9QazgnL#%6sw)ss>@gZB6 zbFW`n%#;Ys`As^Irp~-WW;l6n0;prx-U47yaC^DU55z*9pZBN9Z6<*B3+8CwmZ?eW z>gs}kt_l3gvra(r=LGaNodHqicubnH3&iwJ&u?j8L_)X2i>U|r{#qGO_O3>=JDB#a zwmmd`ST*ULYoeE)j<0PGXY7mCu@=RlDfl`iZrpN7(hS%D z+%DUwut|_<9p}gddDYeCSU@YMt!RdLdU6Zi%?^V&7gXCR1^Ss>f}PokHBSA@v_ zor7_R-q1yh8?h`Xe>#0aw?sT^#F2U9JxX>e&2GmN!`2K?e*zD z-8A=c*>sMX@GqVL^%quypHHa8t3+ffHR!xAXU*djy%E8$&tNV~1@iCUka2$kQUC!g zd~c=OtuU(%)AjIlh3UPMzc*BfaQKt(!Pq>|Yh6)iozySy>2%@)fx1f@maJ8IyaJv;VDwr6cTPQlw}1M#e606c_tV zjmsAbE2eYRZ2VHO@p2p;$m%|@BQ`rdJ-r^Z_w4|ul<~h&I7~+_0vHv6?{+(PVq&7w zVFiMY&U1ndPC0XtQcKtH=Ffrc?i%n_votCgfQY{RtUz^tb{~E6*S5W0iNYI3j7a85 zGRN#1FgW7ag{2-ct@rU@0*TNqyqQQ$amqU=lIRkt=Y0#+55#w?2} zqZDV?mnM6+0JB(_LUDVRR4WkmFXbdezj_NOA=KBX z=$MeJqaS~&Z@NjrL!rg zvNA>xuq~Rw@ovGEI!;ARsz*Wk*T!4Q6mxBOd;jy3p;0rwfd0a{Y;m+#*|u_Yxz$zr zdp+Ly2SLpVj0kaTQXhAhcRS+(ux89&GEd+3DFg5&)vU8>PGZC4nC}Qu&Ym6hOI;?L z{>Eh3Cf}g!ox2|%G_5ezw3AOVXxNzhVYre|uUU%s?}le@A8E~aaL2?j2a91Eo_iTm z9f8Fui~ar!8OOwHBIOLrhNvx*v)U!m6KvM}-!nc&f*^^3B~mh}Y@vWZ0F-4gS?R(0 zhH7YU!kGIM`hE{}y@P{TV!4V0V5a_@mP?1el-jd>kp_CK6=>C{ifLjgx^&79Avg^m zWA@4(oIrX&ZRw>A^)eN7LfQlG%PbXYY4y4HE$#)beLdoaM6v~TS$i9o{C4nmpuh*( zTFsX^)rtW3eXkOL82I?&NZ;Cc?SyFU1B0PdRoL#fa~T#zcDfF|$d8Ldv~oup;-hTz z+fdUSVYcvH?)+ZX6s_!c>J<2Md-Kfun#NeSY-J;FMiC!Ol4qQ`c9}D`QKw?XvIz^( z=lTwNIRywKLoF~9<#7W!WNB+HyP)=XdOHBEN|sFUIbWO} zt(>7sKtRkMqCq|EF03ck${wCTw9Qv-42Z3ls;O;f;g{cLMHF?l4sej2KsrG6S)VPk zL)$SdIZg%u?N>eA;4Oq6V~T77oD-qL6WHo)88P1t0M5))SDA2K3x>WEsQs~w9 z*Q#O7dR~h7e1;0CZ$*vwn1QR_i3QlYz7&dFJv4O2GLSSg%&wzaHzxh4l!D+Zk#2fY z9y<(Oqv6j|icAv3Ce&K7>Z>?8<2Ner!wR%SmZ(}r%&^0DH;vhdc(d?zNhkmYEHcn)yEA4cb8w6f<+G;wJQz*4tYg^#=)qq zJH_@L$Zj}DEjk~Y4ZRz+G?XK9=(Oa4*m2{ow&)s5u0q7#b;(LRemCI+ts58AE#w0m zJh2w1cA!@REq?t3O>seSpra$GG~E)OGZ^l=uY1)v$a5ly+m={RjUjrf70oznz>jLt zmp+{5oaaXM8moLRw28v+b{)*QWo{V}^z00=!)m<|%T}QZbjwr4 zWN<>#XR^8>ybSgC9TgyQKu`{oY|L5S z96&{c&fX0c74uDq@D!B}DHepeN-5+yLo8=64NY#4)>$fFcE4-*W`}^{2;;4|+>d>< zE<75;vM?(YOe7z{l0v)4U2YbJr@X6NOi$)E*V3h_jTgpYmPJY zr(T63hPoo^XHLdjpvvVdW5nDg?iv*&Ne#3&O*tk+&2daoEX=Yw6HsaY<>Gh=Ep;Bpq0@HR7d1;6QCl~qKMx>9rdY5 zxd05=4FF{ccepo11lHV(LH+$wMBc~3h)76nTaL{qG4FZ5Gppo}W$!%|cTRiv<&&ZD zx}G&x1jY5!zq*EOnxhqU@fQ~HB~cYDasiGWto18q&q&X4#W!Q7<;BK%{|{qt8I@HR zwf_>5QUVG{cPQN@-JQ}%mvlGM-QA6(gfxP5my~pONjIEzKks|SIOl)9oM#L^JoixC zY}Q_T&1+uscf~CljM=Jm zK*7}KO3z80H}+G;O&267%19VtQZ-G*$l{~2OHQaXiKDZvQ^-DT5YVBe|5GDGx{A&7 zu88Ny3YebpIGbszE?!i8r?xr9uddDOzJYUx)UY2jPR*!5M!Wah(t%9IZ>=38-E>Wn z|64nclLHi7UmOpzCAoLi;w~lE!fzPA2GdwL3koFjW3CzFCL&)!F&B@^i zv<#abZBcu1S13k~5F0lwBL1Cndfkg`EYLeTqL}&JAZ00K!7ZEHN%JlQn5bD}*n7hk{*8;W z@2t-j{a@T*v}QGV^JqDz#Pi(&J`JJIJW{YqQ4B&EfPMzb(!_6f- zBV@dy<|AI%DXQA<;fY?~yEvZn{uRPx2wWYu< z5%>Hpwy!O*fQ)4cy(Rs#n;tu{>5QIJxudK5%f*}ROd`&zB>9j1 z!5a;`$<42f>0Vcn8*N=pDXRI=$p@9$Vw{FC7SK!T%25ZOq&4|0d`PIEV&Ce%c}AMc zI5@L;J?XykczwV(=oPlp_#@p!baJaRJv-{6r-3&^;n?*3!I#88BdOg)I*Vohj@S*Q z1fB#?>$T`16XxJ-Ct5NEv4>{45P}LF4zjCp1w+DW!5(G@Xg}xRG;Y6Nl+vfA+_(<- zMW(>z{0O2*i~upjEKeLReVr$Mp>@T^#u2W}XKnR;C||>HgsuMJnV5((S576_v`mCW zE$l8f<(0FLWSybh`IjtBu}eicVeKpp2W!<6{=VGM1ad2@LfZ7YrO(8<^>rSbT$X$} zmhBf4D^POuzoB#~a6GX@IXdyGt&av?9dWI;0wr@odu5z+MO_4G37MIdJ&oy)zuV~$2L{v9MXCqF9j#P#xFly}S(7QR0*x)5U}0_# z@;5KqafmIQegU~KdQUP%HpUr~t7J5y9X&te)FJirl-s@g1#dc|QoAK*hc~V!!Nj|? zsgf*#j_$j{uFMbJ{M}MaQ<3*59TM$Z@iH19_@%kIc?m!mA+G-sI-oBwL)^WhiNF~w zEhFO&hL8t`hQjMJZMr+2uNeEH@Fk?Bkw4{}9;q$ube1{95jrKfc2!0@WDJ{eNsf*R zsQ~0MQ&?h*n)tqaJ8*NA^Xb=;oi+4)J`K%O6Rq!k+ z8Y~-QG6Hi%#k#U3nusL5vDihTVBMi7_MxQ#DOF;?&VwKkZ*kDI{YvATTvPF0Y0iSA zraDotqn9jhX#pGB2Evv~Iv)SGIzpcJSepNbu$oA`ubdumJ_+w&>h_Ppbz{M*J3CI= zF%xBh#9k21Q+V&E(AVzK>Y*8-?AuKRJ>{s{+#&XY#Zuw<@knPax`ugl!-?3ieX3GRtM;?i7n{Vc>JMHMyHhb$1C<^T79cl7ju&4~$!Wv6oCg?O# zmqX3$Z;zgu6T$03>C6iGc-}GaONrg#nx-gomjpcCX)oHw6A_M33o`$a{d44SIo#pv z5(Qoq4!~y(5zv|)sX@TX!-})CWTpZGrf{f6L~Lv*B{*BMgIV28fc!ND^nfM1Zq%CO zX={x}8$yuTx(jA^03N$nD;g-8VJ$O0TjWvSjTOPq$6iISie*N7JP%iLxb)}eY^1$6 z+DcM!U9$Q=kh^N~czXuXz#vop0HJaJaR#`MZQ_J!DSRf_*w}JsESnF?%D-1tB}Z;d zeK}cbmQ7;`O40X$$er?7ct;=l8D|L+2rO@^=`7H%2FU!u~| z(iPiI_}T6|c#tnJ7(N8rOaGOC`59-O2*h7FGMbMY7VUVlfTl${$q;V<{{3|jKLT-p z02_NUKpi+tisAHvEpH8c%y&LO4l*mMA?S>j{bCIn0O#2&MkE~=9^M2SsPWaojE>LU zHl+7qPXM0V9(4ao?Z)`*?6Kp<)iHpepeVS-)&%zsP{1g_m6xd4}{Qi%dYDo~_ay2Hy37v9V~NZ=TACGe1ZE zw+5@fbix1}nd59UWHqz4TXH{qHAGS-(hfe(|Yd*r=}r*Dv~sqX6w9ywU!>vuvtCUvA^3b->z! z7s@^lO1INq@b>1sOpi$AP$x&PpH2F%_NlElA%`>CHUe~)+c~CGy6W4rwiCzrtWPme zf?R%%${fL$s>)X`ZKQq}E6v=ve^7CQ_n9IYsWF}#=pUB6s3J#&N=8jPXR*ASfhv+p zZgR!rB#y5p2ijtzL*gYfc~kG17)z;90xfsq5`gYH;wPWc?cXT>-S&SJPxE}Qz+j}h zV_95VD(&*_N5ie3zbD@D!q>wGFoz&HUNECni}789iqH=@_aj%IuN%P(9hjvR0MBLM zD-yguOdO^d{%c%FS{E1*+5*SMFt9g6^!?_;s#XXa0}$QF00eC|o~OvC{cTJO%Ic0~ znU%DZu2F9@R+FfBQ#;(>(jqEh_@+8&-KcS7Y@5G zQo|KhQvba}Xt1W@bN=L|jVx7Zzm6JY!AH~G)+2MZW7$@RX+L)3gt0&x&_IG3_HHP- z^}9}-oLySPeFN0kJkd1er?T=TY>HR^$a&39<%MC^@s?hpO1_cojSfDmh13y0)gm(mrf4|lr+KE74E5EgGNVpv0RX>Bf z&HW7|U!_R{uJGk#lPH_TL1%K_VX{@0rg`Ba)KWrH4-ocSc4{eIZzhv~EiKjmX~@$Gvrx@WyQ@M%GFQIySe&E{e!c5tD0oYb`v1 z{PoP#Qt=5_HWvfZ^4fsX@TFqxUrZ7Lw2A7^a`Hc4%GSl%K4d67IfMB@QgZP~2ytd> zYir`qA2RP&>NhH&$FkwS0l_%{7~Gog^RDlAFct)sl#rAZ63`VPz+T|;uh!1W5 zo?bhG#qjbrb};(Pbttyi_rWowXE3(jQ9HSc+9C)?Kc2XGHk?6KUZ^sr&*SYq8Qxde zjfHZ}V28wn1G1~LltsQcg;jZhZ`-&sUVAsQO7%6EW>wMWntDf2Aqs9kMOuBpO%*Pb-p$zi`Ugfq(I}FX)M92hiwn*!n;DlS%34dw$vySxyT-8M3IjR zs=GxNe(-8$;$^}yRihD(GPqgl(Zc0<`|Q-ta|e^uPCByOk|N)W!|$0y4TG(@8nX=b zLKO+e%*qk3{urho{pJ>v^44Wi-qqIgw-#(dYqf`YOB`ZuBSprp2_N{~V^qRXJ9SpY zidHxi)5HPlrC|U>2ddptifC@|0Vl#=0JtqGD#FIW>DP+xL5IAP?1icUgc7`_d>{fZ z=tQn-4DX+hq_KvSWP60)UF^DAjYoQza?jGLU*5ZIpa&QR!j?Qz{Qp)%_ba&nzgj46 zkB?6O@t#q7}D2bQx>tm8`-xZA=>_Hc*IGkBFSr?O+UEq81#sD*=Tf>>g$8NNvt2B!)DKHJ#XfH#v9 zw{cG+do{`D{x&yrv9O|^kKi=GoacJF0%qO69UXo3xhx=-$~FqS2nL6Ny#`2EwfESi z&gEDOK(TPFxOLx^Oof3tIY2oW$>59uhXgiAe~N-aJ`5Cm%7y3XW z8QV%~HxuAJF76M1K!jp&d-_43J1c9~T)J`M=(5QI-nmQg*jEAG+{1|3{0 z?%m`Dj~!Hw>NRgfJ`)m8sp_fzZr%^oQ4_Ic(v*b6WEZ7RZxhOE`=#mz#;>&&rAVg@kF zxdVdO2*JeMI+!_9)6VZ+W%4ff+Gf+O zG%F79@Xk0SZIfexT7*?R#O+$d&kJzomb*&rZ%IOT-Ep3iQ)vo(8sd=Z--lb_nkTv}Ui0qD(x{ z^gwM4_y1TqpxrL<6JDn)z4Yz9EYNdPMb~%w1{{f-gPcRP%vt5S*y;thP^Tj{mW6L~ zR9|}!5|N^vzNrcW()a|B#w#ZjoWl4+f*@+-_Lk+OhfYCdeshf`qP^_h|4QE7lhkyw z!raX*Paf#1;r>F%q%xD?ZI~SxA&>b^k$UE=SHc3KjOWr``OR7F^$G>wy}D?AT4?3T zO+~cz`b^TLi_P054S41YZkg-{wd81R(OZS`tte@aep2F-{_s=eQkb`gf?&mzRBM@x zah{A0{WU3?D)J%5FPaMLx0Ts^c>^@>P%Br}rv4xDw>ar_MUD7XDsvBDJ~ zGBas1{#04czq1oDjtmy>K zQS)Zim9RG=i=L@Q4B!{xEQ|;%EiXNLS+0D2TUMbw=~gJ<3@4nW^pPh$PJr#x^R3a@ zU!#~XusN!N;!x}n4629L7pj+mJxAeI95;u|Lj`|LGaa;*I&l>UyGM49WvWkHC1tang3h$_7gFGz(HJHM}sdX=O^RQljx&d z!&o5Syb9FX!#RE<%tpi>sm<>$>~1`g@gay(>|Gi;wM9q$5Lseck>U9IfX;V<63qMF zC}Gk5f@%g9qS4`~tg)=I-6M;UN@E!(6zw3-NaZcHpA7;zXt!ePxdX)U!iejhvhmxm{R=K;%)U0ltH%2{i-LY6>OESW0tDg2e#$)jd~x^* z86jmEKPEZ0pNq2yw~fIQeD4TzzQHxUgEc_^31=V0i8bAFW+LXgF|4XV_nzsrykC2> zx3xFgz=dyiu8eliH?oQF6O1(fy*YD`dWd0M&X)}M4b{D$wF9W`m{LLr>IqnyFt2Wc zCfESU4(W0xF9DW@DSBE-@%7O^mBw)yyPx0SpsYtpUjK2cb)C#3;_m_1MS!ZXmq$`V zDTo_e&$+`JFi@X9kUD&o`e!>ar^1?~sS?^f{jCXsAAxQQrc9QA1FL+L>6b!wcXaMb z`aHB<`KLJKj+>=F`EjrVk_V*Z)0kvUjlb?*l}&!pBg|b3!#L4;yQ7I?qaMs!BoRZz zMS$i5NP%^rpAF=0BFGoy^aA{872AaUpkvh!3;6ZBjKh+xGLDxXKkyR={S_icKe zZeTA@S97#&nuCCqjMeMb4#J`bbjE#Lx|AlxSi?xl7Hlwg{&-|2U^G*vw!A_EFG%$; z>le3Q?Os;8q9X_FI?sd*ACcF%HaQ-3jW~s5^5zs~K9Yx1q0e4^%{(1eL{-H6er5lt zSIhM6J!9t>M=D`y$Fhfl7uOr_$v2}jw-EK6;lXB=XTuI*j?v=O(9>GirESLuvGEmB z$=>hH!h^NA2vT8#*ehit0u{kCY2p*+(ZnC6ym?O4Lz~6}`HdOsf2)s2`}XZOwf1}R zd9ItUA1GBc?Zh4wkN-zQ*Oapy2s!OJvo7mzrJrujo+2A*v=xK5KZ_$)Sa@~~6F3(k zSUo-*+!?#c(zYjzl;pjT;--ozq{DHpw>g+Gl|6T9C5P5=-%bLd?boNPz3U>@;cOc3eN#1b~zfX$>$&BkMEkB4nd%1o@K=3qI8q)9s8_1R+QjL;ZZCB5NAmT=LNs zm2t&(TX_23ezWoiNxjh4m3}azB;4&+E0RzDIZ}Q<5c1N=+L^^pAPIaxut5B^P5Bo- z@UR-6T5-}q*gtwfITw$n|Fa5lbGsuncR|)G;G&Kx`W|_H2K{x4&YVnk`6FQqp4zIZ zmicSUzi)--c@ONP$PJCr|Eul9Q4flF80BEuzRNQ~Wr&OpB&gB&{bS(FCaioz2%@r< zuO_3sfSvh94Eb^{7tNz|0soF&wGQf`jAYdqBI z%d{e*{QS(FBbEdCc)rPgbCTt=zBfBW`~g!jy@yvszn(#C!aqn8Wfcw7RE3JjVGIyV z5FW3~M|@5j3RYIuS%)!b>5mb}r8%a;jbubxCVOT{1yI7NAE#25n?+9cND8u^<1xqd8PTx@azE``g1dNqS_8fs5hN_V9G z$4rZopMCz^%cwmC1lp0h&{b&SlFLHc=V|{h*Uj1SMoGGsxR4x2GETkfn7tCyRIrkD zOcTMPF-@H`ZPs@`E<7Gmh!%<<2GjxV3xmPX|xIDl`01>`j5rQ(;K0+40D*EM*63EbXL% z!+LfFj4I(C_peK`^Ej6ZD|*~1ewv2^#Zs&S1AFB=7K>SB-emyK+G=~=?&Q0a^%#DvTWOpgGpwKrc!4b*5h zF)=YO;9%Qr#KK(8&_Ljpkpw*9P~Zeq0;GlXve|o3@z#+yltB3Hy z!+iV`jxe}xgoydhO2ZB}-3l!>{YSB{{4H-3;+%9_w_i?Qo)sQ}VEI1n#ajGz#R^Gz_tE^xQPLO?F^XV9M^tBFD#H{pn^B6%X&^a zo&9Vq$|f-sq@4qycL^ghwCs^Vga~`UsOeXQ#9g=nO4xk00jyT#b!H>y3QKfhJJOcG zGlu@JD;CzBQ~#zH;g+EI(wA-%!TqU@5_{Lz!^5959r;1019Le{k){V?76smXSa_5* z2<8=RF#Ockzkmf9;>QIivz(mW=R`eDs+!XPamdXQQ%D3O89yLqW#Z2}AS>`c6dYJJ z&+@WoYn=g*uK0M^tV-U8s!mKoP`c_8kiLSzr%Ox2K!|yuFId$CTy}m60{oH}zRw~w z(<5d%-hF`XBQGQKTHoi6QXhn+0~_nv%;%SF096MIp7Z#z4*7rnM zEYD@~3{3Y9KsEODU5DH|-N?5e)T^ELl_8S@5NIry{f4IPCV;CL2}v=74Y{!N3=3Oo zE-ooatP@2$Wc9!s0NnVVE~mJ%L!#Cdph12Pu11GMh|#Yw>y zHF+>JCdD3fWQjZAhsQ_Xf1KowH&}wZ1%UJ0U4fTDhzlW`|HW{;V`Vo0{rVg_+y3ZNsy3HBq zwqxp{etAZZ${{d*dG>YuUKF(Qt7;d(sn+`N6ZWTesqU8&g@K&Mx$4CVo+;;6>lPh` zV)-m-6O(QCGi>7Z{0Ihc_(!&WSxbv#M=5j16yX(_y2uyu%6Y*A@=l7L2U5;>e`f%K zf*vFdBR}IDGC2Td-_C*7lm*1CRLEChVWGzGe~R|JS&j+lDS>4%H9IQ~lzt#09)I$E zd{3Ym5>wSl>^+k7S$uA-kVwaMIi~qqi<{p=2U0`I8E&WzY)`V^4(+}7a(6;)Kf<0} z`;l+;F9m$2=!A+!nBRQo2(pqK(TE-+VG;hL9u?Ivx4;uy0&Ng$cI^|jegLI>v@vdu z8O%4R#YS7R{^;YQr89=pUvs}D9zGSXj&j;N4xwKDD#hWX{ZXQDenqkRHv!-C!|h~D z%L>upkB;YH^c(h?n}DaI`3L3~WS@}}e&UPqW#a0?oR@spABSK!QN2fRN`i*9*#zS= zMgYeI=@zQ0t2^vwxn_U<)$bX3?A2h76hm=Za(}10#H6O6KelAlW;Ms4Ua8d!b_q!- zsdcbMw!l~93aTwQ70|fmW=65?Ig5rp z-ly>ST5h)Tg>c)F^Le|kprwqeXajFvQ1ijlQa)>HW=4ISuM&0sz!F)x-E2{UOCzL2 zFO2pAn=>%zK!a&C+SBzzPY_Z_!o)aTkz3*UM(JY54nq^<~#pllfW`NQeO>=Lix^3T!4lTJIo`dhiLwHgXB0z{=q^1=5=^D9Q`G+xi$0* zfU*|wy!ILa)(GZS*V9dqbOo@P&tj)5lk80|jaJptGjJS;uCRqMRgMFY%?#wv*v>pf z0fmo#W&Zx9Y2)0D4ORt@izMjG9p2{n1#t-9GrO&pp|2O`1#vryUuorULS$=u>l^ah zPM?+K=8R+BRkP89ZP|?b7p_|iR@bHHj4$O#u2Z*V}VK7Xo&V zaMl*7lX*p`QwF^IpDIl1hq~Cd%sI6NIs&WV7N0c_<)D1}DSEBQb zkDDBOPp~xJdU^r^!*4X}iZlC((f{@0RH6_)b}ZRTytlA$&7Na#;w8oFGfRVv6@loz zi{1B(zU~*cg{$15qzj9wEGv==@%mGn>BN2RMG}!a54ET8f-aS4F^8HP8w`CnH(4VY zRwdWA+RYDDym;w()a2d2!P@g4yTl%;o&=*!p!lUcuF~JA;CX)52BdP2{6t8TN-G9* zB0xJI*l^N4Pntu(0%f+G{vQ1r(73eHEta&!?iMiax%=O%g;D5XQaLdRib=gakF0fx z+5odZcf|X#2rzrut_44sjY<*YrnSSgCVS!>&%1bs2XoZrVFmq(9t;r(Z{wgRWa~u2 zP|a*8XSX&_gBp_(1PU_0=G*rvxOyRp-L@bXwRNqd9yLZ0fjZo$8qP(3ApZ&O zKVbMay;Z$Sd^>1A=Ac4+ZY1xpL7;K9%#7>sn1L1|((nC#_+HaqLZPNAr?RtUJT#bO z^ueF)s%~A&Sa?!7#xWfAGgeQdf7jM;ZrzAXsxnheyJI`{%?-Z9Kgctcw}ARL^27JZ>OT<#oG&3!00su6ki1GTgYpPKdY^XRM^|C`0tc(_3Q182xA3js>E8Iw z^T(&X@flyA40_*{p-X+u`PEz7+FGA*X3tlE&?iB~>zUmH(Of{7EZo#`)~SMTHEZ8)O1y`&D8-&A2#AUSkkP2HnY}pIq8r$1^OdI{X zleqpqO_b)eL4Su+Q6F4u=+-{>$y zKiot0jS0hUi4(Bu;F_t$s>HcQu4DIb8$s9hKdPDyewl+oAt!WWt(YFY&h=SQIK#k` zD|b-*@mX{sTRpsOK<0`B?+AD{wts8u%TC2RV488P5itbZl-r${^RciD{Ny--z5JWJ zrNn=QyLs>h?mC}omVO3z8$-)VoO3w9N2%%Q@GV_tNl|&?Eheu|0q+LAuP=14+9&zK z(!Q`wZXBO9wBaq~wur=4b_UmE6#}M>DtbYw&=xhD^nq>;DG{~b(N-@~Z96w(dpT@DR7$FVo<)}!Dj_a!K#-(BPsvEOQVT*f+{{@MpQ zIm}jeSBs#7o&;iYt9@Uf!6K4&x%P%6=$JX9p2$lEpW!KMY7Q>2m)mXLM`?fegf8+8T$o_(3q5}7L+-$QJ z6X=OkmtGvnO%8PZuWDjwNZ5vg+w4RxErT@xBJ27-S1dIP#EDh4s-SD{y=dU zdTZ~`jNVisO=;s0 z24p)?27gZfgBf{!>7~XO_pO9a{x#fNXgI6F!ONZ`9>dUmlCo9eZmS*&3$oLP<5_y# z#oddI(SLUvbvG-vOj~i9B-FV+UDaPVv^HmlTk$_A`X3LUedmD3s2fg6{lJNTJ}@(I zc2V{sQS$@Ftj_6N-s1KIf!ik_vT@Oa)=o#+g3q<#om?StUqog~sc5h|b>}I!!Up*x z;@H35akGzQyT*#HCUusy?T+12M0jI6xm#ANjzSEYy_P>W+wP!pt1v0FhLDHew=e(J zomGp@oA8TJcuM@XBF*QydWi`GKb_MPJHH8wi4*;U_!R!~ihRxBEwoYntJ~X+hfHKM z{3Z?=UH{rV<|fV4nvdhxl=p5_2fr+*iSOU=`||O+^pikuWg~C0+p%(wJ<&<=x%)4X zzyG-_@^8h2ug4?+8mAKa_)Lc)n{M-oK2g+KZN=jg3FjD23PrBGf@brpUMnl9O!L>l zg#T>xhV-`HRq;L>8&Ux2lVPWxg^_fvw`BQgycNiF) z!^En~K3NunUq!XGb#42#tohUYJtgI?q})^ROnJ(CR<187-@Y*})uGtXiW+(0ghxc& zIW22}ydFvFa;0B-@KZGWQDw> ze$NLAxvTdQyVdMOsR}g=42&Bn_H0|_&*tmQK-i7}*m!{z2Ll&(03_uMe^)9PUu}QhT=>dOJPOdEBKPNGd z+cv)yT^rSg5F=g-GIM8-d_J|C%Xq18de*^&Tjy2A^}X==i<2;THJQJXC4X-yu<`OM zbA(cTuHA+=JJn+F)rcJROC|E)%)DW@Xm!EZsrO&YvUsKAinAEpw?@7l^*QIt z14Ws(;VCKd^oQ{y%G(d(w2~vCq({M6@0oO-{vvO8@mCPK8%d>a{$}L#6=-w_ljIy@ z=Gc0}D=d~){`#|-=&H?<%_qr%@kZ_bdM{nB^^$THm#S;82QsXTIjB?ZxFK75ez56Ce*+ZfmSpWmV< z_$|IRUic~K#KW)MaAex)Z*Dr84$hN|7egQ9hS!pJo;}OAy}#$?`c0H3>;vVX*Np9} zlt)T{=PZknbgX%JMp#sRBA$vrSCbjNcKk}w?TG8;(R>2<)3h`+x840xz={FFXFy^W z$L-bmxdV_2-0t^FY8o3M;#74t6WxDdp>hcshESzNfwfa6xUn0pOay~nP?(_|@uz?AL?W3x#@s^6Ttj0XOo- zzXG4gl4dTSmeVdms4nbGnwm<=>TAnEOj4Sf?<(=M@kV5R3PJzMdxx0!wv4OgRE;M? zPZyGln!Z^-`Lg~t?1nn5rKmH_YHJ>Gj}~uH9^z zlz{c4YR3(1KBuLvZ|nT>tVzTYv_p(}WFt=5;Kz0rl?R@8EQtw5l7otMe3H^TkAB+y zm*!+O+CTrc+~<3EaB zOhrz;_>9geD|iWpck8_0&ORx=S;g8*HY<5FjyQKVU}OgFNr-)c=Xb2wPg}%{Vf?#0 znas4OJjS%Te5FHtd`>?W7S@CQV<#$iXO>L-p}|Ey;txQg^c=2%LkXfiqG^iEi?hcj zl7)Drfw>mqmj#ICEeCGKwtp}{%~T7xVWa_Xnd#I{f#+NL49@Y*wa$7#ZKg=yFf}wH zH|dKcK_k)`-Wk2PJ?pBMwy+Z5k-P&_7?UHE_)v&Z<+i%1A5}A zeTzB+wkW)CzqPv&>sAt*4q(8klziuMK2R-)Sp+t==jUgr&oAh9J0p0IJ~^Mw^e}N-H$}>UQ%}aN1wvZe}qaDqv2PR@_2N^FtNwhizlhSnF0* z@&)t+UNm^JQz;$(=(BwqbFFzNp)h}J%h|fvBFOy#zJDCn4sToH_s}rcwe8%1g0lbD z!0^;j&%YPr`2DJX7T*kZsL`~wovG7lc7E;hrjX16{j&7vo2AogTRW5?sqA739$3M# zqo}jLAoRn;?=^!BLld}7Qlcz%4|4)3h41tG5!QB#$gD(BrgS^G$>Ny2*`$j&SIC7W z>y+2X;06cGlUvJ>u9b6f-$Y%{GxaTSTwfrBNwA%fv!)T1imwhdeIs<){fxmkhAyUv zTzjWPga4>qwZ2=xCmH1B%7pv^r7GnT_-jXUXUT3l88xQh-xo(0mmT262RW1L+uLGb z`;wQJhvZWOS=_xvDEXKK89> zyd~u@=SW*4gCm%oU%WY-`Z)tjpqla=`!|XXQ*Xv}$O=~4w?9E* z!vWG_dUp0to(KYj{|pA@Ap-v`$Z$Ekx#_rHeQJ{bNup!#9JR)oZYH-WP?h<%z>8Kp zRc1t2wjL+2HBY_#?s7`O-fpkI&HVy!GQ!%Pu0<&@<2r95($lqe#udQss*uKM%McgW zXlf@z#p9m=Nkq>R;TsrSQ8184uCY~kBX{OqY_08RxSA~tKH;8!z~ku&07AR&lLyEV z%gf6Hmk9I4#%3&EECL`AHvwlvsALK<2@iA&QI(H~{&vJQ)z!J*_g+av8!Kw03V%Jq zp2S`?TWDaX=5V143ZexB#m84&-z9WwI&xNT>Ue{>QOt=6PQ~SGf6Of4$AW9}wslK_sZgAiLCxj7r_)!bH8zgZ3 zZDCg*A+`DD;K0WB;>8A@{E;*)>jQ^p>@yyg>aBoY3fl$AK40~);-(-6dk2zDf$}B| zU8$aox;p@Jfv^Ms;D(xo1=H5nmI4zA$k1%grT!#{UCy5#nSiq|%GkI9Q_lW1yIXap zZMzf+w>vqp53Viv2NKnNd)?-$ob-J5DQi3QVk$mg9HrO{C{R8g%N2ULLLcNV7syA( z_(Y_}&C2m)yQtButSaQwR3*nkXV^WTV|AUhy)uTS(_p^WEH*RHQK_$_WRc+PlUIL3 z`1d!1KE2|{u)(*#<3F|L?%=2G47{%IQ!^V;$*)GEkH@=eY zbUqI3oeL(B9X4t_Pko5S+QGSU#LH_fH^rb$=HL1t5DCgjEBMA&mCxa4nT=!`^+!3Q zv)C#r3YXrW=ve7Lc{)1gYK zUz9>}6~tnF+hM}_gJY3pz{A;Srq-9mOkOlVA4jeR-0&x(u}nlv%$?NlwD8D{`Qa1! zIw`W6^C^i>P0_c{cY$(C;X7k7HcPn})1D&fv)GM_*VoIM^#|8@OPD_o`rMAwXD*Lc z()=b-ZPPpy9(BSSM1vi+l0H=L3}kx~US&7G(uSSRpC<}wEEl+b3Q&}lp*-EaU*x10 zTtA4}B=IH42{Y<{vEgx9hAu{rB02LFe3sT}OQ|K}c;7LZVCR%2dRrBK|GwR=)MHH0d`)N&|!D=c7|BU zF-68Rr(cVFrgB`yzgDic<)x4QxW#(Zd^hzlPT_H^43mv6w*DsY=3$<#R{E6x4U?AC z_(_&#O5)!UGt5^)80mDh7WDicPE<@2i%w$Z_2!;j>%0ShZkyBChnj~6mRVYSMz4_n zkehDMT=ci=Gj&E>MB%A_9*Wk?GP4qHq{e%C zp@~<0(o8mHGEe#`Grs`oyN{lfhX1><6SBu+W&cK>F;|JkI-P7ejYnvkR-DANSM9uh z;%DzHN~N~ir=qsrwobq-$jOA2z8}pdUmSQcC(&H2&5PRx*&HjkTDuAEC|osfXId#E zSMRx33Fm`74B2aJzX}@(fP}gPP2^lk8KZy;#=E}a_Nv$sTN9eMrh*&?$i(q4r&ug1 z`oi(mQJ3MKJYA^ixJSbc)-Q99)c@Uf3Q7}vEb9Bz21Er)pOzPLH(|^SS6|zuC}qR2 zijW$mSzGs95=zDDp3#7jJ8=(QhYxi+RqIC74x zzKgm<_Kgd}@}6(^E)Od=Pgh^YB_8|Kl^}w^d7)XML|H}d9?9K|zp04!K6*Lfjp*se zUZ_1*^w`5oHltQp)7kIp$D;fy@VXKSE?#&B*HAk&*|7#RlkCsNjV?wNDQ78~e};*8 zv!c&iw9e7qZtQJFjiBsRiEcZFq*RQ2tU1t-Gf|`8PD7Yzdce>T(CxmSFR^DB68D~k zF7iZb=B~Hn$XRNTR*gxCPeae7A(@*+HKG138=Nz~8ufX&vX#_RR6=tm2X9=!w1??4 z8j*+HtQz(!A-4$vp2X3A>!Vqnt|WwA3z5BnR}7@w8|=m|3hR3vi9H4Ng7j&v(WIVZ z2+gmm@w(2Bj17bRx0-Q(dX}tzgr@NApPG-aHPkIAiEpCCTZH{hpecY)H(Z`q?I&CJ zVct6WVyi@HX?yy0*qmbD!uyy*zCU3u?)?+f>;@lC^47Z%9QPC(EF#SF)!8n#)$tQP zb+xGU?+C;d;t$2nDFwHo1tXukSW|e-%H~_gBb9#_|5I~Z&)Fh15=A_hRBN;^t^Qr6 z`769?;+H-4Ewo+c-GjacQ$a#O_9QiuBrUyP8I_f&$L|*hYvd&~gD71HM@#vX0tySZ z>+ct|3@J;6^i86L*9DzyNIj%JnZQbH-rRU`>?SL(oZ-SZS`0Kn{SG@;AcFn9UC>kDvc6{T7Jr%if=cioyy6IQR~!JJ+O+?((w#Z zbJ*TI|N1FZlI++RHTB!`Pqh7?eG23?=AMTc3ygZdzZiU*Ng6NW_^Y|(mNLv~W~w`i zx||{Ep)0PfMe<8SW}C2md&d-<-@AiNsH*ZUw65N6rcjOLZj_j|duhgxNB=6C`;?-w z`MAWUicILfs%~Ur9hR4WztFZ=hRjA;zt_k}d4%t|A)r8ZF-$S-n3>)r9Y}fn@weUC zf(+mGHV*^mIig6PujI=->h_n&D>dEE`f_kd!3~m?LS?w2YCfO#)3gYd39Fs${W8B! zr}1ES%eHz~Rtb;4nvqSIB|-EjSy~B1Vx8Pif6%3lnj%(8@M*hVK;>ZZTJ=KGXQgj0 zSu~_%m-x||oD*zFujNg@?}!uoF-z1#9WxD2>Z9*$u?3vuNSsc^uWQR{J&F0=`Qsqc5)Q8%L?G2g{r=#4Ah->%wKMriLB>+KakcfE=fB43yex z-NtH=qRLcY2h6BF5e>QPjn5GDSeew4cSefmLD}SqJlU5%q9Z+Dq*aOEE~)qo+^v$O zzMDDMtCr_P`2MvYCPq=mBP^56v^Mq)(XL@*bEGNHwDFK}rfk-m8OcMamzHI<0>DkO z^E^4JI$E3?!Sg~$nlJsX=aVzqf0(h_VtLL{93KrE-o8U4!E?48{Sxc?X2JyP1gkT= zP3!XB^2m5O4koxu6_d4WQoqXjNEOx5PSA%rBaytX6yN>uS!5^aLk}jWs!%<}*m7XY z-&^P7s-(al0c%J$bMH4lvJaL(TPmH7z;jY>QDvi7+v=l%3n`}057TlsBEY!ilgjv$ zenSCE9d|ydIJ8khmJsz@`Wid@pV!vwjZhcZqyC!5tP_eD&v(3cq8p=nhP|qIwakof zblNd-=DuM6I1%R14YEC>f>{~wIKAXjTMl ze&oSKG|@Yp5k-rUmMte3nEtc|L?Mh<>kTllIcCc(PGAMT&XPHQC5eLEQ+9z^aRj4e zeJD8HFn3lDwI5*{x0fbY{YZP1xk-ahEOd$Z+Dk+~I7!9cDMR$P1e13=dPT^pbBe7uOj-Fu3{xhkGA;*@$Jy z1aEj&e{oJs7qLYg=Nyw#`M^rV5OO-xLUt7L%uJ%)<3@ev<9O>Etbp_{nsh^LCf~oF zdbu9==eb!?Dg8Wub`N5s6dQfK%W*jR+gQv{Bn9>ZBR{dze%7liG3+b`W@p+_@ebDa zo~KEDMbkdd*@XL)T<9Ff1Zz9WPA!3@KNt-sALu=0q`?V(_RD0xTd};ZsM2IWMrYI% z=Hb4=zjvEF#oI6H2__G&I_X>{^V8ws(y1)l{O{;3oAH(o@QsLxiNW;!neV!s^zc|l zOQtF5RhoF@)EgL`ry5_f_w^6jJ&`qS7qHr?e`+soJN{8ADZOj~&kct&H{?`Lh|7AL zbNkRCWw9TS))|%Xrojy*xGC)K;G@#VZ`BHVHgT=nNy*t}mwTLH;o-m?(Q~Nsf>h~4 z*ZVeNCBkGheden!@$j0EgGvhdQc-5X`@Ub8y^!Fzi*a-C5o9|G5{oc|w2ZVH`&itn z2iB6Qs3p2D#wD;YS<<*2^JR6%a?U3}X}FWt68g}o_`^U$OJjpLw`;87bpQf)Y6}IV z=(3fY1<}_lY!RLFWcXKL+BEQC0o4bgtR_6%w5v@J04x2Yk7Hjni5h< z_;!KLcN+U4dyCV)px2|*(J>H!e}FrWh^{}@?1-aLyVW_krY_KbYkG2WawK4f@%bi? z3k8kDvXjozGQFB3Z{jOTuvY%NiY@~?sHzi@dEd1)*o)V+i2f7l&8@9cQj!w<$QZK7pmqVO5Y zYBORxquLQsqmp!V2drG@ox@)yaXIr9az0U1XvvtGzBBVJ6In3gQdtcp-~HYgX&202jMnp1h-Uy_pMeF_+V_E+V}ELGVY7<_~G z_<3k>lF8YUKzZM8EW47`)UFGxX2a++U67|{`c(2is%j}*=cf3X;hM@{4H-Gz1z3sC zd1k}cKO|S~DU3ju*bP&`HD5y`1Yik!$JAeF)MtK)y51Emy@m}nZoIk@OI+2e&yE6Q_%GBa|Xn62P zt0Ml7V_~sxx0$}N9n%9Yw2=fB?j@OzkI(=7Tum_mGg{;Q@D5C{pZ&8l9KmH2k0BDj zIUx(kC@b6|C@sYU1UgPY+=}$`V}1qSK5+o~Rr$tuepv$)0g~egRhQ%Y`2Q=31a|vw zcAXie^kC!&SGo2m!FRG}&tZ1&KEhXD9i+6hK7;*QcLs~b_#XTE>#y0X z{xAFX?d9ul4&XJ!jiH`SDBK^%!)-vTo_3+D&~q@mfXqY3*?;gD83&H=J;iD9As`@#6)2`|Wr9SX_d`V|{q6 zUoZOE_n?og8}_}s)4NwU9_?YvLl515i--LB>u>z8xSZ2xN+~*B!YOSjCr=e~;)gR7 zo;XF%9^HBTaYy%PMs>{a;VF9dtk2;70~j!1 zkjUV>AR6QQKvh*0Cr+H;haY~RsOS_$r+(nfnKPU@bA}&_OR%)Cpj)>t*mbp`YnM)R zw&{pXr;b>6>WG!J1JaI`bm;I1mKN=KZz)#;=+XsT)cRZOP4Nj>C$CtYHO&espXene&N?&f8)2`e&hGwf2U2G zHvH{xf8(Kt{>H-(KTO-U=Cn0$OZ)ciXy3j)78VwC=wM05j#8vjDOR02Vcp4w&Rx3D zrArsOcI}F-tu5WUb)!w2Hl`jPK@bE%Xf_RJ@Hr|fbjA$U>#3^JbKyeujTu~X7a834 z<_zvY$BrG18En-FYwON*?%Y{q@LxnU#)2RSf*=TjfY|v?5ClOG1VIo0(HIMYAP9mW z2m&A)V?huEK@bE%07PRf2!bF8f*=ThXp99x5ClOG1OX6@u^{Z{Od0-}wH6=NJy} zJ@?#m&fcr$oNHZ!WTizu!eYU`diCm~n5dxqt5>hb!QT%s@4*p*#N2uC&s%$bF+~{g z#{ZM5-ZzBql;j2h7#ttz{N_+V|g3C6?R*JdiR zP2>8%a?q<32R}N?3Vu`bA38aS;44jvgT;CO#DkBB7m>iR)5OcP=CSQQe3SB>#1~04 zibO2RK_`jX;WgydWI~@Xl^A$cO@N&b-jhuIvdD&fpa@qHDGpx9(!vUH?Lhq!KnA>J&F}{D_IEWYkAH#CYi88ueEr~)qmFY=| zB0ewAApeMr;4CA{hMuPzI`~?cmxX4|?}o(i*D}?*k-^pdFB5n>I^X?BA5Tk7ot2sS ztDu0Yps;WYow{$e7dhXctRzg>4@or%vr^xnHaQ)d?x29(tvvMVfzGDpZTm`&Is z1S;Y>e6#uhZ6{&YjGOa!fw_3!LYI0#mG3KT~BGfnT7E7(xR_m zi6a}2vaY4s>nKS-i*Zd~jI=M{T#Q@ZX2C5vU()58K?Kj#@*}^^E2=f6becH#<1i?PK!9F)=R8yx)J(7V#Q7*flZc3v58cJ))r~F52FSj=ys|aiuDF zC;TsP`TFbFSX?d@%CHV4xI6l+bIEPZNn&a&<#&AhY-4KbFTXr@g4LS20@lyXsHmvE zu(0GbG$a+Ol=cII;kbq>GMac_WtjSU3BHq6Vk&aWjeuHSQZGB$G~^NE6|sj?$aSw0 zF`V}$6aM0AqcK01RLRsBD1a`Gv7EJ)ZghKN7UW#}8JHYR`DA!a-jsCXfn&**?FgUL{o>s8TEsOwS|H=WaG5BF0dwH=AG{pnw}o~f@e=BwZF zH6L*({oSb48P)@i5Zh*HntQ+D>`biN|GVbvy1`I`C%S6w%^Tpo{Sry6uM|~OUNVCE zK_q^HxaV>heiB)?@C^ArGsCZ%n(e9@h8tZ)TX9};@70O<-F-o-weln^_Gr~6IMzRVMimPu2ZRvM)s)LSy_m0#Jlk0 zjuyv%Ss}#XG^=(Sw{E_Ym2-@p9vUpKWNa>-Ss9*AspvOzN^fcRTZi=;pzUs-OsMED zG)SrE7mEGY5AVgPEm(~dx@#CwFNRWs)9}xGM3Zo15beIUcCAl(XwKuy%e~d&gdgYU zC!714#A{`vzmiEdMcGkW4%hD%ZPyVZr5*$WUCfisF@WK%j~KSqz0<3 zjJ!NA-5O54QGzO7^ySA&qJ_RrmrzcmS;$0|1Oo@0vu*kv^|;SV<8JwRKWt&eWp(}P zrKYy!#wf`vGcd2AMmNLT*sfI3=1Z-wr3jrC{?C>EzHay*<({~h8cZmdm(i7>$&c2G z9=rT|xJ)BxvGxVuL}Wy$cd++v8Tbtqiko>YzQ^Ozv^AxDYD%&RuN(c+pmXgW` z9cP$VBXmQqCFv;PQbQ#&j1AXn$vX0Va}G>urtcaY_!n#$dl=Jcaw(aHAY!` zx&qG7)c3WOdf(i!67f{ec2d(^j=5KG{FR|l9cFpK=@%c}(C(3m6dSaJ@MT4ww>$Ro ztjD2Sv$NZYHs&G%IX08NH&0Jw6XP$ua^rurQs>idFYep0FFY=1xjS}rDnE{J2VzKk zKuw%9@pP_wRcb}M3v$*!1lB`N*Tlzh@q!ZAqykBHEmdjPDJ7ibBt3JzUnS@JS08wf zk_$_$^D0xj(zn^?62>}V))_COe{#;LeHmDIS6d_XGAcTvRdU;L?SogI2a?zHbdh(~ zc+y5PZSi0U@AR3!TWB)I7zhA+A+$q|V*InatFjGiPxY~mvHe_OGlRDwkLG1*r_UIed#&tZQ5n%; zie^8MEwdd0)~4*AQg+R(#n!D|H{%t@r`kUKQ1J6!B=sOEjoG*}bf~CY zy?d5M-7h#j8H8Zpyx^I&(S1s@PUB?DR?3fbyt2 zb)3@ZX3fQ{!f-)pjG#ra)wAK3z{-%BTI}`yv};_vg;%|If?J)jN(0V;MMt^Bvz&si zG`Fq^%iR8ZQ)BfXB?TrL$tx8Sw<0YC1f3?=_;ax46q?bop|+^<2oCw|LZY%-?wwM_ zQ|0mU#sZZntf;dhwMruv2jnORa(De`f=>1|OIW^AWzYG*?pS~D zAd?EamsrmUy0~q5rS9(#S}V&U%F@psv98be`6Lbfg_kCVehN(X(rCN4+@&#D=mR!Z z8T=cI@Lbdikd2)mywF5@T)SEt?urtpi&Y-aibeC$wAdT#KfiyQ8A2KxqoTES1D8`( ztHe;|^U+B;_mEw?H|ZrUZ@++GNBo_Zx_YM7L=0S4ER77;Kvr?_-r{&vhii^Qb#3Qx zf6NOG-Kw}NOY1i3L_t30)BN1%mj6vr)j3sCoKiw!qSgxo14D*bG#Q(gJH#%LzeP?- zp&W~Yl$Df_@#sa!5DQfr56Wt4TAsgKS$Qci#b*1HjS$BIM4YYuJ4`W(#D~l}l?;;; zf@aBizu{Ze;=#pwBSvLJ_JAXfN5k|=N=h;D@e1nd;$mVSNJ&X&tP35l3chl$^G#)o zp-4(feqmzj=J( zSfgE7SXk-EBnvBR97-sO4+(a@!D$JLyn@2S!A(w+6C2XpH+;<*to)#$58K<@2}wy1 z+(QC+LdS#N&PhdYM;r*wc7}S*f#r#$_2BJoDdU@;PnnyWi-C=;vywxNU0^_AKn%)$ zwXoY!tCXbVrY9x-r_m(Ei?hn-%hgQ;Zkr&P?XuwfMu(sX`L-B75ashwYzijEt5Ud;NW0cRn@=t@lVv|)D{*NWtK(~ z_6ysy)ny&a!+7rQ?l?F&CQ}7y;o;#`R!dmK#997c?j(CZ^#PIlsO3w-A}k~%gu~;J zkR=jfw>gU(j>p>`6iv?Vc+SjWY*$uQ(>dH1zFnL&G1&H=n#-ICZep&)v^7Qd_`ILFiu@(U?P6wM@i5@zKy-7c?OB2=RDoHHn zxvN|hVux#9T4#2w`m`M8%fvAr|dw(_=vTNR3>dv%WG2y4~J z9Nq)M^+zqU)B&!mx z2P^q-yB2^y8`ltav|?>M6Vd3>`Gnj6e<<1Gg}b*{%OrJ_#Oe_Aaa;TuE&Q0H|4b*` zesd@5G3lBb3Lif(FMwQt+yA^1MTXfSC~EQ#aC$s(&eU-4mxmP+4{VwKILld%xv_;T z^rf_2=~8kxRtMMj)-QMpKfAav z-yJ6rLk6G~v5Coe_;hbyM(v^ti^hT$gWc{G)UWqnCmYQV24WwnA5%`58e8rXE7}>m z!?6e8Mw-7Z)L3FSFpCwiLB3wJ;`I;~q0gf~6|8g{exo-!%U5@4Yr0#3hc)M3d1pE# z9i>9biAy$y{y(j!^(RT-9m*;oIwqa-5ZHzHG4|Ve2 zcFp^`FHUQf;0UT#2;=((#LfB-BesXL<^FV1QTs6#+2c@#*C}%j&PUSuQj`M`G#%dE zHZ+zr*bPMiNjYJp9mep+caerM^D(1K)m)X^gJ%ETwpXih9BM6I$BS@%3P#b1N_ZHd zyKOEbLn7*UwLJ*VXvgP$dWl&g{q5h%7Ife;wOfy^Z*4hinSDF;(6}Q@q zfynF!A_&GD(qWG9F45%MWGfw8luLu2S4G?WTxPRLqz&&LiCH>ivTH}Omj=Pvps0xX zhJMt$_BO)2E?GQLVcJWyjKN6O_U@f5`N;i(*M7UlU0$4(&?K|{$&>v@1UmC@A)^+% z?N8_Qq^@}u^Ruff%m1#{`#oDe3-wNzWP{gjxGdS^qrwdGAWw7Bi2WsR$jpP@^%dhf zYaFYC>HChhxu0kF+#;LUksq~!NtT%Az&`9m$EJ@KIWpZNTBlTU(`qeYGGh$mwY>Uf zIDO->&gDZ1W%Om~;$`;qsrtP}-&~!HtMfm_+?&+?%O6vRJW3aeeIMkzM-0SQfTVIs z$tAOo&vPDuDVgs2qu*TbZskJm=FY>LuMOQL{T}f|rgD1d)?kbLzuTkycl!hD7NgaK zpC7flJqri#(^7d8*Nd#6l*nhlxxDGz?8Z+i~mDj$lD~qmEbA<($TFwuLP^5p*1^CKPk8TD zgdb!E1UlXqjzHKFyAcG{ZLIH>)CbQ8Yh);wx{?*;=>E-`mNr4tlD%()Sck*7Vwz_^ zYQ;^IYYRCZ@zo70%Mo|rvn4{AGu!GZ3DdQ7Pa*LSO09?L+;vUDSVcR1XI4x9tB&Qj zW&8XudX|@Z%@1R(bJ|XMDsOTOtT=vE>ZEgWeb!jfT+#yf&B_?~o$anaKKf2{yg3Pl zD^E_#W_fZd0&_uR&EieY%UulHN_8jkB&NiV%unJM-fPi(&~-ex`E^kxcd@ccy~kY# zqIYx=uqXt)5&a0BKR$^E{~Pb$ck_>}M$6rKjbePyZ8^|%3*}otJ(oP^#|MWcf$f*; zB$e1`C;h)0kci0>jp+USM~-E}oF*OX=SqcI(Zivbk+cQWP}27~BczcdxA3&uM{}Ad z&Tu8Jl*CAkpOt8e-7okkt?$d)Ct<}U#Qzu-so9mE-rJ6`%G~rgOv)FhZli)jM{CXyYuc}4)nee z^jv+8?2E(mYgWmne?N&RD5?D75ZF~;3z3V?xxDG8rfiETv9e@uG-PvC`Zo63>3PS0 zPEhN9thGaXdT8ck+EP*li>HnWuJ+mLqn1C((toZ-ZlDO$IDKrk%Xpl;_l;NhlB?H0 z0#VjNSC)gp0EDE#r~hodvAlB z-h7XVF3tQ4g(Ozl!PmQ#T_pW?ccsP+B&}V~Q+@WV`iVW zn`d_qtcMRM-^u$MTbcPmnpgW=lk$OHay6B0#T1fgT7YcI;zq4pqC4&@CaHS)CL+SU z38cQ`@d%yAUh-1U{tB76GyU0+k6Pg*OKc#xq1)+OANe~Ak^delhNj>yQqUQ_lr`9_ zzgcN|_}K7hr_U3d;r-I>I%FW$AdCm9C(P5sjq%O!k_*Bpqvbyb*1@@NTUQf&Bm%N( z+I{{U*omyVob%6Vhs*UEta5ul0j0t=Q72ejZE;PGR6Oa}tOr6>|jo_TJBldaCGNLyd7)*nJY-!+aqm78@@aXRh;?-i3zjp_kwTTWy$4%EUOK-cm3DZ~W# zKJ;+p-|Ek>bM3(Eb*!%1u2$#+lJwLA3L>kiiC)E7D@Y1-Ybv5;e#y77acw2xZ3Z3{0QuMwVX z0-si%guRAIoBUlFNG+(!iQ-tVEe%k>lh_GTaVwI^qz#_5z6|?+#4c-C^Gf4=JcXjn zr_AEKE68RCERoB44p=XOur$y4u zjgxD_TYqQ7)ZloybFn`~I>IU2vb3h^XfE!Wd*S;^n|9lNY@{<|gaWj*?fpN~;bY!` za?c)0dPDX-j6Ci+n*Tti7W<_5j;Q4 z^Hr($(#*Y@n%dz)ZA7RJ)2-u6sR3>;(T*g-QDaS>*W-sLglHwnvmdNc8}XHA`y67 zyJuNA98SI{zY~yrAFfpX|VKkFTX#CQ&z1h>ueBGD6%LnGcyVjQh-yO zrW&MGO3+BqD`4!J97O%Du)(#htfH)-CMT9t5_Mhy+b`j`8|)aPMVXcTHzun6Q!u?& z#-%)F*Ik!pi%sIMi+7tln+och!C(#Z&L$D|(8di;`}}#~se6m{Oj;mM1Hr@b9g(%M zc)io$(CKUlPu{rRxo+z8=lv=Bk(o&ZvAUS;hn$?8nAkWuIXONd*LO;>N^=+YQ=PZmHsdp`ivh$4ew+WctR&d7`-_lwy$3k4aA-2}CBw_@es??laBb znIe3z+n=|$F4M&tB7o~ZTpwit5POxRhTRi^zY{5f*Vf-3ESDvWjDZoDmuK8;)N(P* zMM6p%`TO@baPk3*L{tn&!I%FyJnxx-ac}SM&zId#rX+;z>=-|M_|VzYL+tyft}X#I zwkFM3FflQ&qSWH?+z%NT85zF-9m8}Y7c3kF3F(`zEyst@ArhwF zN3t@7*p2B*i>Hgb`$an({iFuUJJkjUN<2I~&_a95#8i0@p`xhx#cs3LZJ=0!SR`C9 zZ$j&3X>t-3SnDe{_rX<6EI{Llz;D*Jwz?vCpH;0nqOvIn#Sni~RWXkhC{dT|cfocs zqSI^B0E7Ak1qHq8{KMyiI#2>9!*iGY3TPVnCi7MK3B2Ad`g1S$Gp)YBlSIYEpu$!?7$8@P6fs$E}TPTK?oMivxLl_WbQl>kBP#X_v+A6gQHdNx_p`i^XGUY9skD673uOMMy zhyqVVA(t+?krXR1x0^1Rr0_iJLT`FJAF!A$dyR;QD8#rknAp+acyN2YV2!_PPY4GK z3p(Mt|9-q4Oy|{!90bJ{;zc3!ExlEy6R3SL*$qSyU~h+m(WqUXu4d*M91HcO9HxuZ zKmbL7=K#LWVYB*5Z=+{oehitIm{^^Q^AoGrS7-zr+3d9W`^tMz)ue&XCnhFJrgADp zy18BL3yF)v>UiCeRvM2elK}GtTL8Lp4or0hsCR|qf%1Cd4d zN=izwJzu_e!wWHz=F?zCK%~2c^~EAV&hZIyo(Em{cSZW9{g5B!t?bV&gm14FmXf1c1 zy*+a%uh|aUNfWqPi1+ohg$bqphTGjgwj}!+zesy1a$R3}`fSN)zx`?YWsqs)k9_{^ zdI&vgzQW{&mODv)2_TV}P3F#sb6{Dt>Q%BN7qKeZYoi$g7V}kmxeMOaP7Wm8tZ@j^ zMnxV++z!?rlD-`r^3lWN9kux3|N2sJnAg@)28NWfr`_d}?*#+|@VVXt5p5OD2LKb2Kl}}pv@ly{G}4ut1D?YTP&L0?UDjeSns+3qv5*?2OGOz`ymE8 zRzV@S-^{C6q+tH|M5A!*j8MxTG#5xc+1lEI#Dj#2nyuOlUeC_YukY-L2nqS=*MpG+ z01M!!Z_hS>G4&3ni@})`Q5<^hZ--Mj1mxw%El+-|PZpq&+uQxCBc)^A>E%SU3C}K7 z=qpg$HjqY;E>@?MKWQ$od@58fZeLzb%S-pV&xO05$pgv6w?wOPeQQgIkMAcDSPVUu z2r)N`PabFRWdYaMQVD`d(v)nCw3%YWuFQNcxSN&J)iFO8GxR9W+Bv1f!M&Zn_N*Ii zr+sQ^)yp*D`Wi58eBJN+wk}KQ-l+UC+T{aJw;YZEXQ_Q^j$3J-VD< zT+D%>!i_&WJ6kI()_Bdu--AfB;e+YhazqNb+i z>DgKRUi;0}URDH;{^%b*kb~{F2Qh&!?^&^g3#-FPFF6)@m~Sny4RcQ6s3=iI;u}6) zWqx`!H8pkn@bKNza%jHV9BlxX%ZUb*R#13e_UuZflDm^7;?KVezb{xG`BdwIXN&J4 zsW~K=iqFL8V!tP^%`_SUJE`;}5l55Ze6kFW%^EroPfsoXkiub)!Jz+kd3hNGnQG*q z8!&|1Dz#{_S}sbQjKE0?|=CtSL1k7pqH zvB0myi>36|pc;Y9K*cVk>Sxvgt%bOF@-%_P4{7Prg#QxXk|El5EKw({&aAV$JVn(1 zp7egZ!2wVtz4O;}9kDosUMc;gQZKG!ENA|BW4oi1!J}9Tx1wa>!64r51B7D3ig>Ox z?KBrNpP>1;hrEcD@{)B){chLkCIlIN-U3%#CAA`)o$v)D-d_T_k-Doon;{_~n5-5U zxSS5UTm7-YThB+<-U2YTDm&iShjY>1PX{_*8T8(OI4oX~3ifi|g)UUN==A;Yc%bvb z*sGxP$Lc_*&V~>x%wMm=-}Y?1>z)qxNA0p($Oja%Rp4z#M!7_Z{=x_d@DXdw@(O4T zgKrjFMTxDN!V{c7$&o)Pn0RF~v#@AqrF}C9&*r8jq{9xAFYs&B`VpfRbU~ z(VL1bWOg<*VmKT^P~r}sPq{GHVo6A6P8>J~w-=Jxdm2VeOPY48lG4kaVZG5{DJS_r zn^1?lFqan9FL{8GTij3T{KOySMoU6#$Yr`xOp<_OSK>E&|LG|yIM%wjIcL~HxupVi zp+4V2W^VYJzRIBGvy|CXDqgF-R^kPbsBBMETt({93T;kL1C0K)&+&rEwkABWX^+u5 zFI+b(7qmcZe0)G{Et^?&5~)NSMI4virl=wn8c6nATBS^GmnPRIDu{wt9n{{L?_Jd@@mH-c&kyjpoH3AXJYKAKE4ug2l}zLZ#XwtI`|)x@CfHyZ zorB%Q1cty>fM5#1>&B~MSh>nbf&HJ8v=J3 zthq!?U$?2yxRP&)j;!H?e08B8I!eF5tYmn-jkxJTHfv!hu)%5kQO43HNdEB2lU6%k zZ2s7yV)aMA})HI5rZcMLrz?)InIh3NqXd#iTBlFfWCd{(Rqb&{BfhM#z&U2SqEa9&Y7nJ}aW<_Q^TnjT|5373vRF) zU@<%$uhS8-S?UBF-=9!v3U`%xmfXjoF2z(=jcqn;=cu>r9D}Wi5944u`x0WI#EJfV=L>C)M^-5&%em3e_Yskv~3GRaz+4eSD1$%r^R_)xD zUNPxCt%&k)mJRA(nc#05D3)#in7wq%xJ}JFi9S@ODHDj9amhcmDAnqOqSeQ zJl7SO+?nDW)!RI=!M>bPk~DK>S>V;EG*{$lPMGhvI=K{^!i{;a)!((3eQb5>bI#U3 zIM}(ckQ{_UPBkq!Ffaf_XNbOE5j0)CH<5QSE5$GLiPA_Kr4r2TPX zdefx8?{0H?#H@du8~r%7N?_RdOwR37Rgblc*0w#!{5f?0=W!!N6`p->lPUIn8(%jU zoM_|OLqmV6=?9htaWUeJTK0DJr8V0g-a-jp_Bv%1^=-a51eMqR9PD3ag|V*F=o3+v z&MvQrsb=2QCb7wK6Z?;5A)5ratn)B@tPRSjTdq4kHhJt`dH&XP^w)$a**H=u|3&Lb z9X>-OZ|!(1U}u!Vj;s@D4!5dQXyUuV7b|VAxAfFmBJ@ujp#>RZo%cpaYimJy$^%tP zC3Vg!Yn%I``|z~K>M~!sw|{ff1?%=`OemSG1h4g~Ums5#)|ZViV5nWsuz=|;jLL%9fv2=<t*^>e;2?nY_d+2A{}!++5|=mBlEv+L_^ zfEu>}jFTg&tgFKSe&u$3n7?Z~8_*X+sQ}0- z*4NhN!_98;2Rm2-vD|W@=7YJp`Po*y4pp3*tSo^)JSI`DOnQmxcE{m_3@;i20s;{? zw^sR}=fian;5EU1aOhNVcX>{Nurq7rnSZutQnE!ej&eS$S)n(vN@uXn?@vNEF6bJUshjC@mK2B75+? zH6sT>8~{O}_pe-*%fnGET3-xF$6_@#_iqS65e~!Z+8#Owb5ZcmRbb@)VSTR4FDPmHV{Xo2aLq6 z*5l4DGb;-sAb7t#2OHq=df|Y}qnQ@nlqmLf_`OG^rf z5TFtTYg00< zflfjh$7M8#;foZ!ETZIA2l`Xhxx~&gRBG=T;TC=iiilLYU76KbEfuJua05EY!^0z) z!Y;=u2ekp96JU>PYipfdU6gSTU<>pBqCH*f$S+|0ebJf?4ann-M7+d(5(R&?dOJ@a zzp?5}pqUNmc5W_Mw}K%JKj~CX%BXtKoA&VZbUmt`NnkV#CQ2M{c0KPS7n7DY0wyey zKm8O^US95SIE!p;Z5RzWd6H9Jme@{F!)a!*4o4Qn{tlAHTuSx zgx(3AeQ`8@Ck0L+MP=nrK!S^op730nx$pv6?j!K#E}5L)`#qo>eSm=>08Z$<;;B-; zSXalc?Y2ky>C-0+PKRBc(o+IXEP-8L#gsQ4FxV#{g()YtBY<}vFKi9Oe}IS2Rw>nn zm@0USjFc3_{XZZ8VKV6Z>etIZae6<0ef|3N*Q-ed;Jhzau#O}Q43Vp=x}Q)`&>B^J z`CLVzUptBo&&M7Q067ihafkvM%sK`HhBJU+fxbqOybF~J^j;Ej@{5fKUPho#blE{c zLCsYd!VwY@7HKsqmuvbECYuxkTEA3zcxcho+zg?PK8QTBG;D-~KO>1nfCMuLl6SFc zNp=cIF3~`d5f*+Av?3*%nSp_jm>ASt>C}QemCAk@U-#-;@fu6!X0~-BLg; zEqMYN!mu+Cx#{`-Kr-#C+JAdXCY99rU+%FFHNbfD=1o~`EjcTza`_<81A#czo51ir zfx|u*Y~RL|iPMphck;K~W4t&W-jA(>R&|KBJz7Wp4|N#h2M1KD#`>og^C{uY?xP#? z5u6EsHy0lk(&&E5#@j>{5FB{QJjNN%ST^72^@QUBKFs8PZ6TDr3r2eq84Y29WKa>r z;|mh2sGJ<~Mt7J3O{GLU9ngTvY&V2K4s4vTFn5M?|+X z5A{y}VgPHc@zCWd#@Q`@)F~Wkf%@e}R_$Ig!xjN0xpcATx_@0L&^}>S^KK@D3ZhN4 zkB`frU9j*zT`E9?%(IITUg{)j%(UOXkr)8u0gWJ7*v@Df9!fxC+7CX8$ z!%IU@TYRSYnN*3HJtz5@obp8rODDKx=+V^8HP*%llK z)%rd?bgLv=I+$qB%De??hOPF1Hw2&L<5HisGTFLtePEdsi_S#2#b*f=1X#I5GNQ(Z zeUa=$CO@~+HyJNH3IyXVfoP`Q82NEQRjw`VU1LHfZ-_ewyUvJc8;z0;&xm^Gl?0DR zU$o2U1nb^*2mfkfM;>S6w!)JtoNK;B(;Z%4Kz|B`gZvPut8@>5~m^^+u=Sva&KH zAW$~%IGTS4b)tQ4PVEuIKS;v<*6qF@+DArYK+AzT=>ceqfehcf7iSvY<&P1WlnI*z znEi+DmgNW#=q}Lcro;JAQP5inAsH=Qf_#gOF*u4&x|E8#}EwGAqE+501 zsjLhBt}G37VUqL>`}irTjZc5?IBBHNS9Fa_wQ%G*2Z z^mzfU(~@_>w--5in1nu;W}1kMN6}TOb}Hv5JHj0(k(t?de=18uGWbzpi+Ns!XlZp)Dj#;zb8Z6 z#2{KPJ(BNJCtz+S5}L0OU0dI!Vivgac2GyGwz*OxK#1!K`HdalnmQrjH$5*`cdZ2H zs8em@Sc67~hfGwH+lHG`__-$a%KOzkfTXy8KPRzG_=*N0(RG+7Wg%s*GU=?bdtF$* z>>>OKN zACxHOSxQVAbtL507^(b^?5EgDD`}6n)t~oaiDPRYwPVF6Z(S^A@+zt#U|W(Udv478 z>z5wtRNXrcS}GF~FnDfPp#Z^gIV|rv)(>l7uwMSET&gVv&>;W|&j)DP0pn4m69119 zfuy4U{d<<^v2nU*H;`381ttR}6V#{WE_JG^pIDy3uaf99SR3-gYjd0{X!7_JJmwllfsu7%Y}uH zJvSA-^Kg5{@_k<2(SEO#-u>w(6M;5ut^ZUsMt{P{6SuHz#Lbr0m&C02<5-`SGhWun z3oWesZN+tVWNISc-x=|z3Y9;DoYt z;I6{BQ)q$naR2H0T0Zw`far(~7j-AfQPCTx>wDY2mV&!HD|aW_2`dOEXU22qDvVos>eyPUtc1%D~BwsoHxg8 z2l+FLz9(ohEllT>V*9O-P7QKSN7j2_F}R!O5*X)Bag6JG+w^w!k6gY3|_`eS0K*1UU8}==`8rLfm?5fWDQ4 z5;SY&_ULIf>wf=)f?fwY1L*Og4S*I7rInQxL>ULozee>Qh+prO`(7zTGOQrpsL0pv zz4ZmzXI!I&eVYu4p)(>OtJX?LM2|t1i9JvgRc79}#h^sI?)l_C!UxLiJv0zZfy|kY zi6a@@S#6Zqh>c_LyPV5svcBc7Vl5_)=7N*kdsBOs8I|Iz)zxB`^_gyDHm$;!!EL(b zp7#d2VUx%zJ2czyGcr+UDGB}$p^4kCj8zvKLtv4qUeNXOUvWCNm61q+%?_mgUHp>Sv;3?PXJ&#b@sRt8vlG`jf}$co z1Zk2_ViwL%5b=uSHqq4JPLi12nsg!#eev1zF~s?$`DS?oSjGV0pv&E{jg}Ys<-)m2 zV-$RR84#F2nFNqBYynKAj3~%(`vH=>Gn}eGbJKyyYXGQ>i>s^cy|1B6b1JY7){+qZjWE_l+>N&VN6lgsiMeGV8%eKqiECrVCd?zz9;EW9gwAyV;F0>H#QwdWMFMo^PU> z5H35!w9Rh_S)C459XN3hW=d6BFvgiH*84lFz-qhRDB=s842Mezf% z1Ly|6etwiu)GS};MDdCI{QMx7%ag(9x!)xgs_bZQr=Xx%1pdgz5 zyK&=#%P0xoAKu)<$JRcXMM%0kA;Ko=2=Fa$ta^>OZ3`$~|RcQCQ@e^rgx?AG(mXc-8_ z1yZMKwOOowJ@^d_7_zb58z+SbR$X?aTVP?Y<^g4f*zxXs>+8*;eejmDqT=eoK}cmK z)63%yFWNwCb|Z_)C_z+obRuA&>v`VAI<0u%*V=EOpwNb5_tP!15fjW&s6nym0cr%= z04*hD+sq8Qii%1comPP=SXQCe(><8G7=&apfHF{rKuoXzwFlH31$p^QlNv>DV5c8I zq+$Ru0a3Dc4f}zNbb56qRIE(xWfu0LCgS!#vj8MZ5hD1WF@WF1(Wte9pPHZzX@gja z_<9Zlwgmj{gffYC3K8rQ640c;*hDOtUpk*ukfDrAPEU_0Eu}v`K86fz0Gkxhf~N!v zQ>!*Z!}mD-nK^f{GqRJPm(~vWKNtp~09WF6HOzwk2Oe9sO!qa=7XMC}b=le5+n?Rs z7=tX_bhGRZ(zLwR9*`bE_yf^TR!**s>!c}5^%^vy$|@=#7XxEn5basDMzPj_*m4t+ zb(D+MyTGRHEjKsn*BcL~w5_b91G$vqevMenu^3E>v9U~mOx;zHCzB3-aCNlO+NwV% zzZ6+3XWj|oz6*FOWL5$6T!Es&#gzo-&@7FJ&BfP<2w;{OL9#UX_ z0MyzTq!|(tlGU}f46y0$AV12Nwmx$L_KkwgYVmJ*S-X4@2o9j}FapjV`A_ADB_WN8 ziGlPYPL`YRT3;S`g(_$M8@}1SO1zQZAjCE$zC0hGkB*J)f=oNs)F{)iQB%VKB?%&G z0DTYQ1C;p{6`#N%(34jM%1GuMm~{Y2p~7egE6sHqQ>ZfMf!z3r6{1z9u-igh9%vHa z*@8jUQ^=K!lu~s2lbDnQ@n=vWKOiEiFfYu^#Dnu7s+3S^3&~VCP9!T)Mn;CBlG54L zORe*bEz9x?RF6*0CUcH@MlXB)UH@CMTD~S4)oasD8zf$|iJ%cWdc{*EvH@#%@-%NJdcc-6z)FL&iY$Dkd+X<=E}-^$pGaq!dkTYAoj3!Q7MUN%Kt=)=XR5PmuCj z9?vC;WjsEmrJ7_rYJxdPC}@Pv@$o1ivx8eA;(Z0PbmTf7XYa&wt ztsX`T;|PYjJOqFTVKSQ_c|YIfO|Q3H&zl1;`W+J^Xk$}0y$(Af%skFX#l?l~?CcDr zuWB#)(U*tTmyV7OA7H{H;F!hTpM4w5fM^K@yb!=F6-ejP>q*JU(Z7HH1H)bzY*s1Y zIx;fgI=di8*EKdW8T29*FB`t2!f)H&+v@{EX7sr$aP3f#U1)GR3I=_IuC6Zi5OZDK ze_$r1&Tb19%n*&LYp(5qb@f1;2&^kpkt&hLvqAa$$znYUxNl}=W|bGWDAIli=&+AA zI$MAJ`n7jtWXA09?_UZMvGr8vmJ9wMcYt9V zbV95MQmX{P7*hFE^k6 zQ`c7jMfFAhqmlvwf*^==i3rjmA&9`zjWh@%CEY0@-67qvbR*5u-CcrocgMp2?sw)l z|CssD=-|V*Z{NFn?>*;y;w<@vl2WRB8A;FEZG5vkuDmoM2W`rWV3OX#KbOHDYVhnF z9XCN(s3sJ5;uw{%UjzFA6%SAR-v-Ckm6gn0yMn=rO22?@JULwovzRwr6*P1#_@05& zoL^xhCF$uDV59p5J_Oj^Niev7t24WlkDsc5wg<#`SrL)PfByWL!>H#DVD4|Jqzct~ zkZ3ESI!Yoz`?1#3kf`YQdEI4);I|t`LY~%>7Ua@dya6khvog9NN@Sy7&nr5^B|M{V zbsO1#&ms9#ut_(@;j(sOL>C!*`~8YCqUf%uBvnV5QM33sMoMdoKcOd&sw$~ktok)8 zjM~YLq4x!iCEdOcE(|99s6GUEvo zSzWUDx=Nz#%#|M1DdTv>5jO3f61_AdTfoa=8tHFAjiK1TNm|NLJyhptE`o`SUN&|9OrF#JB_FNKd5CEb?Ja# zbiL#G~xDyj=2RkA#7C(PiR9d^7gKlD_wwiP8Fr zCNyVc(Lr$w0$~g$W9}7bdwcp$>bKEZ1f+Qv(`-*X_r+J3)AB_yKr$pcTf^?VpEj5#K+dZX&Qht6{vM5kI9brrM-7JO)>!<>B z_;n;BqCy@E&m;+PY$&bt`5=y#^-OIU%0CunlwQw=I(^j_*T+G!r$V9(RgUMG zQ6sDDO_t};P$ZY53xcn7&ao_d-2OoDF>HqDARrT6_Dww=m8doZj2tPST>yv}K)4Gw zCQ#M89boks#&+%sHQuLHT)KYLOPrsaLoUS zn!6woyRHVz6MFY65>Z_a*KXSLdSSxl-D>04!VhGmgstod+7I3D>*x}*{om1tmx*tD z3+itaZ9`i~Q|T&4JE+l6kP{+h0aMumwzUKk0(2-A8Gk$|cG!WMuXuALBA{1H1Ho(@ zuXfKixz@t_>|1&^GeV z)Z{DwaLTAV9Bgnfz;i-YO&Tn|rgHASCtW~VBhra89v6{~+CRj#MkYgzlg{xgd%{J~ zKy8nxx?b0OwqkwOgKRh-Fkzrl^apC!a;M|3#a$N09e5`1UV-(Ef`S6#sIkBW$m3_L z&4>U&Wp$sbOC#_qrcwaoCA6hFl-7ox_ab&3sUcq<*^M9|_*6Gq(p=)kY<@z%(Wnoy zAVl1cwvuq=&vyOF)mxGg_9uxztmR6Nz=92{kK>CQftd042$`oj{qKeLF8d-K%d(`@ zo*)@M5y243rYVEHMMeEKBHO#7z{YgWByrR63mxlyEeajA2uAtOs@u$ds{}Id1=gQ^ z&)R4i;xZ1B3C6o721H*sHcyxvS>r8SMbFH0m$h3R)y0 zD0xIpd3%?vPH5I2KGFY%gdtY4ufMUHkb2LS8=!%L1uR?iHuy7;+<+h%O!)5WM4p01sQY@~3y@HWqzSrzskO>bHQ+{G znXq^lL4yIp9~Kst-Iyp;I-#xA2Q4r-7+*#icPBv5{RWqud^m)d{R=?zRSjxDVFi{5 z&}xY3>7^sCkQq5u2IlAL!GUZN*N-nit~<5r3DjfRIXQSlME-$+z0usb$iil%uU`j- zhkpmlsz{?+valSSED81)AWR4$j(!UkJ-1tzjDKxHrQJ9=HdAI|4AolxLnE z;kRI5Wc&)$UK-)=(A!SIqhkZ57ZvE&0QkLPkeZtl1HlX;#uXJ6nT9Hib5;wQ%7>nT zi)5Qkmwa*HFcg>M;T=}?M zG#=6&W%_UFkbY$eTwLBMUHL_3Kqx!b@7FKFo_af)rt;^>A9BXPGr@A)o2w26Z_jGK zqg>pLgN@w@s#b1pZV!-YeV_Z2Yi8;`sV69Y18|B_;MmW+bpL$Fz5j4=lc76y*}U~d2KB4hXS4R5b)oi+#N60-SF7TfTL=&byYO=9Xt*~noGJag7 zarCZkQ&OGic+j95Ov^OHz7OUef_eI|)FJ@%8K8y7Xm7U}vT&XN7>cW_D~h;&^(L3< zsa1b}|5LE2DuHG0=3@VL#@?(VcghhvH&WwIg&r7U)gR}xTLP~JcV2{4^ewmene)NN zBMCoF!=3R<7IXZM z9XJ=FuCjE0*6!m7*rUJf9goZxVX{Q{HR^&p8UdP!w)XaFGFQMYgZ%(xuzn2x z`H44F#_vO`fZkVlmm{CEi54VWUj z0*d>ii;J$gxx})v_n^!`7QX#IO0V!Hpu<3vULYp`XoC9|AE$znE&;YtMdYt zN%^;aLJJ@pxlH{#w+8rEu>L{a?6$@qvRRzZ5`{W0A;8Z+(`?PH=XZD}m`o}Z+mfM+ zD`TcpsPX-_>o1Ogc7ypW8{s<*QSeG2HW@Qr1l5caNL~OGi2&UuXS^x4R1FPj*b=1a zZCSOnwILD`dI+(NdgX>?sgRtE`zS}eQp045J{PcK0KUEld@$Q189rP}8$hy-m}@nb zx+x2AQC#2pWw2=I=;{3d5mdZnw+<*BL@)+6Gf<)1Io8EjyW-?O0y2hZWQp-jG>AC! zL5xjy)>vflhn($GADWMIU`4y{4#%^8vazy?sHm*0PTd7Mj~wnrr%#Ej27XfpnBMZ2 zK==XyOoAe)f2Iu5ggkY2rizm|Trc)+e+!w(xGQkxAzCWh?M%Eenb?Yq0v`ZI1Q=?` zEV1wyu$b(ZT%ze@q85R>ZyP*;#xU#Kw^9`~HF2N@$TBDGxJYTB19-(3lYo)S1*Fo^j^W|rivRkT@gvUS#L64ftUf8P|B zaN`t8$_=FZDCk%Fv?u;BXxdYmGwBc$ghcycZxl=`d;3mMC?_YA7I$&6u~7k{?cx3s zhQJXE%Xc}nLAx1RAWn)!ymRyn@VY4i-9`>5U$-b+a;uzvmJ)cJzfpscyt#HbilwqW zWMYWz2 zmYoV-+YJd&lf^OXH0DKL0oWn+?4aQg5DGvXr3k{TT~s(TXAkulnSjgDMv~B?R?3T7kFzHQL1?J?44<;RDjND_j~{th29}6H4`RHS^;#`14w1L5bg2WaFQAQ)*C%8xkkP z_Rh-Qp>tBkYj+EsjiV)%^-BW^9-9Z&qfgojPD8ZYURhaZ2^Y1@N{^g7WG+RPvp+7c zNw#>7jq+c4@Lrd%MQlU@D=^(f@NIWK&h2Lj33MP?!Xo8~0Cbvwvk%E1Acw)i#zvqb zFJ8n7oh^Ajq^x#_n+Xu5jN8*s{{kyZf{>69(J9p0x_oVChfxOj>gel0HUR0QMHpP8vI5=7L)z(!->RgP0CsYhZ3UfGv{x6+sy!p5rNZ7mH+xSwmle}lNTLZ z7rQSnc|sYfxSX}v?IN{D1n@Eh=x6xjM{#AZK$_c0-~`Oma~p6|ih#kO0Vui&*wOiV zKdX`1e1a0qgU#A_p_Ucwh@?DLKZgZxLjW#y(n+LiED$#_p$w#42?DNMz+{?1NY!UW zywb6fuYm$9bwva()q`Y^O=6}c|UFdoywh2^cGMp!FzgPysGX)Qc z5cbTG>FI8;CxGpGZ*R|3V513ygjSFk6Z1R02a$cD(K#CAdq66lHOX(6-YB$Ui-po%E0e?zoPTKw^jqnED-5 zEQue#v$PEf@dTmTztN-WHi?MpmCBOP*@WD1k1iynQZ{_oJ~Qkg@fi?<7>ZB@Vg%CA zYWluZHW!=_y1~@^L!ocN-P;9Kiwk zV&L=GtOZP+TmjuS0@ef+2O>o`v!)EM{j5);(qny$V|d(#WVrn%_OmQb9@1br`i6zF z{_?-Tlchp*hXIP~Y*fk99v~{?%(lqZI6@vn&nbOS8GFso4et629 zg^CAy;Vzb1lY5HT+YcCYdtX$pCFKh0?{g@5IenP_nuBT6^LkH#T(Y3?01A>=TPz{N z!Z%FS*-{^f)9EZU*?zqs=_9)ooRR|g2i`?6P#u+7EsKE9eFo+UQ~k~{%)=cw9jx&pX;OLSp6ySxZSY<2aM zlM@e!1v*ek3>zN-QJsnK*ybq*-aF|X6#Ob&Mf;+C$I0mM2gr0|wuU=T&mk5zA z-`xcS1tCZ(05qx;Zt$DI$H&JFfLjs~-}92CO$?MghsXJYi7p7eqG%$cqd)2Bkj1g+ zZh+DigtOzmx2Oa<4SpKh2+1hev_X?-o7FDtzCI3P3)5QX%4AU0THjuz;mk(rWP+K< zVUihM6o>_$LdUri2{>f|>g`uv&Ptb?8=u%5l#sv+aB@Tsxq&3^aD<5ffd6U00kD0u zkB7XB;sCt|H@bh290Ce1MfnIh{pI%ErO;R3z_xh0y_>d&cRsv!e>0u=8B^nrdEl>K zD8(ApE|j~vO%~Ze0+1}=`Ws;P(Fx981DKn2cH2~O%2!F4VwGCGT# zCnqPpy>%iG$eSN?{PGV)yPohu?obYDY9Eld*q*Fe%ck(RTEbE`!i&uL98Kk*&q_zj zn_ld%7nfU1Cp!GlJWh;7VS#B~($Ow8!|5Le`&L(SNZDA7Y=vV7>jun+QX4uFDv68@ zCKIQ14@IUe{%%hV5^8GBquRQFBE-L;^ggAaz|+%kyw28@&)y|8>~*p6QZwh&RI$l) z$&1n^RsY>3&(m5bR{wzkb7rlcjfFaJ(WZ_Bb|T~P+=6@iV%_snS+22_m9Id`#uH-` z0fZ2dE@x_q&0l}IhclmTO+A_~dA+q*O?~pG*e=C1R7tyUxg+0}RLDNnfPOgIVUJ_l zGG=*eB$|71OU4o^$ivG!TBOdd4P`_Zc~`6X@JwYAHlb@WH-Y4O3obYMNOS&~-Qgl$ z-5pAiX91~fGEevM>L#zl9>0kRw9camOT4?_X1c**3dT1sak)R=y$CcTjog9mFw%~? z@F(sm<_c#!l9t^T@kt3=e4kT#S>$aQ&S`r6<*fgWSYMFy_i0*QWaxSl-CR1Z7uPI~ z*#~)3@cTEMA8yiI?0*QTtbF2rJC`YMm*aQ{uEG89Cax41>Y{1r(^gu%R`-@XV`>(6 zKEXWfq4(QGk)|9Z4hIVmt-WU}tB&J+6}%SAO~fNhkET7E>>?GLqOMNyF7Di7d^_6L z)^u9i+h5DESfXN+fGFU4f&}W#5V5RffCvG6Cb#0g+B7Ul(-IZSs%27T0!9y!=5I?C z5Qj+cNXyE8gP)$9AT0S)5cs$YHE6^6ZTGi~dFY(q_$z^zd)p!5(@9kplOjnbjq(+? zCAjzv;rr!i61+B8LQAbzIIsQU;^In_@R66v07Y;9w>~g0Z~yGzNB_Upp{uJ#$nI3; zy^5N{#fz_BFUs9-9|844SlW`_qVuLe@syB@pdI**f)|~L?+7U77%M7bYKGG#pYL)X z6_~I;_N!;#OL>HSWB20+80|{yT{0@}!wn66R=^JGtufGo+`C>@2A3oo@w!`PZ}2)j zQ&Z88KR*Bh&v*oCW+vs)oEZA*5|_9xsjcm~Sjfv(H1d#=^Bc9o&@)gu7d_MLO{`va zDWcTy&ZaG%-y#>7)H5dEEDr*SNov+2;`fa{5{{R$iS*f1Ct(^1euC}gmF5M;nHp1-{@7-}Wj?2zv%ec88Ha{@my^G(vs(5BW9dsY1zbfhfz;*cFZ_3! zTw=xd382Sh5M9AH0oS=Qqe10~oivl#ih}#l;*=Y;)lj>|1>Tt%yRLyN+7ctW_q(>V zU4vL=d?80zAxXq+W{FXS2^jIju#ixh?;C?DS-Vxp%fHwybyVQ&u7QPWm+#GfKQ}N? zc(Ci8nTb%ZjL~XJ{F$Jx0#8z_JTL8%-6sQGBzmLi#wzMqgEx@B{w=YW!FoI4JrF!A zeeL)%u9UFcaQi93G^GutK|h}Zc8qwAZG4R?y@!(OFBNWc_lK|Ne);h(UFjZI zs(j-GDz;z05`r!v{41-4Y7Yf}C7|wHvDI${OPh8xUeKdoGkA+U{K^~Jr&Ftr?$EQ% z>>j3DIk62Zp7vKkBg}N$cSbewKHN!r(-0+{VER^}HKiB*b@24lNn1MTE3mVFX;`rZ z2u{JSGIGWcNW~bfnjF5| zOTBH=g@bqta@|7Rhk{87m^zVg($wJbsdc{U2-HRZP2~@1+#?&t!{oehw-K0xWHRI@ z@kd@_O`?^Zf1&njo&>7~5-^?WyIWoc(#Gwv_9SLY7Mhz@>fsUV?L9I4GIMqV^RDu> zJEdHhIq4L&Dn6SVRmsr3owbg{Stp5;ZmLgO8m6l1U?Jyqo<^wM?$lri>48FuOj>F= zb*g15rD$CQt)^0Mt=6+GgX2VEHUSFT55gJO3FA}$PXXS#Xe@EUQ>+?RcSiL^bX^F9$W4+5Oe&pDCyJIqmex=nSb{d zqNxkQMqN~mL+|JfrFyegx4cXbiJ88aQg8tsZn7M1{QiG(WPngWin(u@^K4;WT5{JYJRLO3-S<35IafNth|;Si895_U1w*Uy|Sx_87b+ zT;4BfRoIx;+oL%BHM!3#*wL`lWd$V?_dmL6K5;Q(m_DE}$t2ad!F4r7@tQ)qVOWgF z>Ky_P-7|ovyV>_zerk%O|IY1%u@55T=EqD{(sTZEikU$m)rv%X7+q=g`P1OOUMWEd zF&3Q11+wItSR?`3MvRcS536Huld5$4mrpRp5^K}l1pL?VTV|uP)p=G<7}M#y`&Y?h z#aE4rBe)0YYqp#hhoPrN8BsboyBdRo=W~3fJB`iOvt$J36ch^5X+(TC*Q7^De#v3Mbg9?3y)U#yIaATtqV&f z6->Svm{-|ly1EH?F;}n(u*zS+@4gD@BW@N>auBuZ_7kp>!md7 zb6&8r;r?3O$VSecgRLXGD!Gl`t-pG3VZj&sm8#&W!z3To>x^Ux58-#Z<^6)fXN$?O z=HChW+=l#;p9QyJv3jOPzPagZrMrHgQ49^^vKH%;TXc)m8x3CfHcUry3|<_5XjNiu zYr*Bn@l3e@JSB9GRTFeSp*pCiW){dFDBViEvmlhuGw}{2j%TPha9KgN?q#e$+X?yQ z{{4zGHhayDz_PC}_J_=yTGfu*EV?ZYG~v8{v5;`$96erRJj zG&QIySmr(FsCdeQ+WwefzI=XvU=pvtMD%D!P7$^91D`5(!3I6E;Z2WZ{{!DRbcnvD zYUhD&BfjUPx4+&Kf3l9$kZ{9sw_Hs7Wcq?OClCAl!E}HxDy?)Q?cr`Mp{7ukdVhVZ zrTK};QK#FO}(r0E_3v$&DEg2;{E%ayH=Odmn!C+57bn}W|2 zDTHG6!t;G|;<8lZ^xjy8Vx;rpf9kk@KJjhxsz-WrXeK82xqa1%vds;5gG93}GNY~N zwytc)z#*isz)kxFEb*Tug`V%KZYT$BU{5g8I?cW`inyk^9lw&(QZt9kxsB7tK8Vrq zMdvvCrEb;ljwg~&~uCd+0__~j~%pa7p+wSzt!O^8( zN0%FNcw9fMoZTJN%jT$xcG9rAF4vF>9VeA2;ra3nPF>g=4Uy*0hqp}7Cel1!W3A0D z{b+K$HmRZ;*3N0bkx;lhG+UaNM`JX6|9iDNt?6Fn)(;D_`O82z{${i@YeW5~3Fn;@ z$}bHiC3nVs=SzWM{aqzci&Fim-=H>dQv66f8rwt4c)!YlD2Gz+f zBAXZ8N$V{Bp;2VI_i`6#QZhF(;zFE*f?4oirU__QAZ_3iY|o8|cCD^&pD>{#Tg9jr z2ukzep0f0fnAl|(L3<_O-0nh0f5`|=1Fh{got!34HhoZ*QLJk2ucayJH#>_w!|Ca* zM)f!_#r5A@ij@;QemEU=apulWPAL^&UEOA383u^g)G5u_^tBA&kd7~u zzM71BrwZ^14O@8=x}X2R@>xpi$oz$waMTN}mlem|NojU3+)1l>F4a$Xw)bX7*B$6H zSOJF{2t15z`faC^uuVa#rd43&kiI#?*NEpfur`ixs&#z*+nF`#UxbQQFN@K3MWVAv zBL$FDgpulxWy=}Qj>Ufte%#sKv|9!M7jGXm>vc(1skkX=c;N--7~1*HWbhL-oaK>1 zmK4_;R)Zl8i^ZZ1YIk1^>r*3M_Kl((TOjdrIbUyS{e&RJv9~4*i9qW@(2qdS?qIJw zggEnll9Su=H@iWX2A|_adus*@+Or8QcwxDiOZOQudv6cVC*jdFjv5DpsXMEnAgQ#* z40$u~GohN|vF$a|)1Z4A>Q$`q?*kL|8s0~334%=p_b=`sryCXni7#XoBJ(`!m6etI ziq!GqlW@}0!D!2r&LV1Cf^?wkC{lkl)aui#)vW3js3O$mQ6HfjE^rxr;`{vw6zkv^ z7r)R$i@6rG$arctZYP7rT|t*EL>2zo21JV;|>pj#QtyuYlsUcDuf{tth^4+vS1 z(brdj-=<&erm2!_Hvyx_Z2dQUh0*!#zx}^kQ-`jcnjpKX@2V2IFlj$*K4rCrmBFEK zQb~cZv{IbIE1dTJeyQnv3~#G&fGGl3g{bm`gUjWgZ%2CH-P{(l?adS(3f_LWeagxT zD|5f~_zz`C!vV&Hzc*ze75cJ?KW=dM!7)yEte{Ho-PuIc^Ss50e zIXzW){v0PV+7-y49UB)f5Ri}<-T3+Iw1qTCD!m_+1n?DXT;(uU8oL4S(y8%C@0S-8a=R6O< zqw21F=5?!;3Er?Y{_b+6O~{Aet>>@4@$j9kg>olv?Ps_2_67pY!Zx3ZFs^Cq-y25& z(dOJsj_0Dz%+HTxiHn>6_%PDsD!z6?RCb?l!(+Wd+8v&@I#Yg{o%78K?m`?ErgC2D z__xT@9(aZjJt+`vbJqe5lKJeTmOMTTlB>_!9ZaOkzMdZ&oeR1+QTdr2)1s7>tk_v!4uKfo&^Eq0`L1lkz&x{6L>}w)QX3(MQc+Ske_8!h19!zB0Gcd5x z_KS2VrGI5_7F^ZVi|a?hj_&l0%EOKfwR=2hNesvmME{Q7fyR#;zfQI4?E*n3iDPk9 zE-^p9D$~iw{l7P=%#Rs?`is?b@@1u3C@ZIlUtl>N;Hf%$j$R~kasGSpgqSTsQ0DC1 zWZ`PmQMcK?&^u{;-I!y2fngjmQnWeT49v}8^?AM`_N*w=K|L_lfk`*cxKb@@ZkDv< zg|{&=zsI@?I00dh1O9%gIs92|?+O~2e1yuTyyu!aegXk{5Tbk42e!j}08JYhDyuv& z4VuiJs3dZ8cP%WuWM?;!mPyk83LtiX!Y{oApG>dP1T0DA{7_5<{x-kBbLaU}%-}Z+ z3{*m}_(HWwAQ=f=Sa7qkDUnxHluY8foDkY2%DSK21slcx%bsX8xx{*V7ZMQaeA3R# z&C3e_(6*$MRGsxIDz`<9b>$r$*gkD{r`}mC-A4;O+~Gr_j3@H&SenkBgHG_zfnYKh zg70o9V+eG#PV2F1?>RWK)!C^5W(T?;x1NC*;X0YT@lIpp|KdV2fyAob!xdTB$xER8 zKA&9S!9vg-ZZ?*UQQG+R=;-GA4Wp6K2I#2$erE}DUIIlJs2*SKEJExM|Hu;;rG9}d zjO)8eL6T2_4&Z9E(f>|a<_!>I1jp#Z!W@c-Go7AgMm`0{ZML|f%HS9`)yFs+9D5&; e{?8?j9%4KmQWoVn&%oEjB0)aOik67zdH*j&cKAR5 literal 0 HcmV?d00001 diff --git a/docs/images/redis-status-upgrade.png b/docs/images/redis-status-upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbcd57e646504828322e039d28651582aae5c47 GIT binary patch literal 46266 zcmcG$WmsH6(>6##0wlP*ySr;}cb5>{-8~Qp4#9#$g1fs1cZY$&-CYJ}56}C2E8lhP z{@eL8XO4Aub#+zUcU4cgvZ55?XS~l)P*8|6(&DO6Q12z6px&v&!2oCI2&9dHuMaMw zGU{-^#~02t4ET-fDxvMF=3wsXVdQKEWnu4NXU6Da;%sJS?_%lTdIsGo1l&aRc9WR1 znUSlNgFT75m7N)soz(#eI}3@Cu`>x93mYd1D<>ZZCm%b{hUW<-6ch=RjQAII&y3?0 zFa5;5cE|X zR0<_SYUDDCYNPHXk#4s2F)|7wx$o4HS(&2X`Dkcz;i6c)1p^RBm>B3-;5s2kJ4cl4 zE-N6&*OYsw70_~Htg0+&Fp4PL)R5bSJJj1@*sVwe*?-RE(V&UKkp@Hk@84Y$OYcrO zFU8DI z_5z%NdUtm>`wUGR1zZ&bu6~lG#YIG8EGa38U@~Y~KRSx6taMn}QpNd18tgG7eq?TW zl4H5r>$oZ(WxV<8E0piqi!yNBEs&!W3E|``<9DEvjC<(%gJtM$;l3qgD{p2-siC3K zv|?YO-%KXah$32t&ZasW238@<#|Sj=yT5{*w!V0+=ZuWS#mlZfUNRIi>D$No+gS|1 z<8fb|BO9@?O9;Isy9xXv@bEjD{_@>gUPQ#_7Pli9Psz|0*8^28oFU6N6j9Gu42d!2 zSLXZD&mA;va3a{m#4xv~{UDed3O1hauaAx7>Y9e_M=!V7Nwu9tPZh~Cn%B@is~V3? zLRlwZqB@D+!^5&rzJ7ieS62yffW$4S^JuJpJ`n59X;oZK-*&fT`}uy`88t#cI+QeZ zgnEn|{&adev0NF#+7jS#9>}a@xEXDL#AML%zUxO%kTedq?4JN^cY;n&wScu&;lxlW z$kvSkQdy|n0ca(gLM-4E{zQ@6kXVt2`D#3ioj^d(X{4>4)BkDT#wZGZ5;}2neev_^ zQ%+d?TlqChwK+Xg?u6bspwdk(7F_Ejo|ru zm{U^nIUpba(1q@~QmuSIqr==qcQH8s79%qd3*^E>otAzkUhgbGGS>G*UVXk~I6LJX z0p@UnOgP^UOS8H+TTMiHv{c5v4&?I>YqVyZMZ;72IIw0f zGPAT9Ld8mkLT5eK><4~9_?9E6~c3)*AvXZ|E9Qnh?8lhK& zR;91o|BSx$#=^f#Yeeo87D{wj0VNX-FxPNFIQ-r}c{zhoI9?2zoOgy5KE`24io$L9 z0c!@~M!4$9*YA*u*5e}Z%a;|L$x?i&2@U6>rl7dLftHUj=l9`}zP@!B-ycPxQ#tam z{oX&bAf80WBHQx1WVDd>O;`Zuayy@-1fV(YC~;lGg(+_aE4m z)(1A8!P@ZwIfEx&2nN*3Qwz&hM~7RqLsGt!mQuCWu5<0)HRbJxJ61bSV#yG9SW9Q( z2lor3hrteg$7U~&30#cH_H^b~3sIb(fr2U}mn|l;pWl`(aUM;JLWhu$JdyWvQP+S} zX4wS2C@tLCBIb9Xdn?xpdGFd=rYb`VS$GfHxWd8yt8b0-Bm0ZpBGr>~@f_MI#(nJ@3UeY_g}Eq^i^%|y|JG-+SJj`JP4#-v7Mdt3&IW$K-=rCy*{B`(Fj2wG9pj7w( zivD2zBmiBiaMI(y@_cc$DdrGOj4M280Ga^guAFSpCZ~%yBK2pzG#G|1l7Cgmu&`yt%BN-1Pa&ju98f6u8YIr_S^gVfok-kJG|2;ZFfvH@-}du~nflK^Gol^Vj$j!!ht=+_@+ zV;-wQezfdxH{*c?ZffO;z>#Mw#KRl$pEUzCrGbfOcr@=-7_qb@p0C(!zO;Tj>o+dT z?E=dUcremnt)YyZ)~XX}+Ct{9=IWN;R`ylw;wE!TnWbducvV$(Af#T4e)ab6&wu@~ zAs6cjg2p@UX^cb`d$i{9`x{Zuub6N>e+We6 z9krZ82h;S%=I77j8f*+a--(qF1`eFBl+}gDwVHT0Tv^#D&Raml{AZgHs{63F-)>V- zy1m`<)7R>Cn|Ys;wG93${UH{fg;)$YP3V{CsQmNwQD><*EDgRn?C1XZ(MV8#_^6d& z4BViwQ*!oq>KPcOnXNYRlb_#RPE}OIVX3cML(sG=H()33!mUVv`AkT6a_Wnh%gV8s z{`FPgwb{$kRalmO`5N)sqI*3{;k1Wd3-eV#eYjETW(P317Y+lI9e#!^?a)tm_x2{TmPQ|%(L>2S zF{IKJxdgxHSA(!Mx!N1^d3P;F?rGdRL}eAX5E(Ha)YVdYV6>$|yy07$W*r^@G!KD-caQ(B+U_M(Y8!3Tnh!@-^+usl zzbs?p4Fe~nD^C%A?ZD3} zp)&+xLYjZDVKX;2^FqF7BkWIClU`&$pzr?Oy}X$-`z5Cc<`rL^4}h#re#FKvW+AG| zI^7&PWQ{N-eKr&yeHbq7A-2FR3URwt3Bt!tUemD=9@gtjzs0ar^hAyp}!M zM)u-=?u$=-d$&k~E$Dq+^av`~<9>R2+Mmvk)SuFYBW;sb%nnBy8G!X?B@bE`3E(0W zkh;jX-gNy3h}#S@#O5%74#c11(kc{uWu>2|g@wMvlLAxZWnbY_Guzi{nAN^B*S;is zV)-lT^CwdAM=}W&_Q6oC$Ln;)fiz!*zgKLXof}wWtGioUE-S2*1IfUOL1rr~LY1XW zR0ZNdCc_SS35kz8J3EQV$!Z!JAxkH_hZ^@0^_E$05$E2X6sW@BV6~lprPYI)g{8_~ zaVokm9teaRD9I(p*0;9Al9>z+Ppwz$OZULM9UUFcXLM6}4}~K@>~;XIr}y{wzk7HX z-nIsOfz(?F2hJH>Tg$dz5onw$Y9DFF5X)({jwBNn76yXIpPikZ7!tsEW29AP!|-3b zArQ#&)i4Ouc*?X#k}IBLRX?D55|-Q9Dg5&C0=#!VlPh5pFv@Lm5jo~Xj1ktaXM1}C zZ?OyxT4TBUY;^-q31b8hw|i#G*V+FBe*$s8l=>-#?G_1NdX@$NcCk%PG9vBoOXy;> z#4ikqoMw9l-)--=E_480kVo`$9D+@2Qgc2AqIf{IQ+DylY=Bbam>h1NK)sn&l#{@> z9s>u!6un`EcmIEVf6s1&4)a+{qStEjzM+$)1<(bcM(}{hS7RuFmY1<;BlvjpF$$Hk z3yO-u*e%8#Z;y2%A|q*qv__k+_GsLGZ?>&(Z}vqd8qyWkiU}STkv9IyHBP9K}Zt*T@btt1F)}>`mXxsb^IF zd0M7q%4nB9NL3x@9anKG4m$s`fq=`G680ArA(r4@m=QUSkS`CpR7{@7*{WUBN5Gf3 z!l+`nv2dkFGj~443;ICLcUGBst6rgEL}A4wk&L>|9Yx8+_OYj8C;$EpM)*YPsmx;F zyRs0s#EmpDc z%H0-F7zhh(#HkTB^H&OP?&Oo^rJe`P%TW@TXrjSiQ(|zqc$+6h zj1_mDtkk#Je;i+FKSMB`uSatAnL49{bYrdJ!)g0zaiS%?Zw_}(iU4gqMODREF%i1o zMsKiP3UXW0bbhV>;Z)!hmBNuR7#@d^&61JzPq3YE%4T>x$;lLg8sq=9D=t&&&SShY z_337)*O&a~!R~>;-TIH!7#cv|2@`UPGF_VWZ5OHnA>17ky9()_kdV!f>sXf|>oolW zJm94ZaJygj@m{GCQjN!w5Fm5bt)-dN=S)xYv9u7$+zWSsx78AcA#pO>AB{ic%bkE+ zD=dy(zV));gk#((xppqJ8sk2}cSb`warx2E{(-w;!cKtTl|^PviHwP9d}#_$@;Yc$ zjC%5rkdQJzKSqa_9fkLgAK31F5>haPi`BBxY#7b6%#Gl=MkNX?M&3Y!h zcTqc=&FX%v?Jxj9{i%NNnnyK%T&`5?<$i!r#Kk-EijJf*{#!a1t!L@aIa~#Vl{-?U z{=F?Gm8y${Xj{;dL8=uHrPz{!a=Fqz=63?Um6evebrDfCFVeQc5L%FR#F za5wH0Q{QU`#^Y~FZRzCbbe^BAsT9(-Po#lIbmO8h>i^as%^P#zv5rpFo=0a(f0-Q* zkqoW@4!@=34p?&3xUc9sNWG0L!Zfca`srcOu$IY$5FYd_zKgK(~k{?`b2zU1wU)S@o6WW=@)TU!H%o0nU(g510DjQ|a9VG4nSW@av5`0We@j z`G_1%^J;DBjP$|F@=p6T2+89eBGKau*0A665z!?w(cu1T!eAS<)QoDr{sq`V$7$c_ zt9&PSWxs)MTZ)CT|Ih-H%=^1BnKx^cH7TsfV;2UG5%Ly>bOi8zd#42@Yv)u<}SyHWQM~Q zbQOzPyen$(8wD>=K7sNm1#qvVgzlOev`co?cT1m~rvt9GgI{-tLf5{5!qW9PqS0={?La-Ply{v|g2{18^=s0V1`Y`Y%JHZgPy1qw?M6dQKa&3eGH zPymXTte&cWPp*fBkMpM(J{Me9!YX7Im9>+*FCz@s^z} zKw}iz;Wf*o}A<(^x+VT;%Qd6&Bg>=b7Gt=A*x;&p%t$>8={ z<6=UPfJ>bHh3H;%b-P!l?W*(4lm91Rld&iyROla!_prqUQFcyn#x(7g20yR(s!EPh zo1N$8J+Z*P4!ooj`^^v^`wR-Rr&+CCWx!k$KSH6yo?1*WkzC_5EM8Htlf8Sw#TEQs zGNV{hyt}}}58X+q5Jo)d_W`|AaB^mG!IJ8BwWng)`cKePCovV7y>H~0fwdi9LQLDl zRU4rg;7H*wuiU@K94|&$985KaHkxpxcQVCL>g}Oyz+%4oCKdYQ4%X$ty?@7)sOEI) zGA~q>-BP@eT!QOWfw!#a-hR!L-iWET1Dio#;JxqpC*u+xWue{2fEaL51Fs0{*k7(a zf;^dQgk>JAZ?|LD1FwDZDS`lVr_*eo-)I83YRfNglaWs=cmF)Twvyn{jQq6g5$yz?tCO{exy=*n+#!j0Jhh5Rc=66g zy-P~wIod@R)I+CAR9>eOlV0Tz10+XxI zfpurjojdkvmR|sgB~gvvRFysPqT@hy6J|+;w9?ZWaGt@}ntb}?zRr&SGaSZY;ElQr z0)j4y@HIKpfd|6X7^i_J>Vb=ueQ4kFP5+W-vM@bDcxK^|0EIh;7y4U4#c2GA!Bv#Y z6>TCK@8m)%#+_t%Ve;$hvmD|2IP4e4lwZWusD+E&%md6D2U5;(_q&!&`uv(0-MvkL zJQETu7wHgHnGgJH;4hmQ;{R=bdo#LRo?CHXw2wVJi}T--3OGNajPvO-8~y%l66MGDYr+#Y!amWp1E+!T=XLe)q4!JKO6)=xtGsTS zfPnz{-{MWYzIZuEp#sC~28L+{#5~)3aslIV!Vl>A68Wn!GxqAQ&l)c_(|AZqa;CTH zuLbyZ(BtfiU*)~SvxT2s%*Qhh{>Qqc05+C;)rEx3F`~md(6e%oR{W}@dF{-5M zzxhA!4#$wNJHDC_roOQ#whU^$Xg3UqoecBY?!d~NTr{z`Uo$k@pmVBzxSx|xb3I$F zkpR}njH#juemaj6S*y@eh?g-!B(>lWEWL1E%PIX~j$l!T{uuD<+eIFAc&ep2$f7lm z1R(De0dku8{-(yzWzzjuSB(f(jAvAA)?-*iB&Gs4MtQ-e@kip97jh!}RN3`D5hO6u zWodrrtvkb;dlCm8#pANYseHY6bKgED`NQ!&G3@?{lM(%qsI@WIjqX;^{Uz zNtyH}Qu9de=6;I#weig^du#!#zA%V*+b5QQb#D`o$Z@yc>W_Z9S?R3Vct+gMk#Y(+ z_Pl1lxkfzOI(mgb5IY^)P*HleV{K%HH*t9UmvS^w^mx z_u>AzLOj&P3XLn^%_1g=OloQw)|lJSw7J!nu@Df{{TzaEO256I{PF)YzWYA|)u({H ztDO$!>XXI|8dnz6Z4?*;e3AVslpyk;PlR}~gTGLMU_Z|EH9q@&x;RWK&7cP$X1MV< zk+59&GeO_2u_7_=ShyH995F_WeO-)`Nxu<}#rn(RnN;D77k>lbIDAqtBr>}~;IVmJ z_fe!`2sQ?%$O)KuMyt05c$}U-0MT)v;QQv1ip{;V0naN>?+*}?DhDXRhub_KWsepJ z62%`2s5BzHmXFr^Sd*9m(ZVkV&lfikyQ($%Ijy3Kk^->C*v>E=lU9?XfwPK^rp$fF z=i$s9eLh3UzWdKine=;`i;;<0v^yDF1enQmKu5=a{S^zt!TT3Bh>AeWm9fzi%I>@^ z?F~6y`KhN2Xrl#*gbHWjpt z?NnC;0B{m!lDa{~8zJsdpH8n;@uz|=Q5DF>tp7jokU^_EB?-&-t}c-l$i8Cb*Y^FD zR&Kwb2b5**lwa#8qGF<-5E1hOUSEPkLRi0bLA_;w+P#3t$(0O17S6=J=kHv0NB^C; z=T2GjxF6#@KSChZ1%TP|6#M}Qdc5#ifeO{G-?|=+m^gOn1m=%kqy6zpE2uOT4ITad zya%~G?Jb|Q2Y7PodK(ba=H_ORu(Gy_%EnF3{zfSAZf>klOQ{(~JCT%#=jY#Yj2MTC ziQ3v+lnB7-(ogv9ZYc`T6QvTD2~Fik0R* z`+q~F<>lYNqQ{+^H}yQCd)@P~se=b9{|rC2rK{ZpMeYEbtq=OAOWF5t78^j(e1HFn zg`#0$^(QC^4V?wN`pC-4!hQPm4+KhXYZIt6hlhh(=U=-=3V2*vJGFgBiB)r(Cha3H zHU5)8pA%UR3rAYJCMvO)0&SE^9)8}$16l%?VjtV2+>ew?6HlRR86++|uCGa%#v-21 zB0lizvSn-rl*LKW*Z<8QEIM^-mXeE@($NW{XCTIJV@xjN*}gwMuLKCIG%lwI9go+U zA{3c;chMp{AAozlM|x|UwG%?*Y;5sBK<~{@1Q-%+hTr_wN6R&FzU`^OI_BMtrU`0V z$2^0yY`;2$63WJG!bS}LrLBl)zn3v7FI!W+>i)54dmTycFK^P`R3(%dWo8S*+v+^H zRFn88IbOROA17P3z>I!=r#g5{S7Eh6zcAm65(9pPh6Lius|Gt`so?^vN@+mYGr?s@pUlWWDyuA`AlIVO zg(nsFA=j!q?cE(s?GZy3>|Jhl@!HGuxQl(gL-udAL=}FTZ^XeP8g~l)(fD$KoTb~I z*0|=MPW-eEYnN8(u-0+B)EN5?8m7+Q;#40?sxWscUc$L^{!9_j(noS&Nn_#R4PzVn z{sYVsF1tBGcA3El2=Qn7S4d@>0Fi#xcfZG5R`2V5t`TmFaRMU$J0t(=T;h6f!*N8~ zl(pEt2i-P(Er1Qq#BhnA|Xz{D} zpRv!~egwWU4lns}ciIt+ma4@*IwV@uJ=Zuf#M7ht7m zXlN{Jh2AKZuR!ih#_!>vP(G6n6KWup9RU$Jl%8^d`Bn@cfd$G%;mZdW4gmt-f?b+Q z;f&MHFlNW=Fh|D!ss(sBEaf`U`d>!y=AbZ}&1@J0s{0YL*VOZ_<9YIyFZu+b%ZlMl z`^a9&X?cUBE#Q@F;(q-Hat$CquCxC<`zGzWfLDKSz$JLZ^{291T+R!>y!(*AarW-g zzcDy3`!!1*X5O#;xjf+M2XMK;Yra^mQ1*@E%Tc)V;{R^x)7;#Q6W!mEovq!L!fMk0 z4Uapf65n5ZR}R$qV(8^1Q18w8c+2UQJo}p)=%GKPb*TfAUO+FaoW+yxB8w zvkP?swNl4v^_zCR=~YiMlaaj4Ka1`UQM9xK9j@WPVC(Ng@Q>J2<+r!DJ$j9&O$v0;^KK6%4 zh^@(}bJQ8q1{iUC(4RW1r?)k_+{-A&3B=@GDf~uDE0(YtwBo~92fpD=g%%ZFIZV0Z z!mN-ncrp~hX{@}ysZ{T5A+E$8X+_Zohot%f=pV5pFjg-0oVn=ABaUG9$= zBAX8oj!(h1^Ly_TaIa7yFeh3#}z+VOj{FH+sES45d3nr2{PUnz@#w(T{u_jn@2Bsn^M>tSgs8w<8@^h)0dd4Wr#0 z=9(vbU4cCxw*_ZHqp}MU0=Ng%atBOtb}37BSfxCAwxVCZ?(dd;yFqhdx0m+|UA{N% zOpUy1m|v2)jW=7^v(M}D|31e@UmRO$)hw(GMg<7vRDkzqHxjM2-&?hJJpm_uLZ_;- z0aeT&tZQ>cn&YsDBs8K z_;qmpL8rGtlKL$Id0PR>ba055P}_1d!_2_18j6s-Ginre&X~S4P{&HsU;t%E%6^(Z z8t9iHcgr>fB!oh~MLNe-MZB+~<%;{RpRLKZ%pM!LRvr%sf1#9=- z(BzTqKb@CEC29}TQ0g^Gv+lkQ{)o*q;Ubw}u{N$P?@szXI_jfS%C3d+QUjVx-MgOI zK5ZMV(#h_cP;0O_XbH)le=&9dg>(M%H(oUQ z|3bZ5kR=GoLa7kM%}YVViGo2;OVD=XCZ|00ou}ykmWCxJx=H7JNJu`;jm{!a6V(?> z5qJITQ%_W%wzV<8M;RF@-)FJ9@RR|pI2Nvta_9reW?wLzVi~DuSp#`$!-FlXA?1-z z!jwjn5=Jcjzpl;Or_dXtqlgD)3B+KGvC1GAxDtyD{xm;>lbr{>c*k9yn2QL%SRF%h zyn+hSrZ6!#EE&Ycs?pfFG6sn&P0iXq&8VZ(I$&{n%kyzFP>tJm3($wxHC7}cMZbI{ z(3{9vz>%LZknF}Ew}hgoI#HnH`_I-cgq zoDp4vF{72@mQNH~=5SXabkd4F#64=M!Er~t#$yda{Y3W%vrK?HGP z8JFhTBn`L1K|x+=kY2r&v{{y}pj@HrjH*UUzKF(r{g{f}KydNhO@3B3VJe-!dd@JN zM#*$q$#pHLI7l`>u|(Z#Bzm|>V4}8ZtXP(xRAFb9qm-dkU4i$!OywXTP76|NVplf( zY-^K?OHkQIcQQIx@&{atBu8zTc+m{ztW-~`U(vMJu-e+vFt<9HhF5>!$dnyv7ZO`_ z&Seu$-_v|vkUOvC8x7*al zFTGYW(DSJ0)v>ZDR|7#*|7cEdlyKOL<@V{&IYn9UC%#aAwX&#Gi?PmE-+7lLBv@q6 z@A=!n1wmu4sP3ZLI&%w)_h_kJ{h$y;AVyuQeu^uB{_(EfPkmbAgcjhyoni+j0uH-7`i0x7LQVIC3%gjCN(#PLt-}F z=-e+=leA8hkIeBk4tL+z+c&6`FD$iHoKgZ|MR*3E+vmn51#$6UfZ%PY^gFTfz39U( zudzKjHoaa_4cChgyh$nb(mKP-7I&7Wk_jKt?#wOnvg7bp6&^O(QsX;j?)8*(w|fja-o- zn(|bQ{Iqv}uPZ#k*Q+q|)kZB|sXzY1CXp-&sT1Zr8g+g&lJ!EheS=W|H|CW(dV!UU z>B8S@ZH3&8aMROaqq#a&wgAhn>!^CKD@7;{^Z4EQk)QC7zcDEUF{DI&-xmi|Z@6+f z;q_bf#oG*A%9mO6TDkLaHKO~VZtv{orYDJ{5dWD%6`m0hQK+rrmD%Sq^Oj6^w=g1% z6BlJ44`_1FN9X2>7iz(@%o?Mz!%$8UtKk2gHYxSF>ta#Oqhs$MHq%#U8feN#MBugK-a35X%^cVe5TO zYgmRbBiY7Z9<+|^(KLhnL_U1tPD{YJs4&rwF?iIt zj!2F^cis4-{bU@|iAlxOV+-%xxH>B+?)CS)eJ7$UATxDPwzi$87Lnj@tTfEwbNov}_^CZRTP&1L2(@hi5*9<)LTO+>1?O!V_pl=fa#R z?Vy-psS3kD4c4a9u{*O=`za%)4zl&hdC$ZnIM=Q|Txpe@Tq1KYOV9^L*uU*p+)@x=fTxELJyF>)l z#$-sXz$bCsn*}aYFXz_CDtlfLGXpWi>ev+C^A|ie4@;R8ub#qD z##;%(P7>o}W^&sTW44%gMpUEzSZp4%qs-t&qR5_LFL`!QDYcYhxho>@Ow z($p9VL-MQFBGX{2+Oq?9q^~p^ixCi8R!q>EZq6jgbssz(m#Pie;$EgS*|H-XT1eiX zv!mKD^qI+1(Z0{nW2?I6Fgf)I#RaoFWOt(5QInE>X@9<5ddo5718&;}&G566w)3mcGa+S<_*os3jGgBV^%Ozx{*#cKSExDg~U#OGS zEE;WA#H5^h6)nr%UlcWirUCY?Wdn^S(5!Tb_9;%%K7Yt%n=t&VT9`g({aC*$TTZWj z?3p>O#6@?dre_mGsGKSst?|IhdBnk}VU~GqI-+Z--U7DcAk}27pUqBjDfQb>))9`> z*!`r7xs9FYnlMK9vY63wFZ-V+zgAwWZO%;_QqVnjmxHjh4F0g~;U?KfeZ?)LC~*t5 zArfv@VazPoYGL)xC$7}$Z$6q01cR7?)OVR|MtF!jm@j9 z8^J0roxX_}jsA@_y<}2T$10XUvr4|g4DAXa^>JA(uQ^%H7at(d z_-K9OS{@NlzIx%Zl97YYk@(lPRF`$6EGjoBkxIJsdd7HeI`$Caas&x&OGeW;=E$8! zoTeEg0TisWW2M}mnGTq@r|Snl1ODImd_;Il0gR`nzh%=4)WCo)C`zjz*(yvJwPF9q z!NieET>?yM&dkd0FBg8+fEQl`7-*n~<=Q>*_s+PP&NW;2+M2AjIQ6(=Z1wYeFPQ?B zUVx@g$y~_J08Gu^cD4Pk;B7mkpoxJZdW>qQA!b2R(vT6pdnm=6`Y4pp_F1Bkv~Yqi zyrzcjGd%p+Vi4T7$k{8$mV4-0;@YSbe+HRm`EZknbz4RldS-epsrI)T04P3@T ztO0-f*0MQiKowHvs3<032Ek@#Z-?I_4toJ3HDz6!(^mh*Y3rFc|Ihuh7_-{_A%=;z zJUONZc_nI-0vH>JRD4{z7Q zP|4c}bNdj8g)+#c(!2@>uo7RR-pvr(yX6j&&5wo|U&L_5y4oZ&Fl3>MMe#&)Fmv`xm{fsH%z|!4f@8R~*72j9~+|r6pTqn7k8*Kzub99xBjXc}t=mN$j2fI#A zqld8*zv}K9lK4D`eIRiBW5BM5R}*H>CfkwS6A8Ryu&b5;1~|dL9J&W)+@OM3HVb!6Oa+Hekg3=bIkP zkezqj9Sa%=TlpI^$sR5`_lF^pwiOEVulWZCtHJMOyhAz&&w{!0Hns~Vzs zbhOdMqXcJc>wlO9OX#1L&;`Am+uRn{2fuAi8NzxvgwdB8l7I{XP61QDE_!!8^$(2N zcR!}S8(E{3y7S;05_}(#>?fx}cu4bA(sq1bVMi~MVr0IKkVm_Aqsi!;1SJ%< z?LGMy2Jf8Y$5>5C%>O;4#g+6!?0S|qkT_D_{fW;}hzw^>XNlrO0hRepg_$feq^ZnE zI*{#@=M*f3`6Qze>N+`9A1*akHk#BGxgE_HdtL3;FTba!*DyPIg;Xf_9~_j3(C&CL zYFb%TXnvfNEglxAcMX!n&8AnD)hLO+s(ZuIGpFa)W=PY;b<6#&i#)>eA!B2z`LeVc znT4A2MRscc#k9qHA#b2o9)RTIYV=eCC2oC5)<+4F`RUpDvhQH9BNci&8ak~tNqQRKJI^GYlEjj60NsC}y}E)Gm>^Wt+6@y=(kM~S=hQd=5c0>Q ztlR&=_Gc{>p8@9JSq&sSUop z3qwU|O&z3(Bf4@cSz(v@Hz&(oNOuy%ClG9`Tv6Ho2<6E z4m(qRj@_GquNWGa@?km@{7FhOY!k^i;l`3+HeqJsVl~-Bh=G~z)bg+64XncG3U?_fEpsqx zLN!Kbv>Wv@PWk)t=^+EIBBA5-$x z>B4%!x>W7Jpqx68?xhg|>o0b6>Jg8&2A{fnLt!C;ilM z1o85!#E%`fEsH;&Rq4zl_fV73T{%5k zKrxd!pAN-{?Ra#fe}2zmk~KhCRX(+fZnJ2L9K4@lo8RUW$^F;dnD{4^2~Y4jZRy+{ zt~J4=IUJ!NwL18n<#n$@?vUS5YvUtg?BK|L;&!DQ+r7vY{u_lCDRAx-V@3I~wnQ$LASK)vIcKoIqjv4}Kso zj*5!98Z(vi6Nzy6Vr!rosB2Z2urjaM?b>+%83|jtsx&+Z?z?KnxR50|$9MQ8y~XXh zQH8LGd6Om6zi?duper{QipWNqSs-Ibw~i<@!7B4PGY$zF?Ts0u+|tlnNpHSNA*B8@ z7qYcrD#1P%u7l?fotDFema6Wri_qfV~E&m^P4ixZ-|NE0;%kMkx@DJr>|XdY;;bcvZjH^jS*!;>V8yH*UH1-lu>ZK~yZ}~=TjWVrnmCg^u!ECu8IV4I?}^~y(R99?fsrfdNuEL&RlJ`A z8pecxp6P&PHflb2Ou<58(t6ZHA;nlrnQvbGN~_`L!cOUwgDeRhSbP-Sy>7~bJ+FfD zrhaa}kKi^#$qFA* zOBh@@y4S91PZJgOC6KYPTUeE)WD*Kb(o19I^%kWY>DQH+#%EDbAlrglFQh)XQO_7r zz=;Bi4vFkQ3Vv@_U%ro_%iHr9)fG@%9OKR_-&Fu_CD{f}H!jgpB zy(U|ljFc--qZx@yh)_y&)3_!!&|ML4SFkwi(_ySO9QUdt-i_vCL)^*wM%TlzEL+2x zKsfKK7yHJK9>Ld~3N>56V^nV~ynLlANc(iZTaSk&Z2#M#$nBeu zEbYz-O3uw_8fWB3cq|s1c?Jh5D;2duMYEmZB;V&FLkLhxTg3oJZIYH*M!c#=oD8wH zC)JIN!fR?PTzzWxtbvzsu;M599q)b0PN^n?YrqriGxZVw^pVPIl444Op%DPTB} z4!`-o1}(1PB_(t~%|Sb1ejg$Mk8*`IBRG1Y9?7_!a1&{{v^m6*5g>H~Gx^*i0-<5O z`6WwncpOOz6*Dj05daKA2$Yf&E&xec9F}hYuBeLuGV6{H*H-^ib{GiM=mqi;!~hM4 z0D-?F#~$7^05Qa`{^vYWcTaj#!I&T&14C2}Su<-ckoWuz#L}>u>gwX!+H(5pozGL2 z93MV>aC~|CZ;9cTw@2N!bKw2}1wI*qKJ!bgZ%79PKp)>M#xwo`X8{3Ni;9W8?WBd9 zG6n!f*LaqooTX(E(7&`_zfgeP82=Rv>04X+`ts7!VQ<%d(?&#Szy4n_ztvazks#^# z)z)?&v!$;xWc>s`ti*|Pvc@}ql#RI#b#LOb_NL^*ouzg?n6H?v=tXF=lSlONr$Ka& zjXhYnZJUpZNb9(E+eB%m;@X7xD`l#8n&po3vw-1otP4Rc}8IW%E4?u|q ziaem{X=x88B~&{7pLsk^mkpRGqk5AYYv!y;8TtN5ICF|OvLuwxmzy$8)}I8fj<)X zpZ^7Tc>nqMNm+0 zDk4x@iJeSvM@?hA!Iq%}em)?($<0YMGk6(OM%JIwyZKRuqHn+`O~rv9d54^Yd8q5G&4lTm|QrhO3TWV^jnf0VCu~fS1{q@#-_0B3qGy@c}?nda6^1BuDPat zZ5;2!cT#X|TR)g%*dTm_Iqck@lQ{j0(TBMwPz^~$(*RaNVv0z{qPS>nj0|-%GlkK# z1X_M18J#=ky@#4BR~7UBJ3!&MZnYve`9e@|pSsXc-b-ND#p1@Qsig*>l)9bAo@!gH zu_CKn?zqd}`Z0NPG*hI6yw2hhl9F#L-FqvV`$gEtf*9PNboM;4T6!AOI$qJHa4Rc7 zD^A+3P8Mh#_7~6ElZ`A;Iu8Zj!+`=US4uHCjA(m|Xj?W$-0Th^t=E&@NlceSbd7_@ z&lCB9DP46bg;l)#p)~nA{NdN;CtHyg{4-g*Y3qimTY&&+e>sMGO2uWKt9L&*+4nNe zyfW9G##4DWleE6-FYA`PaAjmR2v zpGu;GcVcIHO8-HYRT-k>_G#}nY)~oEVTWCxTrWAWdgxBj)ZrC(h5@uOXpFnD~Muh66g4I(A4n8_BqJbyvtq)TkL&pn7*{Mkx zjBlEz*VlWr@xm5ejtIZ4|HA5PQ4lfJ!}Pa9Bl2uKCG5B=Qn`d-w`cz>qub5Y_OL6n zZhz4dD{HGB@6koPs5Z|FIhDyMz$k4V7Ze-*!Z>ruQ^|5e6A{-_Qe}4?RF)0CkZus^ZYk*oDd{c& zX>Pi^yF31eug~-AdEYbR48t6@=j>dZ_A0)6yhf>-8&jN9T(B~vW4B2{BgeO}`?%Ev*2VVu-3v*^Blo$0Kuj$r zDiq7XsaWGeoXJ@R<4GR7r+ojJeQ~Bs^On|OZH~?N9h-!SUe@oJ#*J1kv}~(mfFNlG zTV!D;bAqE||HLktYnddc2yM-`tZj3hkd|jZDrFY-xFd{5Xu}i0=@xWG@Bwr!2Ii8% z)OC~17@3PMRjsjw*>TtFIOLvPTU)zijJ9vi6L(8qHi>U0K*`)z9AUFvpiInNc_%^s zq#-k1^7Cciav8r<1d=dC7uX@5md`m!7QZ6-?ug6KNfeKNRmLkQ;z(DjP$D@d5THi*vpa0km4Kv zVa{PA^mVMvSsv|6j~tk@j~2E171yFk{X5!yrRMoVA+O{T$HWs^N3~^ylrsC#L6qB( z5N>{(4=6)-e=-U3JA{dw8RU+(p~UjKa+zk($`!(UN$BY4hUhl^jo8zvlgujkW9!8m zJ#8bat&JmfwOT*FSHNQ+F0V6W2j8SN+BILv79XRa2HVpNX82Y!4OLDfMK5)A@jJFS zPdCdcNJRJupI-tVg)5_f(@mCuA@WdTc0LyD+40-@*lxIFw~d|9WA68uL&rc!>iWFT-h%gH;Zx?*bFjM!TkK7-gwUvyw5rMz zz%rKlVZ@3m?U_<7ODrr{FlZMQ8YIYKkQ7rIU3K!#s#Y66p;M`n(K5W>=R*-}j!mm? z&xdq!LYDnRM+C0`lE{#WZR2B!WWR6u>e?nUlt#@$s{>Hmuo)U1Uexaw#%c!GE&6Thowhr<1(?=pc`tFy zgHOa;YK)bN=gmK4?hAfWSx>&7{&1hpJ(EoGTMz6E^;v=RsxVSGIX1TH0UG-yDq#t_ z1tx1Gp(CDD9cKNxJNV*(h);XBxCjA!A>GD#wsRZJesyIYA=W(7xwxfev6-P*J2yFHXcc|_mJGt;WSV!rs! zEsm9)NbJcOeq_~uZ*x4C%*1^w0+Sjp2H$@JyY0XduGXx66lW}qNt*m!`}bzh zt~0m{Pldq_DT&RN$u~RLj)p8X}=bf1{ZBb_`D>IK%~HQxKJgv6okCI(ijj)d9z}sWtRgZPbK3(+ab&kt+khhtebV!K(UT!-`C1d(`!eeR_P5k)!{v2kvm9Kpo^?AecV?>`l0wtg@jl_Jut_kE*lh zi6nSHn2ZBz55CQW^!fmcvR)v&7Gs$}DqjvUUK>?J_wj4(Nbk2(cZ{cgu`^|ohumQZ zMkWMb1FXzk^gnK^KDQd~VPJ0)dAaPix-1UQmFv~k$f2qEszvB?3@er1eIkGcmT~mh z;?OYor<^(5FZRf`RDPSD!`~G$ghg=I+HOl0c3r-VANY5}v7(0EOP*I7B8gtQe^p0) z<-;FWA$NcPy@CWgoy8F!sIL;MZMvn#uv~<>71IQlan!=URH5a)*eof-pOH-cLYimk~$2KZk*ufVv?rc8{ z(*_#S7L%=dFo>-0Ur~e^2Hf?}Nfy!H*}wn7gWtG1GD4mAg*~!C&CjtcrfbYFcQlEQ z$r1BG0eF^rJ0(>5yh9l7hUsojbXPx}6rK*x)C(H8nKWWDOa0|Xip9&OC_a4)N+U)SgIKRx{Q$Z`=Zi8ra_ejUph7zOJa1aACOlV8hGOiaNbi<$w6*Ag!_|wZm~4RRXgM>woLyl-y%f zoR^a}Lj{^$qN0b62B>aPU1w(dM};4Cj>|LRW|B+MP($I28V*m}41UPgGe0%$u#tjR zR`fuVlTNS58E~-DHPTmRLkS^+C9z*lc!~Q4g+3@^>$=46Qju~6fV z=>Y+uHn#kCgO9mO>GLn)aJg1q;=L8)MKOkSTKz#BpYqi(+)lWC=&5XY5`M09LalC4fGh9W*yw_UT zw!G#F`G|a26>8wPkdyAPzKVx-u4R~{tlQnhM{*IhaQ=_xKt2|(n;7U9d91m#L^4&( zjMXAQ)*Y*hm@`RX0(JD#H#4)KbI^n|FNMK%^fGMJ%*f&+0FO~NPwmM(op2ws5M=up z#&wu0rTAmc5Vgx`k_|p$O)G}e!D++IcmOH}s_$wZcB|#IeKU+QQ{(Lurp$EzR@w35 zX-Q&@u;yoHMMCby9^^_cYhYdLDafE`HKLxyoo+ivYsRQuEnwaAvmtwR0>n@-uJd_8 zT|Hoq``sK;k%an_yKDXA1Tv-9pRi}6Z&QU}ZDsyS;U;3jJX^%N(%O}^+2{riPIBA} z_j=uwHG32=b~{wIX=(b(^V=+Iea%#Tyjhf=OlM2mM!)rQ^mZ$9#E6^u*XuNb+J4dgDD5=}O z6iMc!v_Xg7yTN>hWCg#)=mK^j>5*Heu4Kvh);O_4g+1uvy*>AFn)>ErEU*NKf;zQ( z49xJl@Dz8Vpv+k{rccu8^G+3F;V@nBXZm!TZr5%&B{C_pQPyE)a-(k=4M zA(>&77b6_x`a>mrdz}Vvb~`DoVi2(?x(wkEwW%_I2mU`&Dp4W8&HH1*tXLvb{$py) zmE^QcuGiqkiDWW@drWO*iWcNJ%k*f?G|^Ev#;YOuO;YHcbAE{)>+HKx7yc(Tr1PO= zs-j7%mWLuJ#lHfhKm*p5Z}6mt+;bEuuLA1X8O&qh9mtFK3H2dasmD83i&0+Qy27(m z_Y)rzvc*Xg?9k|keLAjqO6U*GP-i~8LbH8b?`;3OG_YwtpApQqwGREGh7?emzSm1n z!Y(+Q`eY$ez$;sqbaOj#)$zrR7e|FGzu=&oBK99~l-h776>pK}szaS8Kf=?M(S$M~ zi4PlJ+aE?)M;ez`S?)ye?l7sx$UOyTxHv>y!Y`G?^C#|ham3!dp3Wyfw*vH$pVr}5 z%HU~g)bQT?$7{(DjhGKR11NFNZMgju96o+&9y&Y;L}d_(q3wIwkMcD^dK7l>8?M0v zDzGAp=nwo5RI%JiC8MhPdt$!i)vWgIOT8I9Zj7k}NM5&gc@hf*>j!mAeHBqmu9h!Q zAREqxQnVLN39D9DL56H}oY|BurD}5&GAqMcWrtt%==1Llx@HYY?-d2ArD0#n>(W~^ zduynLuL71#yr^_%F*+)Yc;&0-gKgOqsAD-Z3?I0UKsA!EV4mOCBi3x{=-PsN4HOk* zC5`IpG#_?_$u40Jbi`zIouwf0hh2F)qCeVAOX#M3&r>zaZw+=$W-7yk-J@U`jV6Fv zt%~Q)N(aeHCx?XUr8JF7bmS@&xV>Cg|Ry zT6$(eNKxmW7X5*+**Cw+yLt3IG-ZD|kMZMW7Xt~rUJ6_Su`J_r7SzXQhOqGF-aW%$T*9;*)`y#|u21A$A=jLOF zRyk}B>Cm!69SurhO~si)m{M3r>)4-^LU%!ZI9CD)AKeEc9!K6UBvJWe`n+Emp`FNP zh@Cs_Z6lW{{aDm85_Ni8*C->`EEi0LuNJEdJ9wym?mZr34w7H-h=-nDAh8ZQYs{*^ zpQPYq5BXp(h5TiZ$`(9VUk%B+NGKt~e0mdQ`Ed&SS>-W5t35{Cd`rNOKeBni-#7t6 zTsx)JFZN_)+DR7ICNcWqOAB7Hxb~h0{b!uk$A<;r6Kq~xE{sxNcq1=l z*yOg?hJ!k4EQ^P%1VBh_IzGyM>xpq0G#N!ZOuwXEX|=H2(j$${-|g~1)TZOsLBou- z6W#YrU)&HtH@SEQnt6AehzKZ^>)&>v4J#soB{GX3A+1<{*@OAU{%NMDTq8>_=F|jy zXMB8$rbm$>Tw088hBc;nT;d36?eY%m&lWcSUhnQHg#&(LMxkH-Z<3df^K{GacNuXI zeD9usSlh8ul(Bu-~qcETtx671g%yCaG3&l`#HOb?vo<&D2LHEE6!w`d^yz-c`9qy{^C zq0?5l>BS&7YZf+f&)5zj>AnzbYYeA8riIlwHBj6y{8G*tZLB9`F1Ru;nok;W>k|YD zB;2o|%6QDPD5MxPg}F9JTsi*e0}|fhLRuRCv&%YMDH?WMt=v2=em2fn@OBT&%BuLj zhoMzf2hc4GA0Pi|_4Uy&xxM$P(;eu)+T^$m+aHauZAT3Sb$hW5cA_i#z|zJ^Sg@NY z75v2->u?`g=dWUPX~aztmbeQBcFl^9RiviO{*4fc()YMn_+;MTO9=vC`cN z3|ePD_iq}GVA~r+=eXHfNRvLj;zt`FNOzU4Sdk`tF6eJB=NU7S`F_(!GR8|y^nztj z!g1=KQts7)URDx6zc*M#E%Ygu*~{}?pc5pInL#5;!!x`xCT!Yd`h^~~*ZyIrK`HVF zuHhDG($R~al3UYI&1qmLPhLJlbgZxZ`aua<&^d84(hf|f6pJIhtdV-=NdSx#g#j0;UQM3@|;nxR=}-l zz&vS0uiT8Vu+6H)E@Y67d&|z?lbn6Gn|h*sTvL{krCyZ^HcVy9USTG_n}wQyz8#cS zScmbm!Nr+R`XOHIA{+CTo#SNIXp1^GN*+nW;K~u^{yr`BLI<2lG@-CBy ze0d#YW*J@W(hMjLXk~!Kw?_WO;A@V+BFxE;rjK)s;qd=l7^8R%wlKT?dVu7C(&meh z&QXf$pJDp*M|%_!Qul0Bx2CO}nA(|g<8D_g`O8?kFoN1+O3I^bDx{B8yBv;7)loQ8 zvo5I%zvP82!*da7evDkX*GHkVJi_Naen>#dFLB^DV>Q(-kzn`_h}yfFG^t`?@jCCg zQnHp^5!8P4`K0F+(EF`*Ugp8bwvwDrn8sSzuKYC!YSAopBFN-emI)A<%kaL1t4>ib zmd*85Eg}cG!ELH`KSxB2H-#N@Z3daW3)xlGB_`a8Z+1q=Ft&Dw^BJaE4YQEeyewmv zD6m_;r+Hr%$4V;Bkr`K-|4cdJoY}_8a39(d3J0~+jTEZC4HB1mhjx%mJ;AAX;0x6u zcyat$2_4r;JoJSWJm1Ew@7rDf0M!F1#`ibv(8j-JZn*XPODd1&J~#EGN7=(-lV5Bn z?lRRPS=u1?_qKp5e(7b7>HPAxA9t)077^)%g$E=DFX{y?6)=;2OcH{!6Gk-M!Hmz9 zTE)0!1JN53dn?Fa1>k2S=f%z}kmh}ksVLL4>qGBP#vHhi;8Esqg>2KcENt~{3t!7w zGkBJNt9=G-kvaav4-?Vl>*^tRSNW+itKP_IKK9g?!=xOp;8%KQ1WJIt%;cRMX2zrH z(rNuy`gJ~>Uej-7H54XY?ezU8_^>`@r5;L%BGqG_$Ah~L%wPy_??ymd)9zz-W^uXt z`n>w|*zwAf<#RLdDDAQ4ebxo7)9#)6`ZV^c^R@s1R}5!NztvKIWWS}<{^Mx}2e0Tq z-I_;dWvlo8POEt^0B9@9TJK*9AlrvDT?@j8qU5A_3_hNnwlPvAK8 zk13=9{^mAq0d5mb63~NaEd3uZDZmslk4n6D**~v5eM@+m-pf+rSUctvsQ|i}^!Y-8 z$c0AP4f?XhEn0toS0<0jOG3=Ut6p9N4Qpv9`*AXaWHUsZx@WxPsQW=ZkI^$;u0`hV zbMmf{GXu)8jB}W)!t6lCQj}4HQC+!t+vHH^c0s6HI~vx-KQ_+{n=EUchNivt*n=&^ z)_3ne)c@7Z0soxbY}bJ$sCoVI;V#!16WB}5+`G&A=OoW;`f@a&9T33b;EFcXkk!CG zV?LZuy|Qm2WkENRKL1jXLiXu+p+BHV2m^x3yeg7IfRp?HekS_k<^E)jKZ`M5XwO2R zD@vNwUJ>VeB1%a@09kT36^{Hz{zS?zVx*P82AB9@ZO9S|<4M>!($Y8|iF)pa3~RCv zi)U8#wWt0zVWxUPFQpuAY1JU?P>m-&zZOv`%OshqkDFGkfq!sZJB(Yb1oB!ia3#9` zTG|z^=rhX<*21d1XRAm%A3UK;cbu17b%Qy#Ln~b7Ak}>|R<*iq0+R{SptJU7WUFO> z)c2|~+`|%Np;_0O7h9NDD12KT;g<3Vo+%(MNBW=@`?(zQaMJY$*?_Gq>S_|nTBPB! z5{WHr94}a#*Q2C*+8V~3Uc|>`WARd%pawqM{!)nY&U?9;j!MQfg|OL04_~7YuQG)6 zq3|2=uoWADihXit($BXx`+6ywP>SloCqBrIte<-$4;uom>@w~L{w)37L1;Efok$^G zN-tCS$;G`~&@}B3o#zm-|Bt=IL1F#CCxtodCTpj88hPIH-^Rvh%S}!pl$j~Ee#!UB z+=LWgI7Jm_LDd^PD0$`)*jISMkEOONtqZ~Bq9OHK*|;#x`fv%Y)Q0tg8W9H8DX?U> zgCZjYT6Pv_a5(n}8NZ|N%O0PXB~X0xl1=oWe-;BfW&4o?+1kZ_vj8Yx3O<;T7AG7l z7z-{(T^Z&r54rq0h1z>D&NLDY!ALp_d9JOr&Gv^kRA+dIP`hX%fuxJsP6C{uV+k|~ z0$7k&y;X2StqUsGMD$1^X>&umg<0ZK6vfoc=UA18vD-YUYgSgog!{IbFU&DFO>&R( zWmf_MaYdduJ5;lpmigdUW4X>JgeJA{DM#;D2=Wi_xiVp|@jz{#p(^(b-j$RmZ}AZ1 z!}+}TC8YGC7U!Z&u=-xrfkA%L+-8>&OszTyD4Ch*I&t0_(~E~KJ?H=mq@8%Nl2~!i zoa8-2bQT3*Z?mWH){Y_`20!AXx7s@?lNAJz3$HK?jLm1GEa!EdpZeX|_i&Vg}{C-6?Z`(2DHYWaMWaqOLGqH$PYpNFp4EPZSFrfxrLY6Aun#SJ_5|R`US%8X8d1 z4)UaB_}xoysC|eDG#P^;d@ffm7Vj?=IEe%b$3XpCDAbAAP!kueM--^VN5pX)10`&k zL{wkHMPH#evy7AW8!j2>MNu)7$6;OH7Bk1m6kv#YhhdQK^D$0GP`hjBse(^KQ`d(q zL6dOrWXktRCQcWEV8i@eS$H(UuQ?iM65cO4m zAHAad*+}L?-0L{0&7!q!`dmOqBi2qLOlb;>Sz@^alS zMN*iM=TA^{ON_3&-`ux7U^4S^Z#@8OtcF(1cN67?&q0wkCUl(kc%Q&dc1Hs690M;K z@}k(5BqK7T%+|T|Y;8BjkaH@^>rXdg_2=9&i?5$sLpyA;4rYPQFMsXA4PG`@c;z-N zk@`{EF)^HjDDj?L~4E~<^XQo5q%KqoJe zEm4=q>VF^u;>4oqd7Vgn)u3mNee8ZQq?W)3wQ~I>Y*fIrM3zeGo#U}mT`VA2U;2nb z+8`!6X4Vn9YL)G!l_`Hz6}Hxtx-V}@7k)S7iYz0?!==5cdwzD!K2TCX} zcu;JK%{(rxi#qU;@iC8P_n;%0is~A8+@5oYsdD>W=sa_X>C#62%(MKcr%}(Q`Sh5~IT>1o}R2gD>r{0B&+na4fz(KaOXQ96~UaguT|G(aR4x zeNxW{M{D_;OGf0R&a}BLXkZoU*b#@0N6J9E9L?@?Q`3qWjq=l7zrYS)m!@AfCv^gK z4RLAdA)nqHKV(vGvd?nKu{0jA9I8_2f-m z;pUqL%lpIoe{Ab04H6I{RK;5$6P3tVa2AM>_F-g`Flrrm*tIi33=><-vKm4d%F_=}I;{7bJ%<)MU+6#a$ z;IKu=+`+Zhpo(H;9i4pF6i15F)9iO|i5Nz_Oo(W#&Bq)+*> zyL?eHvbCP`aJItH{yL2GK?z(IIRurpNh>(Dw zsCa*X8u-2u&QJuCPF;9n+NpV*zu18e;<4)oHch_V4m?_f2jz8{__7KjshWgB_KfjV zytXmb=gS>6$O3G^?wi`wjggY1%$hn$UFn>rZ?&^0$@PGN(?dOhE|3X@a}cF?xmbKy z(MUf%t02$u)z#+-c_bU68J`LfuHJ)d|8xcEvQ#Hsv|cc!*Lzte(z6T+D(%VrKIh*5;bE=i&NqG556@1CUmYc)$msMW#vwTl{QKfx8!o25- z%XtKpb0=!4dLm+{#3{?LCvN%8lIBB2S3+RT^~G{w+be?jGl@|$Gi_icl%}V4%fdaJ zV^~s>UKI3ej#pZ)8O8FQUpO+?#^?I0cy9K7l{uqsnfE?3!m|!Y2gIps;+jt(WyXOO z^0*M6rY*T-h`3rL$O3MU9#hI0ZHe?@f7W&+7rq9iir2ZN(rE9mkeN>}f1N1#n4#{S zkK#*9@#n}*1tCL>l`7-`4U0daFmYtvy%6_`#6$Yq(y3>aP>geQt_>viwUM-8=OE_urg3)bVA8jJ@CUC*NbHFvUPiNz$4xLDdf-B^!SasFQy>oUXq@*}p0UeOJ)vLLA zMsEeBt%6L%=T(S2>e(4}<>Q+j2~!!%+}TY-ePh#E52a_>q`r>Wk^8X+O%>+WYyRw4mHvHoMFx6R3cbHV(39EaT*6U5j0gBR7sbT9$}$n32yi` zTK5btmB8Pg?Ea`s4%NKu5v{$%nAX;eeaS-8p1$<(HNOTq`IGV(T0gG&Bbp{HtUXJ z0WomE2~h%#?=;2w$sxFm!$CSHV4I601=wpyW{mMAa&Qo`U$Teimm5B0$)hN=xi@%( zN};yQ&Gxs~pg!JzTv2zec`Ocg>0#9$Ws!|Mxm{l@{7Cb_60WP3P?x&_%Wc1Vo)%`Ip&3Rxyz+ ze4U-Pl)v`v#BH9P&0WQDyYl#0Gi=1?cf|Iw@_Cua8wKAa`dK8(!bV?tsk8pCJl;=T zT9{JgK$}r;W|s>}$%)~jO7ua1>~PC}^dMuQet(-DW)~NytLJII7-tRA)H?whnS5T( z&vy5uwo|f_Z+t^#ewh1kYN0PZve}g1UTRqU4{O?|W&9~JV*)d~kv2sa*1N*64134L zgI=P6FM5`m)E>scB_o1Mi1qgpli=@EvNa_IEmf%Wo*(W`3$oTup=X6?;6;%W7(@@- zysX0*P*FJ?t&NMk@FuKAUT8}UuFTFp1UMKyHaP!>L5*0+kR^Uz_g1oZ6vylLU#m@K z9lrBj4)e{&DS9-pA~5`_6uh_Im0Ee>hn-ggv_ClMG*sW`xE>d{ca%nTyrd#l{cML2 z@53Z?2We23wHKmS(N4YjW$=$&(x~#ZqVyYiQ_cmDH+boIe=_|`Z;RuCp*WHHKBODF z|3EY;ihP;?+vm!XJ=_x`trqw?wrNb1V1Ad4nbnd0+oj6IImZ`6$Sz4yPtwSR%RG9v zX4*Euu{fUc+LsU%p&V0HP$TJR%fCQ*BqvE;l_zpBOv1-@C?tZI8g>$^sKe~f0@T>< zicXMf>IWW-rveMdKeK?2nZu=XE>-F}Yfd50N@4vIxPFQIP%X9wjwSBQC;)uIhh9zF z$^(b66Q6@Yk326N0Td%_SHui&++l%BNqb)D4U%G>j1+3dJw*_rURytU%hjI6E~>@Y zo#L#&Zw~6VF6Dqc#)jFmVYTPA)ytb%%X>Yg{Kf%Y*uUP`A1yT{=szE*0~}DNfu`ht zqCcesZ|F|~;S9818hLn8K=COnNCu(R|E`2HmMB$NNLad8#DX2)At0L0UxqU zO2QmHz^zLO6bH92o<08M;aSnfDAuxd&&_B?OS^s}EP&y6{%kP6GIVxhDscyX-iRgI zTroLSoBv7luf3z}tC2|(K)wmIiroU5xak5_3^`!JbB-vIv)ql5kx@O~81 z($fjy^7hj0+nN5WC#3Lpr{m*IYkT93#N`Ob>i81xthmWvQ*Ed3jqWK^EB6G#4FHIQ zJ8Ax(ZqnO`O)l2eEk^t}GB%z(KIuqre;q_X??2p9*7K41rxhyTFb)i004+Q0e}3}Q z`!~Gkr&e9~Tao;Ytb)(`^Ur%wGrh4(W4<>mJyZ|GN`s8fG%cOW1#tOt6sbONgYSeH z%KM+~?5L;c@Ea1G?VUE&@HN!$u^v7%*neVd9Qk}(blFnxt4m9N9HQ#Ckh%vfySl9C zQNMjT5Yv;c>#sTMgCzNen=AiMP{?N?MBQc6PFFsHyDFQ#y4EEp!Fxn%C_)j|N#EPg zJCo>P{|C?0Xg( zviq-5B!BrKBlQcwK#KI83cFy`M`ZH|-Ri@dtYB_j7Fz46E{$%`k;*Fqnze1m{x>EN9vr)NR$lZ|IPAOW11Y z_Ie`F5#HBT!yZ&@$xmW-&ynVJHW2Js*bs?B%=afk{I7tRM27m zrA&ObqNB%{5x6R~HvIdvrIqzBon*Z|?&DdpdkS^#!}WC$J=@Fvt6&SJ>7re({?yd6 z#CRL9P*Uf)cjp&IT}G6^y;(#{(~NSEtA6<@haSy#&#KIU+HKCS{dVts3GI@F)}EJ^ zf@?ELAHu&KCB^{=)3c-$&@KJHLO;`YI6<1M|Aje{7;mJR&h^oZENAR`Nf-s8r4bO^%#Ew7|4(^(?bzu}d!dGO6p*)*^uK zVJ74s6E|x){T`DKDqfuJ!0Rk`MOnclI*Z5b-7YwlulrH}58(^h1T6V3HIF9c%jhW1 z9eaIltg;U&4GU^Fh^lO>wD|Ccwm#=W0Q!L6^Q>Rk%*+gc3<_f7;Gh8O=tx<7i|m|= z6EU3w!Gzc7(2Cs!Q5(;l69BE}#I7&M&q?98b+4A(-%!UYHbz%nY3NfEl@Y#K4go&u z+bkcRS(MY$=K2)Re7Ix+y&UPs#Le2Oj`&@{Emo9N z7rtOkGw6)agS-knbLV466?;8U$yREGmeO%gSc|6K}$~s`tdf zs4=baEol$-Y{tF#UxA6I<^L6!C@n}NNd=7~dPvA`6-<0n(=hQCoaDy5SU7n7%N-SG zlKS+1yZu^o&^wpCG0!RCOELmE8}uJiIwJ4=%^`W`FV6M<7LQ;>zt;J>mPQ2b7dPsY zahH`Pz7PR3`C&kEFF}!aHxIt`xbIvq)IArD(&ZpGH?B@yfTK0cCGFBBj_Fj!K`=d$VyXSB!dr*#l0prx$K!L@X#X7ncX1s^XF zCbYhEXqe!Z=1b~SWw!(E@3nf{{Zdp0g9+fKviPZ`vd`vo66rGP4G8yh*eEaV>6wZ`r+po!N z5@J4w+jCK)cLVdHB-lSJ%~aw=WT$;ANM)0*e<#WnMDkOsh446$*UtG?hq7N;0)7kL zcE(}YyIv*iOUR6yjOiKOhRRi+++TN+1OF+&3lE&VUUQAp1Dc<^BR$;%uac>A`aS1>jD7=;TxYp6xmZ(%YgJflJ?MvjDEE+5x!n;lNo+Y2#Q0f(tPFMf zn@82!a&+VvpYDGgFs7%Ew-;mM%qEa^6lXC1)xwN*zJ<=Z>BhRE0e4?7qR>jlN~_UF zDFMK6xBjGG zD6#S-mv@m15DE++|xbv-G-S5qo2o zT*p>fkEBF2H`|hBgCROOc4mPw{p&ee^`#r1$T0T~onFsR6)7|+B3lI*{QX`hp1Qq; zM}YGSGGb1(u(Q(xMU+bypa995Tg)&?;>J}O=ZMIoiwUpAXm0_6Y!_mZkYN!w6-+MZ z(YdhJ%`8vmWjvBrYSB*WyjsXmUoIqsc&WYY)IC@1-hy$D()zR8HZVO^;xEkNH^oS% z>B(oQ6H9=s3kExu4S?Tjd!Lz(7HqB``?P-WP4UzrR@=I$FX5_fqvsHYg*UUXVL9S7 zimC~g%HG)!|6=0{btBS_Lo)@l^}nTP;X$tKSkBZ|ts37!KlJ}%jbO&sKaAG!;OBM?)_oAchX#Jg3WK=x9cXSXEZ+_{cL1(0T~@coI?=3F#xHk1AFnE zv4A5tkV9VAa237qIYMqr4RX5|{1^IPEm}(7?n@pvz5QcfH_LYT6WP9GZ8r!ECDjY&Wj#iPs zk}VwA_Zt8hdJk}>O7h!2@9u5HgXyy5e@8>Q0kH?9^?$DKjHJKC(Y{>n$o5b%zYzc$ zN^b=1<&gf1W3Oj;Uw^-5joHY*;egL?aKKJ-#}hdK5x&+eF%x_UF8V9#O5Q}>KeO=` zo&lO|eb*k0zXWa#dV7lhkg$e;gvE>K{YBCy%3;6q1TLF}{udIk4B zJWlq3KNVo0LuE^ZwpxPQmL?DJ0zZC{25~bWD{`3Su;#-PfJk<$b^g50&+eq_Xl9wP zXM)&#?!#Dvo-}$S=0VrRdz+S(8*kjXS$KNc#IOzgj*K#<-XA6M69NG2%2b>4Ih)Ci zBa22VmVT|?`qNOy6I_sxe^HjNXHx+!wcq`a{@t4i!O#%-U;{tlr;^pw;|WoF`|gOp z5~T&Jrw-@p{N00@s-*yYeD{Akw-9Ee325qyWUr+I`mR zJ>ko?{);J$(IE2jVQ<^OAb{xaS*t57pt-*0fbE&Au12+}iUI!6Q-F#6?6?1_yu#}? z|C{oV|K%CI_X+k_4aVvVS%FqcPE7dS>Oq$(3t0X%22M;HH%v!TXKL6g3m-&KjbSU> z@;@PvqKnd_u(+1-kOdmj2A71ivyCO7aIaVrbUxwJ{9y7^f3K%O*6fym=e$V6#&Esgsv<+zmt#qHo7V&MES(wZ`QVw>=^Qx*csS)(En1+@-* zUi}~y142B+e@N5ZgTuRjvjDn;tJ_@n&S3gw5KXFG&tjDAvMrKof&#eYFES}Fy7fT( z#88vZR3woe0cEa`Xc3?4k%E_jd*02bQTHte!nc24TGrwpELt~!(=_QYnAu6&GPQW- zq9F-ifVsv;`%xfCc>iq46z%(;R_*I6t|LUeOz>X`E|pBJs}U0i25po5o!eSgp3ylz zc8O}(^CfGKF=z?=4U3w&Udx=B4r^6B3W$X#)5W`3-im#;@_j+e4O+m6zh z>rL5JtSut;^}HU%KVV^YM^TM_(!R+*&pC3P5b+@3tEW=gM#Px#Umt~ZB0fypVCtq? zo+oYQ`q(PKuco@v0>XviDxx}U)vd7Ny3!5^r6XLKHV66))mG)wZnV&LzYhF9Z4I@_ z7*{}}bX^cROSl+zF5I53-wdQ0<>aIwS=7z_q{`z7q~UR&N%VejuXc!{)F*F}tP1Y% z(JFGGg*yi9L2ce2j6 z*S@FV>4THSAXGh#RBSp_J}YuK0!N;|TFhZgzS|s66?u?vW=sgue(L3p55X?X{S{~Q zmW>CU)vAnQvnY9a->1hY#nf4jy3*25%4LPvsym2&i_>!xiNwQMey2Ej%rAvMr=JsP zLDa`bI&}?d)GlV}gOSXosx9vrGA)~nmi*)t`jSkKckL*9wpSDCO27E)6|}8dc^3?- zQ*RFA)ip#VcNE#BOJ&98!)mXHl-@i$7i49Y;Q4RYA?*4RiKhx9&@8J>&LK8K29=6Y ztJe4Z{CW7U>5xX{L?=M1;j!V9wxvoix#*y-8|Wo^hsIi^&~d6+6-1KvtHP%)3^1^cx(Ml_FarvewYfKGQm zo|DpTRHIz`KzlKb)Vu9pNMH8lCtSjKU3w9~wo z93thP(}XM{G4x9zhr_03mz-4Bngf~Z9Z0n`2~`#mJar|epP8W$z5*u?NLwO&MVg(l z`K3qSkD2R_D%T2<)#WVT`TKF$E$PuU*B7n_1)-j}td|!#CD3>iECuGZ?6o_de92B% z59RtYW+9aR!jCYnDVcWc_ZidHU{9NEYOVXF9d&lz`DcBfa`%@xxT%e~`pg{H8ZKY_>S$DA^ok&DIfDm0Yuj_~Mr)4}CJvmZj!G?!p*OUM zd(3AWt*fa@%geW)?k|Dnmsehu_w^C!V$*3A?+FOvbme?{ zJzf}E*-Zi;5dIg6@skn{VL#gQX4ty}074bsPJ&{^Q0=OSG!w>1x`fm z8I0%Bn5xG@(`hZ%alE2#|l!GRCJEQ1x|5NRaNbZ1{LrUAaUy+ zc05~dIL&)ye+!2|S2-H&dw}rNkE|(oUm5OMIlJS`f==#-CWfK~5!h(Ib5cZHtUBHQ zjo3!edX3}EGWka@E8MIF-<u87gTO;4nj1zIqzi*@f7u*EL9 za&OIJgEZ5=dsjuGn&gcJJdwUMo)kA1Y_W94;5lm8)`17tg)i@aS!_;9(2fxw>c(_L z9kjV~TV-2uu;qAO849+AY&1ykS5@X@z$g33AB@M`Y;ccz8e{>fY(nh4u*1NQe4gcS zyP{d}tSPeY?3nB$P8W4boORj#+|mKZW9etCOEJ^*yynl9sf7W@BW6yKY3eS9B_@^H zq9-+KM=@rG_8KMSkDpYAzDi+M)PU(7Y2#)3w^r=Qp4 zvEJ=9)YJ;}>eu=?Bl2tI`c=6kHA5C8%s(?4eI>sTDO+F=gESsnMS;2b-Gs!L_BWkV zP7KTw)P8j}FEyg{k>gP&$@l)gxI4j2zhC>ikYpS(zIqBGTj8w3{v5Z*surSgzqGfe z{GKzpaBZT}F(R&5_r__e7U=l?4S$5<%FTht0@H?Q)&gkZ)rDeA&cGV+B+l@PQ2I2l zf>Ms5r0=TK&V)VmqtgY6DdF0ixuRbtWf%h`%ZaJhFjOL4aP-jf4zP|wLQwfZQZqA% z{J$CLqPBxcP@*VgY9{7+MrGW^*B1u9Xx^H9HLb_qol&Epf!Nj_8Xs#9Bw_jem2D>K zIrnmQc!a{QKA|>6f+UZWsV>E0nR^p8$ixy(k`Ze3|J8QZL3KTEnomLk!AWqJ;O;I# zgS$JyJ=jG92^u^QTmu9rxNGpBH@NFXgS*2v-{0(R?ff%SJ2O>O!95)7zUOqmPru#I zXFCHmQu6y%=(EwHs&e_$1L(0t)w4nqX?rOgPnmTyMr3&h$DMnEMEQ+pxC5s0+9icp zA-b%t*NN0LwZz8hRFWe#rO~RgF9ZU&gu&Z1@3r%DY8(SNg0hvhoD+0+r>E|acbT8e zNJlbLPb4dem0K7?G~kWsbgC*5{aOM~orV&$aK8~azHze^Mob(%t968PlJi-!Gn(k9 znJr~%-5aP7w*6kuyB7j2#1u+7#WH|NMG^G@m{37k8^w|{L=tf4J30k!Kk9uMSnhVK zw^r_MT9CTJ>!doRJzYj2;Lw5QgOvxn3r8fUCU@e)x!7R#6Gxv>R_Dh{gpI#PKJ`VY zW{z?G1w8dVJKj%OZN_Qo85r<+9Q4a`ToLKQBrc9rT7~1sk9B{Auynn>uHw_55&gD5 z@I5&}Y*uohnxnO?r0UdVtn|a&^8olxe@^}@?95eq8c7uvRL~X804B#+W9&D?Q+hC8y6IsbX$U zW!e*g2#E;y_??Q`cbqdzRvX%*3+V*g6_s`4m!i<0cF)<}COwcD-h+3>8E#PE*! zf<9IQt%o4GChvzP`U2XzDia3`l9yQ(l_pb$^k~yMB(d){s)iXdMPE8i0BmSty=GW8 zs2PZp%G!_REQ!_Z&QOmJOt#+`wcj%_-iIR`s@&hcUwtp1^j=J`Bxn{#bsBOl@lHH(+G3b>ys@THu9!&Imd>;ViR8vXRqL z_p+p4ljCtB9q+UQoPk6LmuB>)m9d{NO=?1q zNhq5MyRP)TK^00!cwZ8xl|W8VcNvf1+lc^sH}(WPWbhL@5au-D{((ubn=unNM21xH z_%G@YT_)|pzO_BLL)B{pzXRhRJ=M|lktwuC`mw(dQVnb}x$&ZTf!<@nmdc8+&?QujXeqwWJvZ_0s;V#v zB_?Um>BqffnA(Uq-3UYTQ4gU_yZ?*!sG|T>e0GVCAPa8L2D=!GV;(Q59Iz$CotPbq zck*p5D$tNE)O`$_2W|V~RBMXNVhod~;tF*Eo#bnAiEcnYqkV1LEJZvgze4;tm!4)y zAqt0!x@0HRO<^Z5kgBkQV{eUNNIh6*s8*w&p3qS<`TW-?rX)QTy(IPoXG;c$T+S(ScwAF@(oh3WKEuiL99dnR z0-_;qdYx>wYa@q~y7VGtzA9AuF~d3EV9X$T>okpZPW{YTU5#RXWv%Sdo)@zdx?k6VGl+_d06I2nPv2U<5c^9hT#yz zfdJp;LH9ELCnv3fdfx10$%yTelGgQha{nuBP4B#wh*|59#@F%O{G#ibR>?mNyes29 zEox`y4o_~jWkr_!?&g|t+|c6rW(r2(@aI!w*xE;S(py%hE&vt!Ac+Hq+RN` z^Gc^1EE_GKtVTM)iV=EAh(j47te#M7%Y5m#y;f*s`fpJZ2O~p6-6qVIV<&t+QeDdJ zs$&GE+GZ66>RXOg%swmjYzGnl)*q-6nCr+N$}rmJLy5h^`w-I)iF==v86y1r?Yq%CoKYjj z?i(vhl7*snRvv8Is(q17G=xUapd>>6F)=vH@x_`XJ96_8_ynj?grznA_DLl1DJ`UA z!ZwQ~hlpXO;=X0ag2ot$?#xm7p#8`W$1~UAkJaIRp(x=2+`N5lF;p#hAWhaE?QJ;K zV%T{%DW3ip2f)2$abm)fe5CZ|r8?NS6E7v8$jjN^U$M_(9m`c!K#rM7F^X1Jod*t$ z$)nYG{&Rmrhd#%?Z1%RS>c*zijSTSo8PtS z`qU_hY;SC?Carg!AH$Ch5=#4iBurKzUayL6srmYYyBHO9Rx}ZhVNkl?5lJQ`Ms!V0 z(qkhJZux|Z@TBm9>rQT5GdL%a4^GyU%3JHzWL<29!x3ldJ8Z?#Dl}({+RC9oP9(W+ zbbbQSX)kb)5^z-N4^=nBYnpK)Re}xGTgTzxX8RWY*8F*IP=(qnD)0iz)LS_s-=1JM zNQ~VwbmcQX$@5SVZ#!~m6!7(Fdg^QQT*_0~CGM`W0u8vlg^K&Ktrv z2ZGrl09@VD1vu6PWo7w!d3msS?}A4cq6*XA+NLOK;lvgM`T|~M(eBb=T#27-!?mlP z9O&L|#-E`91F!%LxCAToTBgqwC*`O&8H&4qcG~sIM0q$Och3r~YUl1;*u)}!vaYVq(;m0Ucqu%cS_dnx5N!zNz3raIUh~ftkdzapG|p zWW~m;ExGt+WxDSAB*`M#snr0>iif4!k?%_cSC0LKZuO8c_sWd^G^f(gCNkE^UbT1& zZZs|@X338-DD_GSvG+Tu7up2-_tBu85|O%(#W~$>_Gh|V@^}?$$Dtyh-EC!HxAiGD zEGZ*i)#Pt$(mQ^lw%OGzloI5;xML=SuzWi32C)^JzmP9YDN)Wy0pwtjco#3x9st4V zg@jsc-Mzq|N`|e*MxSo($lrJ;O@G~*29rGTNP2H(1)Y5SIHwd9{CvHMq6@e(VkVX3 zs>puUg_4pJ4h^s75s{ECgKYLqy?DKse%8*S*EkzRmHfHmQFi9(7V16QQs!wE zn$|3P_WdeaS+bhcv@qWE(a1@<&JsHf&3yH}D5CgEGEtrUop|cO?}IMi)ceQKG>YSj z7QPk7=HbVg1ncM=80E5W!m}43Y1IGT6&ZE~2oriM4u`v*ixq<_>4|PLU40d6J!S zFl_+)@UXh%XBZf3V%W)+kLLsg6cwrXatpn&`B-jt+FbSS)Z~7GT&>4l<>izcy!n6s z@llLXy>H-Bu`c=n#*Uh_u!U2;N2q+Z6<{#HCO#{xbvIRA_9BdTl8Wu0nPBzn`C0o@ zMs;J`!aT!4eexYL+)4Os15T5(`lwwM`xd7x$815#(RR_F+?4Z+R7!I@s~nw~{*gbW z_BG-Pq5WwyAJFmR&nkuokDQBRdw=$`&J+w*y;i^O=QOuVQyV|8DX6e44zz|hPczX( zY?IfL8GGguHjjGIs*()j&^UixB|9_DI#v7=@>9bcnoH{vr;==`t1)Xz7YQB@nQKtQ za%2uC^ZAb#3-jIwEsWabWYa3l1IOzF_-yZ=M~mEhl;?aQ{dKO)`=Ux8YhkJHfB|Dc zsx%0LsqavSg&i~EH!sQ4;9_Hys3t#;l;M6NgK|xV^on4T_CkX=YuJzcJ zDnqlmTKf`%CY+`Pl3m(FDn>?>{INdJRQMB1K1Tb}USVFqJ+{~7aGB~O>W65jzvFa& z|Ni|!_UQg=|9H-xNWxyQL*Y;Rbvbn}-oyc_lh8-cU^R(KD9$L&$=j|kxa>+qMPg*i%@!hzA_N5-=ht(U9eno}YGkAn4Bz{YrR6?rAv zu>0$&w%6F$l9ye|+=&}%xsa*`&dkHmED1@;BLK2J^PW>zS7-ITy(IgA4T|+B90mYN zMNLbq7uY-pIN!3gUi#ncH$|_a-^=%uJ$xH6?R<(S#GMvl^gz>1dYcUXS0)*)0vPK+ zXk-BjvS{Bt8@i_pg-&bLOm@0X5(@tGtl#*@@Q>4(vfb~$kcp9s{@@E(l{Mbfef`s^ zt6PF~yz!}4$j$b1N4nHS`uwpG<_lHZ5F9Sly6PqaSs1B8z8DGh{^1{JO z8iy%R+S=(yed+zIzgH+X+{~&m{zMTr%#+eA1R=u+3xj0^iPqKO_;!5Plh; zmF1IISHdjsM6*YK&un#$_ifrWW+<2+X)*)}AhCsfE}IQtLBVSYdwoMc-H`U1rjd58 zmBQJO=WF>d=?fwFamjX=XL-kG@6TvHhJuzg3y|u`ZE3H@z#j`bNf~&uBR9#Xi%=G? zing>67j1&ck@jH<2`H72WXm5g<#Q0+G=7|^<4k3c(Yzn-huBrOrleN3)MlQC@SB=^ zK5Xqx+>52|1SUO#IzEp>V;;10J~|KDnEI^`6eRisvy{jQ+Q{J#t51F6MB0+-@i6o7 zFcabg`=RjM#f%nLY0?yt)QpHa)3(nBb_V+7LOa+e6I8*Oj)3eqr2Jg3hm<;v7NgnY1q3de+ z$TSJAHoZPg$gf0iZ#Go*yjI5SYVMxo<u{xb z3WJ1%7daBgV0qpST{8Cax3j8RtW348w4wb)owxu#!7v>kb?i%V%9tK?B<72OnH_tx zB$%{9C5E*;6|9|Cegvlya!uIL#1-D9jhyf{xMmJ+`>z2OOXM5&*}(3U!D9s27u&7e zBfgnx&f&Jm5wYWglyo)1y|In6Viu|ayxvvpaG4gGHtYYmusWZN72GwMyFOIOXo(WrBeeRuQO}s zS0hPp?V3VgXj@ytsfKT{Q4kiKxsx)ffGDRLWI5ZX1r$$JihZ$-#>gFid}YImWnF*z z!q+URb?8)a^-v8{^w_TcnahcWLU<51J7#@Vy7Y0@LJZb=b@rAn3lY#!k8k% z7v2e?R>~M;C~JNlXS&nzPT8|-Xsg0xp0hd(E*^uYG|V2l56gS^Q~o)9bp1$BwAK6u z;M#We^g#UTlhjr7xKL^19V=k7FfupDXTQ(TaGsvXG7=(hSIW|tC?X2wu^91FM~wWBHx$AfvINy<)&=0H+1N{uLLWW>6z?i>SpFTP|y1m#rh&kGMpxh3f(>ec*G%5}i-+d!U zti9Q0BaC2HA7`!iG zeM8qqM`qG8y zBJMfv0|e*1ju(A`o8LL+iIks^nwRJ$%WYJyM}pZFA3lM>S%AGwxzs-=Dfqtn_62qm zzY#`F5AR&q=8)j-#OD{n=*-dRVkp|#LesU+7a7t2<5Y_L)}e;Cz@=*v{7=Y}(vJ%G zc9CwS|6c8&B#P>CI^dRWxcFCVzRs4T^B9@&&_6KILO6M!6153ZDgPgGXW&VxGS!nO zn2RzJqUx#vQvz6byncOaJ}pU=znmzBq|y#>RtgdR3QgDTcN_I?RSb_B-<(iC*gkp8 zmgvp-1)P_XDj#&Uavjc!3e?KJN$A7CH|=WZ#<3EhsofjyQ4pLE?&#gV>t5V{FDvZm z+ni-3Zu_Aj#b^ZLyz`Idk?9mHj!ig$1=dT+famyZdki6<{nOa?uE#nvw|PI-q6Z8$ zcHigAJdIJ-@fW{8g~wk~!QbTD!yz8P`96u=9BKJsw1>^K=TDp8!#<+xkt>&{8-{5^TI3vG6GQI!`NL-SeTNH_)_^2HjHV zQh5IDU!l-0A>9aDrKg1_u`+k!bi%)mrKwj^Ux#w)eev#y9GO>kuCEX>L6z66{i=~J zwlQyEO8bA4FZN00B{X-r`Vn(#Y?6=Td6Xr!F!(eU7HT%`zJ|#e*}360*cUxD9S5)IKCa#XK(o6Sc4K`9BPciWO95AnRPhkpr4o{=g;87 za4#=#t>yEKjS%n&gk#$Zo>*Fw^i3-IP>OVk&9XDSr~-+ZP_s-fPG5gzcR#e5#%Co` zmCR=TmI1HbAP{rl|5_Yu8s8pH?9?B(-(LJ_~s zi2Xg!(q2=u&BooziBoMyBQI?RV3iLS3+^rlEf?_XmqtEEF9- zd<2sR5_oVVmLIBT!K&GJi$LXkU&Ath{%=X+=Z5~9*Uyn$T_YA_P&9ZK;6uY65tq7XOHsblSeOwB=#EOvN%A{-y6iB9xaSj;BGRv-+id< zQLcta-uM+I^Gp>!fV@Cb#k;bqitwS?@4**D#aLaOV$X?~soyL<2x%rHneC1_{|;+w z^ll3Lm!3MCvCMP=W?FSuPbQ6>8uWpLVRiefZs@s=ty!YoUTHpXIRo|W0V`JiSs(-u zg(SO4Kzo#m0==Soc6N5UH5n#0L@}*HJIQ?lUPD6d1^A-XBLYrS|;r7aaQc5i4a`rv^Rc!9}T`wIP z))RU%9qU)%kB^U&1U;QGKn(@fPlDGt9Po_KerLbD6}P&(xyT1fW-yr}B!t9^b~@%! zMZ(Oo-B@Zt)vdx{e6Cx{kb)patMp^ljC5}QO$op^mt_=`+SIB&$UODpM zH>`krv~~u5!Njt3*QeW^Zc_#q0U{&ZkX`K!Xr_|Bej1jd@@0S>#o z-YMhrz2yb$onz6kn=q_u;WxQUycmZPK_Jy?0r@H_sr2aKQ*bS)D)82|b8d7jny2^<#z=iT+l<1GbOFU)9b z89}d*aSsjZfAM8T`%O(cZ_M*4KHMyMK-01|POTL)gcZ&T)zWy~!pf8~x(o~yCXQff zeBKFcIZ|xrd8v2;4n(hDy_jq!&oHUwjYogTpy0EwA=Q2d@_O+tNNPunZLf_fiI_w4 zGmoz;j_thEBwh;?*t;mo_v5rZkwkq8{KQj6Qzsj9exUw*){j2a z7lnnH_VT*!;vvv8%sfnJ?FzVldAu|gdu)N81G(2<^*qJ&uy*5@5Ic~C(_*6wD}4_h zy}at`xOCEwT_W!LW>dYSE}fsACQ-ae<~DhzMkBwR5Q;exO@zN&U@#1Fik1jyhuiG| zKF-Te%oS-KN`F#qOzJh*_n=tJ`wCc8>1@0KkL4C8I5Rt`&*9U#I(ygwM1a)i^i{=J zK8MR+bw(AH!7owN^2Ml-uJ48CUNa4r=uuFS%}!A4-u;Dn&zrs5E*o=AeIoZoPs{Q* zfVi>M4#q52e1u8CntkTlq12he!T0dsr-n*EZc3`)EDI zZp{TCx4Z|BZdDgi#BsjIi0;r#=)%RqyZ7(km*+ed>?ybtQIOR2%>Diepv2=zQAy?9Q}!NtZOKd$%;Vx-kSDwDj`iE1mr62)f-|?T#Q3;-4M?Pv`ScEJ>kXfJpA) z0F%0p%Y;6(ZjvMnrVso)mMLP`FwOslyYw*;chTot2rkP;Os-sLR1_M7@$t*jhTbqj zSe&>1kdqiTC(SY8NS*G5UmW;tDluqEi@F9a*svbvV>2Ay-yKA3%_V{zz<%}bgzrJ~ zBykawO)EWlx9^Tet+dgzQwr<4IXIcC<_r!Dh8NH*S~4nFb~gx0@n;w-aS}Y-TT&a`Q3SY}Cu&gmSAB3G~1`J$*j@#Ujk`44!jn zV)~~YaecE**XWOA=<}*-W)QB*Qmxt{9ZNz;zpFq6>!)5X*kTG+0eKvC8^3!TlZu@6 z{Sd#Us$^mLEi)5Zs$~?EgI4rkSahMDTD|<=NAw;0w4CI5MjWal@k#21dLa8p!{>m5) z+Bd%p7$N%Ams_^lzA2JNby~b=zwS3#a|PdB)h*AS%28y@V+Ud+(g-p}4Ds=m+}s_^ zysvs85CvXSW@Ux<|r*fiyfSZtIee+~_wYwcW=@{7qGD<2u*K?_km9*sK(`>W2&xr0( zF8128C=aNJ+6emc@{wroaP$xEV|F=2Ea#RMvl(}AWFOiL{*;kEArS6#@_iaLH1h++ zIp*TjXt`BH<*05bjtO6)ox?BpR?qmsNW0Y&V}`{sZ+G3UWFm9L&TZNO7vd-wq$Cmz zYj}8j(xW%s{A19X9R{S+A(D5|JVu9*4YI1kU?*pT! z#K@84*4JcDs>d9Ackf~=%UG1}XM`yZzKHt?vChlR5)ZYBk)iAmvt4HP=UGl5AEyDuYT2LQaP;12BR;nCM|8hW2BSIP`>ssq8>LdyK{{)K| ziF|o_rwIEg6tIC}g@9_KZ-k4}^QkOll5qBN^hMgkCSPTkNGIx{J=d_KV>`ll8eg=9 z@d`;|IEA?3Hp&=K**%u z7-v()^92z;XUy=I+pSr6Zfg#+AWsx!vq}3*)i~$v)h)ga3yPG06$Tu<|G|86&z|7K z#CRiU>2&pMbF3>|Ct43}q79Fp*`E$$k6 zghv>h)!a0FsF;}GJ3iQ-clq?=m~4)t zXqy1CT)&{aAHPh0We{E&LgzvoCG6G~Z!`bBr!(n>05!+=nt+Ih7XvvLF-}X*!`BLIu6?$_5Fzq4KdEz%th(*3ct8dQZajYUM- zdC0HAeTGSkQny(6>P-w3C2wmT0dcZZHEb6$*?f$Y>3byk_4VV-8?;fi@u7^tzLgc4 z%pa@M6~^xx%og`_BpAJ-j$M8=u+ZK2vPGz!5<5)gMzx8rHXFsbUq1T)e=`|&u z$f8rOJY%B}go4Ge~$q<(2Mnx&M& z!on{RAM*}0_`*$M8H2+c-MB_;Lp8Py6Bs3*Nu3&mA^Z(I4B_2!35Pox#s0+aKwrl5 zHG2!mYr7j)=lHNwu+0V={qA?43!Nx-+Mny~ zJ7_hX-krIv{r*YK68hN7LjLaR_@-t;%lTY*uNK^SFZN(y-vDAckh8%CKuU~AQjrXi z^-UNp)A~*$f3?UJB6^t-v{%uxJm-v_R3Kfj*;i;b^ER+-XXono%CgecRRpPs@IQft zz9>M{A{3UCtUY|(rZNO`l!AkUW4)#f=0z+Op&kXhTzRuQ>t`2>IUja3ZHCiKRzPH8 zsY?K+7okBoLBk~qZU9|FRkdTu&@VmPebJ<6yzrKSJ0Ww)2_YvK9UW3#JXrzj^|b6o zyT2iQ_r2X3#;FAAR%W>hf`|hwP$f2onf{ew%bAahSqa zUGI1;hG4Ya?F+OXd+_RONOo745)~D#zBQ-1i6$~x$`X&j=L(~X ziII?ehbd%F0JKv#S+vqC;C%%5IQ*Cf$fH2%f%KjzJsNTL>au7Q5nl(8bpHi)6Iksz z-+1jcY*hd0pyS2xmCtQcZ34&Uu+#O@Lyz|c3Rk|8%kel}ky83o;~LMet#v`Du40#g~9__<}6EBR8(~6A@~SR zA`n6Y6r`@dBhSFVC9}F2Q;) zW!aH@CDPKSeg4w6eg5n7J-G+pyRD@*5jX@CW01293=U=o8Kqzpe1FYi^DW@$8`&BB xAE?F0U`LE>$%+a5dihjZh4R1j`_}`yaf8w>s^OPTfCGIZBdI7+DrW5ezW`=G@R|Ss literal 0 HcmV?d00001 diff --git a/docs/redis-cluster-status.md b/docs/redis-cluster-status.md new file mode 100644 index 0000000..46e3836 --- /dev/null +++ b/docs/redis-cluster-status.md @@ -0,0 +1,39 @@ +# Redis cluster status + +Status codes is used to know the state of a Redis cluster. + +The implemented status are: + +- **Upgrading**: The cluster is upgraded, reconfiguring the objects to solve the mismatches. A RedisCluster enters this status when when: + - there are differences between the existing configuration in the configmap and the configuration of the RedisCluster object merged with the default configuration set in the code. + - there is a mismatch between the StatefulSet object labels and the RedisCluster Spec labels. + - a mismatch exists between RedisCluster resources defined under spec and effective resources defined in the StatefulSet. + - the images set in RedisCluster under spec and the image set in the StatefulSet object are not the same. +- **ScalingDown**: The cluster enters in this status to remove excess nodes. RedisCluster replicas > StatefulSet replicas. +- **ScalingUp**: The cluster enters in this status to create the needed nodes to equal the desired replicas with the current replicas. RedisCluster replicas < StatefulSet replicas. +- **Ready**: The cluster has the correct configuration, the desired number of replicas, is rebalanced and ready to be used. The Redis clusters in this status will be checked by the Operador periodically. +- **Configuring**: Not all the cluster slots are OK but every cluster node are up and ready. If the cluster needs a meet or a rebalance, being in Ready status, its status will switch to Configuring. +- **Initializing**: Not all the cluster slots are OK and not all the cluster nodes are up and ready. +- **Error**: An error is detected in the cluster. The operator tries to recover the cluster from error checking the configuration and/or scaling the cluster. + - Storage capacity mismatch. + - Storage class mismatch. + - Scaling up the cluster before upgrading raises an error. + - Scaling down the cluster after upgradind raises an error. + - Scaling up when in StatusScalingUp status goes wrong. + - Scaling down when in StatusScalingDown status goes wrong. + +### Status transitions: Redis cluster creation, cluster meet, cluster rebalance + +![Redis cluster creation, meet and rebalance](./images/redis-status-creation-meet-rebalance.png) + +### Status transitions: Redis cluster scale + +![Redis cluster scale](./images/redis-status-scale.png) + +### Status transitions: Redis cluster upgrade + +![Redis cluster upgrade](./images/redis-status-upgrade.png) + +### Status transitions: Redis cluster in error + +![Redis cluster in error](./images/redis-status-error.png) \ No newline at end of file From ac9ca3e70ec38f2634f99622f80aa24acfc6f3a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Wed, 30 Apr 2025 16:05:24 +0200 Subject: [PATCH 09/64] update docs with status codes and status transitions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a2fa083..8110f0e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Refer to [operator guide](./docs/operator-guide/toc.md) to have an overview of t If you are a developer, you'll find interesting information in the [developer guide](./docs/developer-guide.md). -Learn about [Redis cluster status](./docs/redis-cluster-status.md) +Learn about [Redis cluster status](./docs/redis-cluster-status.md). ## Versions From cf0f7f1778dbb39522277855ba5925794c0a5879 Mon Sep 17 00:00:00 2001 From: Pablo Collazo Collarte Date: Wed, 4 Jun 2025 08:33:39 +0200 Subject: [PATCH 10/64] fix: ubuntu runners version (#7) --- .github/workflows/e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 11e26a7..18afd79 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -15,7 +15,7 @@ env: jobs: e2e-tests: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - id: parse-gomod From adad1766ec1b4eb86f6e13ad87d80c39fa10e505 Mon Sep 17 00:00:00 2001 From: Dav1dPF <108653973+Dav1dPF@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:31:06 +0200 Subject: [PATCH 11/64] Parallelize Ginkgo tests to reduce runtime by ~50% (#3) --- .github/workflows/e2e-tests.yml | 122 +- .gitignore | 1 + Makefile | 35 +- go.mod | 82 +- go.sum | 187 +- test/cmd/create_local_cluster_testing.sh | 20 +- test/cmd/k6scripts/test-300k.js | 61 + .../deployment-operator-local.yaml | 353 +++ test/cmd/manifests/rdcl-test-local.yml | 45 + test/cmd/manifests/rdcl-test-loki-local.yml | 47 + test/cmd/manifests/rdcl-test-size-local.yml | 45 + test/cmd/scripts/check-local.sh | 100 + test/cmd/scripts/check.sh | 16 + test/cmd/scripts/fragmentslots.py | 78 + test/cmd/scripts/lib-test.sh | 472 ++++ test/cmd/scripts/test-chaos.sh | 142 + test/cmd/scripts/test-migrating-in-the-air.sh | 96 + .../cmd/scripts/test-scaling-up-and-delete.sh | 102 + test/cmd/scripts/test-scaling-up-with-load.sh | 90 + test/cmd/scripts/test-size-change.sh | 83 + test/cmd/scripts/test-slot-busy.sh | 119 + test/cmd/scripts/test-template-change.sh | 118 + .../test-with-a-master-becoming-a-slave.sh | 86 + test/cmd/scripts/test.sh | 94 + test/e2e/e2e_suite_test.go | 120 +- test/e2e/framework/kubeclient.go | 15 - test/e2e/framework/redisclient.go | 794 +++--- test/e2e/internal/config/client.go | 26 - test/e2e/namespace_test.go | 31 - test/e2e/operator_test.go | 424 +-- test/e2e/rediscluster_test.go | 2399 +++++++---------- webhook/go.mod | 67 +- webhook/go.sum | 173 +- 33 files changed, 4049 insertions(+), 2594 deletions(-) create mode 100644 test/cmd/k6scripts/test-300k.js create mode 100644 test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml create mode 100644 test/cmd/manifests/rdcl-test-local.yml create mode 100644 test/cmd/manifests/rdcl-test-loki-local.yml create mode 100644 test/cmd/manifests/rdcl-test-size-local.yml create mode 100644 test/cmd/scripts/check-local.sh create mode 100755 test/cmd/scripts/check.sh create mode 100644 test/cmd/scripts/fragmentslots.py create mode 100644 test/cmd/scripts/lib-test.sh create mode 100755 test/cmd/scripts/test-chaos.sh create mode 100755 test/cmd/scripts/test-migrating-in-the-air.sh create mode 100755 test/cmd/scripts/test-scaling-up-and-delete.sh create mode 100755 test/cmd/scripts/test-scaling-up-with-load.sh create mode 100755 test/cmd/scripts/test-size-change.sh create mode 100755 test/cmd/scripts/test-slot-busy.sh create mode 100755 test/cmd/scripts/test-template-change.sh create mode 100755 test/cmd/scripts/test-with-a-master-becoming-a-slave.sh create mode 100755 test/cmd/scripts/test.sh delete mode 100644 test/e2e/internal/config/client.go delete mode 100644 test/e2e/namespace_test.go diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 18afd79..6c240b7 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -1,39 +1,105 @@ -# Runs E2E tests on a Kind cluster building and deploying on it. -name: Run E2E tests +name: E2E tests on: pull_request: - branches: - - 'main*' - paths-ignore: - - 'docs/**' + branches: [main] + paths-ignore: ['docs/**'] + workflow_dispatch: + inputs: + test_parallel_process: + description: Number of parallel processes for the E2E test suite + default: '2' + required: false + +concurrency: + group: e2e-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true env: - KUBECONFIG: /tmp/kubeconfig.yaml OPERATOR_NAME: redis-operator + OPERATOR_VERSION: 0.1.0 + KUBECONFIG: ${{ github.workspace }}/.kube/config + LOCAL_CLUSTER_NAME: local-cluster-test + LOCAL_REGISTRY: local-registry-hosting + LOCAL_REGISTRY_PORT: 5001 + REDIS_STACK_SERVER: redis/redis-stack-server + REDIS_STACK_SERVER_VERSION: 7.4.0-v3 jobs: - e2e-tests: + e2e: runs-on: ubuntu-24.04 + timeout-minutes: 120 + defaults: + run: + shell: bash -eu -o pipefail {0} + steps: - - uses: actions/checkout@v4 - - id: parse-gomod - name: Extract Go version from go.mod file - uses: Arthur1/parse-gomod-action@v0 - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version: ${{ steps.parse-gomod.outputs.go}} - - name: Setup kubectl - run: | - curl -sLO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o kubectl - chmod +x kubectl - sudo mv kubectl /usr/local/bin/kubectl - - name: Setup e2e environment - run: chmod +x ${GITHUB_WORKSPACE}/test/cmd/create_local_cluster_testing.sh && ${GITHUB_WORKSPACE}/test/cmd/create_local_cluster_testing.sh ${{ env.OPERATOR_NAME }} - - name: Install ginkgo - run: go install github.com/onsi/ginkgo/v2/ginkgo - - name: Run tests for Kubernetes - run: | - make test-e2e-cov OPERATOR_IMAGE=${{ env.OPERATOR_NAME }}:0.1.0 + - name: 📥 Checkout code + uses: actions/checkout@v4 + + - name: 🏗️ Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: go.mod + cache: true + + - name: 🐳 Prepare Buildx builder + uses: docker/setup-buildx-action@v3 + with: + install: true + driver-opts: image=moby/buildkit:v0.21.0 + + - name: 🔧 Install kubectl + uses: azure/setup-kubectl@v3 + with: + version: v1.30.0 + + - name: 🌱 Kubernetes KinD Cluster + id: kind + uses: helm/kind-action@v1 + with: + cluster_name: ${{ env.LOCAL_CLUSTER_NAME }} + registry: true + registry_name: ${{ env.LOCAL_REGISTRY }} + registry_port: ${{ env.LOCAL_REGISTRY_PORT }} + + - name: 🏗️ Build operator image and load into KinD + uses: docker/build-push-action@v5 + with: + context: . + tags: ${{ env.OPERATOR_NAME }}:${{ env.OPERATOR_VERSION }} + load: true + push: false + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache,mode=max + + - name: 📥 Load operator image into KinD + run: kind load docker-image --name ${{ env.LOCAL_CLUSTER_NAME }} ${{ env.OPERATOR_NAME }}:${{ env.OPERATOR_VERSION }} + + - name: 📦 Pull dependency images & load into KinD + run: | + for img in \ + ${{ env.REDIS_STACK_SERVER }}:7.2.0-v10 \ + ${{ env.REDIS_STACK_SERVER }}:${{ env.REDIS_STACK_SERVER_VERSION }} \ + alpine:3.21.3 + do + docker pull "$img" + kind load docker-image --name ${{ env.LOCAL_CLUSTER_NAME }} "$img" + done + + - name: 📚 Install Ginkgo CLI + run: go install github.com/onsi/ginkgo/v2/ginkgo@latest + + - name: ✅ Run E2E test suite + env: + TEST_PARALLEL_PROCESSES: ${{ github.event.inputs.test_parallel_process || 2 }} + run: | + make test-e2e-cov \ + OPERATOR_IMAGE=${{ env.OPERATOR_NAME }}:${{ env.OPERATOR_VERSION }} \ + TEST_PARALLEL_PROCESS=${TEST_PARALLEL_PROCESSES} \ + GOMAXPROCS=${TEST_PARALLEL_PROCESSES} + + - name: 🧹 Delete KinD cluster (always) + if: always() + run: kind delete cluster --name ${{ env.LOCAL_CLUSTER_NAME }} diff --git a/.gitignore b/.gitignore index 835bb90..7007660 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ ort/ # Log files generated by tests hack/local/k6.log hack/local/manager.log +*.log \ No newline at end of file diff --git a/Makefile b/Makefile index 94594e3..dd449a6 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ MODULE=$(shell go list -m) GO_COMPILE_FLAGS='-X $(MODULE)/cmd/server.GitCommit=$(COMMIT) -X $(MODULE)/cmd/server.BuildDate=$(DATE) -X $(MODULE)/cmd/server.VersionBuild=$(VERSION)' # Test coverage files -TEST_COVERAGE_PROFILE_OUTPUT = ".local/coverage.out" +TEST_COVERAGE_PROFILE_OUTPUT = "coverage.out" TEST_REPORT_OUTPUT = ".local/test_report.ndjson" TEST_REPORT_OUTPUT_E2E = ".local/test_report_e2e.ndjson" # ............................................................................. @@ -79,6 +79,7 @@ BUNDLE_IMG ?= controller-bundle:$(VERSION) # We always use version 0.1.0 for this purpose. IMG_DEV ?= redis-operator:0.1.0-dev IMG_DEV_WEBHOOK ?= redis-operator-webhook:0.1.0-dev +OPERATOR_IMAGE ?= redis-operator:0.1.0-dev # Image URL to use for deploying the operator pod when using `debug` deployment profile. # A base golang image is used with Delve installed, in order to be able to remotely debug the manager. @@ -538,19 +539,35 @@ ginkgo: .PHONY: test-e2e test-e2e: process-manifests-crd ginkgo ## Execute e2e application test - $(info $(M) running e2e tests...) - $(info $(M) generating sonar report...) - $(eval TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME=$(shell dirname $(TEST_COVERAGE_PROFILE_OUTPUT))) - $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT_E2E))) - mkdir -p $(TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME) $(TEST_REPORT_OUTPUT_DIRNAME) - ginkgo ./test/e2e -cover -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -json > $(TEST_REPORT_OUTPUT_E2E) + $(info running e2e tests...) + ginkgo -procs=$(TEST_PARALLEL_PROCESS) \ + -vv \ + ./test/e2e \ + GOMAXPROCS=$(GOMAXPROCS) \ + OPERATOR_IMAGE=$(OPERATOR_IMAGE) \ + REDIS_IMAGE=$(REDIS_IMAGE) \ + CHANGED_REDIS_IMAGE=$(CHANGED_REDIS_IMAGE) \ + SIDECARD_IMAGE=$(SIDECARD_IMAGE) .PHONY: test-e2e-cov test-e2e-cov: process-manifests-crd ginkgo ## Execute e2e application test - $(info $(M) generating coverage report...) + $(info generating coverage report...) $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT))) mkdir -p $(TEST_REPORT_OUTPUT_DIRNAME) - ginkgo ./test/e2e -vv -cover -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -covermode=count OPERATOR_IMAGE=$(IMG_DEV) + + ginkgo -procs=$(TEST_PARALLEL_PROCESS) \ + --fail-fast \ + --flake-attempts=5 \ + -vv \ + -cover \ + -covermode=count \ + -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) \ + ./test/e2e \ + GOMAXPROCS=$(GOMAXPROCS) \ + OPERATOR_IMAGE=$(OPERATOR_IMAGE) \ + REDIS_IMAGE=$(REDIS_IMAGE) \ + CHANGED_REDIS_IMAGE=$(CHANGED_REDIS_IMAGE) \ + SIDECARD_IMAGE=$(SIDECARD_IMAGE) .PHONY: test-sonar diff --git a/go.mod b/go.mod index 63ad8a9..96df7b4 100644 --- a/go.mod +++ b/go.mod @@ -5,16 +5,17 @@ go 1.24.0 require ( github.com/go-logr/logr v1.4.2 github.com/joho/godotenv v1.5.1 - github.com/onsi/ginkgo/v2 v2.22.2 - github.com/onsi/gomega v1.36.2 - github.com/redis/go-redis/v9 v9.7.1 + github.com/onsi/ginkgo/v2 v2.23.4 + github.com/onsi/gomega v1.37.0 + github.com/redis/go-redis/v9 v9.7.3 github.com/stretchr/testify v1.10.0 - k8s.io/api v0.32.2 - k8s.io/apiextensions-apiserver v0.32.2 - k8s.io/apimachinery v0.32.2 - k8s.io/client-go v0.32.2 - k8s.io/kubectl v0.32.2 - sigs.k8s.io/controller-runtime v0.20.2 + k8s.io/api v0.33.0 + k8s.io/apiextensions-apiserver v0.33.0 + k8s.io/apimachinery v0.33.0 + k8s.io/client-go v0.33.0 + k8s.io/kubectl v0.33.0 + k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e + sigs.k8s.io/controller-runtime v0.20.4 ) require ( @@ -22,28 +23,26 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/emicklei/go-restful/v3 v3.12.2 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fxamacker/cbor/v2 v2.8.0 // indirect github.com/go-logr/zapr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-openapi/jsonpointer v0.21.1 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/swag v0.23.1 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect - github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect + github.com/google/gnostic-models v0.6.9 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/mailru/easyjson v0.7.7 // indirect + github.com/mailru/easyjson v0.9.0 // indirect github.com/moby/spdystream v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -51,31 +50,32 @@ require ( github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.19.1 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/x448/float16 v0.8.4 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/term v0.29.0 // indirect - golang.org/x/text v0.22.0 // indirect - golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.30.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/protobuf v1.36.5 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/term v0.31.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/time v0.11.0 // indirect + golang.org/x/tools v0.32.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect - k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect - sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect + k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect + sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index ff3338e..61447e4 100644 --- a/go.sum +++ b/go.sum @@ -8,57 +8,52 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= -github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU= +github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= -github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= +github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= +github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= -github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= +github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 h1:gD0vax+4I+mAj+jEChEf25Ia07Jq7kYOFO5PPhAxFl4= +github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -67,15 +62,16 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -87,42 +83,43 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= -github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= -github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= -github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= +github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= +github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/redis/go-redis/v9 v9.7.1 h1:4LhKRCIduqXqtvCUlaq9c8bdHOkICjDMrr1+Zb3osAc= -github.com/redis/go-redis/v9 v9.7.1/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= +github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -138,42 +135,42 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= -golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= -golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= +golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= -golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= -golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= -gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0= +gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -181,30 +178,32 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSP gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= -k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= -k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= -k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= -k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= -k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= -k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= +k8s.io/api v0.33.0 h1:yTgZVn1XEe6opVpP1FylmNrIFWuDqe2H0V8CT5gxfIU= +k8s.io/api v0.33.0/go.mod h1:CTO61ECK/KU7haa3qq8sarQ0biLq2ju405IZAd9zsiM= +k8s.io/apiextensions-apiserver v0.33.0 h1:d2qpYL7Mngbsc1taA4IjJPRJ9ilnsXIrndH+r9IimOs= +k8s.io/apiextensions-apiserver v0.33.0/go.mod h1:VeJ8u9dEEN+tbETo+lFkwaaZPg6uFKLGj5vyNEwwSzc= +k8s.io/apimachinery v0.33.0 h1:1a6kHrJxb2hs4t8EE5wuR/WxKDwGN1FKH3JvDtA0CIQ= +k8s.io/apimachinery v0.33.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/client-go v0.33.0 h1:UASR0sAYVUzs2kYuKn/ZakZlcs2bEHaizrrHUZg0G98= +k8s.io/client-go v0.33.0/go.mod h1:kGkd+l/gNGg8GYWAPr0xF1rRKvVWvzh9vmZAMXtaKOg= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= -k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= -k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us= -k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8= -k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= -k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= -sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= -sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= -sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= -sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= -sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4= +k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= +k8s.io/kubectl v0.33.0 h1:HiRb1yqibBSCqic4pRZP+viiOBAnIdwYDpzUFejs07g= +k8s.io/kubectl v0.33.0/go.mod h1:gAlGBuS1Jq1fYZ9AjGWbI/5Vk3M/VW2DK4g10Fpyn/0= +k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro= +k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU= +sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= +sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI= +sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/test/cmd/create_local_cluster_testing.sh b/test/cmd/create_local_cluster_testing.sh index 3bd2a3f..1f3777d 100755 --- a/test/cmd/create_local_cluster_testing.sh +++ b/test/cmd/create_local_cluster_testing.sh @@ -94,13 +94,19 @@ push_operator_image_local_registry() { } add_images_for_testing() { - docker pull redislabs/redisgraph:2.8.9 - echo "Image pulled redislabs/redisgraph:2.8.9." - kind load docker-image redislabs/redisgraph:2.8.9 --name "${cluster_name}" - echo "Image loaded redislab image into Kind cluster." - docker pull redis/redis-stack-server:7.2.0-v6 - echo "Image pulled redis/redis-stack-server:7.2.0-v6." - kind load docker-image redis/redis-stack-server:7.2.0-v6 --name "${cluster_name}" + docker pull redis/redis-stack-server:7.2.0-v10 + echo "Image pulled redis/redis-stack-server:7.2.0-v10." + kind load docker-image redis/redis-stack-server:7.2.0-v10 --name "${cluster_name}" + echo "Image loaded redis-stack-server image into Kind cluster." + + docker pull redis/redis-stack-server:7.4.0-v3 + echo "Image pulled redis/redis-stack-server:7.4.0-v3." + kind load docker-image redis/redis-stack-server:7.4.0-v3 --name "${cluster_name}" + echo "Image loaded redis-stack-server image into Kind cluster." + + docker pull alpine:3.21.3 + echo "Image pulled alpine:3.21.3." + kind load docker-image alpine:3.21.3 --name "${cluster_name}" echo "Image loaded redis-stack-server image into Kind cluster." } diff --git a/test/cmd/k6scripts/test-300k.js b/test/cmd/k6scripts/test-300k.js new file mode 100644 index 0000000..c0b7fb3 --- /dev/null +++ b/test/cmd/k6scripts/test-300k.js @@ -0,0 +1,61 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + +/* + Test that imitates a redis-cluster that was causing rebalancing errors: + - Value Size: 1Byte - 300KBytes + - Timeout: 30s + - Some deletes + */ + +import redis from 'k6/x/redis'; +import { randomBytes } from 'k6/crypto'; +import { sleep } from 'k6'; + +const client = new redis.Client({ + cluster: { + nodes: __ENV.REDIS_HOSTS.split(',').map(node => `redis://${node}`), + }, +}); + +// Helper function to generate random-sized values +function generateRandomValue(maxBytes) { + const size = Math.floor(Math.random() * maxBytes) + 1; // Random size from 1 to maxBytes + return randomBytes(size).toString('base64'); +} + +export default function () { + const uniqueKey = `mykey_${__VU}_${__ITER}`; + const value = generateRandomValue(300000); + + // Set the key with a TTL of 30 seconds + client.set(uniqueKey, value, 30); + + // Randomly delete approximately 1 in 10 keys + if (Math.random() < 0.1) { + client.del(uniqueKey).then((deleted) => { + if (deleted === 1) { + console.log(`Key "${uniqueKey}" deleted.`); + } else { + console.warn(`Failed to delete key "${uniqueKey}".`); + } + }).catch((error) => { + console.error(`Error deleting key "${uniqueKey}": ${error}`); + }); + } else { + // Retrieve the value for the key + client.get(uniqueKey).then((retrievedValue) => { + if (retrievedValue === null) { + console.error(`Key "${uniqueKey}" not found!`); + } else { + console.log(`Retrieved value for key "${uniqueKey}": Length=${retrievedValue.length}`); + } + }).catch((error) => { + console.error(`Error retrieving key "${uniqueKey}": ${error}`); + }); + } + + // Sleep for a short random duration to simulate real-world load patterns + sleep(Math.random() * 0.1); // Sleep for up to 100ms +} diff --git a/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml b/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml new file mode 100644 index 0000000..9a12462 --- /dev/null +++ b/test/cmd/manifests/deployment-test-local/deployment-operator-local.yaml @@ -0,0 +1,353 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: redis-operator-sa +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: leader-election-role +rules: +- apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: redis-operator-role +rules: +- apiGroups: + - "" + resources: + - configmaps + - pods + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + - services + verbs: + - create + - update + - delete + - get + - list +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - get + - list + - watch + - delete + - deletecollection +- apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/finalizers + verbs: + - update +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" + name: redis-operator-role +rules: +- apiGroups: + - "" + resources: + - configmap + - pods + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + - services + verbs: + - create + - delete + - get + - list +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - secrets + verbs: + - get +- apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/finalizers + verbs: + - update +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" + name: rediscluster-editor-role +rules: +- apiGroups: + - redis.inditex.com + resources: + - redisclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - redis.inditex.com + resources: + - redisclusters/status + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: leader-election-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: leader-election-role +subjects: +- kind: ServiceAccount + name: redis-operator-sa +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: redis-operator-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: redis-operator-role +subjects: +- kind: ServiceAccount + name: redis-operator-sa +--- +apiVersion: v1 +data: + redis_operator_config.yaml: | + apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 + kind: ControllerManagerConfig + health: + healthProbeBindAddress: :8081 + metrics: + bindAddress: 127.0.0.1:8080 + webhook: + port: 9443 + leaderElection: + leaderElect: true + resourceName: db95d8a6.inditex.com +kind: ConfigMap +metadata: + name: redis-operator-config +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + control-plane: redis-operator + name: redis-operator +spec: + replicas: 1 + selector: + matchLabels: + control-plane: redis-operator + template: + metadata: + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scheme: http + prometheus.io/scrape: "true" + labels: + control-plane: redis-operator + domain: DOMAIN + environment: ENVIRONMENT + layer: middleware-redisoperator + prometheus.io/scrape: "true" + slot: default + tenant: TENANT + type: middleware + spec: + containers: + - args: + - --leader-elect + - --max-concurrent-reconciles + - "10" + command: + - /manager + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: redis-operator:0.1.0-test + imagePullPolicy: IfNotPresent + name: redis-operator + resources: + limits: + cpu: 300m + memory: 300Mi + requests: + cpu: 100m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false + securityContext: + runAsNonRoot: true + serviceAccountName: redis-operator-sa + terminationGracePeriodSeconds: 10 diff --git a/test/cmd/manifests/rdcl-test-local.yml b/test/cmd/manifests/rdcl-test-local.yml new file mode 100644 index 0000000..2001bca --- /dev/null +++ b/test/cmd/manifests/rdcl-test-local.yml @@ -0,0 +1,45 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + +apiVersion: redis.inditex.com/v1 +kind: RedisCluster +metadata: + annotations: + amiga-admin: "" + paas-details: | + {"workloads":[{"kind":"StatefulSet", "name":"redis-cluster-test"}]} + technology: redis_7.4.0 + labels: + app: redis-cluster-test + slot: test + technology: redis_7.4.0 + version: 7.4.0 + redis-cluster-name: redis-cluster-test + redis.rediscluster.operator/component: redis + name: redis-cluster-test +spec: + config: | + save "" + appendonly no + deletePVC: false + ephemeral: true + purgekeysonrebalance: true + image: redis/redis-stack-server:7.4.0-v3 + labels: + application: greta + deployment: redis-cluster-test + domain: comdistrib + environment: pre + slot: test + technology: redis_7.4.0 + version: 7.4.0 + pdb: + enabled: true + pdbSizeAvailable: 50% + pdbSizeUnavailable: 0 + replicas: 3 + resources: + limits: + cpu: 50m + memory: 100Mi diff --git a/test/cmd/manifests/rdcl-test-loki-local.yml b/test/cmd/manifests/rdcl-test-loki-local.yml new file mode 100644 index 0000000..562af18 --- /dev/null +++ b/test/cmd/manifests/rdcl-test-loki-local.yml @@ -0,0 +1,47 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + +apiVersion: redis.inditex.com/v1 +kind: RedisCluster +metadata: + annotations: + amiga-admin: "" + paas-details: | + {"workloads":[{"kind":"StatefulSet", "name":"redis-cluster-test"}]} + technology: redis_7.4.0 + nodes-extra-annotations: | + {"log-format": "lineformat"} + nodes-extra-labels: | + {"log-scrape": "true"} + labels: + app: redis-cluster-test + slot: test + technology: redis_7.4.0 + version: 7.4.0 + redis-cluster-name: redis-cluster-test + redis.rediscluster.operator/component: redis + name: redis-cluster-test +spec: + config: | + save "" + appendonly no + deletePVC: false + ephemeral: true + purgekeysonrebalance: true + image: redis/redis-stack-server:7.4.0-v3 + labels: + application: redis-app + deployment: redis-cluster-test + slot: test + technology: redis_7.4.0 + version: 7.4.0 + pdb: + enabled: true + pdbSizeAvailable: 50% + pdbSizeUnavailable: 0 + replicas: 3 + resources: + limits: + cpu: 50m + memory: 100Mi diff --git a/test/cmd/manifests/rdcl-test-size-local.yml b/test/cmd/manifests/rdcl-test-size-local.yml new file mode 100644 index 0000000..1fdf50a --- /dev/null +++ b/test/cmd/manifests/rdcl-test-size-local.yml @@ -0,0 +1,45 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + +apiVersion: redis.inditex.com/v1 +kind: RedisCluster +metadata: + annotations: + amiga-admin: "" + paas-details: | + {"workloads":[{"kind":"StatefulSet", "name":"redis-cluster-test"}]} + technology: redis_7.4.0 + labels: + app: redis-cluster-test + application: redis-app + slot: test + technology: redis_7.4.0 + version: 7.4.0 + redis-cluster-name: redis-cluster-test + redis.rediscluster.operator/component: redis + name: redis-cluster-test +spec: + config: | + save "" + appendonly no + maxmemory 90mb + deletePVC: false + ephemeral: true + purgekeysonrebalance: true + image: redis/redis-stack-server:7.4.0-v3 + labels: + application: redis-app + deployment: redis-cluster-test + slot: test + technology: redis_7.4.0 + version: 7.4.0 + pdb: + enabled: true + pdbSizeAvailable: 50% + pdbSizeUnavailable: 0 + replicas: 3 + resources: + limits: + cpu: 100m + memory: 128Mi diff --git a/test/cmd/scripts/check-local.sh b/test/cmd/scripts/check-local.sh new file mode 100644 index 0000000..fe9b6c5 --- /dev/null +++ b/test/cmd/scripts/check-local.sh @@ -0,0 +1,100 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + +#!/usr/bin/env bash + +# Run all the shell e2e tests + +# Exit on errors +set -o errexit +set -o pipefail +set -o nounset +# Scripts dir +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +source $SCRIPT_DIR/lib-test.sh + +# Add test to this list +function test_list { + # t

VG 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 This setting is optional. The PVCs belonging to the cluster without this setting is its manifest will not be deleted. + +> There's a [feature](https://kubernetes.io/blog/2021/12/16/kubernetes-1-23-statefulset-pvc-auto-deletion/) of Kubernetes which optionally deletes PVCs of StatefulSets upon scaling down or deletion introduced in version 1.23. By the time we developed our own feature, this feature was still in Alpfa status. + +## Example + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + deletePVC: true +``` \ No newline at end of file diff --git a/docs/operator-guide/ephemeral-cluster.md b/docs/operator-guide/ephemeral-cluster.md new file mode 100644 index 0000000..eeae538 --- /dev/null +++ b/docs/operator-guide/ephemeral-cluster.md @@ -0,0 +1,22 @@ +# Ephemeral Mode / Zero Persistent Volume Claims + +Ephemeral mode, also known as Zero Persistent Volume Claims (PVCs), disables persistent volume claims for storing the `redis.conf` configuration file. This mode frees up storage, removes the need for managing persistent volume claims and decreases pod start-up time. When using Redis as a cache it is recommended to enable ephemeral mode. Ephemeral mode is supported in Redis Operator 0.2.27 for new clusters. + +## How To Enable Ephemeral Mode + +For a new cluster configuration set the property `ephemeral: true` and apply the configuration. See the following snippet: + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +metadata: + name: redis-cluster + ... +spec: + ... + ephemeral: true +``` + +## Limitation: Ephemeral mode only works on new Redis clusters + +Currently it is not possible to change a Redis cluster from persistent to ephemeral without downtime by restarting a statefulset. This means performance will be reduced temporarily when deleting the persistent cluster and replacing it with a new ephemeral cluster. The reason why is that the existing statefulset of a persistent cluster has `VolumeClaimTemplates` configured. These templates cannot be removed at runtime via a patch command. See [this Kubernetes issue](https://github.com/kubernetes/kubernetes/issues/65870). If you would remove the persistent volumes, volume claims and pods they would all be recreated by the statefulset. The only option is to delete the statefulset but that will remove all pods. In that case you may as well create a new cluster. What would be possible is replicating data between the persistent and ephemeral cluster either through a script or via the Redis Enterprise Operator using replica-of. diff --git a/docs/operator-guide/master-replica-cluster.md b/docs/operator-guide/master-replica-cluster.md new file mode 100644 index 0000000..f7ea1e2 --- /dev/null +++ b/docs/operator-guide/master-replica-cluster.md @@ -0,0 +1,90 @@ +# Master-Replica Clusters + +Starting with the release 0.2.34, Redis Operator supports master-replica architecture of Redis Cluster. This architecture increases resiliency of Redis clusters as each master has one or more replicas and in case of a master goes down, its replica (or one of its replicas) can take over the role of its master and continue to serve without a downtime and data loss in practice. Theoretically, there will be a small downtime and a possibility of a data loss if a data on a master gets updated and master go down before the data change propagate to its replicas but these are negligible. + +Clusters with master-replica architecture can be created by adding `replicas_per_master` specification and setting to an integer value inside the `spec` definition of a Redis Cluster object. Redis Operator will create replica nodes matching the count of `replicas_per_master` definition for each master nodes. + +The minimum configuration for the correct operation of this function is: + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + replicas: 3 + replicas_per_master: 1 +``` + +The `replicas` definition is the total number of Redis master nodes in the cluster. The `replicasPerMaster` definition is the number of slaves for each master node. The total number of Redis nodes in the cluster will be: (`replicas` x `replicasPerMaster`) + `replicas`. + +If this feature is enabled, this additional configuration should be added to `redis.conf` to improve efficiency. + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + config: + ... + rdbcompression yes + rdbchecksum no + replica-priority 10 + repl-timeout 3 + repl-disable-tcp-nodelay yes + replica-lazy-flush yes + cluster-slave-validity-factor 1 + repl-backlog-ttl 120 + repl-backlog-size 256mb +``` + +## Examples + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + replicas: 3 + replicas_per_master: 2 + +``` + +Redis Operator will create 6 pods, 3 masters and 3 replicas (one for each master). + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + replicas: 5 + replicas_per_master: 2 +``` + +Redis Operator will create 15 pods, 5 masters and 10 replicas (two for each master). + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + replicas: 5 + replicas_per_master: 0 +``` + +Redis Operator will create 5 pods, 5 masters and no replicas. + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +... +spec: + ... + replicas: 5 +``` + +Redis Operator will create 5 pods, 5 masters and no replicas. diff --git a/docs/operator-guide/operator-deployment.md b/docs/operator-guide/operator-deployment.md new file mode 100644 index 0000000..464576a --- /dev/null +++ b/docs/operator-guide/operator-deployment.md @@ -0,0 +1,49 @@ +# Operator deployment + +Operator deployment consists of two parts. + +- CRDs (Custom Resource Definitions) +- Operator manager + +Manifests to deploy the necessary components are located under [config](../../config) folder in the repository. + +To facilitate the deployment of the Redis Operator, the necessary logic has been included in the [Makefile](../../Makefile), so that the operations can be executed using the `make` command, avoiding the need to work with the manifest files. + +## Quick deployment using `make` + +In order to quickly deploy Redis Operator into an existing Kubernetes cluster using `make` follow these steps: + +Set the needed environment variables: + +``` +export NAMESPACE= +export PROFILE=pro +export IMG=:/redis-operator: +``` + +* *target_namespace*: The name of the namespace in your Kubernetes cluster in which you want to install Redis Operator. This namespace must exist. +* *your_registry_hostmame*: Hostname of the registry where the operator image will be published. +* *your_registry_port*: Port of the registry where the operator image will be published. +* *image_tag*: Tag name of the operator image you want to publish in your registry. + +Build and publish the operator image: + +``` +make docker-build +make docker-push +``` + +Prepare the manifest files to deploy the operator: + +``` +make process-manifests +``` + +This will generate the needed yaml files into the `deployment`. + +Finally, apply the manifest files to deploy the CRDs and the needed Kubernetes resources: + +``` +make install +make deploy +``` diff --git a/docs/operator-guide/redis-deployment.md b/docs/operator-guide/redis-deployment.md new file mode 100644 index 0000000..51a4b51 --- /dev/null +++ b/docs/operator-guide/redis-deployment.md @@ -0,0 +1,78 @@ +# How to deploy Redis + +## CRD + +Redis operator CRD defines a new resource type `RedisCluster`. + +Below you'll find an example of manifest conforming to the resource definition that will deploy a Redis cluster: + +```yaml +apiVersion: redis.inditex.com/v1alpha1 +kind: RedisCluster +metadata: + name: rediscluster-sample + namespace: default + labels: + app: redis + team: team-a +spec: + labels: + redis-name: rediscluster-sample + app: myapp + replicas: 3 + storage: 3Gi + image: redislabs/redisgraph:2.8.9 + resources: + limits: + cpu: 1 + memory: 2Gi + config: | + save "" + appendonly no + maxmemory 1400mb + monitoring: + spec: + containers: + - name: monitoring + image: redis-metrics:1.0.0 + ports: + - containerPort: 8080 + name: monitor + protocol: TCP + volumeMounts: + - mountPath: /opt/conf/configmap + name: rediscluster-sample-monitoring-config + volumes: + - configMap: + defaultMode: 420 + name: rediscluster-sample-monitoring + name: rediscluster-sample-monitoring-config +``` + +### Redis configuration + +The `config` item contains the Redis specific configuration attributes that are usually set in the `redis.conf` Redis configuration file (you'll find a complete self-documented [redis.conf](https://redis.io/docs/management/config-file/) file in Redis documentation). + +## Monitoring + +Redis operator will create a Deployment from the `spec.monitoring` section. Within your monitoring stack you can select Redis node pods filtering by the labels set by the Operator to the StatefulSet and, therefore, to the pods. + +The Operator will populate the StatefulSet labels with those specified in `spec.labels`. + +## Redis cluster vs Standalone + +Currently, Redis operator **only deploys Rdis in cluster mode**. + +However, it's possible to set `replicas: 1` to deploy a single instance Redis cluster. With this configuration, all the slots will be by force allocated to that instance. + +## Live reloading + +The configuration from `config` item will be placed under a ConfigMap created and managed by the Operator. This ConfigMap shares its name with the RedisCluster. + +The configuration contained in this ConfigMap is the `source of truth` that Redis operator will use to create and configure the Redis cluster nodes. + +Config reloading is supported by Redis operator. When ConfigMap contents are updated Redis operator's reconciliation loop will detect it and update the underlying mapping upgrading the Redis cluster and restarting the Redis nodes to get the new configuration. + +## Resources layout + +![Resources layout](../images/redisk8slayout.png) diff --git a/docs/operator-guide/toc.md b/docs/operator-guide/toc.md new file mode 100644 index 0000000..75f4d90 --- /dev/null +++ b/docs/operator-guide/toc.md @@ -0,0 +1,9 @@ +# Operator Guide - Table of Contents + +* [Operator deployment](operator-deployment.md) +* [How to deploy Redis](redis-deployment.md) +* [Ephemeral Mode / Zero Persistent Volume Claims](ephemeral-cluster.md) +* [Master-Replica Clusters](master-replica-cluster.md) +* [Deleting PVCs on ScaleDown and Deletion](delete-pvc.md) +* [Backup Configuration](backup-configuration.md) +* [Troubleshooting](troubleshooting.md) diff --git a/docs/operator-guide/troubleshooting.md b/docs/operator-guide/troubleshooting.md new file mode 100644 index 0000000..2c06488 --- /dev/null +++ b/docs/operator-guide/troubleshooting.md @@ -0,0 +1,228 @@ +# Troubleshooting + +The Redis Operator is a complex piece of software. In some cases it can self-recover from service losses but in other cases a cluster administrator has to intervene. This document helps administrators how to solve failing redis clusters. + +The first section describes [redis cluster failure scenarios](#redis-cluster-failure-scenarios) and show to solve them. + +The second section lists [commands](#redis-cluster-manager-commands) used to solve the failures described in the first section. + +## Redis cluster failure scenarios + +### Openshift 3 does not support OLM and runs on an older kube-api version + +Redis Operator is deployed in a production intranet cluster, which runs on Openshift 3. Openshift 3 uses an old `kube-api` version which comes with `CRD apiextension v1beta1`. The solution is to [generate Openshift 3 CRDs](#generate-openshift-3-crds). + +### Downgrade a failing operator + +See [this thread](https://github.com/operator-framework/operator-lifecycle-manager/issues/1177) in the OLM repository. + +To summarize, downgrading is not supported as of October 2020. OLM is designed to upgrade to the next version and downgrading is a form of upgrading. One issue that can come up is that CRs may have to migrated first before you can downgrade a CDR. If there are breaking changes downgrading may not be possible. The solution again is to upgrade to a newer version. + +### A failing master node did not rejoin the cluster + +Run the [forget command](#forget-a-node) so all nodes forget about this failing master. Now run the [check command](#check-the-cluster) to see if the new master has rejoined correctly and then run the [fix command](#fixing-the-cluster) to fix the slot allocation. + +### The cluster has slave node + +If a slave node is present in a master-only cluster, ix this by running the [reset command](#reset-a-node) on the slave to reset its configuration, so it will become a master. Now run the [check command](#check-the-cluster) to see if the new master has rejoined correctly and then run the [fix command](#fixing-the-cluster) to fix the slot allocation. + +### Nodes IPs are inconsistent + +You can find the node IP information by running the [nodes command](#gathering-nodes-information). If the IPs are inconsistent run the [cluster meet](#cluster-meet) from a correctly configured node to the incorrect node. + +## Redis cluster manager commands + +Below are a list of commands and code snippets for inspecting and repairing the cluster. Most commands use kubectl combined with the Redis cluster manager tool. This tool is invoked with + +``` +$ redis-cli --cluster ... +``` + +For more information see the [Redis cluster tutorial](https://redis.io/topics/cluster-tutorial). + +### Check the cluster + +Check whether the cluster’s nodes are available and the slots are allocated properly. + +``` +$ kubectl exec -it [redis-pod-name] -- redis-cli --cluster check localhost 6379 +``` + +#### Good Status - All 16384 slots covered + +``` +$ kubectl exec -it [redis-pod-name] -- redis-cli --cluster check localhost 6379 +localhost:6379 (89617d3e...) -> 0 keys | 5461 slots | 0 slaves. +10.244.1.123:6379 (c0aa78d2...) -> 0 keys | 5462 slots | 0 slaves. +10.244.0.57:6379 (11d23d3c...) -> 0 keys | 5461 slots | 0 slaves. +[OK] 0 keys in 3 masters. +0.00 keys per slot on average. +>>> Performing Cluster Check (using node localhost:6379) +M: 89617d3e8895cc17d1062601d7ee892bc7bc45aa localhost:6379 + slots:[0-5460] (5461 slots) master +M: c0aa78d2c2e5aa21bb968886f6036e19065a5dd6 10.244.1.123:6379 + slots:[10922-16383] (5462 slots) master +M: 11d23d3c2cbac49201825415b38015c862313ec9 10.244.0.57:6379 + slots:[5461-10921] (5461 slots) master +[OK] All nodes agree about slots configuration. +>>> Check for open slots... +>>> Check slots coverage... +[OK] All 16384 slots covered. +``` + +#### Bad Status - Slots in incoherent state + +``` +$ kubectl exec -it [redis-pod-name] -- redis-cli --cluster check localhost 6379 +localhost:6379 (89617d3e...) -> 0 keys | 5461 slots | 0 slaves. +10.244.1.123:6379 (c0aa78d2...) -> 0 keys | 5462 slots | 0 slaves. +10.244.0.57:6379 (11d23d3c...) -> 0 keys | 5461 slots | 0 slaves. +[OK] 0 keys in 3 masters. +0.00 keys per slot on average. +>>> Performing Cluster Check (using node localhost:6379) +M: 89617d3e8895cc17d1062601d7ee892bc7bc45aa localhost:6379 + slots:[0-5460] (5461 slots) master +M: c0aa78d2c2e5aa21bb968886f6036e19065a5dd6 10.244.1.123:6379 + slots:[10922-16383] (5462 slots) master +M: 11d23d3c2cbac49201825415b38015c862313ec9 10.244.0.57:6379 + slots:[5461-10921] (5461 slots) master +[OK] All nodes agree about slots configuration. +>>> Check for open slots... +[WARNING] Node localhost:6379 has slots in migrating state 1,2,3,4. +[WARNING] Node 10.244.0.57:6379 has slots in importing state 1,2. +[WARNING] The following slots are open: 4,2,1,3. +>>> Check slots coverage... +[OK] All 16384 slots covered. +command terminated with exit code 1 +``` + +#### Bad Status - Missing slots + +``` +$ kubectl exec -it [redis-pod-name] -- redis-cli --cluster check localhost 6379 +localhost:6379 (89617d3e...) -> 0 keys | 5460 slots | 0 slaves. +10.244.1.123:6379 (c0aa78d2...) -> 0 keys | 5462 slots | 0 slaves. +10.244.0.57:6379 (11d23d3c...) -> 0 keys | 5461 slots | 0 slaves. +[OK] 0 keys in 3 masters. +0.00 keys per slot on average. +>>> Performing Cluster Check (using node localhost:6379) +M: 89617d3e8895cc17d1062601d7ee892bc7bc45aa localhost:6379 + slots:[0],[2-5460] (5460 slots) master +M: c0aa78d2c2e5aa21bb968886f6036e19065a5dd6 10.244.1.123:6379 + slots:[10922-16383] (5462 slots) master +M: 11d23d3c2cbac49201825415b38015c862313ec9 10.244.0.57:6379 + slots:[5461-10921] (5461 slots) master +[ERR] Nodes don't agree about configuration! +>>> Check for open slots... +>>> Check slots coverage... +[ERR] Not all 16384 slots are covered by nodes. +``` + +### Gathering nodes information + +For each pod list the status of each node: its role, master or slave, whether it is failing, and which slots are allocated to it. + +``` +for pod in $(kubectl get pods -l redis-cluster-name=[redis-cluster-name] -o json | jq -r '.items[] | .metadata.name'); do echo "POD ${pod} NODES"; kubectl exec -it ${pod} -- redis-cli CLUSTER NODES | sort; done +``` + +### Cluster meet + +The cluster meet command makes a node join the cluster. This command should be run from a correctly configured pod to have it meet the node joining the cluster. + +``` +$ kubectl exec -it [redis-pod-name] -- redis-cli cluster meet [ip-new-node] 6379 +``` + +To do cluster meet among all cluster nodes: + +``` +# File: ./redis-cli-meet-all-nodes.sh +# Example: ./redis-cli-meet-all-nodes.sh redis-cluster-mecprada-2 +if [ -z "$1" ]; then + echo "Usage $0 " + exit 1 +fi +cluster_redis=$1 +echo "Meeting all with all nodes: " $cluster_redis + +for pod in $(oc get pod -l redis-cluster-name=$cluster_redis,redis.rediscluster.operator/component=redis -o json | jq -r '.items[].metadata.name'); do + for ip in $(oc get pod -l redis-cluster-name=$cluster_redis,redis.rediscluster.operator/component=redis -o json | jq -r '.items[].status.podIP'); do + oc exec $pod -- redis-cli cluster meet $ip 3689 + done +done +``` + +### Fixing the cluster + +Make sure all nodes agree about slots configuration. + +``` +$ kubectl exec -it [redis-pod-name] -- redis-cli --cluster fix localhost 6379 +localhost:6379 (89617d3e...) -> 0 keys | 5460 slots | 0 slaves. +10.244.1.123:6379 (c0aa78d2...) -> 0 keys | 5462 slots | 0 slaves. +10.244.0.57:6379 (11d23d3c...) -> 0 keys | 5461 slots | 0 slaves. +[OK] 0 keys in 3 masters. +0.00 keys per slot on average. +>>> Performing Cluster Check (using node localhost:6379) +M: 89617d3e8895cc17d1062601d7ee892bc7bc45aa localhost:6379 +slots:[0],[2-5460] (5460 slots) master +M: c0aa78d2c2e5aa21bb968886f6036e19065a5dd6 10.244.1.123:6379 +slots:[10922-16383] (5462 slots) master +M: 11d23d3c2cbac49201825415b38015c862313ec9 10.244.0.57:6379 +slots:[5461-10921] (5461 slots) master +[ERR] Nodes don't agree about configuration! +>>> Check for open slots... +>>> Check slots coverage... +[ERR] Not all 16384 slots are covered by nodes. + +>>> Fixing slots coverage... +The following uncovered slots have no keys across the cluster: +[1] +Fix these slots by covering with a random node? (type 'yes' to accept): yes +>>> Covering slot 1 with 10.244.1.123:6379 +``` + +Now run the [cluster check command](#check-the-cluster) again to see if the cluster is fixed. + +### Reset a node + +Perform a soft reset which resets the node config but keeps the node id. + +``` +kubectl exec -it [redis-pod-name] -- redis-cli cluster reset +``` + +### Forget a node + +Have all nodes in the cluster forget a failing node. First get the node id via the [cluster nodes command](#gathering-nodes-information). + +``` +for pod in $(kubectl get pods -l redis-cluster-name=[redis-cluster-name] -o json | jq -r '.items[] | .metadata.name'); do echo "POD ${pod} NODES"; kubectl exec -it ${pod} -- redis-cli CLUSTER FORGET [node-id] | sort; done +``` + +If there is a set of disconnected or failing nodes they can forget all at once with the following script: + +``` +# File: ./redis-cli-forget-all-disconnected.sh +# Example: ./redis-cli-forget-all-disconnected.sh redis-cluster-mecprada-2 +if [ -z "$1" ]; then + echo "Usage $0 " + exit 1 +fi +cluster_redis=$1 +echo "Forgetting disconnect in: " $cluster_redis +for pod in $(oc get pod -l redis-cluster-name=$cluster_redis,redis.rediscluster.operator/component=redis -o json | jq -r '.items[].metadata.name'); do + for node in $(oc exec $pod -- cat /tmp/nodes.conf | egrep '(fail|disconnected)' | cut -f1 -d" "); do + oc exec $pod -- redis-cli cluster forget $node + done +done +``` + +### Generate Openshift 3 CRDs + +Generate a CRD for the older kube-api version using operator-sdk command. + +``` +$ operator-sdk generate crds --crd-version=v1 +``` diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..bfafdc7 --- /dev/null +++ b/go.mod @@ -0,0 +1,81 @@ +module github.com/inditextech/redisoperator + +go 1.24.0 + +require ( + github.com/go-logr/logr v1.4.2 + github.com/joho/godotenv v1.5.1 + github.com/onsi/ginkgo/v2 v2.22.2 + github.com/onsi/gomega v1.36.2 + github.com/redis/go-redis/v9 v9.7.1 + github.com/stretchr/testify v1.10.0 + k8s.io/api v0.32.2 + k8s.io/apiextensions-apiserver v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 + k8s.io/kubectl v0.32.2 + k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 + sigs.k8s.io/controller-runtime v0.20.2 +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/moby/spdystream v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/x448/float16 v0.8.4 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/oauth2 v0.27.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/term v0.29.0 // indirect + golang.org/x/text v0.22.0 // indirect + golang.org/x/time v0.7.0 // indirect + golang.org/x/tools v0.30.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..ff3338e --- /dev/null +++ b/go.sum @@ -0,0 +1,210 @@ +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= +github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/redis/go-redis/v9 v9.7.1 h1:4LhKRCIduqXqtvCUlaq9c8bdHOkICjDMrr1+Zb3osAc= +github.com/redis/go-redis/v9 v9.7.1/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= +golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= +k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us= +k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/internal/finalizers/backup.go b/internal/finalizers/backup.go new file mode 100644 index 0000000..a0fa9de --- /dev/null +++ b/internal/finalizers/backup.go @@ -0,0 +1,20 @@ +package finalizer + +import ( + "context" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +type BackupFinalizer struct { +} + +func (ef *BackupFinalizer) DeleteMethod(ctx context.Context, redis *redisv1.RedisCluster, client client.Client) error { + // final backup before deletion + return nil +} + +func (ef *BackupFinalizer) GetId() string { + return "redis.inditex.com/rdb-backup" +} diff --git a/internal/finalizers/configmap.go b/internal/finalizers/configmap.go new file mode 100644 index 0000000..53ee353 --- /dev/null +++ b/internal/finalizers/configmap.go @@ -0,0 +1,25 @@ +package finalizer + +import ( + "context" + + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +type ConfigMapCleanupFinalizer struct { +} + +func (ef *ConfigMapCleanupFinalizer) DeleteMethod(ctx context.Context, redis *redisv1.RedisCluster, client client.Client) error { + err := client.Delete(ctx, &corev1.ConfigMap{ + ObjectMeta: v1.ObjectMeta{Name: redis.GetName(), Namespace: redis.GetNamespace()}, + }) + return err +} + +func (ef *ConfigMapCleanupFinalizer) GetId() string { + return "redis.inditex.com/configmap-cleanup" +} diff --git a/internal/finalizers/delete_pvc.go b/internal/finalizers/delete_pvc.go new file mode 100644 index 0000000..84e747e --- /dev/null +++ b/internal/finalizers/delete_pvc.go @@ -0,0 +1,22 @@ +package finalizer + +import ( + "context" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +type DeletePVCFinalizer struct { +} + +func (ef *DeletePVCFinalizer) DeleteMethod(ctx context.Context, redis *redisv1.RedisCluster, c client.Client) error { + pvc := &corev1.PersistentVolumeClaim{} + err := c.DeleteAllOf(ctx, pvc, client.InNamespace(redis.Namespace), client.MatchingLabels{"redis-cluster-name": redis.Name}) + return err +} + +func (ef *DeletePVCFinalizer) GetId() string { + return "redis.inditex.com/delete-pvc" +} diff --git a/internal/finalizers/finalizer.go b/internal/finalizers/finalizer.go new file mode 100644 index 0000000..db54639 --- /dev/null +++ b/internal/finalizers/finalizer.go @@ -0,0 +1,13 @@ +package finalizer + +import ( + "context" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +type Finalizer interface { + DeleteMethod(context.Context, *redisv1.RedisCluster, client.Client) error + GetId() string +} diff --git a/internal/kubernetes/cluster_nodes.go b/internal/kubernetes/cluster_nodes.go new file mode 100644 index 0000000..dd38e88 --- /dev/null +++ b/internal/kubernetes/cluster_nodes.go @@ -0,0 +1,1277 @@ +package kubernetes + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "math" + "net" + "sort" + "strconv" + "strings" + "sync" + "time" + + "github.com/go-logr/logr" + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/internal/redis" + "github.com/inditextech/redisoperator/internal/utils" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/labels" + ctrlClient "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + MigrateTimeout = 6000 + RedisCommandMigrate = "migrate" + RedisKeysOption = "KEYS" + RedisReplaceOption = "REPLACE" + RedisClusterCommand = "CLUSTER" + RedisAskRedirectionResponse = "ASK" + RedisDeleleCommand = "DEL" + RedisBusyKeyResponse = "BUSYKEY" + RedisSetSlotStableSubCommand = "STABLE" + RedisSetSlotSubCommand = "setslot" + RedisNodeSubCommand = "node" + RedisImportingState = "importing" + RedisMigratingState = "migrating" + RedisClusterDownResponse = "CLUSTERDOWN" + RedisClusterTotalSlots = 16384 + RedisNodesUnbalancedThreshold = 2 +) + +var ErrAllWeightsZero = errors.New("all nodes weights are set to 0: Impossible to calculate Slot movements") + +type ClusterNode struct { + *corev1.Pod + *redis.ClusterNode +} + +// MoveMapOptions holds the options for calculating slot move map. +type MoveMapOptions struct { + threshold int + weights map[string]int +} + +type MoveSequence struct { + From string + FromNode *ClusterNode + To string + ToNode *ClusterNode + Slots []int +} + +type ClusterNodeList struct { + client ctrlClient.Client + Nodes []*ClusterNode +} + +type MoveSlotOption struct { + PurgeKeys bool +} + +func (clusterNode *ClusterNode) Role() string { + if clusterNode.IsMaster() { + return "master" + } else { + return "replica" + } +} + +func (clusterNode *ClusterNode) IsMaster() bool { + return clusterNode.Info().HasFlag("master") +} + +func (clusterNode *ClusterNode) IsReplica() bool { + return !clusterNode.Info().HasFlag("master") +} + +func (clusterNode *ClusterNode) String() string { + out, _ := json.Marshal(map[string]interface{}{ + "pod": clusterNode.Pod.Name, + "ip": clusterNode.Pod.Status.PodIP, + "node_id": clusterNode.ClusterNode.Name(), + "role": clusterNode.Role(), + }) + return string(out) +} + +func GetKubernetesClusterNodes(ctx context.Context, client ctrlClient.Client, redisCluster *redisv1.RedisCluster) (ClusterNodeList, error) { + componentLabel := GetStatefulSetSelectorLabel(ctx, client, redisCluster) + labelSelector := labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + componentLabel: "redis", + }, + ) + + pods := &corev1.PodList{} + err := client.List(ctx, pods, &ctrlClient.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + if err != nil { + return ClusterNodeList{}, err + } + + nodes := make([]*ClusterNode, 0) + + // Sort the pods by their ordinals as sorted list will be necessary for calculations on scale down + prefix := fmt.Sprintf("%s-", redisCluster.Name) + + sort.Slice(pods.Items, func(i, j int) bool { + ordinali, _ := strconv.Atoi(strings.TrimPrefix(pods.Items[i].Name, prefix)) + ordinalj, _ := strconv.Atoi(strings.TrimPrefix(pods.Items[j].Name, prefix)) + return ordinali < ordinalj + }) + for _, pod := range pods.Items { + clusterNode, err := redis.NewClusterNode(fmt.Sprintf("%s:%s", pod.Status.PodIP, strconv.Itoa(redis.RedisCommPort))) + if err != nil { + return ClusterNodeList{}, err + } + nodes = append(nodes, &ClusterNode{ + Pod: pod.DeepCopy(), + ClusterNode: clusterNode, + }) + } + return ClusterNodeList{ + Nodes: nodes, + client: client, + }, nil +} + +func FreeKubernetesClusterNode(clusterNode *ClusterNode) error { + return clusterNode.R().Close() +} + +func (nodeList *ClusterNodeList) String() string { + var out []map[string]interface{} + for _, clusterNode := range nodeList.Nodes { + out = append(out, map[string]interface{}{ + "pod": clusterNode.Pod.Name, + "ip": clusterNode.Pod.Status.PodIP, + "node_id": clusterNode.ClusterNode.Name(), + }) + } + result, _ := json.Marshal(out) + return string(result) +} + +// Returns the found node or an error if not found. +func (nodeList *ClusterNodeList) GetNodeByPodName(name string) (*ClusterNode, error) { + if name == "" { + return nil, fmt.Errorf("pod name is empty") + } + + for _, node := range nodeList.Nodes { + if node != nil && node.Pod.Name == name { + return node, nil + } + } + + return nil, fmt.Errorf("node with pod name '%s' not found", name) +} + +func (nodeList *ClusterNodeList) GetNodeByID(id string) (*ClusterNode, error) { + if id == "" { + return nil, fmt.Errorf("pod id is empty") + } + + for _, node := range nodeList.Nodes { + if node != nil && node.ClusterNode.Name() == id { + return node, nil + } + } + return nil, fmt.Errorf("node ID not found") +} + +func (nodeList *ClusterNodeList) SimpleNodesObject() []map[string]interface{} { + var out []map[string]interface{} + for _, clusterNode := range nodeList.Nodes { + out = append(out, map[string]interface{}{ + "pod": clusterNode.Pod.Name, + "ip": clusterNode.Pod.Status.PodIP, + "node_id": clusterNode.ClusterNode.Name(), + }) + } + return out +} + +func (nodeList *ClusterNodeList) GetMasterReplicas(master *ClusterNode) ([]*ClusterNode, error) { + var result []*ClusterNode + replicas, err := nodeList.GetReplicas() + if err != nil { + return nil, err + } + for _, replica := range replicas { + if replica.Replicate() == master.ClusterNode.Name() { + result = append(result, replica) + } + } + return result, nil +} + +func (nodeList *ClusterNodeList) GetMasters() ([]*ClusterNode, error) { + var result []*ClusterNode + for _, node := range nodeList.Nodes { + if node.HasFlag("master") { + result = append(result, node) + } + } + return result, nil +} + +func (nodeList *ClusterNodeList) GetReplicas() ([]*ClusterNode, error) { + var result []*ClusterNode + for _, node := range nodeList.Nodes { + err := node.LoadInfo(true) + if err != nil { + return nil, err + } + if !node.HasFlag("master") { + result = append(result, node) + } + } + return result, nil +} + +func (nodeList *ClusterNodeList) LoadInfoForNodes() error { + for _, node := range nodeList.Nodes { + err := node.LoadInfo(true) + if err != nil { + return err + } + } + return nil +} + +func (nodeList *ClusterNodeList) ClusterMeet(ctx context.Context) error { + if len(nodeList.Nodes) == 0 { + return fmt.Errorf("node nodeList is empty") + } + + for _, sourceNode := range nodeList.Nodes { + if sourceNode == nil { + continue // Skip nil nodes + } + + for _, targetNode := range nodeList.Nodes { + if targetNode == nil || sourceNode.ClusterNode.Name() == targetNode.ClusterNode.Name() { + continue // Skip nil nodes and self-join attempts + } + + err := sourceNode.ClusterNode.R().ClusterMeet(ctx, targetNode.Status.PodIP, strconv.Itoa(redis.RedisCommPort)).Err() + if err != nil { + return fmt.Errorf("error in ClusterMeet between '%s' and '%s': %w", sourceNode.Name(), targetNode.Name(), err) + } + } + } + + return nil +} + +func (nodeList *ClusterNodeList) EnsureClusterSlotsStable(ctx context.Context, log logr.Logger) error { + + masterNodes, err := nodeList.GetMasters() + if err != nil { + return fmt.Errorf("error getting master nodes: %w", err) + } + for _, node := range masterNodes { + // Case 1: Slot is in migrating on one node, and importing in another, but might have keys left. + // Let's try to move the slot. + if err := stabilizeNodeSlots(ctx, node, nodeList); err != nil { + return fmt.Errorf("error stabilizing node slots: %w", err) + } + // Case 2: Slot is in importing on one node, and not migrating in it's source node. + // We've covered correct cases previously, so we can safely assume we have an incorrect mapping here. + // We'll try to find the owner of the slot, and if we can't we'll assume we own it and mark it as such + if err := fixIncorrectImporting(node, masterNodes); err != nil { + return fmt.Errorf("error fixing incorrect importing: %w", err) + } + // Case 3: Slot is in importing on one node, and has no direct owner. + // We need to see whether another node is trying to migrate the slot, + // and if not. we assume we own it. + if err := handleNoDirectOwner(ctx, node, masterNodes, nodeList); err != nil { + return fmt.Errorf("error handling slots with no direct owner: %w", err) + } + // Case 4: Slot is in migrating on one node, but no node is marked as importing. + // If another node alreay owns this slots, we can just mark it as stable. + // If not already assigned, we can assume we wanted to move the slot, and just continue doing it. + if err := slotsInMigratingButNoNodeImporting(ctx, node, masterNodes, nodeList, log); err != nil { + return fmt.Errorf("error continuing incomplete migrations: %w", err) + } + } + // We've tried to cover the most common cases in https://github.com/redis/redis/blob/unstable/src/redis-cli.c#L5012 + // If we find more cases, we can add them here as well. + return nil +} + +func stabilizeNodeSlots(ctx context.Context, node *ClusterNode, nodeList *ClusterNodeList) error { + err := node.ClusterNode.LoadInfo(false) // Get the latest information for the node + if err != nil { + return fmt.Errorf("error loading info for node '%s': %w", node.Name(), err) + } + + for slot, sourceId := range node.ClusterNode.Importing() { + if err := setSlotStable(node, slot); err != nil { + return fmt.Errorf("error setting slot %d as stable: %w", slot, err) + } + + sourceNode, err := nodeList.GetNodeByID(sourceId) + if err != nil { + return fmt.Errorf("error getting source node by ID '%s': %w", sourceId, err) + } + + if sourceNode.IsMigrating(slot) { + if err := completeSlotMigration(ctx, nodeList, sourceNode, node, slot); err != nil { + return fmt.Errorf("error completing migration for slot %d: %w", slot, err) + } + } + + node.RemoveImporting(slot) + sourceNode.ClusterNode.RemoveMigrating(slot) + } + + return nil +} + +func setSlotStable(node *ClusterNode, slot int) error { + err := node.Call(RedisClusterCommand, RedisSetSlotSubCommand, slot, RedisSetSlotStableSubCommand).Err() + return err +} + +func completeSlotMigration(ctx context.Context, nodeList *ClusterNodeList, sourceNode, destNode *ClusterNode, slot int) error { + fmt.Printf("Fixing incomplete migration of slot %v from %v to %v\n", slot, sourceNode.Name(), destNode.Name()) + time.Sleep(2 * time.Second) // Waiting before moving the slot + + err := nodeList.MoveSlot(ctx, sourceNode, destNode, slot, MoveSlotOption{PurgeKeys: false}) + if err != nil { + return fmt.Errorf("cannot move slot %d from %s to %s: %v", slot, sourceNode.Name(), destNode.Name(), err) + } + + return nil +} + +func fixIncorrectImporting(node *ClusterNode, masterNodes []*ClusterNode) error { + for slot := range node.Importing() { + ownerNode := getOwner(masterNodes, slot) + if ownerNode != nil { + if err := markSlotStableAndAssignOwner(ownerNode, masterNodes, slot); err != nil { + return fmt.Errorf("error fixing incorrect importing for slot %d: %w", slot, err) + } + node.RemoveImporting(slot) + } + } + + return nil +} + +func getOwner(masterNodes []*ClusterNode, slot int) *ClusterNode { + for _, node := range masterNodes { + if node.ClusterNode.OwnsSlot(slot) { + return node + } + } + return nil +} + +func getMigratingNode(masterNodes []*ClusterNode, slot int) *ClusterNode { + for _, node := range masterNodes { + if node.ClusterNode.IsMigrating(slot) { + return node + } + } + return nil +} + +func markSlotStableAndAssignOwner(ownerNode *ClusterNode, masterNodes []*ClusterNode, slot int) error { + if err := setSlotStable(ownerNode, slot); err != nil { + return err + } + + for _, node := range masterNodes { + if err := node.Call(RedisClusterCommand, RedisSetSlotSubCommand, slot, RedisNodeSubCommand, ownerNode.ClusterNode.Name()).Err(); err != nil { + return err + } + } + + return nil +} + +func handleNoDirectOwner(ctx context.Context, node *ClusterNode, masterNodes []*ClusterNode, nodeList *ClusterNodeList) error { + for slot := range node.Importing() { + ownerNode := getOwner(masterNodes, slot) + if ownerNode == nil { + migratingNode := getMigratingNode(masterNodes, slot) + if migratingNode != nil { + if node.ClusterNode.Name() == migratingNode.ClusterNode.Name() { + if err := nodeList.MoveSlot(ctx, migratingNode, node, slot, MoveSlotOption{PurgeKeys: false}); err != nil { + return err + } + node.RemoveImporting(slot) + migratingNode.ClusterNode.RemoveMigrating(slot) + } + } else { + if err := markSlotAsOwned(node, slot); err != nil { + return err + } + } + } + } + + return nil +} + +func markSlotAsOwned(node *ClusterNode, slot int) error { + if err := setSlotStable(node, slot); err != nil { + return err + } + if err := node.Call(RedisClusterCommand, RedisSetSlotSubCommand, slot, RedisNodeSubCommand, node.Name()).Err(); err != nil { + return err + } + node.RemoveImporting(slot) + return nil +} + +func slotsInMigratingButNoNodeImporting(ctx context.Context, node *ClusterNode, masterNodes []*ClusterNode, nodeList *ClusterNodeList, log logr.Logger) error { + for slot, destination := range node.Migrating() { + destNode, err := nodeList.GetNodeByID(destination) + if err != nil { + log.Info("Could not find destination node, skipping migration", "slot", slot, "destination", destination) + continue + } + + // If another master node already owns this slot, set it as stable + ownerNode := getOwner(masterNodes, slot) + if ownerNode != nil && node.Name() != ownerNode.Name() { + if err := setSlotStable(node, slot); err != nil { + return fmt.Errorf("error setting slot %d as stable: %w", slot, err) + } + continue + } + + log.Info("Continuing incomplete migration of slot", "slot", slot, "source", node.Name(), "destination", destNode.Name()) + + if err := nodeList.MoveSlot(ctx, node, destNode, slot, MoveSlotOption{PurgeKeys: false}); err != nil { + log.Error(err, "Failed to move slot", "slot", slot, "source", node.Name(), "target", destNode.Name()) + continue + } + + node.RemoveMigrating(slot) + } + + return nil +} + +// RebalanceCluster rebalances the cluster based on given weights and options. +func (nodeList *ClusterNodeList) RebalanceCluster(ctx context.Context, weights map[string]int, options MoveSlotOption, log logr.Logger) error { + if nodeList == nil { + return fmt.Errorf("nodeList is nil") + } + + slotMap, err := nodeList.buildSlotMap() + if err != nil { + return err + } + + moveMapOptions := NewMoveMapOptions() + moveMapOptions.weights = weights + slotMoveMap, err := CalculateSlotMoveMap(slotMap, moveMapOptions) + if err != nil { + log.Error(err, "Error calculating SlotMoveMap") + if errors.Is(err, ErrAllWeightsZero) { + return nil + } + return err + } + + slotMoveSequence := CalculateMoveSequence(slotMap, slotMoveMap, moveMapOptions) + + executeMoveSequence := func(waitGroup *sync.WaitGroup, moveSequence MoveSequence) error { + defer waitGroup.Done() + for _, slot := range moveSequence.Slots { + err := nodeList.MoveSlot(ctx, moveSequence.FromNode, moveSequence.ToNode, slot, options) + if err != nil { + log.Error(err, "Cannot move slot", "slot", slot, "source", moveSequence.FromNode.Name(), "target", moveSequence.ToNode.Name()) + return err + } + } + return nil + } + + var waitGroup sync.WaitGroup + errChan := make(chan error, len(slotMoveSequence)) + + for _, moveSequence := range slotMoveSequence { + waitGroup.Add(1) + go func(moveSequence MoveSequence) { + // errChan + errChan <- executeMoveSequence(&waitGroup, moveSequence) + }(moveSequence) // Doing more than one node's slot moves at the same time causes a panic in Redis Client. + } + + waitGroup.Wait() + close(errChan) + var errors []error + + for err := range errChan { + if err != nil { + errors = append(errors, err) + } + } + + // Firstly, fix the slots broken while migratin + err = nodeList.EnsureClusterSlotsStable(ctx, log) + if err != nil { + return err + } + // Secondly, if there are errors when moving slots the cluster is not well Rebalanced, then, return error + if len(errors) > 0 { + return fmt.Errorf("moving slots errors: %v", errors) + } + + return nil +} + +func (nodeList *ClusterNodeList) buildSlotMap() (map[*ClusterNode][]int, error) { + slotMap := make(map[*ClusterNode][]int) + masters, err := nodeList.GetMasters() + if err != nil { + return nil, err + } + for _, node := range masters { + slotMap[node] = node.ClusterNode.Slots() + } + return slotMap, nil +} + +func (nodeList *ClusterNodeList) NeedsClusterMeet(ctx context.Context) (bool, error) { + // Compile a map of all the IPs which should be listed for each node. + // We are using a map to make it faster, as searching a has table is better than a list + ipList := map[string]struct{}{} + for _, node := range nodeList.Nodes { + ipList[node.Pod.Status.PodIP] = struct{}{} + } + + // Now for every node, make sure that the nodes it knows about, is the same as the nodes we know about. + for _, node := range nodeList.Nodes { + clusterNodes, err := node.ClusterNode.R().Do(ctx, "CLUSTER", "NODES").Text() + if err != nil { + return false, err + } + clusterNodeStrings := strings.Split(clusterNodes, "\n") + clusterNodeCount := 0 + // name addr flags role ping_sent ping_recv link_status slots + for _, val := range clusterNodeStrings { + parts := strings.Split(val, " ") + if len(parts) <= 3 { + continue + } + + clusterNodeCount++ + addr := strings.Split(parts[1], "@")[0] + host, _, _ := net.SplitHostPort(addr) + // If the IP does not exist in our list, + // we are probably using an outdated one and should ClusterMeet. + if _, ok := ipList[host]; !ok { + return true, nil + } + } + // Every cluster node should see all the nodes. + // If a node has forgotten any other node we need to meet nodes. + if len(nodeList.Nodes) > clusterNodeCount { + return true, nil + } + } + return false, nil +} + +func (nodeList *ClusterNodeList) EnsureReplicaSpread(ctx context.Context, redisCluster *redisv1.RedisCluster) error { + activeMasters, err := nodeList.GetMasters() + if err != nil { + return err + } + var masterNeedsReplicas []*ClusterNode + var replicaNeedsMove []*ClusterNode + + err = nodeList.LoadInfoForNodes() + if err != nil { + return err + } + + for _, master := range activeMasters { + replicas, err := nodeList.GetMasterReplicas(master) + if err != nil { + return err + } + if len(replicas) == int(redisCluster.Spec.ReplicasPerMaster) { + continue + } else if len(replicas) < int(redisCluster.Spec.ReplicasPerMaster) { + // Too few replicas + masterNeedsReplicas = append(masterNeedsReplicas, master) + } else if len(replicas) > int(redisCluster.Spec.ReplicasPerMaster) { + // Too few replicas + replicaNeedsMove = append(replicaNeedsMove, replicas[:redisCluster.Spec.ReplicasPerMaster]...) + } + } + + // There might be replicas which are replicating replicas. We want to change these to point at masters + replicas, err := nodeList.GetReplicas() + if err != nil { + return err + } + for _, replica := range replicas { + replicasPointedAtReplicas, err := nodeList.GetMasterReplicas(replica) + if err != nil { + return err + } + replicaNeedsMove = append(replicaNeedsMove, replicasPointedAtReplicas...) + } + + // There might be replicas which are replicating masters which we cannot see. + masters, err := nodeList.GetMasters() + if err != nil { + return err + } + for _, replica := range replicas { + // Is the replica pointing at one of the masters ? + pointedAtMaster := false + for _, master := range masters { + if master.ClusterNode.Name() == replica.ClusterNode.Replicate() { + pointedAtMaster = true + } + } + if !pointedAtMaster { + replicaNeedsMove = append(replicaNeedsMove, replica) + } + } + + for i := 0; i < len(masterNeedsReplicas); i++ { + _, err := replicaNeedsMove[i].ClusterNode.ClusterReplicateWithNodeID(masterNeedsReplicas[i].ClusterNode.Name()) + if err != nil { + return err + } + } + + return nil +} + +func (nodeList *ClusterNodeList) EnsureClusterRatio(ctx context.Context, redisCluster *redisv1.RedisCluster, log logr.Logger) error { + // When all the nodes are ready in the statefulset, + // we need to make sure there is the right ratio of masters and replicas for the redis cluster + // If there are too many replicas, we need to reset and add as a master + // + // If there are too few replicas, we need to reset and add as a + // replica of a master with the least amount of replicas attached + activeMasters, err := nodeList.GetMasters() + if err != nil { + return err + } + activeReplicas, err := nodeList.GetReplicas() + if err != nil { + return err + } + sort.Slice(activeMasters, func(i, j int) bool { + return len(activeMasters[i].Slots()) > len(activeMasters[j].Slots()) + }) + + // Using an exit early strategy. Start with the best case. + if len(activeMasters) == int(redisCluster.Spec.Replicas) { + err := nodeList.EnsureReplicaSpread(ctx, redisCluster) + return err + } + if len(activeMasters) > int(redisCluster.Spec.Replicas) { + // TODO We need to keep the masters with the most slots, and the ones that already have replicas + sort.Slice(activeMasters, func(i, j int) bool { + return len(activeMasters[i].Slots()) > len(activeMasters[j].Slots()) + }) + fmt.Printf("Sorted masters %v\n", activeMasters) + keepMasters := activeMasters[:int(redisCluster.Spec.Replicas)] + deleteMasters := activeMasters[int(redisCluster.Spec.Replicas):] + + // We want to ensure the slots are all stable before we try to rebalance + err = nodeList.EnsureClusterSlotsStable(ctx, log) + if err != nil { + return err + } + + weights := map[string]int{} + for _, deletable := range deleteMasters { + weights[deletable.ClusterNode.Name()] = 0 + } + err = nodeList.RebalanceCluster(ctx, weights, MoveSlotOption{PurgeKeys: redisCluster.Spec.PurgeKeysOnRebalance}, log) + if err != nil { + return err + } + + // We can now reset the deletable masters to replicas of the masters + // Find masters with too few replicas + currentKeepable := 0 + time.Sleep(10 * time.Second) + for _, master := range deleteMasters { + _, err := master.ClusterNode.ClusterReplicateWithNodeID(keepMasters[currentKeepable].ClusterNode.Name()) + if err != nil { + return err + } + currentKeepable = currentKeepable + 1 + if currentKeepable > int(redisCluster.Spec.Replicas)-1 { + currentKeepable = 0 + } + } + // At this point the nodes info is outdated and needs to be updated + err = nodeList.LoadInfoForNodes() + if err != nil { + return err + } + + err = nodeList.EnsureReplicaSpread(ctx, redisCluster) + return err + } + if len(activeMasters) < int(redisCluster.Spec.Replicas) && redisCluster.Spec.ReplicasPerMaster > 0 { + + // Get replicas to change into masters + needsReplicas := int(redisCluster.Spec.Replicas) - len(activeMasters) + convertableReplicas := activeReplicas[:needsReplicas] + for _, replica := range convertableReplicas { + err := replica.ClusterNode.Call("cluster", "reset").Err() + if err != nil { + return err + } + // Wait for reset + time.Sleep(5 * time.Second) + } + + err = nodeList.ClusterMeet(ctx) + if err != nil { + return err + } + + // Wait for cluster meet so nodes can agree on configuration + time.Sleep(10 * time.Second) + + err = nodeList.LoadInfoForNodes() + if err != nil { + return err + } + + err = nodeList.EnsureReplicaSpread(ctx, redisCluster) + return err + } + if len(activeReplicas) > 0 && redisCluster.Spec.ReplicasPerMaster == 0 { + for _, replica := range activeReplicas { + err := replica.ClusterNode.Call("cluster", "reset").Err() + if err != nil { + return err + } + // Wait for reset + time.Sleep(5 * time.Second) + } + + err = nodeList.ClusterMeet(ctx) + if err != nil { + return err + } + + // Wait for cluster meet so nodes can agree on configuration + time.Sleep(10 * time.Second) + + err = nodeList.LoadInfoForNodes() + if err != nil { + return err + } + + err = nodeList.EnsureReplicaSpread(ctx, redisCluster) + return err + } + + return nil +} + +func (nodeList *ClusterNodeList) RemoveClusterOutdatedNodes(ctx context.Context, redisCluster *redisv1.RedisCluster, log logr.Logger) error { + // If a node is listed in the nodes.conf file of a Redis node, + // but it is no longer applicable due to a restart and receiving a new IP from Kubernetes, + // we can consider the Node outdated. + // + // We need to find any nodes that are outdated due to restart in ephemeral mode. + // + // If there are the correct amount of pods, + // and the same amount of successful nodes, + // but > 0 failing nodes, + // we can safely assume that the failing node is due to a restart, + // and optimistically delete it from the set of nodes in redis. + listOptions := ctrlClient.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labels.SelectorFromSet( + map[string]string{ + redis.RedisClusterLabel: redisCluster.Name, + GetStatefulSetSelectorLabel(ctx, nodeList.client, redisCluster): "redis", + }, + ), + } + + podsReady, err := utils.AllPodsReady(ctx, nodeList.client, &listOptions, redisCluster.NodesNeeded()) + if err != nil { + return err + } + if !podsReady || len(nodeList.Nodes) != redisCluster.NodesNeeded() { + return nil + } + + if err = nodeList.LoadInfoForNodes(); err != nil { + return err + } + var wg sync.WaitGroup + for _, node := range nodeList.Nodes { + for _, friend := range node.Friends() { + if friend.HasFlag("fail") || friend.HasFlag("noaddr") { + wg.Add(1) + go func(node *ClusterNode, friend *redis.NodeInfo) { + defer wg.Done() + if _, err := node.ClusterNode.ClusterForgetNodeID(friend.NodeID()); err != nil { + log.Info("Node not deleted cause new node or have been deleted.") + } + }(node, friend) + } + } + } + wg.Wait() + return nil +} + +func (nodeList *ClusterNodeList) ForgetNode(nodeId string) error { + for _, node := range nodeList.Nodes { + if node.ClusterNode.Name() == nodeId { + continue + } + err := node.ClusterNode.Call("cluster", "forget", nodeId).Err() + if err != nil { + if !strings.Contains(err.Error(), "ERR Unknown node") { + return err + } + } + } + return nil +} + +func (nodeList *ClusterNodeList) AssignMissingSlots() error { + // First we need to get all the nodes + // Then calculate which slots are assigned + // We then need to subtract this from all the slots. + // Then we need to loop over the unassigned slots, + // and add them to the nodes with the least amount of assigned slots + + masterNodes, err := nodeList.GetMasters() + if err != nil { + return err + } + + // We start with a map so we can easily delete slots if they are already assigned + allSlots := utils.MakeRangeMap(0, 16383) + for _, node := range masterNodes { + for _, slot := range node.ClusterNode.Slots() { + // We want to remove any assigned slots from our list so we end up with unassigned slots + delete(allSlots, slot) + } + } + totalMasterNodes := len(masterNodes) + slotsPerNode := CalculateMaxSlotsPerMaster(RedisClusterTotalSlots, totalMasterNodes) + + // We convert the slots left over in the map to an array so we can easily sort them, + // and cut off slices + var slotsToAssign []int + for slot := range allSlots { + slotsToAssign = append(slotsToAssign, slot) + } + sort.Ints(slotsToAssign) + + for i, node := range masterNodes { + slotAmountToAssign := slotsPerNode - len(node.ClusterNode.Slots()) + if slotAmountToAssign <= 0 { + continue + } + // If we reach the last master node with a number of not assigned slots greater than slotsPerNodes + // (mainly when configuring a new redis cluster) the exceeding slots will be assigned to this node. + var slotList []int + if i == totalMasterNodes-1 || len(slotsToAssign) <= slotAmountToAssign { + slotList = slotsToAssign[0:] + slotsToAssign = []int{} + } else { + slotList = slotsToAssign[0:slotAmountToAssign] + slotsToAssign = slotsToAssign[slotAmountToAssign:] + } + + var strSlotList []interface{} + for _, slot := range slotList { + strSlotList = append(strSlotList, strconv.Itoa(slot)) + } + + if len(strSlotList) > 0 { + _, err := node.ClusterNode.ClusterAddSlots(strSlotList...) + if err != nil { + return err + } + } + } + + return nil +} + +func (nodeList *ClusterNodeList) MoveSlot(ctx context.Context, sourceNode *ClusterNode, targetNode *ClusterNode, slot int, options MoveSlotOption) error { + if err := prepareSlotMigration(sourceNode, targetNode, slot); err != nil { + return fmt.Errorf("preparing slot migration: %w", err) + } + + if err := migrateSlotKeys(ctx, sourceNode, targetNode, slot, options); err != nil { + return fmt.Errorf("migrating slot keys: %w", err) + } + + if err := finalizeSlotMigration(nodeList, slot, targetNode); err != nil { + return fmt.Errorf("finalizing slot migration: %w", err) + } + + return nil +} + +func prepareSlotMigration(sourceNode, targetNode *ClusterNode, slot int) error { + err := setSlotState(targetNode, RedisImportingState, slot, sourceNode.ClusterNode.Name()) + if err != nil { + return err + } + err = setSlotState(sourceNode, RedisMigratingState, slot, targetNode.ClusterNode.Name()) + if err != nil { + return err + } + return nil +} + +func migrateSlotKeys(ctx context.Context, sourceNode, targetNode *ClusterNode, slot int, options MoveSlotOption) error { + for { + keys, err := sourceNode.R().ClusterGetKeysInSlot(ctx, slot, 100).Result() + if err != nil { + return err + } + if len(keys) == 0 { + break + } + + if options.PurgeKeys { + if err := purgeKeys(sourceNode, keys); err != nil { + return err + } + } else { + if err := migrateKeys(sourceNode, targetNode, keys); err != nil { + return err + } + } + } + return nil +} + +func finalizeSlotMigration(nodeList *ClusterNodeList, slot int, targetNode *ClusterNode) error { + return setSlotForMasters(nodeList, slot, targetNode) +} + +func setSlotState(node *ClusterNode, state string, slot int, targetNodeName string) error { + return node.Call(RedisClusterCommand, RedisSetSlotSubCommand, slot, state, targetNodeName).Err() +} + +func purgeKeys(node *ClusterNode, keys []string) error { + var cmd []interface{} + cmd = append(cmd, RedisDeleleCommand) + for _, key := range keys { + cmd = append(cmd, key) + } + _, err := node.Call(cmd...).Result() + if err != nil && !strings.Contains(err.Error(), RedisAskRedirectionResponse) { + // If we get an ask redirection, + // it means that the cluster wants us to ask the new node most probably. + // When deleting keys, we do it to make the migration faster. + // If we run against the new node, there is no good reason for deleting the keys anymore, + // as the primary purpose of the delete has been served. + // We can therefor ignore the ASK redirection, and simply continue to the next piece of logic. + // In this case we got a different error, and definitely want to fail hard and fast + // to void putting the Redis cluster in an unfixable state. + //r.Log.Error(err, "Failed to delete keys", "cmd", cmd) + return err + } + return nil +} + +// MigrateKeys migrates the given keys from sourceNode to targetNode. +func migrateKeys(sourceNode, targetNode *ClusterNode, keys []string) error { + if len(keys) == 0 { + // No keys to migrate + return nil + } + + migrateCmd := buildMigrateCommand(targetNode, RedisKeysOption, keys) + + _, err := sourceNode.Call(migrateCmd...).Text() + if err != nil && strings.Contains(err.Error(), RedisBusyKeyResponse) { + // Retry with REPLACE option + migrateCmd = buildMigrateCommand(targetNode, RedisReplaceOption, keys) + err = sourceNode.Call(migrateCmd...).Err() + } + + if err != nil { + return fmt.Errorf("could not move keys to new node: %w", err) + } + + return nil +} + +// buildMigrateCommand builds the Redis MIGRATE command. +func buildMigrateCommand(targetNode *ClusterNode, option string, keys []string) []interface{} { + cmd := []interface{}{ + RedisCommandMigrate, + targetNode.ClusterNode.Host(), + strconv.Itoa(redis.RedisCommPort), + "", 0, MigrateTimeout, + option, + } + for _, key := range keys { + cmd = append(cmd, key) + } + return cmd +} + +// SetSlotForMasters sets a new node for a given slot in all master nodes. +func setSlotForMasters(nodeList *ClusterNodeList, slot int, targetNode *ClusterNode) error { + masters, err := nodeList.GetMasters() + if err != nil { + return err + } + + // Acording to documentation first, handle the targetNode if it's a master + if targetNode.IsMaster() { + if err := setSlotForNode(targetNode, slot, targetNode); err != nil { + return fmt.Errorf("could not set slot %d for target node %s: %w", slot, targetNode.Name(), err) + } + } + + // Then, handle other master nodes + for _, node := range masters { + if node != targetNode && node.IsMaster() { + if err := setSlotForNode(node, slot, targetNode); err != nil { + return fmt.Errorf("could not set slot %d for node %s with target %s: %w", slot, node.Name(), targetNode.Name(), err) + } + } + } + + return nil +} + +// setSlotForNode sets a given slot for the specified node. +func setSlotForNode(node *ClusterNode, slot int, targetNode *ClusterNode) error { + return node.Call(RedisClusterCommand, RedisSetSlotSubCommand, slot, RedisNodeSubCommand, targetNode.ClusterNode.Name()).Err() +} + +// NewMoveMapOptions creates a new instance of MoveMapOptions with default values. +func NewMoveMapOptions() *MoveMapOptions { + return &MoveMapOptions{ + threshold: RedisNodesUnbalancedThreshold, + weights: make(map[string]int), + } +} + +// GetNodeWeight retrieves the weight of a node by its name. +func (opt *MoveMapOptions) GetNodeWeight(nodeId string) int { + if weight, ok := opt.weights[nodeId]; ok { + return weight + } + return 1 +} + +// SetWeights sets the weights for the nodes. +func (opt *MoveMapOptions) SetWeights(weights map[string]int) { + opt.weights = weights +} + +// SetThreshold sets the threshold value. +func (opt *MoveMapOptions) SetThreshold(threshold int) { + opt.threshold = threshold +} + +func CalculateSlotMoveMap(slotMap map[*ClusterNode][]int, options *MoveMapOptions) (map[*ClusterNode][]int, error) { + if len(slotMap) == 0 { + return nil, fmt.Errorf("slot map is empty") + } + if options == nil { + return nil, fmt.Errorf("options are nil") + } + + totalSlots, totalWeight := calculateTotalWeight(slotMap, options) + if totalWeight == 0 { + return nil, ErrAllWeightsZero + } + + slotsPerWeight := CalculateMaxSlotsPerMaster(totalSlots, totalWeight) + result := make(map[*ClusterNode][]int) + + for node, slots := range slotMap { + assignSlotsToNode(node, slots, slotsPerWeight, options, result) + } + + return result, nil +} + +func calculateTotalWeight(slotMap map[*ClusterNode][]int, options *MoveMapOptions) (int, int) { + totalSlots := 0 + totalWeight := 0 + for node, slots := range slotMap { + totalSlots += len(slots) + totalWeight += options.GetNodeWeight(node.Name()) + } + return totalSlots, totalWeight +} + +func assignSlotsToNode(node *ClusterNode, slots []int, slotsPerWeight int, options *MoveMapOptions, result map[*ClusterNode][]int) { + weight := options.GetNodeWeight(node.Name()) + if weight == 0 { + result[node] = slots + return + } + + shouldHaveSlots := slotsPerWeight * weight + + nodeShouldSend := hasLeftoverSlotsOverThreshold(len(slots), shouldHaveSlots, options.threshold) + + if nodeShouldSend { + result[node] = slots[shouldHaveSlots:] + } else { + result[node] = []int{} + } +} + +func CalculateMoveSequence(SlotMap map[*ClusterNode][]int, SlotMoveMap map[*ClusterNode][]int, options *MoveMapOptions) []MoveSequence { + hashMap := make(map[string]MoveSequence) + + totalSlots := 0 + totalWeight := 0 + for node, slots := range SlotMap { + totalSlots += len(slots) + totalWeight += options.GetNodeWeight(node.Name()) + } + slotsPerWeight := CalculateMaxSlotsPerMaster(totalSlots, totalWeight) + + // Leftover string protects against rounding errors where a 0 weighted node could still have slots. + // The actual leftover is the "last node with weight > 0", where we can move any leftover + // slots to to protect 0 weighted slots + var leftOverNode *ClusterNode + for destination, destinationSlots := range SlotMap { + destinationWeight := options.GetNodeWeight(destination.Name()) + if destinationWeight == 0 { + continue + } + destinationShouldHaveSlots := slotsPerWeight * destinationWeight + if len(destinationSlots) < destinationShouldHaveSlots { + // Destination needs slots + needsSlots := destinationShouldHaveSlots - len(destinationSlots) + for source, slots := range SlotMoveMap { + if source == destination { + // No point trying to take slots from ourself + continue + } + if len(slots) == 0 { + // No point trying to steal slots from poor sources + continue + } + + var takeSlots []int + if len(slots) <= needsSlots { + takeSlots = slots + SlotMoveMap[source] = make([]int, 0) + } else { + takeSlots = slots[:needsSlots] + SlotMoveMap[source] = slots[needsSlots:] + } + key := source.Name() + ":" + destination.Name() + if _, ok := hashMap[key]; ok { + hashMap[key] = MoveSequence{ + From: hashMap[key].From, + FromNode: hashMap[key].FromNode, + To: hashMap[key].To, + ToNode: hashMap[key].ToNode, + Slots: append(hashMap[key].Slots, takeSlots...), + } + } else { + hashMap[key] = MoveSequence{ + From: source.Name(), + FromNode: source, + To: destination.Name(), + ToNode: destination, + Slots: takeSlots, + } + } + needsSlots -= len(takeSlots) + if needsSlots == 0 { + break + } + } + leftOverNode = destination + } + } + for source, slots := range SlotMoveMap { + // We need to move any slots into the last destination node with weight > 1 + if len(slots) > 0 { + if source.Name() == leftOverNode.Name() { + // No point trying to take slots from ourself, we might as well leave them there + SlotMoveMap[source] = []int{} + continue + } + key := source.Name() + ":" + leftOverNode.Name() + if _, ok := hashMap[key]; ok { + hashMap[key] = MoveSequence{ + From: hashMap[key].From, + FromNode: hashMap[key].FromNode, + To: hashMap[key].To, + ToNode: hashMap[key].ToNode, + Slots: append(hashMap[key].Slots, slots...), + } + } else { + hashMap[key] = MoveSequence{ + From: source.Name(), + FromNode: source, + To: leftOverNode.Name(), + ToNode: leftOverNode, + Slots: slots, + } + } + + } + } + + result := make([]MoveSequence, 0) + + for _, moveSequence := range hashMap { + result = append(result, moveSequence) + } + + return result +} + +func (nodeList *ClusterNodeList) GetUnbalancedNodes(ctx context.Context) (map[string]int, error) { + unbalancedNodes := make(map[string]int) + masterNodes, err := nodeList.GetMasters() + if err != nil { + return unbalancedNodes, err + } + slotsPerMasterNode := CalculateMaxSlotsPerMaster(RedisClusterTotalSlots, len(masterNodes)) + for _, node := range masterNodes { + slots := len(node.Slots()) + if hasLeftoverSlotsOverThreshold(slots, slotsPerMasterNode, RedisNodesUnbalancedThreshold) { + unbalancedNodes[node.Name()] = slots - slotsPerMasterNode + } + } + return unbalancedNodes, nil +} + +func CalculateMaxSlotsPerMaster(slots int, masters int) int { + return int(math.Ceil(float64(slots) / float64(masters))) +} + +func hasLeftoverSlotsOverThreshold(slots int, slotsPerNode int, threshold int) bool { + leftoverSlots := slots - slotsPerNode + return leftoverSlots > slotsPerNode*threshold/100 +} diff --git a/internal/kubernetes/redis.go b/internal/kubernetes/redis.go new file mode 100644 index 0000000..b441674 --- /dev/null +++ b/internal/kubernetes/redis.go @@ -0,0 +1,61 @@ +package kubernetes + +import ( + "context" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/internal/redis" + v1 "k8s.io/api/apps/v1" + pv1 "k8s.io/api/policy/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/reconcile" +) + +func FindExistingStatefulSet(ctx context.Context, client client.Client, req ctrl.Request) (*v1.StatefulSet, error) { + statefulset := &v1.StatefulSet{} + err := client.Get(ctx, types.NamespacedName{Name: req.Name, Namespace: req.Namespace}, statefulset) + if err != nil { + return nil, err + } + return statefulset, nil +} + +func GetStatefulSetSelectorLabel(ctx context.Context, client client.Client, redisCluster *redisv1.RedisCluster) string { + statefulset, err := FindExistingStatefulSet(ctx, client, reconcile.Request{NamespacedName: types.NamespacedName{ + Name: redisCluster.Name, + Namespace: redisCluster.Namespace, + }}) + if err != nil { + if errors.IsNotFound(err) { + return redis.RedisClusterComponentLabel + } + return "" + } + if statefulset.Spec.Template.Labels[redis.RedisClusterComponentLabel] != "" { + // new label + return redis.RedisClusterComponentLabel + } else { + return "app" + } +} + +func FindExistingDeployment(ctx context.Context, client client.Client, req ctrl.Request) (*v1.Deployment, error) { + deployment := &v1.Deployment{} + err := client.Get(ctx, types.NamespacedName{Name: req.Name, Namespace: req.Namespace}, deployment) + if err != nil { + return nil, err + } + return deployment, nil +} + +func FindExistingPodDisruptionBudget(ctx context.Context, client client.Client, req ctrl.Request) (*pv1.PodDisruptionBudget, error) { + pdb := &pv1.PodDisruptionBudget{} + err := client.Get(ctx, types.NamespacedName{Name: req.Name, Namespace: req.Namespace}, pdb) + if err != nil { + return nil, err + } + return pdb, nil +} diff --git a/internal/kubernetes/redis_test.go b/internal/kubernetes/redis_test.go new file mode 100644 index 0000000..286b23d --- /dev/null +++ b/internal/kubernetes/redis_test.go @@ -0,0 +1,177 @@ +package kubernetes_test + +import ( + "context" + "testing" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/internal/kubernetes" + "github.com/inditextech/redisoperator/internal/redis" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" +) + +func TestFindExistingStatefulSetFindsCorrectStatefulSet(t *testing.T) { + fakeClient := fake.NewClientBuilder(). + WithObjects(&appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "default", + Labels: map[string]string{ + "app": "redis", + }, + }, + Spec: appsv1.StatefulSetSpec{}, + }).Build() + request := ctrl.Request{ + NamespacedName: types.NamespacedName{ + Name: "redis-cluster", + Namespace: "default", + }, + } + statefulset, err := kubernetes.FindExistingStatefulSet(context.TODO(), fakeClient, request) + if err != nil { + t.Errorf("Received unexpected error, when fetching statefulset. Error: [%v]", err) + t.FailNow() + } + if statefulset.Name != "redis-cluster" { + t.Error("message", "Received incorrect statefulset", "got", statefulset, "error", err) + } +} + +func TestFindExistingStatefulSetReturnsNotFoundForCases(t *testing.T) { + testMap := map[string]struct { + client client.Client + }{ + "no-objects-exist": { + client: fake.NewClientBuilder().Build(), + }, + "objects-in-different-namespace-exist": { + client: fake.NewClientBuilder().WithObjects(&appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "foobar", + Labels: map[string]string{ + "app": "redis", + }, + }, + Spec: appsv1.StatefulSetSpec{}, + }).Build(), + }, + "objects-with-different-name": { + client: fake.NewClientBuilder().WithObjects(&appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster-2", + Namespace: "default", + Labels: map[string]string{ + "app": "redis", + }, + }, + Spec: appsv1.StatefulSetSpec{}, + }).Build(), + }, + } + request := ctrl.Request{ + NamespacedName: types.NamespacedName{ + Name: "redis-cluster", + Namespace: "default", + }, + } + for name, test := range testMap { + _, err := kubernetes.FindExistingStatefulSet(context.TODO(), test.client, request) + if err == nil { + // We are expecting a Not Found error. No errors means we we found the wrong thing + t.Errorf("Expected an not found error, but did not get an error at all while running case: [%s]", name) + t.FailNow() + } + if !errors.IsNotFound(err) { + t.Errorf("Got an unexpected error while running case: [%s]. Expecting Not Found error, but got: [%v]", name, err) + t.FailNow() + } + } +} + +func TestGetStatefulSetSelectorLabelReturnsCorrectLabels(t *testing.T) { + testMap := map[string]struct { + client client.Client + expectedLabelKey string + }{ + "no-objects-exist": { + client: fake.NewClientBuilder().Build(), + expectedLabelKey: redis.RedisClusterComponentLabel, + }, + "objects-with-app-label": { + client: fake.NewClientBuilder().WithObjects(&appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "default", + }, + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }).Build(), + expectedLabelKey: "app", + }, + "objects-with-component-label": { + client: fake.NewClientBuilder().WithObjects(&appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "default", + }, + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + redis.RedisClusterComponentLabel: "redis", + }, + }, + }, + }, + }).Build(), + expectedLabelKey: redis.RedisClusterComponentLabel, + }, + "objects-with-both-labels": { + client: fake.NewClientBuilder().WithObjects(&appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "default", + }, + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + redis.RedisClusterComponentLabel: "redis", + "app": "redis", + }, + }, + }, + }, + }).Build(), + expectedLabelKey: redis.RedisClusterComponentLabel, + }, + } + for name, test := range testMap { + labelKey := kubernetes.GetStatefulSetSelectorLabel(context.TODO(), test.client, &redisv1.RedisCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-cluster", + Namespace: "default", + }, + }) + if labelKey != test.expectedLabelKey { + // We are expecting a Not Found error. No errors means we we found the wrong thing + t.Errorf("Incorrect label key received for case {%s}. Got {%s}, Expected {%s}", name, labelKey, test.expectedLabelKey) + } + } +} diff --git a/internal/redis/node.go b/internal/redis/node.go new file mode 100644 index 0000000..4564ea3 --- /dev/null +++ b/internal/redis/node.go @@ -0,0 +1,618 @@ +package redis + +import ( + "context" + "fmt" + "net" + "os" + "sort" + "strconv" + "strings" + + redisclient "github.com/redis/go-redis/v9" +) + +const ( + UnusedHashSlot = iota + NewHashSlot + AssignedHashSlot +) + +// detail info for redis node. +type NodeInfo struct { + host string + port uint + + name string + addr string + flags []string + replicate string + pingSent int + pingRecv int + weight int + balance int + linkStatus string + slots []int + migrating map[int]string + importing map[int]string +} + +func (node *NodeInfo) HasFlag(flag string) bool { + for _, f := range node.flags { + if strings.Contains(f, flag) { + return true + } + } + return false +} + +func (node *NodeInfo) Flags() []string { + return node.flags +} + +func (node *NodeInfo) NodeID() string { + return node.name +} + +func (node *NodeInfo) String() string { + return fmt.Sprintf("%s:%d", node.host, node.port) +} + +func (node *NodeInfo) Slots() []int { + return node.slots +} + +// struct of redis cluster node. +type ClusterNode struct { + r *redisclient.Client + info *NodeInfo + dirty bool + friends []*NodeInfo + replicasNodes []*ClusterNode + verbose bool + ctx context.Context +} + +func NewClusterNode(addr string) (node *ClusterNode, err error) { + var host, port string + + hostport := strings.Split(addr, "@")[0] + parts := strings.Split(hostport, ":") + if len(parts) < 2 { + return nil, fmt.Errorf("invalid IP or Port (given as %s) - use IP:Port format", addr) + } + + if len(parts) > 2 { + // ipv6 in golang must like: "[fe80::1%lo0]:53", see detail in net/dial.go + host, port, err = net.SplitHostPort(hostport) + if err != nil { + return nil, err + } + } else { + host = parts[0] + port = parts[1] + } + + p, _ := strconv.ParseUint(port, 10, 0) + node = &ClusterNode{ + r: nil, + info: &NodeInfo{ + host: host, + port: uint(p), + slots: make([]int, 0), + migrating: make(map[int]string), + importing: make(map[int]string), + replicate: "", + }, + dirty: false, + verbose: false, + } + + if os.Getenv("ENV_MODE_VERBOSE") != "" { + node.verbose = true + } + + err = node.Connect() + if err != nil { + return nil, fmt.Errorf("cannot connect to the node %s", err) + } + + return node, nil +} + +func ReleaseClusterNode(node *ClusterNode) error { + return node.r.Close() +} + +func NewTestClusterNode(nodeName string) (node *ClusterNode) { + node = &ClusterNode{ + r: nil, + info: &NodeInfo{ + host: nodeName, + name: nodeName, + port: 1111, + slots: make([]int, 0), + migrating: make(map[int]string), + importing: make(map[int]string), + replicate: "", + }, + dirty: false, + verbose: false, + } + return node +} + +func (clusterNode *ClusterNode) Host() string { + return clusterNode.info.host +} + +func (clusterNode *ClusterNode) Port() uint { + return clusterNode.info.port +} + +func (clusterNode *ClusterNode) Name() string { + return clusterNode.info.name +} + +func (clusterNode *ClusterNode) HasFlag(flag string) bool { + for _, f := range clusterNode.info.flags { + if strings.Contains(f, flag) { + return true + } + } + return false +} + +func (clusterNode *ClusterNode) Replicate() string { + return clusterNode.info.replicate +} + +func (clusterNode *ClusterNode) SetReplicate(nodeId string) { + clusterNode.info.replicate = nodeId + clusterNode.dirty = true +} + +func (clusterNode *ClusterNode) Weight() int { + return clusterNode.info.weight +} + +func (clusterNode *ClusterNode) SetWeight(w int) { + clusterNode.info.weight = w +} + +func (clusterNode *ClusterNode) Balance() int { + return clusterNode.info.balance +} + +func (clusterNode *ClusterNode) SetBalance(balance int) { + clusterNode.info.balance = balance +} + +func (clusterNode *ClusterNode) Slots() []int { + return clusterNode.info.slots +} + +func (clusterNode *ClusterNode) OwnsSlot(searchSlot int) bool { + for _, slot := range clusterNode.info.slots { + if slot == searchSlot { + return true + } + } + return false +} + +func (clusterNode *ClusterNode) Migrating() map[int]string { + return clusterNode.info.migrating +} + +func (clusterNode *ClusterNode) RemoveMigrating(slot int) { + delete(clusterNode.info.migrating, slot) +} + +func (clusterNode *ClusterNode) IsMigrating(slot int) bool { + _, ok := clusterNode.info.migrating[slot] + return ok +} + +func (clusterNode *ClusterNode) Importing() map[int]string { + return clusterNode.info.importing +} + +func (clusterNode *ClusterNode) RemoveImporting(slot int) { + delete(clusterNode.info.importing, slot) +} + +func (clusterNode *ClusterNode) R() *redisclient.Client { + return clusterNode.r +} + +func (clusterNode *ClusterNode) Info() *NodeInfo { + return clusterNode.info +} + +func (clusterNode *ClusterNode) IsDirty() bool { + return clusterNode.dirty +} + +func (clusterNode *ClusterNode) Friends() []*NodeInfo { + return clusterNode.friends +} + +func (clusterNode *ClusterNode) ReplicasNodes() []*ClusterNode { + return clusterNode.replicasNodes +} + +func (clusterNode *ClusterNode) AddReplicasNode(node *ClusterNode) { + clusterNode.replicasNodes = append(clusterNode.replicasNodes, node) +} + +func (clusterNode *ClusterNode) String() string { + return clusterNode.info.String() +} + +func (clusterNode *ClusterNode) NodeString() string { + return clusterNode.info.String() +} + +func (clusterNode *ClusterNode) Connect() error { + if clusterNode.r != nil { + return nil + } + r := redisclient.NewClient(&redisclient.Options{ + Addr: fmt.Sprintf("%s:%d", clusterNode.Host(), clusterNode.Port()), + Password: "", + DB: 0, + }) + + err := r.Ping(context.TODO()).Err() + if err != nil { + return err + } + + clusterNode.r = r + + return nil +} + +func (clusterNode *ClusterNode) Call(args ...interface{}) *redisclient.Cmd { + err := clusterNode.Connect() + if err != nil { + return nil + } + + return clusterNode.r.Do(context.TODO(), args...) +} + +func (clusterNode *ClusterNode) Dbsize() (int, error) { + return clusterNode.Call("DBSIZE").Int() +} + +func (clusterNode *ClusterNode) ClusterAddNode(addr string) (ret string, err error) { + host, port, err := net.SplitHostPort(addr) + if err != nil || host == "" || port == "" { + return "", fmt.Errorf("bad format of host:port: %s", addr) + } + return clusterNode.Call("CLUSTER", "meet", host, port).Text() +} + +func (clusterNode *ClusterNode) ClusterReplicateWithNodeID(nodeid string) (ret string, err error) { + return clusterNode.Call("CLUSTER", "replicate", nodeid).Text() +} + +func (clusterNode *ClusterNode) PromoteToMaster() (ret string, err error) { + return clusterNode.Call("CLUSTER", "FAILOVER").Text() +} + +func (clusterNode *ClusterNode) ClusterForgetNodeID(nodeid string) (ret string, err error) { + return clusterNode.Call("CLUSTER", "forget", nodeid).Text() +} + +func (clusterNode *ClusterNode) ClusterNodeShutdown() (err error) { + clusterNode.r.Shutdown(clusterNode.ctx) + return nil +} + +func (clusterNode *ClusterNode) ClusterResetNode() (err error) { + return clusterNode.Call("cluster", "reset").Err() +} + +func (clusterNode *ClusterNode) ClusterCountKeysInSlot(slot int) (int, error) { + return clusterNode.Call("CLUSTER", "countkeysinslot", slot).Int() +} + +func (clusterNode *ClusterNode) ClusterGetKeysInSlot(slot int, count int) ([]string, error) { + return clusterNode.R().ClusterGetKeysInSlot(clusterNode.ctx, slot, count).Result() +} + +func (clusterNode *ClusterNode) ClusterSetSlot(slot int, cmd string) (string, error) { + return clusterNode.Call("CLUSTER", "setslot", slot, cmd, clusterNode.Name()).Text() +} + +func (clusterNode *ClusterNode) AssertCluster() bool { + info, err := clusterNode.Call("INFO", "cluster").Text() + if err != nil || + !strings.Contains(info, "cluster_enabled:1") { + return false + } + + return true +} + +func (clusterNode *ClusterNode) AssertEmpty() bool { + + info, err := clusterNode.Call("CLUSTER", "INFO").Text() + db0, e := clusterNode.Call("INFO", "db0").Text() + if err != nil || !strings.Contains(info, "cluster_known_nodes:1") || + e != nil || strings.Trim(db0, " ") != "" { + } + + return true +} + +func (clusterNode *ClusterNode) LoadInfo(getfriends bool) (err error) { + var result string + if result, err = clusterNode.Call("CLUSTER", "NODES").Text(); err != nil { + return err + } + nodes := strings.Split(result, "\n") + for _, val := range nodes { + // name addr flags role ping_sent ping_recv link_status slots + parts := strings.Split(val, " ") + if len(parts) <= 3 { + continue + } + + sent, _ := strconv.ParseInt(parts[4], 0, 32) + recv, _ := strconv.ParseInt(parts[5], 0, 32) + addr := strings.Split(parts[1], "@")[0] + host, port, _ := net.SplitHostPort(addr) + p, _ := strconv.ParseUint(port, 10, 0) + + node := &NodeInfo{ + name: parts[0], + addr: parts[1], + flags: strings.Split(parts[2], ","), + replicate: parts[3], + pingSent: int(sent), + pingRecv: int(recv), + linkStatus: parts[6], + + host: host, + port: uint(p), + slots: make([]int, 0), + migrating: make(map[int]string), + importing: make(map[int]string), + } + + if parts[3] == "-" { + node.replicate = "" + } + + if strings.Contains(parts[2], "myself") { + if clusterNode.info != nil { + clusterNode.info.name = node.name + clusterNode.info.addr = node.addr + clusterNode.info.flags = node.flags + clusterNode.info.replicate = node.replicate + clusterNode.info.pingSent = node.pingSent + clusterNode.info.pingRecv = node.pingRecv + clusterNode.info.linkStatus = node.linkStatus + clusterNode.ClearSlots() + } else { + clusterNode.info = node + } + clusterNode.info.slots = make([]int, 0) // If we don't reset the slots array, it keeps adding the same nodes for each call of LoadInfo + clusterNode.info.migrating = make(map[int]string) + clusterNode.info.importing = make(map[int]string) + for i := 8; i < len(parts); i++ { + slots := parts[i] + if strings.Contains(slots, "<") { + slotStr := strings.Split(slots, "-<-") + slotId, _ := strconv.Atoi(slotStr[0][1:]) + clusterNode.info.importing[slotId] = slotStr[1][0 : len(slotStr[1])-1] + } else if strings.Contains(slots, ">") { + slotStr := strings.Split(slots, "->-") + slotId, _ := strconv.Atoi(slotStr[0][1:]) + clusterNode.info.migrating[slotId] = slotStr[1][0 : len(slotStr[1])-1] + } else if strings.Contains(slots, "-") { + slotStr := strings.Split(slots, "-") + firstId, _ := strconv.Atoi(slotStr[0]) + lastId, _ := strconv.Atoi(slotStr[1]) + clusterNode.AddSlots(firstId, lastId) + } else { + firstId, _ := strconv.Atoi(slots) + clusterNode.AddSlots(firstId, firstId) + } + } + } else if getfriends { + node.slots = make([]int, 0) // If we don't reset the slots array, it keeps adding the same nodes for each call of LoadInfo + node.migrating = make(map[int]string) + node.importing = make(map[int]string) + for i := 8; i < len(parts); i++ { + slots := parts[i] + if strings.Contains(slots, "<") { + slotStr := strings.Split(slots, "-<-") + slotId, _ := strconv.Atoi(slotStr[0][1:]) + node.importing[slotId] = slotStr[1][0 : len(slotStr[1])-1] + } else if strings.Contains(slots, ">") { + slotStr := strings.Split(slots, "->-") + slotId, _ := strconv.Atoi(slotStr[0][1:]) + node.migrating[slotId] = slotStr[1][0 : len(slotStr[1])-1] + } else if strings.Contains(slots, "-") { + slotStr := strings.Split(slots, "-") + firstId, _ := strconv.Atoi(slotStr[0]) + lastId, _ := strconv.Atoi(slotStr[1]) + for i := firstId; i <= lastId; i++ { + node.slots = append(node.slots, i) + } + } else { + firstId, _ := strconv.Atoi(slots) + node.slots = append(node.slots, firstId) + } + } + clusterNode.friends = append(clusterNode.friends, node) + } + } + return nil +} + +func (clusterNode *ClusterNode) IsMasterNode() (master bool, err error) { + var result string + if result, err = clusterNode.Call("CLUSTER", "NODES").Text(); err != nil { + return false, err + } + nodes := strings.Split(result, "\n") + for _, val := range nodes { + parts := strings.Split(val, " ") + if len(parts) <= 3 { + continue + } + + if strings.Contains(parts[2], "myself") { + return strings.Contains(parts[2], "master"), nil + } + } + return false, nil +} + +func (clusterNode *ClusterNode) AddSlots(start, end int) { + for i := start; i <= end; i++ { + clusterNode.info.slots = append(clusterNode.info.slots, i) + } + clusterNode.dirty = true +} + +func (clusterNode *ClusterNode) ClearSlots() { + clusterNode.info.slots = []int{} + clusterNode.dirty = true +} + +func (clusterNode *ClusterNode) FlushNodeConfig() { + if !clusterNode.dirty { + return + } + + if clusterNode.Replicate() != "" { + // run replicate cmd + if _, err := clusterNode.ClusterReplicateWithNodeID(clusterNode.Replicate()); err != nil { + // If the cluster did not already joined it is possible that + // the slave does not know the master node yet. So on errors + // we return ASAP leaving the dirty flag set, to flush the + // config later. + return + } + } else { + // TODO: run addslots cmd + var array []int + for s, value := range clusterNode.Slots() { + if value == NewHashSlot { + array = append(array, s) + clusterNode.info.slots[s] = AssignedHashSlot + } + clusterNode.ClusterAddSlots(array) + } + } + + clusterNode.dirty = false +} + +// XXX: check the error for call CLUSTER addslots +func (clusterNode *ClusterNode) ClusterAddSlots(args ...interface{}) (ret string, err error) { + return clusterNode.Call(append([]interface{}{"CLUSTER", "addslots"}, args...)...).Text() +} + +// XXX: check the error for call CLUSTER delslots +func (clusterNode *ClusterNode) ClusterDelSlots(args ...interface{}) (ret string, err error) { + return clusterNode.Call(append([]interface{}{"CLUSTER", "delslots"}, args...)...).Text() +} + +func (clusterNode *ClusterNode) ClusterBumpepoch() (ret string, err error) { + return clusterNode.Call("CLUSTER", "bumpepoch").Text() +} + +func (clusterNode *ClusterNode) InfoString() (result string) { + var role = "M" + + if !clusterNode.HasFlag("master") { + role = "S" + } + + keys := make([]int, 0, len(clusterNode.Slots())) + + for k := range clusterNode.Slots() { + keys = append(keys, k) + } + sort.Ints(keys) + slotstr := MergeNumArray2NumRange(keys) + + if clusterNode.Replicate() != "" && clusterNode.dirty { + result = fmt.Sprintf("S: %s %s", clusterNode.info.name, clusterNode.String()) + } else { + // fix myself flag not the first element of []slots + result = fmt.Sprintf("%s: %s %s\n\t slots:%s (%d slots) %s", + role, clusterNode.info.name, clusterNode.String(), slotstr, len(clusterNode.Slots()), strings.Join(clusterNode.info.flags[1:], ",")) + } + + if clusterNode.Replicate() != "" { + result = result + fmt.Sprintf("\n\t replicates %s", clusterNode.Replicate()) + } else { + result = result + fmt.Sprintf("\n\t %d additional replica(s)", len(clusterNode.replicasNodes)) + } + + return result +} + +func (clusterNode *ClusterNode) GetConfigSignature() string { + config := []string{} + + result, err := clusterNode.Call("CLUSTER", "NODES").Text() + if err != nil { + return "" + } + + nodes := strings.Split(result, "\n") + for _, val := range nodes { + parts := strings.Split(val, " ") + if len(parts) <= 3 { + continue + } + + sig := parts[0] + ":" + + slots := []string{} + if len(parts) > 7 { + for i := 8; i < len(parts); i++ { + p := parts[i] + if !strings.Contains(p, "[") { + slots = append(slots, p) + } + } + } + if len(slots) == 0 { + continue + } + sort.Strings(slots) + sig = sig + strings.Join(slots, ",") + + config = append(config, sig) + } + + sort.Strings(config) + return strings.Join(config, "|") +} + +func (clusterNode *ClusterNode) HasOpenSlots() (bool, error) { + master, err := clusterNode.IsMasterNode() + if err != nil { + return false, err + } + if master { + if len(clusterNode.Importing()) != 0 { + return true, nil + } + if len(clusterNode.Migrating()) != 0 { + return true, nil + } + } + return false, nil +} diff --git a/internal/redis/redis.go b/internal/redis/redis.go new file mode 100644 index 0000000..235c80e --- /dev/null +++ b/internal/redis/redis.go @@ -0,0 +1,876 @@ +package redis + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "log" + "net" + "sort" + "strconv" + "strings" + + v1 "k8s.io/api/apps/v1" + "k8s.io/apimachinery/pkg/api/resource" + ctrl "sigs.k8s.io/controller-runtime" + + redisclient "github.com/redis/go-redis/v9" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/strategicpatch" +) + +const RedisCommPort = 6379 +const RedisGossPort = 16379 +const RedisClusterLabel = "redis-cluster-name" +const RedisClusterComponentLabel = "redis.rediscluster.operator/component" + +const TotalClusterSlots = 16384 + +var defaultPort = corev1.ServicePort{ + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{ + Type: 0, + IntVal: RedisCommPort, + }, +} + +type NodesSlots struct { + Start int + End int +} + +func GetRedisSecret(ctx context.Context, client client.Client, redisCluster *redisv1.RedisCluster) (string, error) { + if redisCluster.Spec.Auth.SecretName == "" { + return "", nil + } + + secret := &corev1.Secret{} + err := client.Get(ctx, types.NamespacedName{Name: redisCluster.Spec.Auth.SecretName, Namespace: redisCluster.Namespace}, secret) + if err != nil { + return "", err + } + redisSecret := string(secret.Data["requirepass"]) + return redisSecret, nil +} + +func GetRedisClient(ctx context.Context, ip string, secret string) *redisclient.Client { + redisclient.NewClusterClient(&redisclient.ClusterOptions{}) + rdb := redisclient.NewClient(&redisclient.Options{ + Addr: fmt.Sprintf("%s:%d", ip, RedisCommPort), + Password: secret, + DB: 0, + }) + return rdb +} + +func NeedsClusterMeet(ctx context.Context, client client.Client, nodes map[string]*redisv1.RedisNode, redisCluster *redisv1.RedisCluster) (bool, error) { + // Compile a map of all the IPs which should be listed for each node. + // We are using a map to make it faster, as searching a has table is better than a list + ipList := map[string]struct{}{} + for _, node := range nodes { + ipList[node.IP] = struct{}{} + } + + // Now for every node, make sure that the nodes it knows about, is the same as the nodes we know about. + for _, node := range nodes { + secret, _ := GetRedisSecret(ctx, client, redisCluster) + redisClient := GetRedisClient(ctx, node.IP, secret) + err := redisClient.Ping(ctx).Err() + if err != nil { + redisClient.Close() + return false, err + } + clusterNodes, err := redisClient.Do(ctx, "CLUSTER", "NODES").Text() + redisClient.Close() + if err != nil { + return false, err + } + clusterNodeStrings := strings.Split(clusterNodes, "\n") + // name addr flags role ping_sent ping_recv link_status slots + for _, val := range clusterNodeStrings { + parts := strings.Split(val, " ") + if len(parts) <= 3 { + continue + } + + addr := strings.Split(parts[1], "@")[0] + host, _, _ := net.SplitHostPort(addr) + // If the IP does not exist in our list, + // we are probably using an outdated one and should ClusterMeet. + if _, ok := ipList[host]; !ok { + return true, nil + } + } + } + return false, nil +} + +func ParseClusterNodes(nodes string) map[string]redisv1.RedisNode { + clusterNodes := make(map[string]redisv1.RedisNode, 0) + + if nodes == "" { + return clusterNodes + } + + nodesSplit := strings.Split(nodes, "\n") + + for _, val := range nodesSplit { + // name addr flags role ping_sent ping_recv link_status slots + parts := strings.Split(val, " ") + if len(parts) < 4 { + continue + } + + clusterNodes[parts[0]] = redisv1.RedisNode{ + IP: strings.Split(parts[1], ":")[0], + IsMaster: strings.Contains(parts[2], "master"), + ReplicaOf: parts[3], + } + } + + return clusterNodes +} + +func GetRedisCLIFromInfo(nodeInfo string) string { + if nodeInfo == "" { + return "" + } + + infoSplit := strings.Split(nodeInfo, "\n") + for _, val := range infoSplit { + if strings.Contains(val, "redis_version") { + return strings.TrimRight(strings.Split(val, ":")[1], "\r") + } + } + return "" +} + +func CreateStatefulSet(ctx context.Context, req ctrl.Request, spec redisv1.RedisClusterSpec, labels map[string]string) (*v1.StatefulSet, error) { + var err error = nil + // req ctrl.Request, replicas int32, redisImage string, storage string + redisImage := spec.Image + replicas := int32(spec.NodesNeeded()) + + if redisImage == "" { + redisImage = "redislabs/redisgraph:2.4.1" + } + + defaultLabels := map[string]string{ + RedisClusterLabel: req.Name, + RedisClusterComponentLabel: "redis", + } + + // Add default labels and apply them to the statefulset. + mergedLabels := labels + for k, v := range defaultLabels { + mergedLabels[k] = v + } + + podManagementPolicy := v1.ParallelPodManagement + redisStatefulSet := &v1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: req.Name, + Namespace: req.Namespace, + Labels: mergedLabels, + }, + Spec: v1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: podManagementPolicy, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: req.Name, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{RedisClusterLabel: req.Name, RedisClusterComponentLabel: "redis"}, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: redisImage, + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: req.Name}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, + }, + }, + } + + if !spec.Ephemeral { + err = AddStatefulSetStorage(redisStatefulSet, req, spec) + } + + return redisStatefulSet, err +} + +func ApplyStsOverride(sts, override *v1.StatefulSet) (*v1.StatefulSet, error) { + // Set an empty selector if override does not set it. This is because a merge with nil removes the field in the merged result + if override.Spec.Selector == nil { + override.Spec.Selector = &metav1.LabelSelector{} + } + + // Copy the original serviceName. This is because if not, merged.Spec.ServiceName will be "" (override content) + override.Spec.ServiceName = sts.Spec.ServiceName + + // Copy the original creationTimestamp and status + override.ObjectMeta.CreationTimestamp = sts.ObjectMeta.CreationTimestamp + override.Status = sts.Status + + // Marshal the original and the override to json + original, err := json.Marshal(sts) + if err != nil { + return nil, err + } + + patch, err := json.Marshal(override) + if err != nil { + return nil, err + } + + // Do the strategic merge patch + merged, err := strategicpatch.StrategicMergePatch(original, patch, v1.StatefulSet{}) + if err != nil { + return nil, err + } + + // Unmarshal the result to a StatefulSet + var result *v1.StatefulSet + err = json.Unmarshal(merged, &result) + if err != nil { + return nil, err + } + + // Clean result + cleanStatefulSetResult(result, sts, override) + + return result, nil +} + +func cleanStatefulSetResult(result, original, override *v1.StatefulSet) { + // Include the original redis container if the override does not set it. This can happen when the override containers is empty. + // This could also be handled before the strategic merge patch, initializing the override containers with the original one or an empty array if it is empty. + // However, that way the container deletion is not correctly handled, keeping the original container if the override container is empty. + if result.Spec.Template.Spec.Containers == nil { + result.Spec.Template.Spec.Containers = []corev1.Container{original.Spec.Template.Spec.Containers[0]} + } + + // Assure redis container is in the first position + if result.Spec.Template.Spec.Containers[0].Name != "redis" { + firstContainer := result.Spec.Template.Spec.Containers[0] + + for i, container := range result.Spec.Template.Spec.Containers { + if container.Name == "redis" { + result.Spec.Template.Spec.Containers[0] = container + result.Spec.Template.Spec.Containers[i] = firstContainer + break + } + } + } + + // Copy the original resources of each container. This is because if not, merged.Spec.Template.Spec.Containers[].Resources will be nil (override content) + for i, container := range result.Spec.Template.Spec.Containers { + if container.Resources.Requests == nil { + result.Spec.Template.Spec.Containers[i].Resources.Requests = corev1.ResourceList{} + + if len(original.Spec.Template.Spec.Containers) > i { + result.Spec.Template.Spec.Containers[i].Resources.Requests = original.Spec.Template.Spec.Containers[i].Resources.Requests + } + } + if container.Resources.Limits == nil { + result.Spec.Template.Spec.Containers[i].Resources.Limits = corev1.ResourceList{} + + if len(original.Spec.Template.Spec.Containers) > i { + result.Spec.Template.Spec.Containers[i].Resources.Limits = original.Spec.Template.Spec.Containers[i].Resources.Limits + } + } + } + + // Assure to clean volumes if override does not set them + if len(override.Spec.Template.Spec.Volumes) == 0 { + result.Spec.Template.Spec.Volumes = []corev1.Volume{} + + // Mantain the config and data volumes (if exists) + for _, volume := range original.Spec.Template.Spec.Volumes { + if volume.Name == "config" || volume.Name == "data" { + result.Spec.Template.Spec.Volumes = append(result.Spec.Template.Spec.Volumes, volume) + } + } + } + + // Assure to clean tolerations if override does not set them + if len(override.Spec.Template.Spec.Tolerations) == 0 { + result.Spec.Template.Spec.Tolerations = nil + } + + // Assure to clean TopologySpreadConstraints if override does not set them + if len(override.Spec.Template.Spec.TopologySpreadConstraints) == 0 { + result.Spec.Template.Spec.TopologySpreadConstraints = nil + } + + // Assure to clean Affinity if override does not set them + if override.Spec.Template.Spec.Affinity == nil { + result.Spec.Template.Spec.Affinity = nil + } + + // Assure to clean InitContainers if override does not set them + if len(override.Spec.Template.Spec.InitContainers) == 0 { + result.Spec.Template.Spec.InitContainers = nil + } +} + +func AddStatefulSetStorage(statefulSet *v1.StatefulSet, req ctrl.Request, spec redisv1.RedisClusterSpec) error { + storage := spec.Storage + if storage == "" { + return errors.New("non ephemeral cluster with no storage defined in spec.Storage") + } + + accessModes := spec.AccessModes + accessModesTypes := make([]corev1.PersistentVolumeAccessMode, 0, 3) + if accessModes != nil { + for _, volumeAccessMode := range accessModes { + if volumeAccessMode == corev1.ReadOnlyMany { + accessModesTypes = append(accessModesTypes, corev1.ReadOnlyMany) + } else if volumeAccessMode == corev1.ReadWriteMany { + accessModesTypes = append(accessModesTypes, corev1.ReadWriteMany) + } else { + accessModesTypes = append(accessModesTypes, corev1.ReadWriteOnce) + } + } + } else { + accessModesTypes = append(accessModesTypes, corev1.ReadWriteOnce) + } + + statefulSet.Spec.VolumeClaimTemplates = []corev1.PersistentVolumeClaim{{ + ObjectMeta: metav1.ObjectMeta{ + Name: "data", + }, + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: accessModesTypes, + Resources: corev1.VolumeResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceStorage: resource.MustParse(storage), + }, + }, + }}, + } + statefulSet.Spec.Template.Spec.Volumes = append(statefulSet.Spec.Template.Spec.Volumes, corev1.Volume{ + Name: "data", + VolumeSource: corev1.VolumeSource{ + PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{ + ClaimName: "data", + }, + }, + }) + + statefulSet.Spec.Template.Spec.Containers[0].VolumeMounts = append(statefulSet.Spec.Template.Spec.Containers[0].VolumeMounts, corev1.VolumeMount{ + Name: "data", + MountPath: "/data", + }) + + storageClassName := spec.StorageClassName + if storageClassName != "" { + statefulSet.Spec.VolumeClaimTemplates[0].Spec.StorageClassName = &storageClassName + } + + return nil +} + +func CreateProbe(initial int32, period int32) *corev1.Probe { + return &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + TCPSocket: &corev1.TCPSocketAction{Port: intstr.FromInt(RedisCommPort)}, + }, + InitialDelaySeconds: initial, + PeriodSeconds: period, + } +} + +func CreateService(Namespace, Name string, labels map[string]string) *corev1.Service { + return &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: Name, + Namespace: Namespace, + Labels: labels, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + defaultPort, + }, + Selector: map[string]string{RedisClusterLabel: Name, RedisClusterComponentLabel: "redis"}, + ClusterIP: "None", + }, + } +} + +func ApplyServiceOverride(service, override *corev1.Service) (*corev1.Service, error) { + // Assure to copy the original ClusterIP to not allow overriding it + override.Spec.ClusterIP = service.Spec.ClusterIP + + // Marshal the original and the override to json + original, err := json.Marshal(service) + if err != nil { + return nil, err + } + + patch, err := json.Marshal(override) + if err != nil { + return nil, err + } + + // Do the strategic merge patch + merged, err := strategicpatch.StrategicMergePatch(original, patch, corev1.Service{}) + if err != nil { + return nil, err + } + + // Unmarshal the result to a Service + var result *corev1.Service + err = json.Unmarshal(merged, &result) + if err != nil { + return nil, err + } + + // Clean result + cleanServiceResult(result, service, override) + + return result, nil +} + +func cleanServiceResult(result, original, override *corev1.Service) { + // Assure to clean ports if override does not set them + if len(override.Spec.Ports) == 0 { + result.Spec.Ports = []corev1.ServicePort{} + } + + // Assure redis port exists + found := false + for _, port := range result.Spec.Ports { + if port.Port == RedisCommPort { + found = true + break + } + } + + if !found { + result.Spec.Ports = append(result.Spec.Ports, defaultPort) + } + + // Assure to clean selector if override does not set them + if len(override.Spec.Selector) == 0 { + result.Spec.Selector = map[string]string{RedisClusterLabel: original.Name, RedisClusterComponentLabel: "redis"} + } +} + +func ApplyPodTemplateSpecOverride(podTemplateSpec, override corev1.PodTemplateSpec) (*corev1.PodTemplateSpec, error) { + // Marshal the original and the override to json + original, err := json.Marshal(podTemplateSpec) + if err != nil { + return nil, err + } + + patch, err := json.Marshal(override) + if err != nil { + return nil, err + } + + // Do the strategic merge patch + merged, err := strategicpatch.StrategicMergePatch(original, patch, corev1.PodTemplateSpec{}) + if err != nil { + return nil, err + } + + // Unmarshal the result to a PodTemplateSpec + var result *corev1.PodTemplateSpec + err = json.Unmarshal(merged, &result) + if err != nil { + return nil, err + } + + // Clean result + cleanPodTemplateSpecResult(result, &override) + + return result, nil +} + +func cleanPodTemplateSpecResult(result, override *corev1.PodTemplateSpec) { + // Assure to clean volumes if override does not set them + if len(override.Spec.Volumes) == 0 { + result.Spec.Volumes = nil + } + + // Copy the default resources of each container. This is because if not, merged.Spec.Containers[].Resources will be nil (override content) + for i, container := range result.Spec.Containers { + if container.Resources.Requests == nil { + result.Spec.Containers[i].Resources.Requests = corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + } + } + if container.Resources.Limits == nil { + result.Spec.Containers[i].Resources.Limits = corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + } + } + } + + // Assure to clean tolerations if override does not set them + if len(override.Spec.Tolerations) == 0 { + result.Spec.Tolerations = nil + } + + // Assure to clean TopologySpreadConstraints if override does not set them + if len(override.Spec.TopologySpreadConstraints) == 0 { + result.Spec.TopologySpreadConstraints = nil + } + + // Assure to clean Affinity if override does not set them + if override.Spec.Affinity == nil { + result.Spec.Affinity = nil + } + + // Assure to clean InitContainers if override does not set them + if len(override.Spec.InitContainers) == 0 { + result.Spec.InitContainers = nil + } +} + +func ConfigStringToMap(config string) map[string][]string { + configMap := make(map[string][]string) + lines := strings.Split(strings.TrimSpace(config), "\n") + + for _, line := range lines { + line = strings.TrimSpace(line) + if line == "" { + continue + } + + kv := strings.Fields(line) + if len(kv) < 2 { + continue + } + + key := kv[0] + value := strings.Join(kv[1:], " ") + + // Add the value to the slice associated with the key + if !contains(configMap[key], value) { + configMap[key] = append(configMap[key], value) + } else { + log.Printf("Duplicate configuration detected for key %s: %s", key, value) + } + } + + return configMap +} + +// Helper function to check if a slice contains a specific string. +func contains(slice []string, str string) bool { + for _, v := range slice { + if v == str { + return true + } + } + return false +} + +func GenerateRedisConfig(redisCluster *redisv1.RedisCluster) string { + // Assuming RedisClusterType is the type of redisCluster + // and it has Spec with Config, Ephemeral, and ReplicasPerMaster fields + // Convert string configuration to map + newRedisClusterConf := ConfigStringToMap(redisCluster.Spec.Config) + + // Merge new configuration with the default + redisConfMap := MergeWithDefaultConfig(newRedisClusterConf, redisCluster.Spec.Ephemeral, redisCluster.Spec.ReplicasPerMaster) + + // Convert the merged configuration map to a string + redisConf := MapToConfigString(redisConfMap) + + return redisConf +} + +func MapToConfigString(config map[string][]string) string { + var bynline []string + keys := make([]string, 0, len(config)) + + // Collect keys + for key := range config { + keys = append(keys, key) + } + + // Sort keys + sort.Strings(keys) + + // Build configuration string for each sorted key + for _, key := range keys { + values := config[key] + for _, value := range values { + bynline = append(bynline, fmt.Sprintf("%s %s", key, value)) + } + } + + return strings.Join(bynline, "\n") +} + +func ExtractMaxMemory(desiredConfig map[string][]string) (int, error) { + maxMemoryValues, ok := desiredConfig["maxmemory"] + if !ok || len(maxMemoryValues) == 0 { + return 0, errors.New("maxmemory config is missing or empty") + } + + // Assuming that we only consider the last value if multiple are provided + maxMemory := strings.ToLower(maxMemoryValues[len(maxMemoryValues)-1]) + maxMemoryInt, err := convertRedisMemToMbytes(maxMemory) + if err != nil { + return 0, err + } + + return maxMemoryInt, nil +} + +// Default configuration params for Master-Replica clusters. +func DefaultConfigMasterReplica() map[string]string { + config := make(map[string]string) + config["maxmemory"] = "1600mb" + config["maxmemory-samples"] = "5" + config["maxmemory-policy"] = "allkeys-lru" + config["appendonly"] = "yes" + config["protected-mode"] = "no" + config["dir"] = "/data" + config["cluster-enabled"] = "yes" + config["cluster-require-full-coverage"] = "no" + config["cluster-node-timeout"] = "15" + config["cluster-config-file"] = "/data/nodes.conf" + config["cluster-migration-barrier"] = "1" + config["repl-ping-replica-period"] = "1" + config["cluster-replica-validity-factor"] = "1" + config["tcp-keepalive"] = "0" + config["timeout"] = "300" + return config +} + +// Default configuration params for not Master-Replica clusters. +func DefaultConfigNotMasterReplica() map[string]string { + config := make(map[string]string) + config["maxmemory"] = "1600mb" + config["maxmemory-samples"] = "5" + config["maxmemory-policy"] = "allkeys-lru" + config["appendonly"] = "yes" + config["protected-mode"] = "no" + config["dir"] = "/data" + config["cluster-enabled"] = "yes" + config["cluster-require-full-coverage"] = "no" + config["cluster-node-timeout"] = "15000" + config["cluster-config-file"] = "/data/nodes.conf" + config["cluster-migration-barrier"] = "1" + return config +} + +// Ephemeral clusters configuration params for Master-Replica clusters. +func EphemeralConfigMasterReplica() map[string]string { + config := make(map[string]string) + config["maxmemory"] = "1600mb" + config["maxmemory-samples"] = "5" + config["maxmemory-policy"] = "allkeys-lru" + config["appendonly"] = "yes" + config["protected-mode"] = "no" + config["dir"] = "/tmp" + config["cluster-enabled"] = "yes" + config["cluster-require-full-coverage"] = "no" + config["cluster-node-timeout"] = "15" + config["cluster-config-file"] = "/tmp/nodes.conf" + config["cluster-migration-barrier"] = "1" + config["repl-ping-replica-period"] = "1" + config["cluster-replica-validity-factor"] = "1" + config["tcp-keepalive"] = "0" + config["timeout"] = "300" + return config +} + +// Ephemeral clusters configuration params for not Master-Replica clusters. +func EphemeralConfigNotMasterReplica() map[string]string { + config := make(map[string]string) + config["maxmemory"] = "1600mb" + config["maxmemory-samples"] = "5" + config["maxmemory-policy"] = "allkeys-lru" + config["appendonly"] = "yes" + config["protected-mode"] = "no" + config["dir"] = "/tmp" + config["cluster-enabled"] = "yes" + config["cluster-require-full-coverage"] = "no" + config["cluster-node-timeout"] = "15000" + config["cluster-config-file"] = "/tmp/nodes.conf" + config["cluster-migration-barrier"] = "1" + return config +} + +func GetDefaultConfiguration(ephemeral bool, replicasPerMaster int32) map[string]string { + switch { + case ephemeral && replicasPerMaster > 0: + return EphemeralConfigMasterReplica() + case ephemeral: + return EphemeralConfigNotMasterReplica() + case !ephemeral && replicasPerMaster > 0: + return DefaultConfigMasterReplica() + default: + return DefaultConfigNotMasterReplica() + } +} + +func MergeWithDefaultConfig(newConfig map[string][]string, ephemeral bool, replicasPerMaster int32) map[string][]string { + defaultConfig := GetDefaultConfiguration(ephemeral, replicasPerMaster) + allowConfiguration := make(map[string][]string, len(defaultConfig)) + + overrideNotAllowed := map[string]bool{ + "dir": true, + "cluster-enabled": true, + "cluster-require-full-coverage": true, + "cluster-node-timeout": true, + "cluster-config-file": true, + } + + // Merge values from newConfig, respecting the overrideNotAllowed rules + for key, value := range newConfig { + if overrideNotAllowed[key] { + // If override not allowed, use default value + allowConfiguration[key] = []string{defaultConfig[key]} + } else { + // If override is allowed, use value from newConfig + allowConfiguration[key] = value + } + } + + // Add any default configurations not present in newConfig + for key, value := range defaultConfig { + if _, exists := allowConfiguration[key]; !exists { + allowConfiguration[key] = []string{value} + } + } + + return allowConfiguration +} + +func slotsPerNode(numOfNodes int, slots int) (int, int) { + if numOfNodes == 0 { + return 0, 0 + } + slotsNodes := slots / numOfNodes + resto := slots % numOfNodes + return slotsNodes, resto +} + +func SplitNodeSlots(nodesTotal int) []*NodesSlots { + nodesSlots := []*NodesSlots{} + numOfNodes := nodesTotal + slotsNode, resto := slotsPerNode(numOfNodes, TotalClusterSlots) + slotsAsigment := []string{} + for i := 0; i < numOfNodes; i++ { + if i == 0 { + slotsAsigment = append(slotsAsigment, fmt.Sprintf("0,%s", strconv.Itoa(slotsNode-1))) + } else if i == 1 { + slotsAsigment = append(slotsAsigment, fmt.Sprintf("%s,%s", strconv.Itoa(slotsNode*i), strconv.Itoa(slotsNode*(i+1)-1))) + } else if i == numOfNodes-1 { + slotsAsigment = append(slotsAsigment, fmt.Sprintf("%s,%s", strconv.Itoa(slotsNode*i), strconv.Itoa(slotsNode*(i+1)-1+resto))) + } else { + slotsAsigment = append(slotsAsigment, fmt.Sprintf("%s,%s", strconv.Itoa((slotsNode*i)), strconv.Itoa(slotsNode*(i+1)-1))) + } + } + for i := 0; i < numOfNodes; i++ { + stringRangeSplit := strings.Split(slotsAsigment[i], ",") + start, err := strconv.Atoi(stringRangeSplit[0]) + if err != nil { + log.Printf("Error assignSlotsToNodes: strconv.Atoi(stringRangeSplit[0] - %s", err) + } + + end, err := strconv.Atoi(stringRangeSplit[1]) + if err != nil { + log.Printf("Error assignSlotsToNodes: strconv.Atoi(stringRangeSplit[1] - %s", err) + } + nodesSlots = append(nodesSlots, &NodesSlots{start, end}) + } + return nodesSlots +} + +func convertRedisMemToMbytes(maxMemory string) (int, error) { + maxMemory = strings.ToLower(maxMemory) + var maxMemoryInt int + var err error + if strings.Contains(maxMemory, "kb") || strings.Contains(maxMemory, "k") { + maxMemory = strings.Replace(maxMemory, "kb", "", 1) + maxMemory = strings.Replace(maxMemory, "k", "", 1) + maxMemoryInt, err = strconv.Atoi(maxMemory) + maxMemoryInt = maxMemoryInt / 1024 + + } else if strings.Contains(maxMemory, "mb") || strings.Contains(maxMemory, "m") { + maxMemory = strings.Replace(maxMemory, "mb", "", 1) + maxMemory = strings.Replace(maxMemory, "m", "", 1) + maxMemoryInt, err = strconv.Atoi(maxMemory) + } else if strings.Contains(maxMemory, "gb") || strings.Contains(maxMemory, "g") { + maxMemory = strings.Replace(maxMemory, "gb", "", 1) + maxMemory = strings.Replace(maxMemory, "g", "", 1) + maxMemoryInt, err = strconv.Atoi(maxMemory) + maxMemoryInt = maxMemoryInt * 1024 + } else { + maxMemoryInt, err = strconv.Atoi(maxMemory) + maxMemoryInt = maxMemoryInt / 1024 / 1024 + } + return maxMemoryInt, err +} + +func GetClusterInfo(state string) map[string]string { + lines := strings.Split(strings.ReplaceAll(state, "\r\n", "\n"), "\n") + clusterstate := make(map[string]string) + for _, line := range lines { + kvmap := strings.Split(line, ":") + if len(kvmap) == 2 { + clusterstate[kvmap[0]] = kvmap[1] + } + } + return clusterstate +} diff --git a/internal/redis/redis_test.go b/internal/redis/redis_test.go new file mode 100644 index 0000000..de3d46d --- /dev/null +++ b/internal/redis/redis_test.go @@ -0,0 +1,1920 @@ +package redis + +import ( + "reflect" + "strings" + "testing" + "time" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/stretchr/testify/assert" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +type slotsTests struct { + Nodes int + Slots []*NodesSlots +} + +var slots = []slotsTests{ + { + 0, []*NodesSlots{}, + }, + { + 1, []*NodesSlots{ + {Start: 0, End: 16383}, + }, + }, + { + 2, []*NodesSlots{ + {Start: 0, End: 8191}, + {Start: 8192, End: 16383}, + }, + }, + { + 3, []*NodesSlots{ + {Start: 0, End: 5460}, + {Start: 5461, End: 10921}, + {Start: 10922, End: 16383}, + }, + }, + { + 4, []*NodesSlots{ + {Start: 0, End: 4095}, + {Start: 4096, End: 8191}, + {Start: 8192, End: 12287}, + {Start: 12288, End: 16383}, + }, + }, +} + +var replicas = int32(3) +var defaultLabels = map[string]string{ + RedisClusterLabel: "rediscluster", + RedisClusterComponentLabel: "redis", +} + +var redisStatefulSet = &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, +} + +var redisService = &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: RedisCommPort, + }, + }, + }, + Selector: map[string]string{RedisClusterLabel: "rediscluster", RedisClusterComponentLabel: "redis"}, + ClusterIP: "None", + }, +} + +var podTemplateSpec = &corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, +} + +func TestSlotsPerNode(t *testing.T) { + slotsNum, _ := slotsPerNode(3, 16384) + slotsShouldBe := 5461 + if slotsNum != slotsShouldBe { + t.Errorf("Slots should be %d", slotsShouldBe) + } +} + +func TestSlotsNode(t *testing.T) { + for i := range slots { + nodeSlots := SplitNodeSlots(slots[i].Nodes) + if len(nodeSlots) != slots[i].Nodes { + t.Errorf("(seq %d) NodeSlots number should be %d, got %d", i, slots[i].Nodes, len(nodeSlots)) + t.FailNow() + } + for j := 0; j < len(slots[i].Slots); j++ { + if slots[i].Slots[j].Start != nodeSlots[j].Start { + t.Errorf("Expected sequence %d, Start:%d (got %d), End:%d (got %d)", slots[i].Nodes, slots[i].Slots[j].Start, nodeSlots[j].Start, slots[i].Slots[j].End, nodeSlots[j].End) + } + } + } +} + +func TestConfigStringToMap(t *testing.T) { + type args struct { + config string + } + tests := []struct { + name string + args args + want map[string][]string + }{ + { + "single-entry", args{`maxmemory 500mb`}, + map[string][]string{"maxmemory": {"500mb"}}, + }, + { + "whitespace-around", + args{` + + maxmemory 500mb + maxmemory-samples 5 + slaveof 127.0.0.1 6380 + + `, + }, + map[string][]string{"maxmemory": {"500mb"}, "maxmemory-samples": {"5"}, "slaveof": {"127.0.0.1 6380"}}, + }, + { + "whitespace-between", + args{`maxmemory 500mb + maxmemory-samples 5`, + }, + map[string][]string{"maxmemory": {"500mb"}, "maxmemory-samples": {"5"}}, + }, + { + "loadmodule", + args{` + loadmodule /opt/redis-stack/lib/redisearch.so + maxmemory-samples 5`, + }, + map[string][]string{"loadmodule": {"/opt/redis-stack/lib/redisearch.so"}, "maxmemory-samples": {"5"}}, + }, + { + "multiloadmodule", + args{` + loadmodule /opt/redis-stack/lib/redisearch.so + loadmodule /opt/redis-stack/lib/rejson.so + maxmemory-samples 5`, + }, + map[string][]string{"loadmodule": {"/opt/redis-stack/lib/redisearch.so", "/opt/redis-stack/lib/rejson.so"}, "maxmemory-samples": {"5"}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := ConfigStringToMap(tt.args.config); !reflect.DeepEqual(got, tt.want) { + t.Errorf("ConfigStringToMap() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestMergeWithDefaultConfig(t *testing.T) { + type args struct { + custom map[string][]string + ephemeral bool + } + tests := []struct { + name string + args args + want map[string][]string + }{ + { + "forbidden-override", + args{map[string][]string{"maxmemory": {"2gb"}, "cluster-enabled": {"no"}}, false}, + map[string][]string{"maxmemory": {"2gb"}, "cluster-enabled": {"yes"}}, + }, + { + "defaults-not-set", + args{map[string][]string{}, false}, + map[string][]string{"maxmemory": {"1600mb"}, "cluster-enabled": {"yes"}}, + }, + { + "ephemeral-mode-true", + args{map[string][]string{"maxmemory": {"2gb"}, "cluster-enabled": {"no"}}, true}, + map[string][]string{"maxmemory": {"2gb"}, "cluster-enabled": {"yes"}}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := MergeWithDefaultConfig(tt.args.custom, tt.args.ephemeral, int32(0)) + if tt.args.ephemeral && (got["dir"][0] != "/tmp" || got["cluster-config-file"][0] != "/tmp/nodes.conf") { + t.Errorf("MergeWithDefaultConfig() configmap does not match ephemeral config") + } + if !tt.args.ephemeral && (got["dir"][0] != "/data" || got["cluster-config-file"][0] != "/data/nodes.conf") { + t.Errorf("MergeWithDefaultConfig() configmap does not match non-ephemeral config") + } + for k, v := range tt.want { + if !reflect.DeepEqual(got[k], v) { + t.Errorf("MergeWithDefaultConfig() = %v, want %v", got, tt.want) + } + } + }) + } +} + +func TestConvertRedisMemToMbytes(t *testing.T) { + type args struct { + maxMemory string + } + tests := []struct { + name string + args args + want int + wantErr bool + }{ + {"mb", args{maxMemory: "300mb"}, 300, false}, + {"m", args{maxMemory: "300m"}, 300, false}, + {"kb", args{maxMemory: "3000kb"}, 2, false}, + {"gb", args{maxMemory: "5gb"}, 5120, false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := convertRedisMemToMbytes(tt.args.maxMemory) + if (err != nil) != tt.wantErr { + t.Errorf("ConvertRedisMemToMbytes() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("ConvertRedisMemToMbytes() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestMapToConfigString(t *testing.T) { + type args struct { + config map[string][]string + } + tests := []struct { + name string + args args + want string + }{ + { + "one", + args{config: map[string][]string{"loadmodule": {"/opt/redis-stack/lib/redisearch.so"}}}, + "loadmodule /opt/redis-stack/lib/redisearch.so", + }, + { + "two", + args{config: map[string][]string{"loadmodule": {"/opt/redis-stack/lib/redisearch.so"}, "maxmemory": {"500mb"}}}, + "loadmodule /opt/redis-stack/lib/redisearch.so\nmaxmemory 500mb", + }, + { + "three", + args{config: map[string][]string{"loadmodule": {"/opt/redis-stack/lib/redisearch.so", "/opt/redis-stack/lib/rejson.so"}, "maxmemory": {"500mb"}}}, + "loadmodule /opt/redis-stack/lib/redisearch.so\nloadmodule /opt/redis-stack/lib/rejson.so\nmaxmemory 500mb", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := MapToConfigString(tt.args.config); strings.TrimSpace(got) != tt.want { + t.Errorf("MapToConfigString() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestStateParser(t *testing.T) { + tests := []struct { + name string + args string + want map[string]string + }{ + {"test_conf_empty", "", map[string]string{}}, + {"test_conf_3_lines", ` +cluster_state:ok +cluster_slots_ok:16384 +cluster_slots_pfail:0 +`, map[string]string{"cluster_state": "ok", "cluster_slots_ok": "16384", "cluster_slots_pfail": "0"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := GetClusterInfo(tt.args); !reflect.DeepEqual(got, tt.want) { + t.Errorf("MapToConfigString() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_ApplyStsOverride(t *testing.T) { + tests := []struct { + name string + original *appsv1.StatefulSet + patch *appsv1.StatefulSet + expected *appsv1.StatefulSet + expectedErr error + }{ + { + name: "Patch empty", + original: redisStatefulSet, + patch: &appsv1.StatefulSet{}, + expected: redisStatefulSet, + expectedErr: nil, + }, + { + name: "Sidecar container", + original: redisStatefulSet, + patch: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "sidecar", + Image: "sidecar:1.0.0", + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + "cpu": resource.MustParse("200m"), + "memory": resource.MustParse("256Mi"), + }, + Requests: corev1.ResourceList{ + "cpu": resource.MustParse("100m"), + "memory": resource.MustParse("128Mi"), + }, + }, + }, + }, + }, + }, + }, + }, + expected: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + { + Name: "sidecar", + Image: "sidecar:1.0.0", + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + "cpu": resource.MustParse("200m"), + "memory": resource.MustParse("256Mi"), + }, + Requests: corev1.ResourceList{ + "cpu": resource.MustParse("100m"), + "memory": resource.MustParse("128Mi"), + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, + }, + expectedErr: nil, + }, + { + name: "Remove sidecar container", + original: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + { + Name: "sidecar", + Image: "sidecar:1.0.0", + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + "cpu": resource.MustParse("200m"), + "memory": resource.MustParse("256Mi"), + }, + Requests: corev1.ResourceList{ + "cpu": resource.MustParse("100m"), + "memory": resource.MustParse("128Mi"), + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, + }, + patch: &appsv1.StatefulSet{}, + expected: redisStatefulSet, + expectedErr: nil, + }, + { + name: "Add volume and init container", + original: redisStatefulSet, + patch: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Volumes: []corev1.Volume{ + { + Name: "data-override", + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{}, + }, + }, + }, + InitContainers: []corev1.Container{ + { + Name: "init", + Image: "init:1.0.0", + Command: []string{"init.sh"}, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "data-override", + MountPath: "/data", + }, + }, + }, + }, + }, + }, + }, + }, + expected: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + InitContainers: []corev1.Container{ + { + Name: "init", + Image: "init:1.0.0", + Command: []string{"init.sh"}, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "data-override", + MountPath: "/data", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "data-override", + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{}, + }, + }, + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, + }, + expectedErr: nil, + }, + { + name: "Remove volume and init container", + original: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + InitContainers: []corev1.Container{ + { + Name: "init", + Image: "init:1.0.0", + Command: []string{"init.sh"}, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "data", + MountPath: "/data", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, + }, + patch: &appsv1.StatefulSet{}, + expected: redisStatefulSet, + expectedErr: nil, + }, + { + name: "Add tolerations, topology constraint and affinity", + original: redisStatefulSet, + patch: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Tolerations: []corev1.Toleration{ + { + Key: "key", + Operator: "Equal", + Value: "value", + Effect: "NoSchedule", + }, + }, + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ + { + MatchExpressions: []corev1.NodeSelectorRequirement{ + { + Key: "topology.kubernetes.io/zone", + Operator: "In", + Values: []string{"zone1", "zone2"}, + }, + }, + }, + }, + }, + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "topology.kubernetes.io/zone", + WhenUnsatisfiable: "DoNotSchedule", + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }, + }, + }, + }, + expected: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + Tolerations: []corev1.Toleration{ + { + Key: "key", + Operator: "Equal", + Value: "value", + Effect: "NoSchedule", + }, + }, + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ + { + MatchExpressions: []corev1.NodeSelectorRequirement{ + { + Key: "topology.kubernetes.io/zone", + Operator: "In", + Values: []string{"zone1", "zone2"}, + }, + }, + }, + }, + }, + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "topology.kubernetes.io/zone", + WhenUnsatisfiable: "DoNotSchedule", + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, + }, + expectedErr: nil, + }, + { + name: "Remove tolerations, topology constraint and affinity", + original: &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + CreationTimestamp: metav1.Time{ + Time: time.Unix(1, 0), + }, + }, + Spec: appsv1.StatefulSetSpec{ + Replicas: &replicas, + PodManagementPolicy: appsv1.ParallelPodManagement, + Selector: &metav1.LabelSelector{ + MatchLabels: defaultLabels, + }, + ServiceName: "rediscluster", + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{}, + Requests: corev1.ResourceList{}, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + Tolerations: []corev1.Toleration{ + { + Key: "key", + Operator: "Equal", + Value: "value", + Effect: "NoSchedule", + }, + }, + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ + { + MatchExpressions: []corev1.NodeSelectorRequirement{ + { + Key: "topology.kubernetes.io/zone", + Operator: "In", + Values: []string{"zone1", "zone2"}, + }, + }, + }, + }, + }, + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "topology.kubernetes.io/zone", + WhenUnsatisfiable: "DoNotSchedule", + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }, + }, + }, + Status: appsv1.StatefulSetStatus{ + Replicas: 3, + ReadyReplicas: 3, + }, + }, + patch: &appsv1.StatefulSet{}, + expected: redisStatefulSet, + expectedErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ret, err := ApplyStsOverride(tt.original, tt.patch) + + if tt.expectedErr != nil { + assert.Equal(t, tt.expectedErr, err) + } else { + assert.Equal(t, tt.expected, ret) + } + }) + } +} + +func Test_ApplyServiceOverride(t *testing.T) { + tests := []struct { + name string + original *corev1.Service + patch *corev1.Service + expected *corev1.Service + expectedErr error + }{ + { + name: "Patch empty", + original: redisService, + patch: &corev1.Service{}, + expected: redisService, + expectedErr: nil, + }, + { + name: "Add labels and annotations", + original: redisService, + patch: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{"new-label": "new-value"}, + Annotations: map[string]string{"new-annotation": "new-value"}, + }, + }, + expected: &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: map[string]string{RedisClusterLabel: "rediscluster", RedisClusterComponentLabel: "redis", "new-label": "new-value"}, + Annotations: map[string]string{"new-annotation": "new-value"}, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: RedisCommPort, + }, + }, + }, + Selector: map[string]string{RedisClusterLabel: "rediscluster", RedisClusterComponentLabel: "redis"}, + ClusterIP: "None", + }, + }, + expectedErr: nil, + }, + { + name: "Add selector", + original: redisService, + patch: &corev1.Service{ + Spec: corev1.ServiceSpec{ + Selector: map[string]string{"new-selector": "new-value"}, + }, + }, + expected: &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: RedisCommPort, + }, + }, + }, + Selector: map[string]string{RedisClusterLabel: "rediscluster", RedisClusterComponentLabel: "redis", "new-selector": "new-value"}, + ClusterIP: "None", + }, + }, + expectedErr: nil, + }, + { + name: "Remove selector", + original: &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: RedisCommPort, + }, + }, + }, + Selector: map[string]string{RedisClusterLabel: "rediscluster", RedisClusterComponentLabel: "redis", "new-selector": "new-value"}, + ClusterIP: "None", + }, + }, + patch: &corev1.Service{}, + expected: redisService, + expectedErr: nil, + }, + { + name: "Add port", + original: redisService, + patch: &corev1.Service{ + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "prometheus", + Protocol: "TCP", + Port: 9090, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: 9090, + }, + }, + }, + }, + }, + expected: &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "prometheus", + Protocol: "TCP", + Port: 9090, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: 9090, + }, + }, + { + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: RedisCommPort, + }, + }, + }, + Selector: defaultLabels, + ClusterIP: "None", + }, + }, + expectedErr: nil, + }, + { + name: "Remove port", + original: &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + Kind: "Service", APIVersion: "v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "rediscluster", + Namespace: "default", + Labels: defaultLabels, + }, + Spec: corev1.ServiceSpec{ + Ports: []corev1.ServicePort{ + { + Name: "client", + Protocol: "TCP", + Port: RedisCommPort, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: RedisCommPort, + }, + }, + { + Name: "prometheus", + Protocol: "TCP", + Port: 9090, + TargetPort: intstr.IntOrString{Type: 0, + IntVal: 9090, + }, + }, + }, + Selector: defaultLabels, + ClusterIP: "None", + }, + }, + patch: &corev1.Service{}, + expected: redisService, + expectedErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ret, err := ApplyServiceOverride(tt.original, tt.patch) + + if tt.expectedErr != nil { + assert.Equal(t, tt.expectedErr, err) + } else { + assert.Equal(t, tt.expected, ret) + } + }) + } +} + +func Test_ParseClusterNodes(t *testing.T) { + tests := []struct { + name string + nodes string + expected map[string]redisv1.RedisNode + }{ + { + name: "empty", + nodes: "", + expected: map[string]redisv1.RedisNode{}, + }, + { + name: "one node", + nodes: "99a26dea0546294e0c71116d3bf19988e7e0c8d6 10.253.11.163:6379@16379 master - 0 1731943294050 2 connected 10924-16383", + expected: map[string]redisv1.RedisNode{ + "99a26dea0546294e0c71116d3bf19988e7e0c8d6": { + IP: "10.253.11.163", + IsMaster: true, + ReplicaOf: "-", + }, + }, + }, + { + name: "three nodes", + nodes: "99a26dea0546294e0c71116d3bf19988e7e0c8d6 10.253.11.163:6379@16379 master - 0 1731943294050 2 connected 10924-16383\nd0c6e27fb02809df7d5228495271bb913c00b9b6 10.252.50.249:6379@16379 myself,master - 0 1731943295000 3 connected 0-5461\nc741da5670690ac369554920b2104fcea497dd39 10.253.22.151:6379@16379 master - 0 1731943295054 1 connected 5462-10923", + expected: map[string]redisv1.RedisNode{ + "99a26dea0546294e0c71116d3bf19988e7e0c8d6": { + IP: "10.253.11.163", + IsMaster: true, + ReplicaOf: "-", + }, + "d0c6e27fb02809df7d5228495271bb913c00b9b6": { + IP: "10.252.50.249", + IsMaster: true, + ReplicaOf: "-", + }, + "c741da5670690ac369554920b2104fcea497dd39": { + IP: "10.253.22.151", + IsMaster: true, + ReplicaOf: "-", + }, + }, + }, + { + name: "masters and slaves", + nodes: `99a26dea0546294e0c71116d3bf19988e7e0c8d6 10.253.11.163:6379@16379 master - 0 1731943294050 2 connected 10924-16383 +f7384d326d1288d709e0e601e3e26522b88c5f18 10.252.52.88:6379@16379 slave d0c6e27fb02809df7d5228495271bb913c00b9b6 0 1731943296058 3 connected +d0c6e27fb02809df7d5228495271bb913c00b9b6 10.252.50.249:6379@16379 myself,master - 0 1731943295000 3 connected 0-5461 +a0229f5ef1220384f08b1181c3c02cdc8003be91 10.252.27.66:6379@16379 slave c741da5670690ac369554920b2104fcea497dd39 0 1731943293000 1 connected +c741da5670690ac369554920b2104fcea497dd39 10.253.22.151:6379@16379 master - 0 1731943295054 1 connected 5462-10923 +f6568b0764978967697713eb26f8434ee78442f4 10.252.31.54:6379@16379 slave 99a26dea0546294e0c71116d3bf19988e7e0c8d6 0 1731943293044 2 connected`, + expected: map[string]redisv1.RedisNode{ + "99a26dea0546294e0c71116d3bf19988e7e0c8d6": { + IP: "10.253.11.163", + IsMaster: true, + ReplicaOf: "-", + }, + "f7384d326d1288d709e0e601e3e26522b88c5f18": { + IP: "10.252.52.88", + IsMaster: false, + ReplicaOf: "d0c6e27fb02809df7d5228495271bb913c00b9b6", + }, + "d0c6e27fb02809df7d5228495271bb913c00b9b6": { + IP: "10.252.50.249", + IsMaster: true, + ReplicaOf: "-", + }, + "a0229f5ef1220384f08b1181c3c02cdc8003be91": { + IP: "10.252.27.66", + IsMaster: false, + ReplicaOf: "c741da5670690ac369554920b2104fcea497dd39", + }, + "c741da5670690ac369554920b2104fcea497dd39": { + IP: "10.253.22.151", + IsMaster: true, + ReplicaOf: "-", + }, + "f6568b0764978967697713eb26f8434ee78442f4": { + IP: "10.252.31.54", + IsMaster: false, + ReplicaOf: "99a26dea0546294e0c71116d3bf19988e7e0c8d6", + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ret := ParseClusterNodes(tt.nodes) + assert.Equal(t, tt.expected, ret) + }) + } +} + +func Test_GetRedisCLIFromInfo(t *testing.T) { + tests := []struct { + name string + nodeInfo string + expected string + }{ + { + name: "empty", + nodeInfo: "", + expected: "", + }, + { + name: "no version", + nodeInfo: `# Clients +connected_clients:1 +cluster_connections:0 +maxclients:10000 +client_recent_max_input_buffer:0 +client_recent_max_output_buffer:0 +blocked_clients:0 +tracking_clients:0 +clients_in_timeout_table:0`, + expected: "", + }, + { + name: "version found", + nodeInfo: `# Server +redis_version:6.2.6 +redis_git_sha1:00000000 +redis_git_dirty:0 +redis_build_id:e8e2bc7f9bdc37ba +redis_mode:cluster +os:Linux 5.14.0-284.90.1.el9_2.x86_64 x86_64 +arch_bits:64 +multiplexing_api:epoll +atomicvar_api:c11-builtin +gcc_version:7.5.0 +process_id:1 +process_supervised:no +run_id:7ad9465f02d5c6833ddfd85e56e0db4d93ff12ed +tcp_port:6379 +server_time_usec:1737964466814572 +uptime_in_seconds:329258 +uptime_in_days:3 +hz:10 +configured_hz:10 +lru_clock:9911218 +executable:/data/redis-server +config_file:/conf/redis.conf +io_threads_active:0`, + expected: "6.2.6", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ret := GetRedisCLIFromInfo(tt.nodeInfo) + assert.Equal(t, tt.expected, ret) + }) + } +} + +func Test_ApplyPodTemplateSpecOverride(t *testing.T) { + tests := []struct { + name string + original corev1.PodTemplateSpec + patch corev1.PodTemplateSpec + expected *corev1.PodTemplateSpec + expectedErr error + }{ + { + name: "Patch empty", + original: *podTemplateSpec, + patch: corev1.PodTemplateSpec{}, + expected: &corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{}, + }, + expectedErr: nil, + }, + { + name: "Update container and volume", + original: *podTemplateSpec, + patch: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.16", + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis1.conf", Path: "redis1.conf"}}, + }, + }, + }, + }, + }, + }, + expected: &corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.16", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis1.conf", Path: "redis1.conf"}}, + }, + }, + }, + }, + }, + }, + expectedErr: nil, + }, + { + name: "Add labels and annotations", + original: *podTemplateSpec, + patch: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{"new-label": "new-value"}, + Annotations: map[string]string{"new-annotation": "new-value"}, + }, + }, + expected: &corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{"new-label": "new-value", RedisClusterLabel: "rediscluster", RedisClusterComponentLabel: "redis"}, + Annotations: map[string]string{"new-annotation": "new-value"}, + }, + Spec: corev1.PodSpec{}, + }, + expectedErr: nil, + }, + { + name: "Add tolerations, topology constraint and affinity", + original: *podTemplateSpec, + patch: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + Tolerations: []corev1.Toleration{ + { + Key: "key", + Operator: "Equal", + Value: "value", + Effect: "NoSchedule", + }, + }, + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ + { + MatchExpressions: []corev1.NodeSelectorRequirement{ + { + Key: "topology.kubernetes.io/zone", + Operator: "In", + Values: []string{"zone1", "zone2"}, + }, + }, + }, + }, + }, + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "topology.kubernetes.io/zone", + WhenUnsatisfiable: "DoNotSchedule", + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }, + }, + expected: &corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + Tolerations: []corev1.Toleration{ + { + Key: "key", + Operator: "Equal", + Value: "value", + Effect: "NoSchedule", + }, + }, + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ + { + MatchExpressions: []corev1.NodeSelectorRequirement{ + { + Key: "topology.kubernetes.io/zone", + Operator: "In", + Values: []string{"zone1", "zone2"}, + }, + }, + }, + }, + }, + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "topology.kubernetes.io/zone", + WhenUnsatisfiable: "DoNotSchedule", + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }, + }, + expectedErr: nil, + }, + { + name: "Delete tolerations, topology constraint and affinity", + original: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: defaultLabels, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis", + Image: "redis:6.0.15", + Ports: []corev1.ContainerPort{ + { + Name: "client", + ContainerPort: RedisCommPort, + }, + { + Name: "gossip", + ContainerPort: RedisGossPort, + }, + }, + Command: []string{"redis-server", "/conf/redis.conf"}, + LivenessProbe: CreateProbe(15, 5), + ReadinessProbe: CreateProbe(10, 5), + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("100m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("20m"), + corev1.ResourceMemory: resource.MustParse("100Mi"), + }, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: "config", + MountPath: "/conf", + }, + }, + }, + }, + Volumes: []corev1.Volume{ + { + Name: "config", + VolumeSource: corev1.VolumeSource{ + ConfigMap: &corev1.ConfigMapVolumeSource{ + LocalObjectReference: corev1.LocalObjectReference{Name: "rediscluster"}, + Items: []corev1.KeyToPath{{Key: "redis.conf", Path: "redis.conf"}}, + }, + }, + }, + }, + Tolerations: []corev1.Toleration{ + { + Key: "key", + Operator: "Equal", + Value: "value", + Effect: "NoSchedule", + }, + }, + Affinity: &corev1.Affinity{ + NodeAffinity: &corev1.NodeAffinity{ + RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{ + NodeSelectorTerms: []corev1.NodeSelectorTerm{ + { + MatchExpressions: []corev1.NodeSelectorRequirement{ + { + Key: "topology.kubernetes.io/zone", + Operator: "In", + Values: []string{"zone1", "zone2"}, + }, + }, + }, + }, + }, + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "topology.kubernetes.io/zone", + WhenUnsatisfiable: "DoNotSchedule", + LabelSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "redis", + }, + }, + }, + }, + }, + }, + patch: *podTemplateSpec, + expected: podTemplateSpec, + expectedErr: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ret, err := ApplyPodTemplateSpecOverride(tt.original, tt.patch) + + if tt.expectedErr != nil { + assert.Equal(t, tt.expectedErr, err) + } else { + assert.Equal(t, tt.expected, ret) + } + }) + } +} diff --git a/internal/redis/utils.go b/internal/redis/utils.go new file mode 100644 index 0000000..96fbb64 --- /dev/null +++ b/internal/redis/utils.go @@ -0,0 +1,181 @@ +package redis + +import ( + "fmt" + "math" + "strings" +) + +func Uniq(list []string) []string { + uniqset := make(map[string]bool, len(list)) + for _, x := range list { + uniqset[x] = true + } + result := make([]string, 0, len(uniqset)) + for x := range uniqset { + result = append(result, x) + } + return result +} + +func MergeNumArray2NumRange(array []int) string { + var i = 0 + var result = "" + + for j, value := range array { + if j == len(array)-1 { + if i == j { + result += fmt.Sprintf("%d", array[j]) + } else { + result += fmt.Sprintf("%d-%d", array[i], array[j]) + } + break + } + + if value != array[j+1]-1 { + if j == i { + result += fmt.Sprintf("%d,", array[i]) + } else { + result += fmt.Sprintf("%d-%d,", array[i], array[j]) + } + i = j + 1 + } + } + + return result +} + +func ToInterfaceArray(in []string) []interface{} { + result := make([]interface{}, len(in)) + + for i, val := range in { + result[i] = interface{}(val) + } + + return result +} + +func ToStringArray(in []interface{}) []string { + result := make([]string, len(in)) + + for i, val := range in { + result[i] = fmt.Sprintf("%s", val) + } + + return result +} + +func Round(num float64) int { + return int(num + math.Copysign(0.5, num)) +} + +func ClusterNodeArray2String(nodes [](*ClusterNode)) (result string) { + for _, node := range nodes { + if node != nil { + result += node.String() + "," + } + } + + if len(result) > 0 { + result = strings.TrimRight(result, ",") // Assign the result back to the 'result' variable + } + + return result +} + +func NumArray2String(nums []int) (result string) { + if len(nums) > 0 { + result = fmt.Sprintf("%d", nums[0]) + for _, id := range nums[1:] { + result += fmt.Sprintf("%s,%d", result, id) + } + if len(result) > 0 { + result = strings.TrimRight(result, ",") + } + } + return result +} + +/* CRC16 implementation according to CCITT standards. + * + * Note by @antirez: this is actually the XMODEM CRC 16 algorithm, using the + * following parameters: + * + * Name : "XMODEM", also known as "ZMODEM", "CRC-16/ACORN" + * Width : 16 bit + * Poly : 1021 (That is actually x^16 + x^12 + x^5 + 1) + * Initialization : 0000 + * Reflect Input byte : False + * Reflect Output CRC : False + * Xor constant to output CRC : 0000 + * Output for "123456789" : 31C3 + */ + +var crc16tab = [...]uint16{ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, +} + +func crc16(s string) uint16 { + var crc uint16 + for i := 0; i < len(s); i++ { + b := s[i] + crc = (crc << 8) ^ crc16tab[byte(crc>>8)^b] + } + return crc +} + +const ( + HASHTAG_START = "{" + HASHTAG_END = "}" + DEFAULT_SLOT_NUM = 16384 +) + +// Turn a key name into the corrisponding Redis Cluster slot. +func Key2Slot(key string) uint16 { + // Only hash what is inside {...} if there is such a pattern in the key. + // Note that the specification requires the content that is between + // the first { and the first } after the first {. If we found {} without + // nothing in the middle, the whole key is hashed as usually. + hashKey := key + + start := strings.Index(key, HASHTAG_START) + if start >= 0 { + end := strings.LastIndex(key, HASHTAG_END) + if end >= 0 && start < end { + hashKey = key[start:end] + } + } + + return crc16(hashKey) % DEFAULT_SLOT_NUM +} diff --git a/internal/utils/pods.go b/internal/utils/pods.go new file mode 100644 index 0000000..275f876 --- /dev/null +++ b/internal/utils/pods.go @@ -0,0 +1,94 @@ +package utils + +import ( + "context" + "fmt" + "time" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/util/wait" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// PodRunningReady checks if the provided pod is running and has a condition of PodReady. +// Returns true if these conditions are met, or an error detailing the specific unmet condition. +func PodRunningReady(p *corev1.Pod) (bool, error) { + if p == nil { + return false, fmt.Errorf("provided pod is nil") + } + + // Check if the pod phase is running. + if p.Status.Phase != corev1.PodRunning { + return false, fmt.Errorf("expected pod '%s' on node '%s' to be '%v', but it was '%v'", + p.ObjectMeta.Name, p.Spec.NodeName, corev1.PodRunning, p.Status.Phase) + } + + // Check if the ready condition is true. + _, condition := GetPodCondition(&p.Status, corev1.PodReady) + if !(condition != nil && condition.Status == corev1.ConditionTrue) { + return false, fmt.Errorf("pod '%s' on node '%s' does not have condition '%v=%v'; current conditions: %v", + p.ObjectMeta.Name, p.Spec.NodeName, corev1.PodReady, corev1.ConditionTrue, p.Status.Conditions) + } + + return true, nil +} + +// GetPodCondition returns the index and the reference to the pod condition of the specified type. +// Returns -1 and nil if the condition is not found or if the status is nil. +func GetPodCondition(status *corev1.PodStatus, conditionType corev1.PodConditionType) (int, *corev1.PodCondition) { + if status == nil { + return -1, nil + } + for i := range status.Conditions { + if status.Conditions[i].Type == conditionType { + return i, &status.Conditions[i] + } + } + return -1, nil +} + +// AllPodsReady checks if the expected number of pods are ready. +func AllPodsReady(ctx context.Context, client client.Client, listOptions *client.ListOptions, expectedReadyReplicas int) (bool, error) { + if client == nil { + return false, fmt.Errorf("client is nil") + } + if listOptions == nil { + return false, fmt.Errorf("listOptions is nil") + } + + pods := &corev1.PodList{} + err := client.List(ctx, pods, listOptions) + if err != nil { + return false, err + } + current := 0 + for _, pod := range pods.Items { + flag, err := PodRunningReady(&pod) + if err == nil && flag { + current++ + } + } + return current == expectedReadyReplicas, nil +} + +type PodReadyWait struct { + Client client.Client +} + +func (prw PodReadyWait) WaitForPodsToBecomeReady(ctx context.Context, interval, timeout time.Duration, listOptions *client.ListOptions, expectedReadyReplicas int) error { + return wait.Poll(interval, timeout, func() (bool, error) { + pods := &corev1.PodList{} + if err := prw.Client.List(ctx, pods, listOptions); err != nil { + return false, err + } + + var current int + for _, pod := range pods.Items { + if flag, err := PodRunningReady(&pod); err == nil && flag { + current++ + } + } + + return current == expectedReadyReplicas, nil + }) +} diff --git a/internal/utils/range.go b/internal/utils/range.go new file mode 100644 index 0000000..3d6f718 --- /dev/null +++ b/internal/utils/range.go @@ -0,0 +1,10 @@ +package utils + +func MakeRangeMap(min int, max int) map[int]interface{} { + result := map[int]interface{}{} + a := make([]int, max-min+1) + for i := range a { + result[min+i] = "" + } + return result +} diff --git a/internal/utils/range_test.go b/internal/utils/range_test.go new file mode 100644 index 0000000..550e8b1 --- /dev/null +++ b/internal/utils/range_test.go @@ -0,0 +1,26 @@ +package utils + +import ( + "reflect" + "testing" +) + +func TestMakeRangeMap(t *testing.T) { + expected := map[int]interface{}{ + 0: "", + 1: "", + 2: "", + 3: "", + 4: "", + 5: "", + 6: "", + 7: "", + 8: "", + 9: "", + 10: "", + } + got := MakeRangeMap(0, 10) + if !reflect.DeepEqual(got, expected) { + t.Errorf("Got unexpected map. Got %v, Expected %v", got, expected) + } +} diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..51ced7a --- /dev/null +++ b/test/README.md @@ -0,0 +1,43 @@ +# End to End Test for Kubernetes Redis Operator + +## Purpose + +End to End tests for provision Redis cluster environments in Kubernetes or Openshift. + +## How to run the test + +### Prerequisites +1. make +2. kubectl with configured access to create CRD, namespaces, deployments +3. kubernetes cluster +4. go + +## Deploying the kubernetes cluster locally + +In a new terminal session execute this script file + +``` +bash ./test/cmd/check_cluster_test.sh +``` + +The script file creates a new kubernetes cluster if this one not exists + +## Execute the end to end tests + +In the terminal execute this make command + +``` +make test-e2e-cov +``` + +The command creates a new instance for the redis operator and continues to run the available test + +## Clean environment + +In the terminal execute this script file + +``` +./test/cmd/clean.sh +``` + +the script file clean the environment including the kubernetes cluster \ No newline at end of file diff --git a/test/cmd/README.md b/test/cmd/README.md new file mode 100644 index 0000000..b7e581c --- /dev/null +++ b/test/cmd/README.md @@ -0,0 +1,96 @@ +# Funtional Test for Kubernetes and Openshift Redis Operator + +## Purpose + +Funtional test for provision Redis cluster environments in Kubernetes or Openshift. + + +## Folder structure + +The `tests` folder contains all necessary scripts and manifests + +Manifests: +* `./test/cmd/redisClusterTest.sh` - main script with differents test +* `./test/cmd/waitforstatus.sh` - script that complements the tests + +## How to run the test + +### Prerequisites +1. make +2. kustomize - run `make kustomize` to install local kustomize version +3. kubectl with configured access to create CRD, namespaces, deployments +4. If on macos - install linux compatible utils - `brew install coreutils`, as makefile uses linux version of sed + +## Variables + +``` +* namespace=$1 +* image=$2 +* test=$3 +* newRedisCluster=$4 +* typeRedisCluster=$5 +``` + +* `namespace` name of namespace where the funtional will be executed +* `image` name of image that deploy the Redis Operator +* `test` name of the desired test `Initialize,ScalingUp,ScalingDown,ChangeStorage,ChangeStorageReplicas,AddLabel,DeleteLabel,InsertData,InsertDataWhileScaling,InsertDataWhileScalingDown,GetSpecificKey,ValidateBasicRedisMasterSlave,ScalingUpRedisMasterSlave,ScalingDownRedisMasterSlave,KillPodRedisMasterSlave` +* `newRedisCluster` allows to create a new instance of Redis Cluster `true,false` +* `typeRedisCluster` type of deployment of the Redis Cluster `storage,ephemeral,repmaster` + +## Deploying a Redis cluster + +There are 3 commands for creating Redis clusters. + +* `./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "Initialize" "true" "storage"` creates a persistent redis cluster +* `./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "Initialize" "true" "ephemeral"` creates an ephemeral redis cluster. +* `./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "Initialize" "true" "repmaster"` creates a master slave redis cluster. + +Please note that some of the following tooling (such as PoMonitor and load tester) are dependent of the Redis cluster name, so both share the same name. + +## Available Test + +* Initialize +* ScalingUp +* ScalingDown +* ChangeStorage +* ChangeStorageReplicas +* AddLabel +* DeleteLabel +* InsertData +* InsertDataWhileScaling +* InsertDataWhileScalingDown +* GetSpecificKey +* ValidateBasicRedisMasterSlave +* ScalingUpRedisMasterSlave +* ScalingDownRedisMasterSlave +* KillPodRedisMasterSlave + + +Tests can be run with (examples): + + + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "Initialize" "true" "storage" ``` + * ```./test/cmd/redisClusterTest.sh test-${{ github.event.pull_request.head.sha }} ${{env.JFROG_SNAPSHOT_REGISTRY}}/redis-operator:sha-${{ github.event.pull_request. head.sha }} "Initialize" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "ScalingUp" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "ScalingDown" "true" "storage" ``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "ChangeStorage" "true" "storage" ``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "ChangeStorageReplicas" "false" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "AddLabel" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.1" "DeleteLabel" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "ChangeLabels" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.1" "InsertData" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.1" "InsertDataWhileScaling" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.1" "InsertDataWhileScalingDown" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.1" "GetSpecificKey" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.6" "ValidateBasicRedisMasterSlave" "true" "repmaster"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.6" "ScalingUpRedisMasterSlave" "true" "repmaster"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.6" "ScalingDownRedisMasterSlave" "true" "repmaster"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.6" "KillPodRedisMasterSlave" "true" "repmaster"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "All" "true" "storage"``` + * ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "DeleteRedisCluster"``` + +## Cleanup +Delete the operator and all associated resources with: + +* ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "DeleteRedisCluster"``` +* ```./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.0" "DeleteAll"``` diff --git a/test/cmd/check_cluster_test.sh b/test/cmd/check_cluster_test.sh new file mode 100755 index 0000000..03fff84 --- /dev/null +++ b/test/cmd/check_cluster_test.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +# Variable declarations +cluster_name=$1 + +# Check if kubeconfig file exists +check_kubeconfig() { + if [ -f "$HOME/.kube/config" ]; then + echo "Using existing kubeconfig file: $HOME/.kube/config" + else + echo "kubeconfig file not found. Creating Kind cluster..." + check_kind_installed + create_cluster + fi +} + +# Create Kind cluster with local registry enabled +create_cluster() { + echo "Creating Kind cluster with local registry enabled in containerd..." + kind create cluster -n "${cluster_name}" --config=- </dev/null; then + echo "Kind is already installed." + else + echo "Kind not found. Installing Kind..." + install_kind + fi +} + +# Install Kind +install_kind() { + echo "Installing Kind..." + local kind_url + + # Determine the correct binary URL based on the system architecture + case "$(uname -m)" in + x86_64) + kind_url="https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname -s)-amd64" + ;; + aarch64) + kind_url="https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname -s)-arm64" + ;; + *) + echo "Unsupported architecture: $(uname -m)" + exit 1 + ;; + esac + + # Download and install Kind + curl -Lo ./kind "$kind_url" + chmod +x ./kind + sudo mv ./kind /usr/local/bin/kind + + echo "Kind installed successfully." +} + +# Main script +check_kubeconfig +list_resources \ No newline at end of file diff --git a/test/cmd/clean.sh b/test/cmd/clean.sh new file mode 100644 index 0000000..7fc4689 --- /dev/null +++ b/test/cmd/clean.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +set -euo pipefail + +cluster_name='local-cluster-test' +kind_cluster_name=$(kubectl config view --minify --output 'jsonpath={.clusters[0].name}') +# Function to delete the Kind cluster +delete_cluster() { + echo "Deleting Kind cluster..." + kind delete cluster -n local-cluster-test + echo "Kind cluster deleted successfully." +} + +# Function to check if the kubeconfig file belongs to Kind +is_kind_kubeconfig() { + local kubeconfig_path="${HOME}/.kube/config" + if [ -f "$kubeconfig_path" ]; then + if [ "kind-$cluster_name" = "$kind_cluster_name" ]; then + return 0 + fi + fi + return 1 +} + +# Function to remove the kubeconfig file if it belongs to Kind +remove_kubeconfig() { + echo "Checking if kubeconfig file belongs to Kind..." + if is_kind_kubeconfig; then + echo "Kubeconfig file belongs to Kind. Removing kubeconfig..." + rm "$HOME/.kube/config" + echo "Kubeconfig removed successfully." + else + echo "Kubeconfig file does not belong to Kind. Skipping kubeconfig removal." + fi +} + +# Main script +delete_cluster +remove_kubeconfig \ No newline at end of file diff --git a/test/cmd/create_local_cluster_testing.sh b/test/cmd/create_local_cluster_testing.sh new file mode 100755 index 0000000..3bd2a3f --- /dev/null +++ b/test/cmd/create_local_cluster_testing.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +# Variable declarations +registry_name='kind-registry' +registry_port='5001' +cluster_name='local-cluster-test' +redis_operator_name=${1} +redis_operator_version='0.1.0' +host='127.0.0.1' + +# Check if kubeconfig file exists +check_kubeconfig() { + if [ -f "$HOME/.kube/config" ]; then + echo "Using existing kubeconfig file: $HOME/.kube/config" + else + echo "kubeconfig file not found. Creating Kind cluster..." + check_kind_installed + create_cluster_with_local_registry + fi +} + +# Create cluster with local registry +create_cluster_with_local_registry() { + create_local_registry + create_cluster + add_registry_to_nodes + connect_registry_to_cluster_network + document_local_registry + push_operator_image_local_registry + add_images_for_testing +} + +# Create local Docker registry +create_local_registry() { + echo "Creating local Docker registry..." + if ! docker inspect -f '{{.State.Running}}' "${registry_name}" >/dev/null 2>&1; then + docker run -d --restart=always -p "127.0.0.1:${registry_port}:5000" --name "${registry_name}" registry:2 + fi + echo "Local Docker registry created successfully." +} + +# Create Kind cluster with local registry enabled +create_cluster() { + echo "Creating Kind cluster with local registry enabled in containerd..." + kind create cluster -n "${cluster_name}" --config=- </dev/null; then + echo "Kind is already installed." + else + echo "Kind not found. Installing Kind..." + install_kind + fi +} + +# Install Kind +install_kind() { + echo "Installing Kind..." + local kind_url + + # Determine the correct binary URL based on the system architecture + case "$(uname -m)" in + x86_64) + kind_url="https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname -s)-amd64" + ;; + aarch64) + kind_url="https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname -s)-arm64" + ;; + *) + echo "Unsupported architecture: $(uname -m)" + exit 1 + ;; + esac + + # Download and install Kind + curl -Lo ./kind "$kind_url" + chmod +x ./kind + sudo mv ./kind /usr/local/bin/kind + + echo "Kind installed successfully." +} + +# Main script +check_kubeconfig +list_resources \ No newline at end of file diff --git a/test/cmd/data_44kl.txt b/test/cmd/data_44kl.txt new file mode 100644 index 0000000..052c111 --- /dev/null +++ b/test/cmd/data_44kl.txt @@ -0,0 +1,44061 @@ +SET 1000009.32 638621.76 +SET 1000021.28 327971.84 +SET 1000187.04 624607.56 +SET 1000311.58 590408.49 +SET 1000313.60 602499.04 +SET 1000314.48 638816.64 +SET 1000349.12 328079.36 +SET 1000465.64 590499.42 +SET 1000467.06 638914.08 +SET 1000952.88 625085.82 +SET 1001004.80 328294.40 +SET 1001068.46 752804.92 +SET 1001081.88 590863.14 +SET 10011.95 6707.69 +SET 1001144.97 865409.37 +SET 1001188.00 603025.70 +SET 100119.50 67076.90 +SET 1001223.36 328366.08 +SET 1001229.96 639401.28 +SET 1001347.60 570091.48 +SET 1001544.06 591135.93 +SET 1001551.20 328473.60 +SET 1001560.98 807388.48 +SET 1001759.00 570325.70 +SET 1001852.18 591317.79 +SET 1001988.32 328616.96 +SET 1002206.88 328688.64 +SET 1002212.19 807913.44 +SET 1002314.36 591590.58 +SET 1002376.10 570677.03 +SET 10024.05 7538.10 +SET 100240.50 75381.00 +SET 1002405.00 753810.00 +SET 100245.06 64018.08 +SET 1002450.60 640180.80 +SET 1002499.60 603815.69 +SET 1002622.48 591772.44 +SET 1002753.28 328867.84 +SET 100282.71 69534.09 +SET 100286.34 80843.84 +SET 1002862.56 328903.68 +SET 1002863.40 808438.40 +SET 10029.75 7439.00 +SET 1002993.20 571028.36 +SET 1002995.12 626361.18 +SET 1003060.92 640570.56 +SET 1003073.27 754312.54 +SET 1003081.12 328975.36 +SET 100309.30 67204.06 +SET 100319.04 32901.12 +SET 1003198.90 571145.47 +SET 1003213.50 640668.00 +SET 1003238.72 592136.16 +SET 1003250.40 626520.60 +SET 1003254.42 867232.82 +SET 1003374.00 604342.35 +SET 1003392.78 592227.09 +SET 1003408.96 329082.88 +SET 1003514.61 808963.36 +SET 1003518.66 640862.88 +SET 1003610.30 571379.69 +SET 1003627.52 329154.56 +SET 1003671.24 640960.32 +SET 1003700.90 592408.95 +SET 1003736.80 329190.40 +SET 1003760.96 626839.44 +SET 1003846.08 329226.24 +SET 1003955.36 329262.08 +SET 100397.64 64115.52 +SET 1003976.40 641155.20 +SET 1004021.70 571613.91 +SET 100404.20 67267.64 +SET 100409.82 86796.22 +SET 1004165.82 809488.32 +SET 1004227.40 571731.02 +SET 1004281.56 641350.08 +SET 1004392.48 329405.44 +SET 1004434.14 641447.52 +SET 100446.17 69647.43 +SET 100447.12 59286.36 +SET 1004471.20 592863.60 +SET 1004526.80 627317.70 +SET 1004586.72 641544.96 +SET 1004611.04 329477.12 +SET 1004625.26 592954.53 +SET 1004720.32 329512.96 +SET 1004739.30 641642.40 +SET 1004817.03 810013.28 +SET 1004829.60 329548.80 +SET 1004891.88 641739.84 +SET 1004933.38 593136.39 +SET 1004938.88 329584.64 +SET 1004941.98 868691.58 +SET 1005122.80 605395.67 +SET 1005266.72 329692.16 +SET 10053.76 3297.28 +SET 1005363.87 869056.27 +SET 100537.60 32972.80 +SET 1005376.00 329728.00 +SET 100546.55 67363.01 +SET 1005485.28 329763.84 +SET 10055.60 6056.59 +SET 1005502.20 642129.60 +SET 10057.74 7459.76 +SET 1005746.35 756322.70 +SET 1005785.76 869420.96 +SET 1005803.20 628114.80 +SET 100587.30 57266.79 +SET 10059.40 6739.48 +SET 100594.00 67394.80 +SET 1005959.94 642421.92 +SET 1005997.20 605922.33 +SET 1006011.80 593772.90 +SET 1006078.70 572785.01 +SET 1006112.52 642519.36 +SET 1006119.45 811063.20 +SET 1006313.76 628433.64 +SET 1006434.40 606185.66 +SET 1006490.10 573019.23 +SET 1006570.26 642811.68 +SET 1006628.04 594136.62 +SET 10067.07 7466.68 +SET 1006722.84 642909.12 +SET 1006770.66 811588.16 +SET 1006782.10 594227.55 +SET 100688.90 67458.38 +SET 1006901.50 573253.45 +SET 1006905.92 330229.76 +SET 100702.80 64310.40 +SET 1007051.43 870515.03 +SET 1007244.28 594500.34 +SET 1007308.80 606712.32 +SET 1007333.16 643298.88 +SET 1007398.34 594591.27 +SET 1007452.32 330408.96 +SET 1007518.60 573604.78 +SET 100755.24 59468.22 +SET 1007552.40 594682.20 +SET 100756.16 33044.48 +SET 1007590.16 629230.74 +SET 1007638.32 643493.76 +SET 100773.09 69874.11 +SET 1007751.16 757830.32 +SET 1007780.16 330516.48 +SET 100783.80 67521.96 +SET 1007845.44 629390.16 +SET 1007860.52 594864.06 +SET 1007889.44 330552.32 +SET 1007998.72 330588.16 +SET 1008014.58 594954.99 +SET 1008135.70 573956.11 +SET 100831.71 87160.91 +SET 1008317.10 871609.10 +SET 1008322.70 595136.85 +SET 1008401.22 643980.96 +SET 1008419.43 758332.86 +SET 1008435.84 330731.52 +SET 1008476.76 595227.78 +SET 100854.82 69930.78 +SET 1008545.12 330767.36 +SET 100855.38 64407.84 +SET 1008630.82 595318.71 +SET 1008654.40 330803.20 +SET 1008724.29 813163.04 +SET 1008763.68 330839.04 +SET 1008858.96 644273.28 +SET 1008958.50 574424.55 +SET 1009057.60 607765.64 +SET 100908.77 75883.54 +SET 1009087.70 758835.40 +SET 1009091.52 330946.56 +SET 1009121.84 630187.26 +SET 1009160.88 872338.48 +SET 1009164.20 574541.66 +SET 1009310.08 331018.24 +SET 1009316.70 644565.60 +SET 1009375.50 813688.00 +SET 1009555.18 595864.29 +SET 1009575.60 574775.88 +SET 1009621.86 644760.48 +SET 100974.72 33116.16 +SET 1009863.30 596046.15 +SET 1009887.68 630665.52 +SET 1009927.02 644955.36 +SET 1009965.76 331233.28 +SET 100998.70 57501.01 +SET 1009987.00 575010.10 +SET 101007.96 64505.28 +SET 1010075.04 331269.12 +SET 101018.28 70044.12 +SET 1010184.32 331304.96 +SET 1010293.60 331340.80 +SET 1010369.20 608555.63 +SET 10104.39 7494.36 +SET 1010402.88 331376.64 +SET 1010426.55 873432.55 +SET 1010479.54 596409.87 +SET 1010537.34 645345.12 +SET 10106.85 6771.27 +SET 101063.36 59650.08 +SET 1010653.52 631143.78 +SET 1010809.80 575478.54 +SET 101100.01 70100.79 +SET 101115.95 67744.49 +SET 1011243.60 609082.29 +SET 1011249.84 596864.52 +SET 1011419.36 631622.04 +SET 1011426.90 575829.87 +SET 1011604.96 331770.88 +SET 1011605.40 646027.20 +SET 1011632.60 575946.98 +SET 1011692.22 874526.62 +SET 1011712.02 597137.31 +SET 101181.74 70157.46 +SET 1012020.14 597319.17 +SET 101210.85 67808.07 +SET 1012174.20 597410.10 +SET 1012185.20 632100.30 +SET 1012215.72 646416.96 +SET 1012260.64 331985.92 +SET 1012369.92 332021.76 +SET 1012440.48 632259.72 +SET 1012479.20 332057.60 +SET 10125.36 8752.56 +SET 101253.60 87525.60 +SET 1012555.20 609872.28 +SET 1012588.48 332093.44 +SET 1012866.80 576649.64 +SET 1012978.62 646904.16 +SET 1012992.40 610135.61 +SET 1013025.60 332236.80 +SET 101305.75 67871.65 +SET 1013131.20 647001.60 +SET 1013134.88 332272.64 +SET 1013206.32 632737.98 +SET 1013252.62 598046.61 +SET 1013406.68 598137.54 +SET 1013429.60 610398.94 +SET 1013436.36 647196.48 +SET 101346.16 63289.74 +SET 1013462.72 332380.16 +SET 1013483.90 577000.97 +SET 101371.48 59831.94 +SET 1013716.88 633056.82 +SET 1013741.52 647391.36 +SET 1013765.59 762353.18 +SET 1013866.80 610662.27 +SET 1013899.84 332523.52 +SET 1014009.12 332559.36 +SET 1014022.92 598501.26 +SET 1014199.26 647683.68 +SET 1014223.56 876714.76 +SET 1014306.70 577469.41 +SET 1014331.04 598683.12 +SET 1014336.96 332666.88 +SET 1014446.24 332702.72 +SET 1014482.72 633535.08 +SET 1014639.16 598864.98 +SET 101465.70 64797.60 +SET 1014657.00 647976.00 +SET 1014664.80 332774.40 +SET 1014809.58 648073.44 +SET 1014923.80 577820.74 +SET 1014947.28 599046.84 +SET 1015067.34 877444.14 +SET 10151.04 7528.96 +SET 1015129.50 577937.85 +SET 1015178.40 611452.26 +SET 1015236.39 818412.64 +SET 101525.54 59922.87 +SET 1015429.76 333025.28 +SET 1015489.23 877808.83 +SET 1015539.04 333061.12 +SET 1015615.60 611715.59 +SET 1015648.32 333096.96 +SET 1015746.60 578289.18 +SET 1015759.12 634332.18 +SET 101577.04 76386.08 +SET 1015770.40 763860.80 +SET 101590.45 68062.39 +SET 1015976.16 333204.48 +SET 101601.44 63449.16 +SET 1016179.76 599774.28 +SET 1016182.80 648950.40 +SET 1016194.72 333276.16 +SET 10163.04 3333.12 +SET 1016333.82 599865.21 +SET 1016363.70 578640.51 +SET 1016487.88 599956.14 +SET 1016487.96 649145.28 +SET 1016490.00 612242.25 +SET 1016524.96 634810.44 +SET 1016569.40 578757.62 +SET 10167.96 6001.38 +SET 1016741.12 333455.36 +SET 101675.49 87890.29 +SET 1016775.10 578874.73 +SET 1016780.24 634969.86 +SET 1016793.12 649340.16 +SET 1016850.40 333491.20 +SET 1016950.06 600228.93 +SET 1016980.80 578991.84 +SET 1017098.28 649535.04 +SET 1017176.79 879267.59 +SET 1017190.02 819987.52 +SET 1017258.18 600410.79 +SET 1017287.52 333634.56 +SET 1017290.80 635288.70 +SET 101732.80 68157.76 +SET 1017392.20 579226.06 +SET 1017566.30 600592.65 +SET 1017598.68 879632.28 +SET 1017801.36 635607.54 +SET 1017803.60 579460.28 +SET 1017841.23 820512.48 +SET 1017861.18 650022.24 +SET 10179.03 7549.72 +SET 1018020.57 879996.97 +SET 1018271.04 333957.12 +SET 1018318.92 650314.56 +SET 1018336.60 601047.30 +SET 1018420.70 579811.61 +SET 1018443.48 765870.96 +SET 1018492.44 821037.44 +SET 101867.60 61355.89 +SET 1018676.00 613558.90 +SET 10188.36 7556.64 +SET 1018817.44 334136.32 +SET 1018832.10 580045.83 +SET 1018929.24 650704.32 +SET 1018952.84 601411.02 +SET 1019037.80 580162.94 +SET 1019077.76 636404.64 +SET 1019113.20 613822.23 +SET 101917.31 70667.49 +SET 1019333.04 636564.06 +SET 1019415.02 601683.81 +SET 1019449.20 580397.16 +SET 101958.24 33438.72 +SET 1019582.40 334387.20 +SET 1019654.90 580514.27 +SET 1019844.72 651288.96 +SET 101999.04 70724.16 +SET 102.63 76.12 +SET 1020019.52 334530.56 +SET 1020066.30 580748.49 +SET 1020128.80 334566.40 +SET 1020149.88 651483.84 +SET 102017.50 68348.50 +SET 1020185.32 602138.46 +SET 1020272.00 580865.60 +SET 1020302.46 651581.28 +SET 1020347.36 334638.08 +SET 1020354.16 637201.74 +SET 1020477.70 580982.71 +SET 1020493.44 602320.32 +SET 1020609.44 637361.16 +SET 102064.95 68380.29 +SET 1020675.20 334745.60 +SET 1020760.20 651873.60 +SET 1020784.48 334781.44 +SET 102080.77 70780.83 +SET 1020862.00 614875.55 +SET 1020864.72 637520.58 +SET 1020889.10 581216.93 +SET 1020893.76 334817.28 +SET 1020912.78 651971.04 +SET 1020955.62 602593.11 +SET 1020973.80 882549.80 +SET 1021065.36 652068.48 +SET 10211.20 6376.80 +SET 102112.00 63768.00 +SET 1021120.00 637680.00 +SET 1021221.60 334924.80 +SET 1021299.20 615138.88 +SET 1021395.69 882914.49 +SET 1021440.16 334996.48 +SET 1021506.20 581568.26 +SET 102162.50 70837.50 +SET 1021630.56 637998.84 +SET 1021658.72 335068.16 +SET 1021877.28 335139.84 +SET 1021885.84 638158.26 +SET 1022133.42 652750.56 +SET 1022141.12 638317.68 +SET 1022173.60 615665.54 +SET 1022239.47 883643.87 +SET 1022286.00 652848.00 +SET 1022314.40 335283.20 +SET 1022329.00 582036.70 +SET 102239.97 82418.72 +SET 1022396.40 638477.10 +SET 1022399.70 824187.20 +SET 1022453.10 768886.20 +SET 1022534.70 582153.81 +SET 1022642.24 335390.72 +SET 1022650.28 603593.34 +SET 1022651.68 638636.52 +SET 1022804.34 603684.27 +SET 102286.08 33546.24 +SET 1022860.80 335462.40 +SET 1022906.96 638795.94 +SET 1022946.10 582388.03 +SET 1022970.08 335498.24 +SET 1023048.00 616192.20 +SET 1023048.90 653335.20 +SET 1023079.36 335534.08 +SET 1023162.24 638955.36 +SET 1023201.48 653432.64 +SET 102325.96 70950.84 +SET 1023266.52 603957.06 +SET 1023354.06 653530.08 +SET 1023357.50 582622.25 +SET 1023417.52 639114.78 +SET 1023420.58 604047.99 +SET 1023505.14 884737.94 +SET 1023506.64 653627.52 +SET 1023735.04 335749.12 +SET 1023789.64 769891.28 +SET 102381.18 65382.24 +SET 102395.36 33582.08 +SET 1023964.38 653919.84 +SET 1023974.60 582973.58 +SET 1024036.82 604411.71 +SET 1024172.16 335892.48 +SET 1024359.60 616982.19 +SET 1024386.00 583207.80 +SET 1024422.12 654212.16 +SET 102449.90 60468.45 +SET 1024499.00 604684.50 +SET 1024574.70 654309.60 +SET 1024796.80 617245.52 +SET 1024827.84 336107.52 +SET 102492.00 68666.40 +SET 1024949.20 640071.30 +SET 1025046.40 336179.20 +SET 1025126.18 770896.36 +SET 102519.27 88619.67 +SET 1025204.48 640230.72 +SET 1025208.80 583676.24 +SET 1025234.00 617508.85 +SET 1025374.24 336286.72 +SET 1025702.08 336394.24 +SET 1025731.48 605411.94 +SET 1025795.34 655089.12 +SET 102586.90 68729.98 +SET 1025885.54 605502.87 +SET 1025970.32 640708.98 +SET 1026029.92 336501.76 +SET 102603.96 60559.38 +SET 1026036.48 886926.08 +SET 1026039.60 605593.80 +SET 1026100.50 655284.00 +SET 102613.92 33653.76 +SET 102622.56 64086.84 +SET 1026237.30 584261.79 +SET 1026248.48 336573.44 +SET 10263.00 7612.00 +SET 1026357.76 336609.28 +SET 102644.30 58437.89 +SET 1026443.00 584378.90 +SET 1026462.72 771901.44 +SET 1026558.24 655576.32 +SET 1026648.70 584496.01 +SET 1026809.90 606048.45 +SET 1026863.40 655771.20 +SET 1026958.17 827861.92 +SET 1026991.44 641346.66 +SET 1027130.99 772403.98 +SET 1027168.56 655966.08 +SET 1027246.72 641506.08 +SET 1027265.80 584847.34 +SET 1027302.15 888020.15 +SET 102734.61 71234.19 +SET 1027341.28 336931.84 +SET 1027420.00 618825.50 +SET 1027426.14 606412.17 +SET 1027450.56 336967.68 +SET 1027502.00 641665.50 +SET 102758.02 60650.31 +SET 1027609.38 828386.88 +SET 1027626.30 656258.40 +SET 1027669.12 337039.36 +SET 1027724.04 888384.84 +SET 1027734.26 606594.03 +SET 1027857.20 619088.83 +SET 1027882.90 585198.67 +SET 1027887.68 337111.04 +SET 1027931.46 656453.28 +SET 1028084.04 656550.72 +SET 10281.66 7625.84 +SET 1028106.24 337182.72 +SET 1028145.93 888749.53 +SET 102816.34 71290.86 +SET 1028196.44 606866.82 +SET 1028267.84 642143.76 +SET 10285.00 5855.50 +SET 1028500.00 585550.00 +SET 1028504.56 607048.68 +SET 1028694.36 656940.48 +SET 102871.60 68920.72 +SET 1028731.60 619615.49 +SET 1028761.92 337397.76 +SET 1028778.40 642462.60 +SET 1028871.20 337433.60 +SET 102891.18 82943.68 +SET 102898.07 71347.53 +SET 1028989.71 889478.91 +SET 1029117.10 585901.33 +SET 1029168.80 619878.82 +SET 1029199.04 337541.12 +SET 1029274.86 607503.33 +SET 1029304.68 657330.24 +SET 1029322.80 586018.44 +SET 1029411.60 889843.60 +SET 1029526.88 337648.64 +SET 1029544.24 642940.86 +SET 102966.50 68984.30 +SET 10297.98 7140.42 +SET 1029734.20 586252.66 +SET 1029762.42 657622.56 +SET 102979.80 71404.20 +SET 1029804.07 774414.14 +SET 1029833.49 890208.29 +SET 1029854.72 337756.16 +SET 102991.50 65772.00 +SET 10300.32 7639.68 +SET 1030045.16 607957.98 +SET 1030067.58 657817.44 +SET 1030073.28 337827.84 +SET 1030182.56 337863.68 +SET 1030255.38 890572.98 +SET 1030291.84 337899.52 +SET 1030351.30 586603.99 +SET 1030372.74 658012.32 +SET 1030525.32 658109.76 +SET 1030565.36 643578.54 +SET 103061.40 69047.88 +SET 1030661.40 608321.70 +SET 1030677.27 890937.67 +SET 1030830.48 658304.64 +SET 10309.65 7646.60 +SET 1030968.40 586955.32 +SET 1030983.06 658402.08 +SET 1031056.80 338150.40 +SET 1031099.16 891302.36 +SET 1031140.61 775419.22 +SET 103133.12 64405.68 +SET 1031331.20 644056.80 +SET 1031379.80 587189.54 +SET 103144.08 65869.44 +SET 1031521.05 891667.05 +SET 1031585.50 587306.65 +SET 1031585.76 608867.28 +SET 1031586.48 644216.22 +SET 1031712.48 338365.44 +SET 10318.98 7653.52 +SET 1031841.76 644375.64 +SET 1031898.54 658986.72 +SET 1031942.94 892031.74 +SET 1031996.90 587540.87 +SET 103203.75 69143.25 +SET 1032040.32 338472.96 +SET 1032047.94 609140.07 +SET 1032097.04 644535.06 +SET 1032149.60 338508.80 +SET 10322.02 6092.31 +SET 1032202.60 587657.98 +SET 1032203.70 659181.60 +SET 1032408.30 587775.09 +SET 1032477.15 776424.30 +SET 103251.20 69175.04 +SET 1032586.72 338652.16 +SET 1032607.60 644853.90 +SET 103261.40 58789.22 +SET 1032614.00 587892.20 +SET 1032661.44 659473.92 +SET 1032664.18 609503.79 +SET 1032666.40 621985.46 +SET 103269.60 33868.80 +SET 1032786.72 892761.12 +SET 1032818.24 609594.72 +SET 1032914.56 338759.68 +SET 103298.65 69206.83 +SET 1033118.16 645172.74 +SET 1033126.36 609776.58 +SET 1033208.61 893125.81 +SET 1033373.44 645332.16 +SET 1033424.34 659961.12 +SET 1033460.96 338938.88 +SET 1033470.27 833111.52 +SET 1033540.80 622512.12 +SET 1033570.24 338974.72 +SET 103363.05 89349.05 +SET 1033642.50 588477.75 +SET 1033729.50 660156.00 +SET 103374.26 61014.03 +SET 1033742.60 610140.30 +SET 1033788.80 339046.40 +SET 1033813.69 777429.38 +SET 103388.40 64565.10 +SET 103388.45 71687.55 +SET 1033978.00 622775.45 +SET 1034007.36 339118.08 +SET 1034034.66 660350.88 +SET 1034052.39 893855.19 +SET 1034121.48 833636.48 +SET 1034187.24 660448.32 +SET 1034225.92 339189.76 +SET 1034335.20 339225.60 +SET 1034339.82 660545.76 +SET 1034394.56 645969.84 +SET 10344.10 6930.22 +SET 1034415.20 623038.78 +SET 1034465.30 588946.19 +SET 103449.24 66064.32 +SET 1034553.76 339297.28 +SET 1034644.98 660740.64 +SET 1034772.69 834161.44 +SET 1034797.56 660838.08 +SET 1034876.70 589180.41 +SET 103488.16 33940.48 +SET 103488.45 69333.99 +SET 1034896.17 894584.57 +SET 1035.63 768.12 +SET 1035082.40 589297.52 +SET 1035150.23 778434.46 +SET 1035255.30 661130.40 +SET 1035288.10 589414.63 +SET 103542.39 83468.64 +SET 1035428.00 339584.00 +SET 1035437.26 611140.53 +SET 103551.91 71800.89 +SET 1035537.28 339619.84 +SET 1035560.46 661325.28 +SET 1035726.80 623828.77 +SET 1035755.84 339691.52 +SET 1035899.44 611413.32 +SET 1035926.24 646926.36 +SET 1035974.40 339763.20 +SET 103601.82 66161.76 +SET 1036053.50 611504.25 +SET 1036083.68 339799.04 +SET 1036110.90 589883.07 +SET 1036181.52 647085.78 +SET 103630.80 69429.36 +SET 1036302.24 339870.72 +SET 1036361.62 611686.11 +SET 103643.68 64724.52 +SET 1036583.73 896043.33 +SET 1036628.52 662007.36 +SET 1036630.08 339978.24 +SET 1036669.74 611867.97 +SET 1036726.32 835736.32 +SET 103678.25 69461.15 +SET 1036781.10 662104.80 +SET 1036823.80 611958.90 +SET 1036977.86 612049.83 +SET 1037131.92 612140.76 +SET 103715.37 71914.23 +SET 1037202.64 647723.46 +SET 1037377.53 836261.28 +SET 1037395.04 340229.12 +SET 10374.96 7695.04 +SET 1037427.51 896772.71 +SET 10375.44 6625.92 +SET 1037504.32 340264.96 +SET 1037594.10 612413.55 +SET 1037823.31 780444.62 +SET 1037832.16 340372.48 +SET 103784.94 89713.74 +SET 1037912.80 625145.42 +SET 1037941.44 340408.32 +SET 1037962.20 590937.06 +SET 10381.60 3404.80 +SET 1038223.76 648361.14 +SET 1038271.29 897502.09 +SET 1038364.40 612868.20 +SET 1038459.48 663176.64 +SET 1038597.12 340623.36 +SET 1038612.06 663274.08 +SET 1038764.64 663371.52 +SET 103878.50 59140.55 +SET 103878.83 72027.57 +SET 1038787.20 625672.08 +SET 1038826.58 613140.99 +SET 1038917.22 663468.96 +SET 103898.96 64883.94 +SET 1038980.64 613231.92 +SET 1038989.60 648839.40 +SET 1039034.24 340766.72 +SET 10391.55 6962.01 +SET 103915.50 69620.10 +SET 1039159.85 781449.70 +SET 1039196.40 591639.72 +SET 1039244.88 648998.82 +SET 103925.28 34083.84 +SET 1039252.80 340838.40 +SET 10393.62 7708.88 +SET 1039374.96 663761.28 +SET 1039536.96 898596.16 +SET 1039580.64 340945.92 +SET 103960.56 72084.24 +SET 103962.95 69651.89 +SET 1039661.60 626198.74 +SET 1039755.44 649317.66 +SET 1039813.50 591991.05 +SET 1039828.12 781952.24 +SET 103990.50 61377.75 +SET 1040059.06 613868.43 +SET 1040098.80 626462.07 +SET 1040224.90 592225.27 +SET 1040266.00 649636.50 +SET 1040290.44 664345.92 +SET 104034.56 34119.68 +SET 1040367.18 614050.29 +SET 1040443.02 664443.36 +SET 1040595.60 664540.80 +SET 1040633.58 838886.08 +SET 1040636.30 592459.49 +SET 1040748.18 664638.24 +SET 1040776.56 649955.34 +SET 1040782.72 341340.16 +SET 1040829.36 614323.08 +SET 1040842.00 592576.60 +SET 1041001.28 341411.84 +SET 1041031.84 650114.76 +SET 1041137.48 614504.94 +SET 1041205.92 664930.56 +SET 1041224.52 900054.92 +SET 104124.02 72197.58 +SET 1041253.40 592810.82 +SET 1041291.54 614595.87 +SET 1041410.40 627252.06 +SET 104143.84 34155.52 +SET 1041438.40 341555.20 +SET 104144.56 61468.68 +SET 1041445.60 614686.80 +SET 104152.75 69779.05 +SET 1041547.68 341591.04 +SET 1041656.96 341626.88 +SET 1041663.66 665222.88 +SET 1041847.60 627515.39 +SET 10419.36 8399.36 +SET 104193.60 83993.60 +SET 1041968.82 665417.76 +SET 104206.83 90078.43 +SET 1042068.30 900784.30 +SET 10421.61 7729.64 +SET 1042273.98 665612.64 +SET 1042281.90 593396.37 +SET 1042284.80 627778.72 +SET 1042308.24 650911.86 +SET 1042426.56 665710.08 +SET 1042487.60 593513.48 +SET 104250.12 78396.24 +SET 1042531.20 341913.60 +SET 1042587.21 840460.96 +SET 1042693.30 593630.59 +SET 1042749.76 341985.28 +SET 1042818.80 651230.70 +SET 1042859.04 342021.12 +SET 1042884.30 666002.40 +SET 104289.90 59374.77 +SET 104295.10 69874.42 +SET 1042968.32 342056.96 +SET 1043.90 699.38 +SET 1043077.60 342092.80 +SET 1043140.26 615687.03 +SET 1043310.40 593981.92 +SET 104342.55 69906.21 +SET 104369.21 72367.59 +SET 1043755.86 902243.06 +SET 10439.00 6993.80 +SET 104390.00 69938.00 +SET 1043951.84 342379.52 +SET 1043952.36 666684.48 +SET 1044.96 775.04 +SET 1044061.12 342415.36 +SET 104409.52 65202.78 +SET 1044104.94 666781.92 +SET 1044177.75 902607.75 +SET 1044279.68 342487.04 +SET 1044350.48 652187.22 +SET 104437.45 69969.79 +SET 1044372.74 616414.47 +SET 1044470.80 629095.37 +SET 104450.94 72424.26 +SET 1044506.01 785470.02 +SET 104452.68 61650.54 +SET 1044526.80 616505.40 +SET 1044544.60 594684.58 +SET 104471.68 34263.04 +SET 1044715.26 667171.68 +SET 1044861.04 652506.06 +SET 10449.60 7750.40 +SET 1044935.36 342702.08 +SET 104495.60 59491.88 +SET 1045020.42 667366.56 +SET 1045021.53 903337.13 +SET 1045116.32 652665.48 +SET 1045153.92 342773.76 +SET 1045161.70 595035.91 +SET 104532.35 70033.37 +SET 1045371.60 652824.90 +SET 1045372.48 342845.44 +SET 1045591.04 342917.12 +SET 1045759.28 617232.84 +SET 1045782.40 629885.36 +SET 104580.96 34298.88 +SET 1045843.26 843085.76 +SET 1045882.16 653143.74 +SET 1045918.88 343024.64 +SET 1045984.50 595504.35 +SET 1046028.16 343060.48 +SET 1046088.48 668048.64 +SET 10461.44 7253.76 +SET 1046137.44 343096.32 +SET 104614.40 72537.60 +SET 1046190.20 595621.46 +SET 1046219.60 630148.69 +SET 104627.25 70096.95 +SET 1046287.20 904431.20 +SET 1046375.52 617596.56 +SET 1046393.64 668243.52 +SET 1046465.28 343203.84 +SET 1046494.47 843610.72 +SET 1046546.22 668340.96 +SET 1046601.60 595855.68 +SET 1046683.64 617778.42 +SET 1046683.84 343275.52 +SET 104674.70 70128.74 +SET 1046793.12 343311.36 +SET 10468.26 7764.24 +SET 1046837.70 617869.35 +SET 1046851.38 668535.84 +SET 104690.24 34334.72 +SET 1046991.76 617960.28 +SET 104701.30 59608.99 +SET 1047013.00 596089.90 +SET 1047145.68 844135.68 +SET 1047299.88 618142.14 +SET 1047339.52 343490.56 +SET 1047424.40 596324.12 +SET 1047453.94 618233.07 +SET 1047558.08 343562.24 +SET 10476.08 6183.24 +SET 1047667.36 343598.08 +SET 1047796.89 844660.64 +SET 1048072.02 669315.36 +SET 104817.05 70224.11 +SET 1048179.68 654578.52 +SET 104822.46 66941.28 +SET 1048378.30 618778.65 +SET 1048432.32 343848.96 +SET 1048448.10 845185.60 +SET 1048541.60 343884.80 +SET 104864.50 70255.90 +SET 1048658.60 597026.78 +SET 1048682.34 669705.12 +SET 1048686.42 618960.51 +SET 1048690.24 654897.36 +SET 1048818.54 906619.34 +SET 1048864.30 597143.89 +SET 1048945.52 655056.78 +SET 10490.70 5972.61 +SET 1049099.31 845710.56 +SET 104911.95 70287.69 +SET 1049140.08 669997.44 +SET 104918.39 78898.78 +SET 1049197.28 344099.84 +SET 10492.80 6319.92 +SET 1049200.80 655216.20 +SET 1049240.43 906984.03 +SET 1049275.70 597378.11 +SET 1049302.66 619324.23 +SET 104941.32 72764.28 +SET 1049415.84 344171.52 +SET 1049597.82 670289.76 +SET 1049610.78 619506.09 +SET 1049634.40 344243.20 +SET 1049662.32 907348.72 +SET 1049711.36 655535.04 +SET 1049717.20 632255.33 +SET 1049743.68 344279.04 +SET 1049750.40 670387.20 +SET 1049852.96 344314.88 +SET 1049962.24 344350.72 +SET 105006.85 70351.27 +SET 1050071.52 344386.56 +SET 1050098.50 597846.55 +SET 105018.08 34442.24 +SET 1050221.92 655853.88 +SET 1050360.72 670776.96 +SET 1050381.08 619960.74 +SET 1050509.90 598080.77 +SET 1050513.30 670874.40 +SET 1050520.44 789992.88 +SET 1050591.60 632781.99 +SET 1050689.20 620142.60 +SET 1050715.60 598197.88 +SET 1050921.30 598314.99 +SET 1050945.76 344673.28 +SET 1050987.76 656332.14 +SET 105101.75 70414.85 +SET 1051052.94 847285.44 +SET 1051127.00 598432.10 +SET 1051164.32 344744.96 +SET 105127.36 34478.08 +SET 10514.91 7798.84 +SET 1051459.50 620597.25 +SET 1051492.16 344852.48 +SET 1051538.40 598666.32 +SET 1051581.36 671556.48 +SET 1051601.44 344888.32 +SET 1051710.72 344924.16 +SET 1051733.94 671653.92 +SET 105175.36 65681.04 +SET 1051771.77 909172.17 +SET 1051903.20 633571.98 +SET 1051921.68 620870.04 +SET 1051949.80 598900.54 +SET 105196.65 70478.43 +SET 1052075.74 620960.97 +SET 1052229.80 621051.90 +SET 1052264.16 657129.24 +SET 1052355.36 848335.36 +SET 1052366.40 345139.20 +SET 10524.24 7805.76 +SET 105244.10 70510.22 +SET 1052475.68 345175.04 +SET 1052496.84 672141.12 +SET 1052519.44 657288.66 +SET 1052525.25 791500.50 +SET 1052584.96 345210.88 +SET 1052691.98 621324.69 +SET 1052772.60 599368.98 +SET 1052774.72 657448.08 +SET 1052803.52 345282.56 +SET 1052954.58 672433.44 +SET 1053030.00 657607.50 +SET 1053193.52 792003.04 +SET 1053214.80 634361.97 +SET 10533.57 7812.68 +SET 10533.90 7057.38 +SET 1053459.33 910630.93 +SET 1053462.28 621779.34 +SET 1053540.56 657926.34 +SET 1053616.34 621870.27 +SET 1053677.76 345569.28 +SET 105386.45 70605.59 +SET 1053870.06 673018.08 +SET 1054.29 781.96 +SET 1054005.60 345676.80 +SET 1054006.80 600071.64 +SET 1054022.64 673115.52 +SET 1054051.12 658245.18 +SET 1054078.52 622143.06 +SET 10542.90 7819.60 +SET 1054224.16 345748.48 +SET 1054232.58 622233.99 +SET 10543.17 7310.43 +SET 105433.90 70637.38 +SET 1054333.44 345784.32 +SET 1054442.72 345820.16 +SET 1054526.40 635151.96 +SET 1054561.68 658564.02 +SET 1054632.96 673505.28 +SET 10547.25 9117.25 +SET 1054770.56 345927.68 +SET 1055002.88 622688.64 +SET 1055035.30 600657.19 +SET 105513.43 73160.97 +SET 1055156.94 622779.57 +SET 1055207.68 346071.04 +SET 1055311.00 622870.50 +SET 1055316.96 346106.88 +SET 1055395.86 673992.48 +SET 1055426.24 346142.72 +SET 1055535.52 346178.56 +SET 1055652.40 601008.52 +SET 1055701.02 674187.36 +SET 105585.36 67428.48 +SET 105586.66 79401.32 +SET 1055990.67 912819.07 +SET 1056006.18 674382.24 +SET 1056191.20 346393.60 +SET 1056409.76 346465.28 +SET 1056412.56 913183.76 +SET 1056475.20 601476.96 +SET 1056603.92 659839.38 +SET 1056697.54 623688.87 +SET 105673.76 34657.28 +SET 1056846.88 346608.64 +SET 105685.16 62377.98 +SET 1056851.60 623779.80 +SET 1056956.16 346644.48 +SET 1057005.66 623870.73 +SET 1057074.24 675064.32 +SET 1057092.30 601828.29 +SET 1057174.72 346716.16 +SET 105718.60 70828.12 +SET 1057226.82 675161.76 +SET 1057256.34 913913.14 +SET 1057284.00 346752.00 +SET 1057298.00 601945.40 +SET 1057393.28 346787.84 +SET 1057531.98 675356.64 +SET 1057565.04 852535.04 +SET 1057586.80 636995.27 +SET 1057621.90 624234.45 +SET 105766.05 70859.91 +SET 1057721.12 346895.36 +SET 105783.04 34693.12 +SET 1057871.41 795520.82 +SET 1057915.10 602296.73 +SET 1057989.72 675648.96 +SET 1058024.00 637258.60 +SET 1058135.60 660795.90 +SET 1058376.80 347110.40 +SET 1058390.88 660955.32 +SET 1058392.20 624689.10 +SET 105840.35 73387.65 +SET 1058447.46 675941.28 +SET 1058532.20 602648.06 +SET 1058539.68 796023.36 +SET 1058546.26 624780.03 +SET 1058595.36 347182.08 +SET 1058646.16 661114.74 +SET 1058737.90 602765.17 +SET 1058813.92 347253.76 +SET 1058854.38 624961.89 +SET 1058898.40 637785.26 +SET 1058901.44 661274.16 +SET 1058905.20 676233.60 +SET 105892.32 34728.96 +SET 1058923.20 347289.60 +SET 105894.39 91537.19 +SET 1058943.60 602882.28 +SET 1058943.90 915371.90 +SET 1059008.44 625052.82 +SET 1059057.78 676331.04 +SET 105908.40 70955.28 +SET 1059149.30 602999.39 +SET 1059210.36 676428.48 +SET 105922.08 73444.32 +SET 1059360.32 347432.96 +SET 105941.20 66159.30 +SET 1059515.52 676623.36 +SET 1059578.88 347504.64 +SET 1059624.68 625416.54 +SET 1059688.16 347540.48 +SET 1059766.40 603350.72 +SET 1059772.80 638311.92 +SET 1059797.44 347576.32 +SET 1059922.56 661911.84 +SET 1059932.80 625598.40 +SET 1059973.26 676915.68 +SET 1060016.00 347648.00 +SET 106003.30 71018.86 +SET 106003.81 73500.99 +SET 1060086.86 625689.33 +SET 1060125.28 347683.84 +SET 1060125.84 677013.12 +SET 1060177.80 603584.94 +SET 1060177.84 662071.26 +SET 1060209.57 916465.97 +SET 1060210.00 638575.25 +SET 1060240.92 625780.26 +SET 1060383.50 603702.05 +SET 106043.10 67720.80 +SET 1060431.00 677208.00 +SET 1060433.12 662230.68 +SET 1060453.12 347791.36 +SET 1060544.49 797530.98 +SET 1060562.40 347827.20 +SET 1060589.20 603819.16 +SET 1060736.16 677402.88 +SET 1060794.90 603936.27 +SET 1060821.09 855159.84 +SET 106085.54 73557.66 +SET 1060857.16 626143.98 +SET 1060888.74 677500.32 +SET 1060943.68 662549.52 +SET 1060999.52 347970.56 +SET 1061011.22 626234.91 +SET 1061041.32 677597.76 +SET 1061053.35 917195.35 +SET 1061084.40 639101.91 +SET 1061108.80 348006.40 +SET 1061198.96 662708.94 +SET 1061206.30 604170.49 +SET 1061218.08 348042.24 +SET 1061319.34 626416.77 +SET 1061346.48 677792.64 +SET 1061472.30 855684.80 +SET 1061473.40 626507.70 +SET 1061475.24 917560.04 +SET 1061521.60 639365.24 +SET 1061545.92 348149.76 +SET 1061627.46 626598.63 +SET 1061764.48 348221.44 +SET 1061781.52 626689.56 +SET 1061897.13 917924.73 +SET 106195.68 67818.24 +SET 1061964.80 663187.20 +SET 1062.49 736.71 +SET 1062029.10 604638.93 +SET 1062089.64 626871.42 +SET 1062123.51 856209.76 +SET 1062201.60 348364.80 +SET 1062220.08 663346.62 +SET 1062396.00 639891.90 +SET 10624.90 7367.10 +SET 1062549.30 799038.60 +SET 10626.87 7881.88 +SET 1062719.70 678669.60 +SET 1062774.72 856734.72 +SET 1062857.28 348579.84 +SET 1062872.28 678767.04 +SET 106288.00 71209.60 +SET 1063024.86 678864.48 +SET 1063057.60 605224.48 +SET 1063075.84 348651.52 +SET 1063162.80 919018.80 +SET 1063168.06 627507.93 +SET 1063241.20 663984.30 +SET 1063263.30 605341.59 +SET 1063469.00 605458.70 +SET 106348.26 67915.68 +SET 10636.20 7888.80 +SET 1063622.24 348830.72 +SET 1063630.24 627780.72 +SET 1063635.18 679254.24 +SET 1063674.70 605575.81 +SET 1063751.76 664303.14 +SET 106382.90 71273.18 +SET 1064006.58 919748.18 +SET 1064007.04 664462.56 +SET 1064059.36 348974.08 +SET 1064086.10 605810.03 +SET 1064246.48 628144.44 +SET 1064262.32 664621.98 +SET 1064277.92 349045.76 +SET 106430.35 71304.97 +SET 1064387.20 349081.60 +SET 1064400.54 628235.37 +SET 1064428.47 920112.87 +SET 10645.53 7895.72 +SET 1064554.11 800546.22 +SET 1064703.20 606161.36 +SET 1064703.24 679936.32 +SET 1064708.66 628417.23 +SET 1064728.35 858309.60 +SET 106477.80 71336.76 +SET 1064824.32 349224.96 +SET 1064850.36 920477.56 +SET 1064933.60 349260.80 +SET 1065152.16 349332.48 +SET 1065261.44 349368.32 +SET 1065283.44 665259.66 +SET 1065313.56 680326.08 +SET 1065324.90 628780.95 +SET 10654.86 7902.64 +SET 1065466.14 680423.52 +SET 1065478.96 628871.88 +SET 106572.70 71400.34 +SET 1065893.60 641998.54 +SET 1066026.40 349619.20 +SET 1066076.46 680813.28 +SET 1066116.03 921571.63 +SET 1066143.10 606981.13 +SET 1066229.04 680910.72 +SET 1066330.80 642261.87 +SET 1066403.32 629417.46 +SET 106653.42 68110.56 +SET 1066537.92 921936.32 +SET 106667.60 71463.92 +SET 1066682.08 349834.24 +SET 1066686.78 681203.04 +SET 106676.80 64252.52 +SET 1066768.00 642525.20 +SET 1066815.12 666216.18 +SET 1066839.36 681300.48 +SET 1066900.64 349905.92 +SET 1066959.81 922301.01 +SET 1067009.92 349941.76 +SET 1067070.40 666375.60 +SET 1067119.20 349977.60 +SET 1067144.52 681495.36 +SET 1067325.68 666535.02 +SET 1067333.19 860409.44 +SET 1067381.70 922665.70 +SET 1067481.74 630053.97 +SET 1067556.32 350120.96 +SET 106758.30 60780.09 +SET 1067580.96 666694.44 +SET 10676.25 7152.75 +SET 106762.50 71527.50 +SET 106766.56 35015.68 +SET 1067754.84 681885.12 +SET 1067803.59 923030.39 +SET 1067836.24 666853.86 +SET 1067895.46 803058.92 +SET 1067993.44 350264.32 +SET 1067994.40 608035.12 +SET 1068079.60 643315.19 +SET 1068091.52 667013.28 +SET 1068097.98 630417.69 +SET 1068225.48 923395.08 +SET 1068365.16 682274.88 +SET 1068406.10 630599.55 +SET 1068560.16 630690.48 +SET 1068563.73 803561.46 +SET 106857.40 71591.08 +SET 1068647.37 923759.77 +SET 1068649.12 350479.36 +SET 1068670.32 682469.76 +SET 1068758.40 350515.20 +SET 1068817.20 608503.56 +SET 1068867.68 350551.04 +SET 1068868.28 630872.34 +SET 1068954.00 643841.85 +SET 1069022.90 608620.67 +SET 106904.85 71622.87 +SET 1069069.26 924124.46 +SET 1069176.40 631054.20 +SET 10692.32 8040.64 +SET 1069228.60 608737.78 +SET 1069232.00 804064.00 +SET 1069286.82 861984.32 +SET 1069304.80 350694.40 +SET 1069330.46 631145.13 +SET 1069433.22 682956.96 +SET 106952.30 71654.66 +SET 106958.58 68305.44 +SET 1069632.64 350801.92 +SET 1069638.58 631326.99 +SET 106964.00 60897.20 +SET 1069738.38 683151.84 +SET 1069792.64 631417.92 +SET 1069828.40 644368.51 +SET 1069960.48 350909.44 +SET 106999.75 71686.45 +SET 1070179.04 350981.12 +SET 1070254.82 631690.71 +SET 1070265.60 644631.84 +SET 1070288.32 351016.96 +SET 1070348.70 683541.60 +SET 1070397.60 351052.80 +SET 1070562.94 631872.57 +SET 10706.63 7423.77 +SET 1070616.16 351124.48 +SET 1070668.50 609557.55 +SET 1070702.80 644895.17 +SET 1070725.44 351160.32 +SET 1070756.82 925583.22 +SET 1070944.00 351232.00 +SET 107111.16 68402.88 +SET 107114.00 64515.85 +SET 1071140.00 645158.50 +SET 1071271.84 351339.52 +SET 1071285.60 609908.88 +SET 1071381.12 351375.36 +SET 1071410.16 669085.74 +SET 1071490.40 351411.20 +SET 1071641.36 632509.08 +SET 1071665.44 669245.16 +SET 1071795.42 632600.01 +SET 1072014.40 645685.16 +SET 1072027.08 684613.44 +SET 10721.76 6695.64 +SET 1072108.40 610377.32 +SET 10723.70 7184.54 +SET 1072451.60 645948.49 +SET 1072473.92 351733.76 +SET 1072484.82 684905.76 +SET 1072573.35 806576.70 +SET 107263.74 68500.32 +SET 1072789.98 685100.64 +SET 107284.45 71877.19 +SET 1072866.27 927406.67 +SET 1072873.84 633236.52 +SET 1072911.04 351877.12 +SET 1072931.20 610845.76 +SET 1072941.84 670042.26 +SET 1073020.32 351912.96 +SET 1073027.90 633327.45 +SET 1073136.90 610962.87 +SET 1073181.96 633418.38 +SET 1073197.12 670201.68 +SET 1073241.62 807079.24 +SET 1073247.72 685392.96 +SET 1073288.16 927771.36 +SET 107331.90 71908.98 +SET 1073348.16 352020.48 +SET 1073400.30 685490.40 +SET 1073452.40 670361.10 +SET 1073552.88 685587.84 +SET 1073644.14 633691.17 +SET 1073705.46 685685.28 +SET 1073707.68 670520.52 +SET 107379.35 71940.77 +SET 10738.83 7964.92 +SET 1073858.04 685782.72 +SET 1073952.26 633873.03 +SET 1074106.32 633963.96 +SET 1074113.12 352271.36 +SET 107416.32 68597.76 +SET 1074165.40 611548.42 +SET 107422.24 35230.72 +SET 107426.80 71972.56 +SET 1074371.10 611665.53 +SET 1074440.96 352378.88 +SET 107449.65 86618.40 +SET 1074553.83 928865.43 +SET 1074568.50 634236.75 +SET 1074576.80 611782.64 +SET 1074620.94 686269.92 +SET 1074722.56 634327.68 +SET 1074768.80 352486.40 +SET 1074782.50 611899.75 +SET 10748.16 7971.84 +SET 1074878.08 352522.24 +SET 1074926.10 686464.80 +SET 1074984.08 671317.62 +SET 1074987.36 352558.08 +SET 1075096.64 352593.92 +SET 1075193.90 612133.97 +SET 1075239.36 671477.04 +SET 1075315.20 352665.60 +SET 1075383.84 686757.12 +SET 1075399.60 612251.08 +SET 1075512.00 647791.80 +SET 1075646.92 634873.26 +SET 107569.15 72067.93 +SET 10757.49 7978.76 +SET 1075752.32 352808.96 +SET 1075800.98 634964.19 +SET 1075811.00 612485.30 +SET 107591.47 80908.94 +SET 1075914.70 809089.40 +SET 1075955.04 635055.12 +SET 1076109.10 635146.05 +SET 1076189.44 352952.32 +SET 1076222.40 612719.52 +SET 1076260.48 672114.72 +SET 1076298.72 352988.16 +SET 1076299.32 687341.76 +SET 107640.80 35302.40 +SET 1076408.00 353024.00 +SET 1076417.22 635327.91 +SET 1076450.13 867758.88 +SET 1076626.56 353095.68 +SET 1076633.80 612953.74 +SET 1076663.28 930688.88 +SET 1076839.50 613070.85 +SET 1076954.40 353203.20 +SET 1077026.32 672592.98 +SET 1077063.68 353239.04 +SET 1077187.52 635782.56 +SET 1077250.90 613305.07 +SET 1077251.24 810094.48 +SET 1077282.24 353310.72 +SET 107750.08 35338.24 +SET 1077500.80 353382.40 +SET 1077519.96 688121.28 +SET 107758.95 72195.09 +SET 1077825.12 688316.16 +SET 1077828.64 353489.92 +SET 107786.80 61365.64 +SET 1077928.95 931782.95 +SET 1077937.92 353525.76 +SET 1077957.82 636237.21 +SET 107801.87 74747.73 +SET 1078073.70 613773.51 +SET 1078111.88 636328.14 +SET 1078130.28 688511.04 +SET 1078156.48 353597.44 +SET 1078282.86 688608.48 +SET 1078302.72 673390.08 +SET 1078375.04 353669.12 +SET 10784.20 6365.10 +SET 1078403.76 869333.76 +SET 107842.00 63651.00 +SET 1078572.40 649635.11 +SET 1078587.78 811099.56 +SET 1078588.02 688803.36 +SET 107859.36 35374.08 +SET 1078702.88 353776.64 +SET 1078728.12 636691.86 +SET 1078772.73 932512.33 +SET 10788.36 7480.44 +SET 1078896.50 614241.95 +SET 107901.30 72290.46 +SET 1079030.72 353884.16 +SET 1079045.76 689095.68 +SET 1079054.97 869858.72 +SET 1079190.30 636964.65 +SET 1079256.05 811602.10 +SET 1079307.90 614476.17 +SET 1079358.56 353991.68 +SET 1079467.84 354027.52 +SET 1079498.42 637146.51 +SET 1079503.50 689388.00 +SET 1079577.12 354063.36 +SET 1079579.12 674187.18 +SET 1079616.51 933241.71 +SET 1079834.40 674346.60 +SET 1079884.00 650425.10 +SET 107996.20 72354.04 +SET 1080014.24 354206.72 +SET 1080038.40 933606.40 +SET 1080114.66 637510.23 +SET 1080123.52 354242.56 +SET 1080130.70 614944.61 +SET 1080232.80 354278.40 +SET 1080336.40 615061.72 +SET 1080357.39 870908.64 +SET 10804.14 8013.36 +SET 1080418.98 689972.64 +SET 1080422.78 637692.09 +SET 1080451.36 354350.08 +SET 1080460.29 933971.09 +SET 1080560.64 354385.92 +SET 1080592.59 812607.18 +SET 1080669.92 354421.76 +SET 1080724.14 690167.52 +SET 1080747.80 615295.94 +SET 1080855.52 674984.28 +SET 1080882.18 934335.78 +SET 1080997.76 354529.28 +SET 108100.86 87143.36 +SET 1081039.02 638055.81 +SET 1081159.20 615530.16 +SET 1081181.88 690459.84 +SET 1081195.60 651215.09 +SET 1081325.60 354636.80 +SET 1081347.14 638237.67 +SET 1081366.08 675303.12 +SET 1081434.88 354672.64 +SET 1081570.60 615764.38 +SET 1081621.36 675462.54 +SET 1081655.26 638419.53 +SET 1081762.72 354780.16 +SET 108179.22 69084.96 +SET 1081792.20 690849.60 +SET 10818.60 7248.12 +SET 1081809.32 638510.46 +SET 108187.20 35481.60 +SET 1081944.78 690947.04 +SET 1081963.38 638601.39 +SET 1081981.28 354851.84 +SET 1082090.56 354887.68 +SET 1082097.36 691044.48 +SET 1082187.70 616115.71 +SET 1082199.84 354923.52 +SET 1082311.02 872483.52 +SET 1082393.40 616232.82 +SET 1082527.68 355031.04 +SET 1082569.74 935794.54 +SET 1082579.62 638965.11 +SET 1082636.96 355066.88 +SET 1082642.48 676100.22 +SET 1082746.24 355102.72 +SET 1082860.26 691531.68 +SET 108292.25 75087.75 +SET 108296.48 35517.44 +SET 1082962.23 873008.48 +SET 1083012.84 691629.12 +SET 1083041.80 639237.90 +SET 1083074.08 355210.24 +SET 1083153.04 676419.06 +SET 1083195.86 639328.83 +SET 1083216.20 616701.26 +SET 1083265.67 814617.34 +SET 108331.80 69182.40 +SET 1083408.32 676578.48 +SET 1083503.98 639510.69 +SET 1083658.04 639601.62 +SET 1083729.76 355425.28 +SET 108373.98 75144.42 +SET 108375.80 72608.36 +SET 1083812.10 639692.55 +SET 1083818.80 652795.07 +SET 1083948.32 355496.96 +SET 1083966.16 639783.48 +SET 108403.90 61716.97 +SET 1084039.00 617169.70 +SET 1084120.22 639874.41 +SET 108423.25 72640.15 +SET 108425.73 93725.33 +SET 1084274.28 639965.34 +SET 1084276.16 355604.48 +SET 1084429.44 677216.16 +SET 108455.71 75201.09 +SET 1084602.21 815622.42 +SET 1084604.00 355712.00 +SET 1084684.72 677375.58 +SET 1084693.20 653321.73 +SET 108470.70 72671.94 +SET 1084822.56 355783.68 +SET 108484.38 69279.84 +SET 1084843.80 692798.40 +SET 1084940.00 677535.00 +SET 1085041.12 355855.36 +SET 1085044.58 640419.99 +SET 1085067.50 617755.25 +SET 1085259.68 355927.04 +SET 1085301.54 693090.72 +SET 1085450.56 677853.84 +SET 1085454.12 693188.16 +SET 1085478.24 355998.72 +SET 1085567.07 875108.32 +SET 1085567.60 653848.39 +SET 1085660.82 640783.71 +SET 1085696.80 356070.40 +SET 1085705.84 678013.26 +SET 1085759.28 693383.04 +SET 1085806.08 356106.24 +SET 1085814.88 640874.64 +SET 1085911.86 693480.48 +SET 1085938.75 816627.50 +SET 1085944.86 938712.06 +SET 1085961.12 678172.68 +SET 1085968.94 640965.57 +SET 10860.12 8054.88 +SET 1086064.44 693577.92 +SET 108609.60 61834.08 +SET 1086217.02 693675.36 +SET 1086218.28 875633.28 +SET 1086277.06 641147.43 +SET 108636.96 69377.28 +SET 1086431.12 641238.36 +SET 1086507.40 618575.02 +SET 1086522.18 693870.24 +SET 1086571.04 356357.12 +SET 1086585.18 641329.29 +SET 10866.05 7279.91 +SET 108660.50 72799.10 +SET 1086607.02 817130.04 +SET 1086680.32 356392.96 +SET 1086713.10 618692.13 +SET 1086726.96 678650.94 +SET 1086789.60 356428.80 +SET 1086827.34 694065.12 +SET 1086869.49 876158.24 +SET 10869.45 8061.80 +SET 1086918.80 618809.24 +SET 10870.09 7537.11 +SET 1087008.16 356500.48 +SET 108707.95 72830.89 +SET 1087132.50 694260.00 +SET 1087226.72 356572.16 +SET 1087285.08 694357.44 +SET 1087316.40 654901.71 +SET 108733.60 35660.80 +SET 1087330.20 619043.46 +SET 1087336.00 356608.00 +SET 1087492.80 679129.20 +SET 1087535.90 619160.57 +SET 108755.40 72862.68 +SET 1087590.24 694552.32 +SET 108782.63 75427.77 +SET 1087882.40 356787.20 +SET 108789.54 69474.72 +SET 1087895.40 694747.20 +SET 1087943.56 818135.12 +SET 1087947.30 619394.79 +SET 1088003.36 679448.04 +SET 1088100.96 356858.88 +SET 1088125.78 642238.59 +SET 1088210.24 356894.72 +SET 1088353.14 695039.52 +SET 108842.88 35696.64 +SET 1088476.20 940900.20 +SET 108850.30 72926.26 +SET 1088513.92 679766.88 +SET 1088564.40 619746.12 +SET 1088587.96 642511.38 +SET 1088611.83 818637.66 +SET 1088769.20 679926.30 +SET 10888.11 8075.64 +SET 1088823.12 877733.12 +SET 1088865.92 357109.76 +SET 1088898.09 941264.89 +SET 1088963.46 695429.28 +SET 1088975.80 619980.34 +SET 1089050.14 642784.17 +SET 1089193.76 357217.28 +SET 108920.42 64287.51 +SET 1089268.62 695624.16 +SET 1089279.76 680245.14 +SET 108928.01 81914.02 +SET 1089358.26 642966.03 +SET 108945.20 72989.84 +SET 1089502.40 656218.36 +SET 1089521.60 357324.80 +SET 1089535.04 680404.56 +SET 10897.44 8082.56 +SET 1089726.36 695916.48 +SET 1089741.87 941994.27 +SET 1089948.37 819642.74 +SET 1089958.72 357468.16 +SET 1089974.50 643329.75 +SET 1090004.30 620565.89 +SET 109004.56 68072.34 +SET 1090068.00 357504.00 +SET 109021.00 62068.30 +SET 109027.82 75597.78 +SET 1090286.56 357575.68 +SET 1090300.88 680882.82 +SET 1090336.68 696306.24 +SET 1090489.26 696403.68 +SET 1090614.40 357683.20 +SET 1090641.84 696501.12 +SET 1090776.75 879308.00 +SET 1091.61 809.64 +SET 1091051.52 357826.56 +SET 1091160.80 357862.40 +SET 1091270.08 357898.24 +SET 109135.00 73117.00 +SET 1091444.20 621385.66 +SET 1091488.64 357969.92 +SET 10916.10 8096.40 +SET 1091707.20 358041.60 +SET 1091709.90 697183.20 +SET 1091823.22 644420.91 +SET 1091832.56 681839.34 +SET 1091855.60 621619.88 +SET 109191.28 75711.12 +SET 1091925.76 358113.28 +SET 1091977.28 644511.84 +SET 1092015.06 697378.08 +SET 1092061.30 621736.99 +SET 1092131.34 644602.77 +SET 1092320.22 697572.96 +SET 1092362.88 358256.64 +SET 10925.43 8103.32 +SET 1092581.44 358328.32 +SET 1092625.38 697767.84 +SET 1092730.38 880882.88 +SET 1092884.10 622205.43 +SET 109300.00 65832.50 +SET 1093055.70 645148.35 +SET 1093089.80 622322.54 +SET 1093108.96 682636.44 +SET 1093116.99 944911.79 +SET 1093235.70 698157.60 +SET 109324.80 73244.16 +SET 1093289.72 822155.44 +SET 1093295.50 622439.65 +SET 1093363.82 645330.21 +SET 1093364.24 682795.86 +SET 10934.76 8110.24 +SET 1093501.20 622556.76 +SET 1093517.88 645421.14 +SET 1093619.52 682955.28 +SET 1093912.60 622790.98 +SET 1093957.99 822657.98 +SET 1093960.77 945641.17 +SET 1093980.06 645693.93 +SET 109399.86 69864.48 +SET 1094032.80 881932.80 +SET 1094118.30 622908.09 +SET 1094134.12 645784.86 +SET 1094151.18 698742.24 +SET 1094311.60 659114.99 +SET 1094382.66 946005.86 +SET 1094529.70 623142.31 +SET 1094640.64 683592.96 +SET 1094735.40 623259.42 +SET 1094748.80 659378.32 +SET 1094750.36 646148.58 +SET 1094804.55 946370.55 +SET 1094904.42 646239.51 +SET 1094914.08 699229.44 +SET 1094941.10 623376.53 +SET 1095058.48 646330.44 +SET 109514.60 73371.32 +SET 109515.12 68391.18 +SET 1095219.24 699424.32 +SET 1095226.44 946735.24 +SET 1095294.53 823663.06 +SET 1095335.22 882982.72 +SET 109536.66 64651.23 +SET 1095366.60 646512.30 +SET 109552.44 69961.92 +SET 1095520.66 646603.23 +SET 1095558.20 623727.86 +SET 1095623.20 659904.98 +SET 1095661.76 684230.64 +SET 1095674.72 646694.16 +SET 1095917.04 684390.06 +SET 109596.28 82416.56 +SET 1095962.80 824165.60 +SET 1095986.43 883507.68 +SET 109599.93 75994.47 +SET 109607.84 35947.52 +SET 1096070.22 947464.62 +SET 1096134.72 700008.96 +SET 1096175.30 624079.19 +SET 1096287.30 700106.40 +SET 1096439.88 700203.84 +SET 1096586.70 624313.41 +SET 1096599.08 647239.74 +SET 1096631.07 824668.14 +SET 1096637.64 884032.64 +SET 109681.66 76051.14 +SET 1096897.62 700496.16 +SET 1096914.00 948194.00 +SET 109705.02 70059.36 +SET 1097202.78 700691.04 +SET 1097203.80 624664.74 +SET 1097215.32 647603.46 +SET 1097288.85 884557.60 +SET 1097299.34 825170.68 +SET 1097369.38 647694.39 +SET 109737.20 66095.83 +SET 1097507.94 700885.92 +SET 1097523.44 647785.32 +SET 1097809.20 661221.63 +SET 1097813.10 701080.80 +SET 1097820.90 625016.07 +SET 1097965.68 701178.24 +SET 1097967.61 825673.22 +SET 10981.41 8144.84 +SET 1098179.67 949288.07 +SET 1098214.56 685824.84 +SET 1098232.30 625250.29 +SET 1098246.40 661484.96 +SET 109826.40 36019.20 +SET 1098293.74 648239.97 +SET 109845.12 76164.48 +SET 10985.76 7015.68 +SET 1098576.00 701568.00 +SET 1098728.58 701665.44 +SET 1098849.40 625601.62 +SET 1099033.74 701860.32 +SET 1099055.10 625718.73 +SET 1099064.04 648694.62 +SET 1099186.32 701957.76 +SET 109926.85 76221.15 +SET 1099260.80 625835.84 +SET 1099466.50 625952.95 +SET 1099491.48 702152.64 +SET 1099558.00 662274.95 +SET 1099746.24 686781.36 +SET 1099877.90 626187.17 +SET 1099972.42 827180.84 +SET 1099988.40 649240.20 +SET 1100101.80 702542.40 +SET 1100142.46 649331.13 +SET 1100289.12 951111.52 +SET 1100289.30 626421.39 +SET 1100406.96 702737.28 +SET 110044.96 36090.88 +SET 1100450.58 649512.99 +SET 110049.50 62653.85 +SET 1100512.08 687259.62 +SET 1100700.70 626655.61 +SET 1100711.01 951476.21 +SET 1100712.12 702932.16 +SET 11008.40 7375.28 +SET 1100912.76 649785.78 +SET 1101196.11 887707.36 +SET 1101220.88 649967.64 +SET 1101308.96 828185.92 +SET 110131.45 73784.59 +SET 1101317.80 627006.94 +SET 1101322.44 703321.92 +SET 1101523.50 627124.05 +SET 1101529.00 650149.50 +SET 1101533.20 687897.30 +SET 1101627.60 703516.80 +SET 1101683.06 650240.43 +SET 110178.90 73816.38 +SET 1101932.76 703711.68 +SET 1101976.68 952570.28 +SET 1102140.60 627475.38 +SET 1102145.24 650513.22 +SET 1102237.92 703906.56 +SET 1102299.30 650604.15 +SET 1102398.57 952934.97 +SET 1102498.53 888757.28 +SET 1102618.40 664118.26 +SET 110263.52 36162.56 +SET 110264.55 82919.10 +SET 110273.80 73879.96 +SET 1102963.40 627943.82 +SET 110306.96 65105.88 +SET 1103069.60 651058.80 +SET 110315.34 70449.12 +SET 1103169.10 628060.93 +SET 1103242.35 953664.35 +SET 11033.55 7650.45 +SET 1103305.98 704588.64 +SET 1103313.77 829693.54 +SET 110335.50 76504.50 +SET 1103458.56 704686.08 +SET 1103492.80 664644.92 +SET 1103575.44 689172.66 +SET 1103580.50 628295.15 +SET 1103611.14 704783.52 +SET 11037.39 8186.36 +SET 110372.80 36198.40 +SET 1103786.20 628412.26 +SET 1103830.72 689332.08 +SET 1103930.00 664908.25 +SET 1103982.04 830196.08 +SET 1103991.90 628529.37 +SET 1104197.60 628646.48 +SET 1104221.46 705173.28 +SET 1104302.08 651786.24 +SET 1104341.28 689650.92 +SET 1104367.20 665171.58 +SET 1104452.16 890332.16 +SET 1104456.14 651877.17 +SET 1104609.00 628880.70 +SET 110467.92 70546.56 +SET 1104679.20 705465.60 +SET 1104764.26 652059.03 +SET 1104814.70 628997.81 +SET 1104851.84 689969.76 +SET 1104918.32 652149.96 +SET 1104929.91 955123.11 +SET 1105103.37 890857.12 +SET 1105107.12 690129.18 +SET 1105226.44 652331.82 +SET 1105289.52 705855.36 +SET 1105351.80 955487.80 +SET 110536.24 69028.86 +SET 1105380.50 652422.75 +SET 11055.85 7407.07 +SET 1105688.62 652604.61 +SET 1105754.58 891382.08 +SET 1105773.69 955852.49 +SET 110580.69 76674.51 +SET 1105899.84 706245.12 +SET 1105986.85 831703.70 +SET 1106195.58 956217.18 +SET 1106205.00 706440.00 +SET 1106357.58 706537.44 +SET 1106458.92 653059.26 +SET 110653.40 74134.28 +SET 1106553.20 666488.23 +SET 1106612.98 653150.19 +SET 1106638.80 691085.70 +SET 110666.60 63005.18 +SET 1106666.00 630051.80 +SET 1106815.32 706829.76 +SET 1106871.70 630168.91 +SET 1106921.10 653332.05 +SET 110700.85 74166.07 +SET 1107039.36 956946.56 +SET 110705.70 89243.20 +SET 1107383.28 653604.84 +SET 1107404.64 691563.96 +SET 1107427.60 667014.89 +SET 110744.15 76787.85 +SET 1107461.25 957311.25 +SET 1107488.80 630520.24 +SET 1107694.50 630637.35 +SET 1107845.46 653877.63 +SET 1107915.20 691882.80 +SET 1108035.96 707609.28 +SET 1108170.48 692042.22 +SET 110825.88 76844.52 +SET 1108305.03 958040.63 +SET 1108359.42 893481.92 +SET 11084.04 8220.96 +SET 1108425.76 692201.64 +SET 1108461.70 654241.35 +SET 1108615.76 654332.28 +SET 1108659.93 833713.86 +SET 110872.30 63122.29 +SET 1108723.00 631222.90 +SET 1108923.88 654514.14 +SET 110907.61 76901.19 +SET 1109134.40 631457.12 +SET 11092.32 6546.96 +SET 110923.20 65469.60 +SET 110925.66 70838.88 +SET 11093.37 8227.88 +SET 110932.82 83421.64 +SET 1109328.20 834216.40 +SET 1109540.12 654877.86 +SET 1109613.60 668331.54 +SET 1109702.16 692998.74 +SET 1109848.24 655059.72 +SET 1109957.20 631925.56 +SET 1109992.59 959499.39 +SET 1109996.47 834718.94 +SET 1110.27 823.48 +SET 1110019.50 708876.00 +SET 1110156.36 655241.58 +SET 1110162.90 632042.67 +SET 1110212.72 693317.58 +SET 1110310.42 655332.51 +SET 1110368.60 632159.78 +SET 111046.80 69347.70 +SET 1110477.24 709168.32 +SET 111048.80 66885.82 +SET 1110488.00 668858.20 +SET 1110664.74 835221.48 +SET 11107.80 6323.94 +SET 1110723.28 693636.42 +SET 1110978.56 693795.84 +SET 1110985.70 632511.11 +SET 1111191.40 632628.22 +SET 11112.03 8241.72 +SET 1111388.84 655969.02 +SET 1111392.72 709752.96 +SET 1111397.10 632745.33 +SET 11115.28 7707.12 +SET 111175.35 74483.97 +SET 1111850.46 710045.28 +SET 1111851.02 656241.81 +SET 1111999.68 694433.52 +SET 1112003.04 710142.72 +SET 1112102.04 961322.84 +SET 1112236.80 669911.52 +SET 1112254.96 694592.94 +SET 1112460.78 710435.04 +SET 1112523.93 961687.53 +SET 1112765.52 694911.78 +SET 1112765.94 710629.92 +SET 1112837.00 633565.10 +SET 1112917.89 897156.64 +SET 1112929.44 656878.32 +SET 11130.69 8255.56 +SET 1113042.70 633682.21 +SET 1113083.50 656969.25 +SET 111317.70 74579.34 +SET 1113454.10 633916.43 +SET 1113545.68 657242.04 +SET 1113548.40 670701.51 +SET 111356.91 89768.16 +SET 1113569.10 897681.60 +SET 1113786.64 695549.46 +SET 11138.34 7113.12 +SET 1113865.50 634150.65 +SET 111412.60 74642.92 +SET 1114211.49 963146.29 +SET 1114220.31 898206.56 +SET 1114276.90 634384.87 +SET 1114444.32 711701.76 +SET 1114470.04 657787.62 +SET 11146.56 3655.68 +SET 1114674.36 838236.72 +SET 1114807.76 696187.14 +SET 1114871.52 898731.52 +SET 111489.40 63473.62 +SET 11149.35 8269.40 +SET 1115054.64 712091.52 +SET 1115063.04 696346.56 +SET 1115207.22 712188.96 +SET 1115297.20 671754.83 +SET 1115305.40 634970.42 +SET 1115342.63 838739.26 +SET 111535.98 71228.64 +SET 1115359.80 712286.40 +SET 1115573.60 696665.40 +SET 111561.45 77354.55 +SET 111574.88 36592.64 +SET 11158.68 8276.32 +SET 1115856.58 658605.99 +SET 1115899.05 964605.05 +SET 1116084.16 696984.24 +SET 1116275.28 712871.04 +SET 1116320.94 964969.74 +SET 1116333.90 635555.97 +SET 1116539.60 635673.08 +SET 1116580.44 713065.92 +SET 1116594.72 697303.08 +SET 1116608.80 672544.82 +SET 1116626.88 659060.64 +SET 1116679.17 839744.34 +SET 1116733.02 713163.36 +SET 11168.01 8283.24 +SET 1116951.00 635907.30 +SET 1117156.70 636024.41 +SET 111724.91 77467.89 +SET 1117243.12 659424.36 +SET 1117347.44 840246.88 +SET 1117397.18 659515.29 +SET 1117476.36 900831.36 +SET 1117551.24 659606.22 +SET 1117615.84 697940.76 +SET 1117648.50 713748.00 +SET 11177.34 8290.16 +SET 1117871.12 698100.18 +SET 111792.20 74897.24 +SET 111793.44 36664.32 +SET 1117953.66 713942.88 +SET 1117979.50 636492.85 +SET 1118008.50 966428.50 +SET 1118013.42 659879.01 +SET 1118015.71 840749.42 +SET 111806.64 77524.56 +SET 1118106.24 714040.32 +SET 1118167.48 659969.94 +SET 1118321.54 660060.87 +SET 1118357.60 673598.14 +SET 111847.56 66015.18 +SET 1118596.60 636844.18 +SET 1118629.66 660242.73 +SET 1118636.96 698578.44 +SET 1118778.78 901881.28 +SET 1118802.30 636961.29 +SET 1118869.14 714527.52 +SET 111887.10 74960.82 +SET 1118892.24 698737.86 +SET 1118937.78 660424.59 +SET 111902.72 36700.16 +SET 1119091.84 660515.52 +SET 1119213.70 637195.51 +SET 1119232.00 674124.80 +SET 1119245.90 660606.45 +SET 1119274.17 967522.57 +SET 1119326.88 714819.84 +SET 1119352.25 841754.50 +SET 1119399.96 660697.38 +SET 1119402.80 699056.70 +SET 1119429.99 902406.24 +SET 11196.00 8304.00 +SET 1119625.10 637429.73 +SET 1119632.04 715014.72 +SET 1119658.08 699216.12 +SET 11197.01 7763.79 +SET 111982.00 75024.40 +SET 1119862.14 660970.17 +SET 1120036.50 637663.95 +SET 112008.12 90293.12 +SET 1120089.78 715307.04 +SET 1120106.40 674651.46 +SET 1120117.95 968251.95 +SET 1120170.26 661152.03 +SET 1120242.20 637781.06 +SET 1120242.36 715404.48 +SET 112029.45 75056.19 +SET 1120394.94 715501.92 +SET 1120423.92 699694.38 +SET 1120447.90 637898.17 +SET 1120478.38 661333.89 +SET 11205.33 8310.92 +SET 1120547.52 715599.36 +SET 1120632.44 661424.82 +SET 1120653.60 638015.28 +SET 1120688.79 842759.58 +SET 1120700.10 715696.80 +SET 1120732.41 903456.16 +SET 1120934.48 700013.22 +SET 1120980.80 675178.12 +SET 1121065.00 638249.50 +SET 1121094.62 661697.61 +SET 1121189.76 700172.64 +SET 112121.28 36771.84 +SET 1121402.74 661879.47 +SET 1121418.00 675441.45 +SET 112155.68 66197.04 +SET 1121556.80 661970.40 +SET 1121710.86 662061.33 +SET 1121768.16 716378.88 +SET 1121864.92 662152.26 +SET 1122034.83 904506.08 +SET 1122073.32 716573.76 +SET 1122173.04 662334.12 +SET 112219.25 75183.35 +SET 1122210.88 700810.32 +SET 1122227.40 970075.40 +SET 1122292.40 675968.11 +SET 11223.99 8324.76 +SET 1122635.22 662606.91 +SET 1122649.29 970440.09 +SET 1122683.64 716963.52 +SET 1122789.28 662697.84 +SET 1122836.22 717060.96 +SET 112297.02 77864.58 +SET 1122988.80 717158.40 +SET 1123071.18 970804.78 +SET 1123122.00 639420.60 +SET 1123141.38 717255.84 +SET 11232.32 7014.48 +SET 112323.20 70144.80 +SET 1123293.96 717353.28 +SET 11233.32 8331.68 +SET 1123327.70 639537.71 +SET 112339.84 36843.52 +SET 1123446.54 717450.72 +SET 1123533.40 639654.82 +SET 1123559.58 663152.49 +SET 112360.40 67675.81 +SET 1123713.64 663243.42 +SET 1123739.10 639771.93 +SET 1123742.56 701766.84 +SET 1123914.96 971534.16 +SET 1123997.84 701926.26 +SET 1124030.14 845272.28 +SET 1124175.82 663516.21 +SET 1124253.12 702085.68 +SET 1124329.88 663607.14 +SET 1124356.20 640123.26 +SET 1124362.02 718035.36 +SET 112451.46 71813.28 +SET 11246.38 6637.89 +SET 1124758.74 972263.54 +SET 1124763.68 702404.52 +SET 1124819.76 718327.68 +SET 1124946.12 663970.86 +SET 1124972.34 718425.12 +SET 11251.98 8345.52 +SET 1125100.18 664061.79 +SET 1125274.24 702723.36 +SET 1125277.50 718620.00 +SET 1125366.68 846277.36 +SET 1125384.70 640708.81 +SET 1125408.30 664243.65 +SET 1125430.08 718717.44 +SET 11255.84 3691.52 +SET 1125529.52 702882.78 +SET 112558.40 36915.20 +SET 1125716.42 664425.51 +SET 1125735.24 718912.32 +SET 1125796.10 640943.03 +SET 112598.85 75437.67 +SET 1126024.41 973357.61 +SET 112604.04 71910.72 +SET 1126040.08 703201.62 +SET 11261.31 8352.44 +SET 1126178.60 664698.30 +SET 1126192.98 719204.64 +SET 1126332.66 664789.23 +SET 1126345.56 719302.08 +SET 1126446.30 973722.30 +SET 112646.30 75469.46 +SET 112659.33 90818.08 +SET 1126640.78 664971.09 +SET 1126703.22 847282.44 +SET 1126794.84 665062.02 +SET 1126868.19 974086.99 +SET 1127030.30 641645.69 +SET 1127061.20 703839.30 +SET 1127102.96 665243.88 +SET 1127290.08 974451.68 +SET 1127371.49 847784.98 +SET 1127411.08 665425.74 +SET 1127441.70 641879.91 +SET 1127538.80 679128.07 +SET 1127565.14 665516.67 +SET 1127718.78 720179.04 +SET 1127719.20 665607.60 +SET 1127853.10 642114.13 +SET 1127895.72 909230.72 +SET 1128.93 837.32 +SET 1128023.94 720373.92 +SET 1128039.76 848287.52 +SET 1128133.86 975181.06 +SET 1128264.50 642348.35 +SET 1128335.44 665971.32 +SET 1128337.60 704636.40 +SET 1128470.20 642465.46 +SET 1128481.68 720666.24 +SET 1128634.26 720763.68 +SET 1128675.90 642582.57 +SET 112869.13 78261.27 +SET 1128797.62 666244.11 +SET 1128850.40 679918.06 +SET 1128881.60 642699.68 +SET 11289.30 8373.20 +SET 1128951.68 666335.04 +SET 1129087.30 642816.79 +SET 1129092.00 721056.00 +SET 1129358.72 705274.08 +SET 112937.63 84929.26 +SET 1129413.86 666607.83 +SET 1129549.74 721348.32 +SET 1129567.92 666698.76 +SET 1129614.00 705433.50 +SET 1129702.32 721445.76 +SET 1129721.98 666789.69 +SET 1129869.28 705592.92 +SET 1129876.04 666880.62 +SET 112995.52 37058.56 +SET 1130007.48 721640.64 +SET 1130030.10 666971.55 +SET 1130044.57 849795.14 +SET 1130115.80 643402.34 +SET 1130124.56 705752.34 +SET 1130160.06 721738.08 +SET 113025.90 75723.78 +SET 113032.59 78374.61 +SET 1130527.20 643636.56 +SET 1130599.20 680971.38 +SET 1130617.80 722030.40 +SET 1130635.12 706071.18 +SET 1130665.20 977369.20 +SET 1130938.60 643870.78 +SET 1131108.52 667608.06 +SET 1131151.77 911855.52 +SET 113120.80 75787.36 +SET 11313.50 6441.05 +SET 113135.00 64410.50 +SET 1131350.00 644105.00 +SET 1131381.11 850800.22 +SET 1131400.96 706549.44 +SET 1131416.64 667789.92 +SET 113168.25 75819.15 +SET 1131761.40 644339.22 +SET 1131910.80 681761.37 +SET 1131967.10 644456.33 +SET 113214.36 72300.48 +SET 1132166.80 707027.70 +SET 1132172.80 644573.44 +SET 1132186.94 668244.57 +SET 1132296.18 723102.24 +SET 113234.10 66833.55 +SET 113234.80 68202.47 +SET 1132352.76 978827.96 +SET 1132422.08 707187.12 +SET 1132584.20 644807.66 +SET 113263.15 75882.73 +SET 1132717.65 851805.30 +SET 1132785.20 682288.03 +SET 1132789.90 644924.77 +SET 1132932.64 707505.96 +SET 113310.54 91343.04 +SET 113323.36 37166.08 +SET 1133385.92 852307.84 +SET 1133419.42 668972.01 +SET 1133443.20 707824.80 +SET 1133573.48 669062.94 +SET 1133612.70 645393.21 +SET 1133669.40 723979.20 +SET 1133698.48 707984.22 +SET 1133727.54 669153.87 +SET 1133756.61 913955.36 +SET 1133818.40 645510.32 +SET 113388.16 66924.48 +SET 1133881.60 669244.80 +SET 1133974.56 724174.08 +SET 1134054.19 852810.38 +SET 1134189.72 669426.66 +SET 1134229.80 645744.54 +SET 113432.64 37201.92 +SET 1134435.50 645861.65 +SET 1134722.46 853312.92 +SET 1134737.46 724661.28 +SET 1134805.96 669790.38 +SET 1134846.90 646095.87 +SET 1134890.04 724758.72 +SET 1135052.60 646212.98 +SET 1135059.03 915005.28 +SET 1135114.08 669972.24 +SET 113519.52 72495.36 +SET 113522.97 78714.63 +SET 1135230.16 708940.74 +SET 1135268.14 670063.17 +SET 1135347.78 725051.04 +SET 1135390.73 853815.46 +SET 113541.92 37237.76 +SET 1135422.20 670154.10 +SET 113547.85 76073.47 +SET 1135845.60 684131.34 +SET 113595.30 76105.26 +SET 1135958.10 725440.80 +SET 1135996.00 709419.00 +SET 1136038.44 670517.82 +SET 1136059.00 854318.00 +SET 1136081.10 646798.53 +SET 1136149.77 982110.17 +SET 1136263.26 725635.68 +SET 1136286.80 646915.64 +SET 1136506.56 709737.84 +SET 1136654.68 670881.54 +SET 11367.20 6846.58 +SET 113672.00 68465.80 +SET 1136808.74 670972.47 +SET 1137017.12 710056.68 +SET 1137157.20 684921.33 +SET 113752.10 64761.83 +SET 1137579.04 671427.12 +SET 1137594.40 685184.66 +SET 1137726.70 647735.41 +SET 1137733.10 671518.05 +SET 1137789.06 726610.08 +SET 1137887.16 671608.98 +SET 1137932.40 647852.52 +SET 1138031.60 685447.99 +SET 1138038.24 710694.36 +SET 1138063.81 855825.62 +SET 1138094.22 726804.96 +SET 1138138.10 647969.63 +SET 1138195.28 671790.84 +SET 11382.60 8442.40 +SET 1138293.52 710853.78 +SET 1138343.80 648086.74 +SET 1138399.38 726999.84 +SET 1138468.80 685711.32 +SET 113849.89 78941.31 +SET 113854.88 71101.32 +SET 1138549.50 648203.85 +SET 1138657.46 672063.63 +SET 1138732.08 856328.16 +SET 1138906.00 685974.65 +SET 1138960.90 648438.07 +SET 1138966.29 918155.04 +SET 1139059.36 711332.04 +SET 11391.93 8449.32 +SET 1139119.64 672336.42 +SET 113927.45 76327.79 +SET 1139273.70 672427.35 +SET 113931.62 78997.98 +SET 1139314.64 711491.46 +SET 1139400.35 856830.70 +SET 1139569.92 711650.88 +SET 1139578.00 648789.40 +SET 1139617.50 918680.00 +SET 1139780.40 686501.31 +SET 113979.04 37381.12 +SET 1139825.20 711810.30 +SET 1139925.18 727974.24 +SET 1139946.78 985392.38 +SET 11400.44 6728.82 +SET 1140080.48 711969.72 +SET 1140195.10 649140.73 +SET 1140198.06 672972.93 +SET 1140217.60 686764.64 +SET 114022.35 76391.37 +SET 1140268.71 919204.96 +SET 1140352.12 673063.86 +SET 1140606.50 649374.95 +SET 114069.80 76423.16 +SET 1140814.30 673336.65 +SET 11410.59 8463.16 +SET 1141092.00 687291.30 +SET 1141101.60 712607.40 +SET 1141122.42 673518.51 +SET 114117.25 76454.95 +SET 1141212.45 986486.45 +SET 1141356.88 712766.82 +SET 1141405.16 858338.32 +SET 1141430.54 673700.37 +SET 1141738.66 673882.23 +SET 1141867.44 713085.66 +SET 1141892.72 673973.16 +SET 11419.92 8470.08 +SET 114197.60 37452.80 +SET 1142046.40 650194.72 +SET 1142061.30 729338.40 +SET 1142200.84 674155.02 +SET 1142252.10 650311.83 +SET 1142508.96 674336.88 +SET 114258.54 79224.66 +SET 114259.60 76550.32 +SET 1142633.28 713563.92 +SET 1142741.70 859343.40 +SET 1142817.08 674518.74 +SET 114282.42 72982.56 +SET 1142869.20 650663.16 +SET 1142873.55 921304.80 +SET 1142976.78 729923.04 +SET 1143129.36 730020.48 +SET 1143143.84 713882.76 +SET 1143278.00 688607.95 +SET 1143281.94 730117.92 +SET 114332.19 98830.99 +SET 1143399.12 714042.18 +SET 1143434.52 730215.36 +SET 1143692.00 651131.60 +SET 1143741.44 675064.32 +SET 1143897.70 651248.71 +SET 1144152.40 689134.61 +SET 1144175.97 922354.72 +SET 1144197.42 730702.56 +SET 1144350.00 730800.00 +SET 114449.40 76677.48 +SET 1144511.74 675518.97 +SET 1144514.80 651600.04 +SET 1144587.57 989403.97 +SET 1144655.16 730994.88 +SET 114466.58 67560.99 +SET 11447.91 8490.84 +SET 1144720.50 651717.15 +SET 1144746.51 860851.02 +SET 1144807.74 731092.32 +SET 1144827.18 922879.68 +SET 1144930.80 714998.70 +SET 114496.85 76709.27 +SET 1144960.32 731189.76 +SET 1145009.46 989768.66 +SET 1145127.98 675882.69 +SET 1145414.78 861353.56 +SET 1145431.35 990133.35 +SET 1145478.39 923404.64 +SET 1145570.64 731579.52 +SET 11457.24 8497.76 +SET 114585.46 79451.34 +SET 1145853.24 990498.04 +SET 114587.58 73177.44 +SET 1145875.80 731774.40 +SET 1145901.20 690187.93 +SET 114591.75 76772.85 +SET 1145954.70 652419.81 +SET 1146028.38 731871.84 +SET 114612.96 92392.96 +SET 1146129.60 923929.60 +SET 114620.64 67651.92 +SET 114620.72 71579.58 +SET 1146366.10 652654.03 +SET 114639.20 76804.64 +SET 1146514.52 676701.06 +SET 1146638.70 732261.60 +SET 1146775.60 690714.59 +SET 1146777.50 652888.25 +SET 1146976.70 676973.85 +SET 1147.59 851.16 +SET 1147130.76 677064.78 +SET 1147188.90 653122.47 +SET 1147249.02 732651.36 +SET 1147394.60 653239.58 +SET 11474.40 3763.20 +SET 114754.08 99195.68 +SET 1147554.18 732846.24 +SET 1147600.30 653356.69 +SET 114774.70 67742.85 +SET 114780.60 65347.38 +SET 1147962.69 992321.49 +SET 1148087.20 691504.58 +SET 1148087.86 863363.72 +SET 11482.90 7693.18 +SET 1148249.44 717071.16 +SET 114829.00 76931.80 +SET 1148423.10 653825.13 +SET 1148504.72 717230.58 +SET 1148628.80 653942.24 +SET 1148671.36 677974.08 +SET 11487.60 7173.90 +SET 1148806.47 993050.87 +SET 114892.74 73372.32 +SET 1148961.60 692031.24 +SET 1149015.28 717549.42 +SET 1149385.14 734015.52 +SET 1149398.80 692294.57 +SET 1149525.84 717868.26 +SET 1149537.72 734112.96 +SET 1149595.72 678519.66 +SET 1149650.25 993780.25 +SET 1149781.12 718027.68 +SET 114983.60 69255.79 +SET 1149842.88 734307.84 +SET 114986.30 65464.49 +SET 1149863.00 654644.90 +SET 1150036.40 718187.10 +SET 1150036.86 927079.36 +SET 1150057.90 678792.45 +SET 1150068.70 654762.01 +SET 1150092.67 864871.34 +SET 115018.80 77058.96 +SET 1150273.20 692821.23 +SET 1150494.03 994509.63 +SET 1150605.78 734795.04 +SET 115066.25 77090.75 +SET 1150674.14 679156.17 +SET 1150710.40 693084.56 +SET 115075.84 79791.36 +SET 1150760.94 865373.88 +SET 1150802.24 718665.36 +SET 115082.82 67924.71 +SET 1150828.20 679247.10 +SET 1150891.50 655230.45 +SET 1150982.26 679338.03 +SET 1151097.20 655347.56 +SET 115113.70 77122.54 +SET 1151147.60 693347.89 +SET 1151216.10 735184.80 +SET 1151290.38 679519.89 +SET 1151312.80 718984.20 +SET 1151337.81 995239.01 +SET 1151339.28 928129.28 +SET 1151368.68 735282.24 +SET 1151444.44 679610.82 +SET 1151673.84 735477.12 +SET 1151714.30 655698.89 +SET 115175.97 99560.37 +SET 1151752.56 679792.68 +SET 1151823.36 719303.04 +SET 1151826.42 735574.56 +SET 11519.20 6558.16 +SET 1151990.49 928654.24 +SET 1152022.00 693874.55 +SET 1152060.68 679974.54 +SET 115208.60 77186.12 +SET 1152436.74 735964.32 +SET 1152459.20 694137.88 +SET 1152522.86 680247.33 +SET 1152537.10 656167.33 +SET 1152589.20 719781.30 +SET 1152603.48 996333.08 +SET 1152676.92 680338.26 +SET 1152741.90 736159.20 +SET 11530.35 7724.97 +SET 1153025.37 996697.77 +SET 1153047.06 736354.08 +SET 11531.88 8553.12 +SET 1153447.26 997062.46 +SET 115350.48 73664.64 +SET 1153504.80 736646.40 +SET 1153601.28 680883.84 +SET 1153770.80 694927.87 +SET 1153771.30 656869.99 +SET 1153869.15 997427.15 +SET 115390.94 68106.57 +SET 1153962.54 736938.72 +SET 1153977.00 656987.10 +SET 115402.76 80018.04 +SET 1154208.00 695191.20 +SET 1154217.52 681247.56 +SET 1154267.70 737133.60 +SET 1154371.58 681338.49 +SET 1154376.16 720897.24 +SET 1154388.40 657221.32 +SET 1154572.86 737328.48 +SET 1154594.10 657338.43 +SET 1154631.44 721056.66 +SET 1154645.20 695454.53 +SET 1154679.70 681520.35 +SET 1154712.93 998156.53 +SET 1154833.76 681611.28 +SET 115484.49 80074.71 +SET 1155005.50 657572.65 +SET 1155030.60 737620.80 +SET 1155134.82 998521.22 +SET 1155183.18 737718.24 +SET 1155211.20 657689.76 +SET 1155295.94 681884.07 +SET 11554.50 6819.75 +SET 1155416.90 657806.87 +SET 1155519.60 695981.19 +SET 1155556.71 998885.91 +SET 1155604.06 682065.93 +SET 1155897.75 931804.00 +SET 1155907.84 721853.76 +SET 1155946.08 738205.44 +SET 115597.86 99925.06 +SET 1155978.60 999250.60 +SET 1156.92 858.08 +SET 1156098.66 738302.88 +SET 1156107.10 869394.20 +SET 1156220.30 682429.65 +SET 115635.65 77472.23 +SET 1156394.00 696507.85 +SET 1156400.49 999615.29 +SET 1156528.42 682611.51 +SET 1156673.68 722332.02 +SET 1156775.37 869896.74 +SET 1156831.20 696771.18 +SET 1156861.56 738790.08 +SET 1157166.72 738984.96 +SET 1157184.24 722650.86 +SET 1157268.40 697034.51 +SET 1157319.30 739082.40 +SET 1157443.64 870399.28 +SET 1157452.78 683157.09 +SET 1157679.60 659095.08 +SET 11577.80 7756.76 +SET 1157777.04 739374.72 +SET 115778.00 77567.60 +SET 11578.53 8587.72 +SET 1157851.38 933378.88 +SET 1157885.30 659212.19 +SET 1157929.62 739472.16 +SET 1158069.02 683520.81 +SET 1158088.05 1001074.05 +SET 1158142.80 697561.17 +SET 1158205.36 723288.54 +SET 1158223.08 683611.74 +SET 11583.68 3799.04 +SET 1158502.59 933903.84 +SET 1158509.94 1001438.74 +SET 1158531.20 683793.60 +SET 1158692.52 739959.36 +SET 11587.86 8594.64 +SET 115893.14 80358.06 +SET 115897.12 72376.68 +SET 1158971.20 723766.80 +SET 1158997.68 740154.24 +SET 1159017.20 698087.83 +SET 1159147.44 684157.32 +SET 115915.38 93442.88 +SET 1159153.80 934428.80 +SET 1159301.50 684248.25 +SET 1159325.20 660031.96 +SET 1159454.40 698351.16 +SET 1159481.76 724085.64 +SET 115960.80 74054.40 +SET 1159609.62 684430.11 +SET 115967.80 77694.76 +SET 11597.19 8601.56 +SET 1159736.60 660266.18 +SET 1159760.58 740641.44 +SET 1159805.01 934953.76 +SET 1159891.60 698614.49 +SET 1159913.16 740738.88 +SET 1159917.74 684611.97 +SET 1159942.30 660383.29 +SET 116019.75 100289.75 +SET 1160197.50 1002897.50 +SET 1160218.32 740933.76 +SET 1160353.70 660617.51 +SET 1160456.22 935478.72 +SET 1160533.98 684975.69 +SET 116056.60 80471.40 +SET 1160619.39 1003262.19 +SET 116062.70 77758.34 +SET 1160766.00 699141.15 +SET 1160828.64 741323.52 +SET 1160842.10 685157.55 +SET 1160981.22 741420.96 +SET 1161304.28 685430.34 +SET 116138.33 80528.07 +SET 1161438.96 741713.28 +SET 1161458.34 685521.27 +SET 116152.40 72536.10 +SET 1161591.54 741810.72 +SET 1161779.28 725520.42 +SET 1161920.52 685794.06 +SET 1161999.30 661554.39 +SET 1162049.28 742103.04 +SET 1162074.58 685884.99 +SET 1162077.60 699931.14 +SET 116220.06 80584.74 +SET 1162289.84 725839.26 +SET 1162382.70 686066.85 +SET 11625.18 8622.32 +SET 11625.25 7788.55 +SET 1162514.80 700194.47 +SET 116252.50 77885.50 +SET 1162616.40 661905.72 +SET 1162690.82 686248.71 +SET 1162728.84 1005085.64 +SET 116273.92 38133.76 +SET 116278.98 87441.96 +SET 1162789.80 874419.60 +SET 1162800.40 726158.10 +SET 1162844.88 686339.64 +SET 1162952.00 700457.80 +SET 1162964.76 742687.68 +SET 1163117.34 742785.12 +SET 1163153.00 686521.50 +SET 1163307.06 686612.43 +SET 1163389.20 700721.13 +SET 1163458.07 874922.14 +SET 1163461.12 686703.36 +SET 116347.40 77949.08 +SET 1163572.62 1005815.02 +SET 1163575.08 743077.44 +SET 1163615.18 686794.29 +SET 1163644.90 662491.27 +SET 1163769.24 686885.22 +SET 1163821.52 726795.78 +SET 1163826.40 700984.46 +SET 116383.52 80698.08 +SET 116407.68 72695.52 +SET 1164077.36 687067.08 +SET 1164126.34 875424.68 +SET 116418.54 74346.72 +SET 1164231.42 687158.01 +SET 11643.84 8636.16 +SET 1164332.08 727114.62 +SET 1164416.40 1006544.40 +SET 1164587.36 727274.04 +SET 1164673.40 663076.82 +SET 116469.36 68743.08 +SET 1164700.80 701511.12 +SET 1164795.72 743856.96 +SET 1164838.29 1006909.09 +SET 1164842.64 727433.46 +SET 1165001.72 687612.66 +SET 1165084.80 663311.04 +SET 1165100.88 744051.84 +SET 1165138.00 701774.45 +SET 1165260.18 1007273.78 +SET 1165462.88 876429.76 +SET 1165463.90 687885.45 +SET 1165496.20 663545.26 +SET 116566.59 93967.84 +SET 1165682.07 1007638.47 +SET 1165863.76 728071.14 +SET 1165907.60 663779.48 +SET 1166113.30 663896.59 +SET 1166131.15 876932.30 +SET 1166234.20 688340.10 +SET 1166317.11 940203.36 +SET 1166388.26 688431.03 +SET 1166524.70 664130.81 +SET 1166629.60 728549.40 +SET 1166799.42 877434.84 +SET 116710.44 80924.76 +SET 116711.04 38277.12 +SET 1167140.16 728868.24 +SET 1167141.80 664482.14 +SET 11672.70 7820.34 +SET 1167237.00 745416.00 +SET 116727.00 78203.40 +SET 1167620.74 689158.47 +SET 1167694.74 745708.32 +SET 116774.45 78235.19 +SET 1167761.20 703354.43 +SET 116777.48 68924.94 +SET 1167791.52 1009461.92 +SET 1167847.32 745805.76 +SET 1167906.00 729346.50 +SET 116792.17 80981.43 +SET 1168152.48 746000.64 +SET 1168170.30 665067.69 +SET 1168305.06 746098.08 +SET 1168545.10 689704.05 +SET 1168610.22 746292.96 +SET 116863.53 101019.13 +SET 1168635.60 703881.09 +SET 116869.35 78298.77 +SET 11687.39 8103.81 +SET 116873.90 81038.10 +SET 1168993.10 665536.13 +SET 1169007.28 689976.84 +SET 1169057.19 1010555.99 +SET 116918.24 73014.36 +SET 1169198.80 665653.24 +SET 11692.96 3834.88 +SET 1169220.54 746682.72 +SET 116931.54 69015.87 +SET 1169437.68 730303.02 +SET 1169479.08 1010920.68 +SET 116955.63 81094.77 +SET 1169573.16 942828.16 +SET 1169815.90 666004.57 +SET 1169830.86 747072.48 +SET 1169948.24 730621.86 +SET 1170085.70 690613.35 +SET 1170136.02 747267.36 +SET 1170140.77 879947.54 +SET 1170227.30 666238.79 +SET 1170288.60 747364.80 +SET 117038.88 38384.64 +SET 1170384.40 704934.41 +SET 117043.30 66635.59 +SET 1170593.76 747559.68 +SET 1170714.08 731100.12 +SET 11708.56 6910.68 +SET 1170821.60 705197.74 +SET 1170844.40 666590.12 +SET 1170875.58 943878.08 +SET 1170969.36 731259.54 +SET 1171010.06 691158.93 +SET 1171050.10 666707.23 +SET 117106.60 78457.72 +SET 1171166.64 1012379.44 +SET 117119.09 81208.11 +SET 1171356.66 748046.88 +SET 1171472.24 691431.72 +SET 1171479.92 731578.38 +SET 117148.16 38420.48 +SET 1171588.53 1012744.13 +SET 1171667.20 667058.56 +SET 1171735.20 731737.80 +SET 11718.48 8691.52 +SET 1171990.48 731897.22 +SET 117200.82 81264.78 +SET 117201.50 78521.30 +SET 1172078.60 667292.78 +SET 117249.00 66752.70 +SET 1172490.00 667527.00 +SET 1172570.40 706251.06 +SET 1172695.70 667644.11 +SET 1172704.72 692159.16 +SET 1172729.88 748923.84 +SET 1172813.85 881957.70 +SET 1172829.21 945452.96 +SET 1172854.20 1013838.20 +SET 117296.40 78584.88 +SET 1173166.90 692431.95 +SET 1173518.50 668112.55 +SET 1173522.16 732853.74 +SET 117364.28 81378.12 +SET 1173697.98 1014567.58 +SET 11737.14 8705.36 +SET 1173724.20 668229.66 +SET 1173777.44 733013.16 +SET 1173797.94 749605.92 +SET 117391.30 78648.46 +SET 117393.72 69288.66 +SET 1173937.20 692886.60 +SET 1174103.10 749800.80 +SET 1174245.32 693068.46 +SET 117428.80 73333.20 +SET 117438.75 78680.25 +SET 1174547.00 668698.10 +SET 1174707.50 693341.25 +SET 1174713.42 750190.56 +SET 1174752.70 668815.21 +SET 1174756.40 707567.71 +SET 117476.00 38528.00 +SET 1174798.56 733650.84 +SET 11748.66 7502.88 +SET 1174818.66 883465.32 +SET 117486.60 75028.80 +SET 1174861.56 693432.18 +SET 1174866.00 750288.00 +SET 1174958.40 668932.32 +SET 1174963.65 1015661.65 +SET 1175169.68 693614.04 +SET 1175171.16 750482.88 +SET 1175309.12 733969.68 +SET 1175323.74 693704.97 +SET 1175323.74 750580.32 +SET 117533.65 78743.83 +SET 1175434.05 947552.80 +SET 117547.78 69379.59 +SET 1175476.32 750677.76 +SET 1175575.50 669283.65 +SET 1175631.86 693886.83 +SET 1175781.20 669400.76 +SET 1175785.92 693977.76 +SET 1175819.68 734288.52 +SET 117585.28 38563.84 +SET 117606.80 70835.77 +SET 1176086.64 751067.52 +SET 1176094.04 694159.62 +SET 1176248.10 694250.55 +SET 1176556.22 694432.41 +SET 1176585.52 734766.78 +SET 1176651.21 1017120.41 +SET 1176736.47 948602.72 +SET 1176840.80 734926.20 +SET 1176849.54 751554.72 +SET 1176864.34 694614.27 +SET 11769.12 8160.48 +SET 117694.56 38599.68 +SET 117701.84 69470.52 +SET 1177073.10 1017485.10 +SET 1177096.08 735085.62 +SET 1177154.70 751749.60 +SET 1177172.46 694796.13 +SET 1177221.10 670220.53 +SET 117723.45 78870.99 +SET 1177307.28 751847.04 +SET 1177379.60 709147.69 +SET 1177480.58 694977.99 +SET 1177494.99 1017849.79 +SET 1177606.64 735404.46 +SET 1177612.44 752041.92 +SET 1177816.80 709411.02 +SET 1177838.20 670571.86 +SET 117791.76 75223.68 +SET 1177917.60 752236.80 +SET 1178038.89 949652.64 +SET 1178222.76 752431.68 +SET 1178249.60 670806.08 +SET 11783.79 8739.96 +SET 1178404.94 695523.57 +SET 117854.66 81718.14 +SET 117855.90 69561.45 +SET 1178661.00 671040.30 +SET 1178760.66 1018943.86 +SET 1179021.18 695887.29 +SET 117913.12 38671.36 +SET 1179138.32 736360.98 +SET 1179175.24 695978.22 +SET 1179278.10 671391.63 +SET 1179329.30 696069.15 +SET 117939.36 73652.04 +SET 1179496.55 886983.10 +SET 117960.70 79029.94 +SET 1179648.88 736679.82 +SET 1179689.50 671625.85 +SET 1179748.56 753406.08 +SET 1179904.16 736839.24 +SET 1179992.52 951227.52 +SET 1180002.80 710727.67 +SET 118009.96 69652.38 +SET 1180100.90 671860.07 +SET 1180159.44 736998.66 +SET 118018.12 81831.48 +SET 11802.24 3870.72 +SET 1180253.66 696614.73 +SET 1180358.88 753795.84 +SET 1180414.72 737158.08 +SET 1180511.46 753893.28 +SET 1180512.30 672094.29 +SET 118055.60 79093.52 +SET 1180643.73 951752.48 +SET 1180670.00 737317.50 +SET 118071.80 67221.14 +SET 1180715.84 696887.52 +SET 1180869.90 696978.45 +SET 1180923.70 672328.51 +SET 118129.20 102113.20 +SET 118131.68 38743.04 +SET 1181435.84 737795.76 +SET 1181640.20 697433.10 +SET 1181691.12 737955.18 +SET 1181884.68 754770.24 +SET 1181946.15 952802.40 +SET 1181952.20 672914.06 +SET 118197.95 79188.89 +SET 11821.11 8767.64 +SET 1182102.38 697705.89 +SET 1182169.63 888993.26 +SET 1182189.84 754965.12 +SET 1182201.68 738274.02 +SET 1182256.44 697796.82 +SET 1182363.60 673148.28 +SET 1182410.50 697887.75 +SET 118245.40 79220.68 +SET 118249.50 75516.00 +SET 1182557.67 1022226.07 +SET 1182597.36 953327.36 +SET 1182626.00 712307.65 +SET 1182718.62 698069.61 +SET 118277.50 67338.25 +SET 1182775.00 673382.50 +SET 1182800.16 755354.88 +SET 1182837.90 889495.80 +SET 1182872.68 698160.54 +SET 1182952.74 755452.32 +SET 1182979.56 1022590.76 +SET 11830.44 8774.56 +SET 1183026.74 698251.47 +SET 1183222.80 738911.70 +SET 1183248.57 953852.32 +SET 1183257.90 755647.20 +SET 1183334.86 698433.33 +SET 1183392.10 673733.83 +SET 1183401.45 1022955.45 +SET 118350.24 38814.72 +SET 1183500.40 712834.31 +SET 1183597.80 673850.94 +SET 1183733.36 739230.54 +SET 1183797.04 698706.12 +SET 1183823.34 1023320.14 +SET 1184174.44 890500.88 +SET 1184214.90 674202.27 +SET 1184245.23 1023684.83 +SET 1184325.96 756329.28 +SET 1184420.60 674319.38 +SET 118449.92 73970.88 +SET 1184550.99 954902.24 +SET 1184567.34 699160.77 +SET 1184631.12 756524.16 +SET 118472.14 69925.17 +SET 1184721.40 699251.70 +SET 1184783.70 756621.60 +SET 1184832.00 674553.60 +SET 1184842.71 891003.42 +SET 1184936.28 756719.04 +SET 11850.85 8217.15 +SET 1185009.76 740027.64 +SET 1185029.52 699433.56 +SET 1185243.40 674787.82 +SET 118530.10 79411.42 +SET 1185510.90 1024778.90 +SET 1185510.98 891505.96 +SET 1185645.76 699797.28 +SET 1185654.80 675022.04 +SET 1185799.82 699888.21 +SET 11858.43 8795.32 +SET 1185860.50 675139.15 +SET 1185953.88 699979.14 +SET 1186004.34 757401.12 +SET 1186123.60 714414.29 +SET 1186156.92 757498.56 +SET 1186179.25 892008.50 +SET 11862.50 7947.50 +SET 1186262.00 700161.00 +SET 1186416.06 700251.93 +SET 1186504.62 956477.12 +SET 1186541.44 740984.16 +SET 1186683.30 675607.59 +SET 118672.45 79506.79 +SET 1186767.24 757888.32 +SET 1186776.57 1025872.97 +SET 118688.90 67572.47 +SET 1187072.40 758083.20 +SET 1187198.46 1026237.66 +SET 1187224.98 758180.64 +SET 1187377.56 758278.08 +SET 118753.69 82341.51 +SET 1187620.35 1026602.35 +SET 1187872.40 715467.61 +SET 1187917.50 676310.25 +SET 1187987.88 758667.84 +SET 1188073.12 741940.68 +SET 1188110.72 701252.16 +SET 118814.80 79602.16 +SET 1188184.06 893516.12 +SET 1188264.78 701343.09 +SET 1188418.84 701434.02 +SET 1188458.25 958052.00 +SET 1188534.60 676661.58 +SET 118862.25 79633.95 +SET 1188726.96 701615.88 +SET 1188740.30 676778.69 +SET 1188881.02 701706.81 +SET 1188886.02 1027696.42 +SET 1188903.36 759252.48 +SET 1189151.70 677012.91 +SET 1189357.40 677130.02 +SET 1189497.26 702070.53 +SET 1189563.10 677247.13 +SET 118957.15 79697.53 +SET 118960.48 74289.72 +SET 1189651.32 702161.46 +SET 118972.98 102842.58 +SET 1189768.80 677364.24 +SET 1189805.38 702252.39 +SET 119005.92 39029.76 +SET 11901.24 7600.32 +SET 1190113.50 702434.25 +SET 1190151.69 1028790.49 +SET 1190180.20 677598.46 +SET 1190188.87 895023.74 +SET 1190276.58 760129.44 +SET 1190370.64 743375.46 +SET 1190385.90 677715.57 +SET 1190421.62 702616.11 +SET 11905.08 8829.92 +SET 1190581.74 760324.32 +SET 1190591.60 677832.68 +SET 1190797.30 677949.79 +SET 1190857.14 895526.28 +SET 119088.38 70288.89 +SET 1190886.90 760519.20 +SET 11909.95 7979.29 +SET 1190932.80 717310.92 +SET 119099.50 79792.90 +SET 1191037.86 702979.83 +SET 1191136.48 743853.72 +SET 119115.20 39065.60 +SET 1191191.92 703070.76 +SET 1191192.06 760714.08 +SET 1191345.98 703161.69 +SET 1191391.76 744013.14 +SET 1191417.36 1029884.56 +SET 119146.95 79824.69 +SET 1191500.04 703252.62 +SET 119162.34 82624.86 +SET 1191620.10 678418.23 +SET 1191654.10 703343.55 +SET 1191714.30 960676.80 +SET 1191808.16 703434.48 +SET 1191839.25 1030249.25 +SET 1191902.32 744331.98 +SET 119194.40 79856.48 +SET 1192107.54 761298.72 +SET 1192116.28 703616.34 +SET 119215.76 74449.14 +SET 1192237.20 678769.56 +SET 1192261.14 1030613.94 +SET 1192270.34 703707.27 +SET 119241.85 79888.27 +SET 1192442.90 678886.67 +SET 1192668.16 744810.24 +SET 1192681.60 718364.24 +SET 1192861.95 897033.90 +SET 1192886.58 704070.99 +SET 1192923.44 744969.66 +SET 1193023.02 761883.36 +SET 1193040.64 704161.92 +SET 119306.00 67923.80 +SET 1193175.60 761980.80 +SET 1193178.72 745129.08 +SET 119325.80 82738.20 +SET 1193265.70 679355.11 +SET 11933.07 8850.68 +SET 1193480.76 762175.68 +SET 1193530.22 897536.44 +SET 1193689.28 745447.92 +SET 119384.20 79983.64 +SET 1193938.50 762468.00 +SET 119396.50 70470.75 +SET 1193993.20 719154.23 +SET 119407.53 82794.87 +SET 1194091.08 762565.44 +SET 11942.40 8857.60 +SET 1194396.24 762760.32 +SET 1194427.18 704980.29 +SET 119479.10 80047.22 +SET 1194792.48 1032802.08 +SET 1194867.60 719680.89 +SET 119489.26 82851.54 +SET 1194911.30 680291.99 +SET 11951.73 8864.52 +SET 1195197.48 705434.94 +SET 1195304.80 719944.22 +SET 1195311.72 763344.96 +SET 1195351.54 705525.87 +SET 1195535.03 899044.06 +SET 1195636.26 1033531.46 +SET 11957.40 8011.08 +SET 119570.99 82908.21 +SET 1195731.52 746723.28 +SET 1195734.10 680760.43 +SET 1195769.46 763637.28 +SET 1195813.72 705798.66 +SET 1195922.04 763734.72 +SET 1195967.78 705889.59 +SET 1196074.62 763832.16 +SET 1196179.20 720470.88 +SET 1196272.77 964351.52 +SET 1196275.90 706071.45 +SET 1196379.78 764027.04 +SET 1196480.04 1034260.84 +SET 1196497.36 747201.54 +SET 119652.72 82964.88 +SET 1196532.36 764124.48 +SET 1196556.90 681228.87 +SET 1196616.40 720734.21 +SET 119668.90 80174.38 +SET 1196738.08 706344.24 +SET 1196752.64 747360.96 +SET 1196837.52 764319.36 +SET 1196892.14 706435.17 +SET 1196923.98 964876.48 +SET 1196990.10 764416.80 +SET 11970.39 8878.36 +SET 1197007.92 747520.38 +SET 119704.62 70652.61 +SET 119716.35 80206.17 +SET 1197323.82 1034990.22 +SET 1197447.84 764709.12 +SET 1197539.84 900551.68 +SET 1197575.19 965401.44 +SET 1197600.42 764806.56 +SET 1197662.44 706889.82 +SET 1197745.71 1035354.91 +SET 119775.30 76490.40 +SET 1197753.00 764904.00 +SET 1197773.76 747998.64 +SET 1197791.10 681931.53 +SET 11979.72 8885.28 +SET 119792.80 72152.42 +SET 1198124.62 707162.61 +SET 119816.18 83078.22 +SET 1198202.50 682165.75 +SET 1198208.11 901054.22 +SET 1198210.74 765196.32 +SET 1198278.68 707253.54 +SET 1198539.60 748476.90 +SET 119858.70 80301.54 +SET 1198586.80 707435.40 +SET 1198794.88 748636.32 +SET 1198802.40 722050.86 +SET 1198819.60 682517.08 +SET 1198973.64 765683.52 +SET 1199050.16 748795.74 +SET 1199203.04 707799.12 +SET 119927.88 76587.84 +SET 1199278.80 765878.40 +SET 1199433.27 1036813.67 +SET 1199528.82 966976.32 +SET 119953.60 80365.12 +SET 1199544.65 902059.30 +SET 1199665.22 708071.91 +SET 119979.64 83191.56 +SET 11998.38 8899.12 +SET 1199816.00 749274.00 +SET 1199819.28 708162.84 +SET 1199889.12 766268.16 +SET 119989.44 39352.32 +SET 1199973.34 708253.77 +SET 1200041.70 766365.60 +SET 1200326.56 749592.84 +SET 1200435.52 708526.56 +SET 1200499.44 766657.92 +SET 1200551.20 723104.18 +SET 1200698.94 1037907.74 +SET 1200743.64 708708.42 +SET 1200804.60 766852.80 +SET 1200831.24 968026.24 +SET 1200837.12 749911.68 +SET 1200881.19 903064.38 +SET 1200988.40 723367.51 +SET 1201109.76 767047.68 +SET 1201205.82 708981.21 +SET 120128.80 68392.24 +SET 1201288.00 683922.40 +SET 1201414.92 767242.56 +SET 1201425.60 723630.84 +SET 120143.10 83304.90 +SET 1201493.70 684039.51 +SET 1201567.50 767340.00 +SET 1201602.96 750389.94 +SET 120166.80 70925.40 +SET 1201858.24 750549.36 +SET 1201862.80 723894.17 +SET 1201905.10 684273.73 +SET 1202.08 394.24 +SET 1202025.24 767632.32 +SET 1202217.73 904069.46 +SET 1202316.50 684507.95 +SET 120233.04 76782.72 +SET 1202368.80 750868.20 +SET 1202386.50 1039366.50 +SET 1202482.98 767924.64 +SET 1202522.20 684625.06 +SET 12026.37 8919.88 +SET 1202635.56 768022.08 +SET 1202727.90 684742.17 +SET 1202746.42 709890.51 +SET 12028.86 9045.72 +SET 120288.60 90457.20 +SET 1202900.48 709981.44 +SET 1203174.40 724684.16 +SET 120320.86 71016.33 +SET 120333.20 80619.44 +SET 120334.50 68509.35 +SET 1203362.66 710254.23 +SET 1203516.72 710345.16 +SET 1203550.70 685210.61 +SET 1203551.04 768606.72 +SET 1203645.20 751665.30 +SET 1203670.78 710436.09 +SET 1203756.40 685327.72 +SET 120380.65 80651.23 +SET 1203824.84 710527.02 +SET 1203856.20 768801.60 +SET 1204008.78 768899.04 +SET 1204074.06 1040825.26 +SET 1204087.29 970651.04 +SET 1204161.36 768996.48 +SET 120428.10 80683.02 +SET 1204287.02 710799.81 +SET 1204411.04 752143.56 +SET 1204486.00 725474.15 +SET 1204595.14 710981.67 +SET 1204619.10 769288.80 +SET 120470.02 83531.58 +SET 1204738.50 971176.00 +SET 120474.92 71107.26 +SET 120475.55 80714.81 +SET 1204771.68 769386.24 +SET 1204784.90 685913.27 +SET 1204903.26 711163.53 +SET 1204921.60 752462.40 +SET 1205076.84 769581.12 +SET 1205176.88 752621.82 +SET 1205196.30 686147.49 +SET 1205339.73 1041919.33 +SET 120535.84 39531.52 +SET 1205389.71 971700.96 +SET 12054.36 8940.64 +SET 1205519.50 711527.25 +SET 1205559.08 906582.16 +SET 1205687.44 752940.66 +SET 1205981.68 711800.04 +SET 120628.98 71198.19 +SET 1206289.80 711981.90 +SET 120633.48 83644.92 +SET 1206443.86 712072.83 +SET 120645.12 39567.36 +SET 1206453.28 753418.92 +SET 1206602.64 770555.52 +SET 1206636.20 686967.26 +SET 1206841.90 687084.37 +SET 1206895.62 907587.24 +SET 1206907.80 770750.40 +SET 120715.21 83701.59 +SET 1207212.96 770945.28 +SET 1207219.12 753897.18 +SET 12073.02 8954.48 +SET 1207459.00 687435.70 +SET 120747.44 75405.66 +SET 1207522.28 712709.34 +SET 120760.25 80905.55 +SET 1207670.70 771237.60 +SET 1207729.68 754216.02 +SET 1207823.28 771335.04 +SET 120796.94 83758.26 +SET 1207983.60 727580.79 +SET 1207984.46 712982.13 +SET 1208076.10 687787.03 +SET 1208138.52 713073.06 +SET 12082.35 8961.40 +SET 1208240.24 754534.86 +SET 1208292.96 1044472.16 +SET 1208446.64 713254.92 +SET 1208495.52 754694.28 +SET 120863.68 39639.04 +SET 1208645.76 974325.76 +SET 1208714.85 1044836.85 +SET 1208750.80 754853.70 +SET 1208754.76 713436.78 +SET 120878.67 83814.93 +SET 1208898.90 688255.47 +SET 1209006.08 755013.12 +SET 12091.68 8968.32 +SET 1209136.74 1045201.54 +SET 1209196.50 772212.00 +SET 1209216.94 713709.57 +SET 1209261.36 755172.54 +SET 1209296.97 974850.72 +SET 120937.10 71380.05 +SET 120950.05 81032.71 +SET 1209501.66 772406.88 +SET 1209525.06 713891.43 +SET 12096.04 8387.16 +SET 1209654.24 772504.32 +SET 1209679.12 713982.36 +SET 120972.96 39674.88 +SET 1209721.70 688723.91 +SET 1209833.18 714073.29 +SET 1209959.40 772699.20 +SET 121.29 89.96 +SET 1210027.20 755650.80 +SET 1210236.97 910099.94 +SET 1210282.48 755810.22 +SET 1210295.36 714346.08 +SET 1210338.80 689075.24 +SET 1210417.14 772991.52 +SET 121042.13 83928.27 +SET 121044.95 81096.29 +SET 1210449.42 714437.01 +SET 1210569.72 773088.96 +SET 1210722.30 773186.40 +SET 1210750.20 689309.46 +SET 1210757.54 714618.87 +SET 1210824.30 1046660.30 +SET 1210874.88 773283.84 +SET 12110.34 8982.16 +SET 1211027.46 773381.28 +SET 121104.40 72942.41 +SET 1211048.32 756288.48 +SET 1211161.60 689543.68 +SET 1211246.19 1047024.99 +SET 1211303.60 756447.90 +SET 1211367.30 689660.79 +SET 121148.52 77367.36 +SET 1211558.88 756607.32 +SET 1211573.00 689777.90 +SET 1211573.51 911105.02 +SET 1211681.90 715164.45 +SET 1211814.16 756766.74 +SET 12119.67 8989.08 +SET 1211901.81 976950.56 +SET 121191.52 39746.56 +SET 1211918.40 729950.76 +SET 121205.59 84041.61 +SET 1212144.08 715437.24 +SET 1212190.10 690129.23 +SET 1212241.78 911607.56 +SET 1212248.10 774160.80 +SET 1212324.72 757085.58 +SET 121234.75 81223.45 +SET 1212355.60 730214.09 +SET 121245.22 71561.91 +SET 1212553.02 977475.52 +SET 121258.00 75724.50 +SET 1212601.50 690363.45 +SET 1212792.80 730477.42 +SET 1212807.20 690480.56 +SET 121282.20 81255.24 +SET 1212858.42 774550.56 +SET 121287.32 84098.28 +SET 12129.00 8996.00 +SET 1212933.75 1048483.75 +SET 12130.08 3978.24 +SET 121300.80 39782.40 +SET 121301.10 77464.80 +SET 1213011.00 774648.00 +SET 1213012.90 690597.67 +SET 1213204.23 978000.48 +SET 1213222.50 716073.75 +SET 1213316.16 774842.88 +SET 1213376.56 716164.68 +SET 1213530.62 716255.61 +SET 1213621.32 775037.76 +SET 1213630.00 690949.00 +SET 121369.05 84154.95 +SET 1213777.53 1049213.13 +SET 1213835.70 691066.11 +SET 121399.28 71652.84 +SET 1213992.80 716528.40 +SET 1214104.40 731267.41 +SET 1214111.68 758201.52 +SET 1214199.42 1049577.82 +SET 121424.55 81350.61 +SET 1214246.59 913115.18 +SET 1214366.96 758360.94 +SET 121450.78 84211.62 +SET 1214506.65 979050.40 +SET 1214536.80 775622.40 +SET 1214621.31 1049942.51 +SET 1214658.50 691534.55 +SET 12147.20 8138.24 +SET 1214917.16 717073.98 +SET 1214994.54 775914.72 +SET 1215043.20 1050307.20 +SET 1215132.80 758839.20 +SET 121519.45 81414.19 +SET 1215299.70 776109.60 +SET 1215379.34 717346.77 +SET 121541.60 73205.74 +SET 1215416.00 732057.40 +SET 1215452.28 776207.04 +SET 1215465.09 1050671.89 +SET 1215481.30 692002.99 +SET 121566.90 81445.98 +SET 1215841.52 717619.56 +SET 1215892.70 692237.21 +SET 1215995.58 717710.49 +SET 121606.26 77659.68 +SET 1216098.40 692354.32 +SET 1216215.18 776694.24 +SET 1216303.70 717892.35 +SET 1216460.28 980625.28 +SET 121661.80 81509.56 +SET 1216727.60 732847.39 +SET 1216730.76 1051765.96 +SET 1216765.88 718165.14 +SET 1216825.50 777084.00 +SET 1216919.67 915125.34 +SET 1217074.00 718347.00 +SET 121709.25 81541.35 +SET 1217152.65 1052130.65 +SET 1217164.80 733110.72 +SET 1217228.06 718437.93 +SET 1217332.60 693056.98 +SET 12175.65 9030.60 +SET 1217536.18 718619.79 +SET 121758.84 77757.12 +SET 1217844.30 718801.65 +SET 1217949.70 693408.31 +SET 1217996.43 1052860.03 +SET 1218046.14 777863.52 +SET 1218152.42 718983.51 +SET 1218155.40 693525.42 +SET 1218196.16 760752.24 +SET 1218256.21 916130.42 +SET 12184.98 9037.52 +SET 1218460.54 719165.37 +SET 121859.43 84494.97 +SET 121861.46 71925.63 +SET 1218656.46 778253.28 +SET 1218922.72 719438.16 +SET 1218924.48 916632.96 +SET 1218961.62 778448.16 +SET 1219230.84 719620.02 +SET 121926.21 105395.41 +SET 1219384.90 719710.95 +SET 12194.31 9044.44 +SET 12194.65 8170.03 +SET 121941.16 84551.64 +SET 1219419.36 778740.48 +SET 121946.50 81700.30 +SET 1219472.56 761549.34 +SET 1219538.96 719801.88 +SET 121956.48 39997.44 +SET 1219571.94 778837.92 +SET 1219595.30 694345.19 +SET 1219693.02 719892.81 +SET 1219724.52 778935.36 +SET 1219788.00 734690.70 +SET 121980.10 69446.23 +SET 1219801.00 694462.30 +SET 1220006.70 694579.41 +SET 1220212.40 694696.52 +SET 1220225.20 734954.03 +SET 1220261.02 917638.04 +SET 12203.64 9051.36 +SET 1220418.10 694813.63 +SET 1220463.32 720347.46 +SET 1220487.42 779422.56 +SET 1220527.77 1055048.17 +SET 122064.00 77952.00 +SET 1220640.00 779520.00 +SET 1220662.40 735217.36 +SET 1220771.44 720529.32 +SET 1220792.58 779617.44 +SET 1220945.16 779714.88 +SET 1220949.66 1055412.86 +SET 1221018.75 984300.00 +SET 1221035.20 695164.96 +SET 122104.62 84664.98 +SET 1221233.62 720802.11 +SET 1221240.90 695282.07 +SET 1221250.32 779909.76 +SET 122136.30 81827.46 +SET 1221402.90 780007.20 +SET 1221446.60 695399.18 +SET 1221652.30 695516.29 +SET 122169.58 72107.49 +SET 122175.04 40069.12 +SET 122183.75 81859.25 +SET 1221849.86 721165.83 +SET 1221858.00 695633.40 +SET 122186.35 84721.65 +SET 1222.23 906.52 +SET 1222003.92 721256.76 +SET 1222215.33 1056506.93 +SET 1222265.83 919145.66 +SET 1222280.64 763302.96 +SET 1222312.04 721438.62 +SET 1222411.20 736270.68 +SET 1222470.96 780689.28 +SET 1222535.92 763462.38 +SET 122268.08 84778.32 +SET 1222680.80 696101.84 +SET 1222791.20 763621.80 +SET 1222886.50 696218.95 +SET 1222972.38 985874.88 +SET 1223046.48 763781.22 +SET 1223059.11 1057236.31 +SET 1223081.28 781079.04 +SET 1223082.34 721893.27 +SET 1223092.20 696336.06 +SET 12231.63 9072.12 +SET 122323.64 72198.42 +SET 1223233.86 781176.48 +SET 122326.10 81954.62 +SET 1223285.60 736797.34 +SET 1223297.90 696453.17 +SET 1223301.76 763940.64 +SET 1223390.46 722075.13 +SET 122348.10 105760.10 +SET 1223481.00 1057601.00 +SET 1223503.60 696570.28 +SET 1223602.37 920150.74 +SET 1223691.60 781468.80 +SET 1223812.32 764259.48 +SET 1223852.64 722347.92 +SET 1224149.34 781761.12 +SET 1224160.76 722529.78 +SET 122421.00 82018.20 +SET 122427.48 98692.48 +SET 1224301.92 781858.56 +SET 1224322.88 764578.32 +SET 1224468.88 722711.64 +SET 1224607.08 782053.44 +SET 1224622.94 722802.57 +SET 1224737.80 697272.94 +SET 1224746.67 1058695.07 +SET 122477.70 72289.35 +SET 1224777.00 722893.50 +SET 1224833.44 764897.16 +SET 1224912.24 782248.32 +SET 1225.95 850.05 +SET 12250.29 9085.96 +SET 1225064.82 782345.76 +SET 1225088.72 765056.58 +SET 1225168.56 1059059.76 +SET 12253.44 7652.16 +SET 122534.40 76521.60 +SET 1225369.98 782540.64 +SET 1225522.56 782638.08 +SET 1225547.30 723348.15 +SET 1225599.28 765375.42 +SET 1225675.14 782735.52 +SET 1225827.72 782832.96 +SET 1225854.56 765534.84 +SET 1225908.80 738377.32 +SET 122595.00 85005.00 +SET 1225972.00 697975.60 +SET 1226009.48 723620.94 +SET 1226012.34 1059789.14 +SET 1226132.88 783027.84 +SET 122631.76 72380.28 +SET 1226317.60 723802.80 +SET 1226346.00 738640.65 +SET 1226434.23 1060153.83 +SET 1226438.04 783222.72 +SET 122658.25 82177.15 +SET 1226589.10 698326.93 +SET 122674.32 78341.76 +SET 1226743.20 783417.60 +SET 122676.73 85061.67 +SET 1226779.78 724075.59 +SET 1226856.12 1060518.52 +SET 1226933.84 724166.52 +SET 1227220.40 739167.31 +SET 1227386.24 766491.36 +SET 1227411.90 698795.37 +SET 122753.15 82240.73 +SET 1227530.85 989549.60 +SET 122758.46 85118.34 +SET 1227611.99 923165.98 +SET 1227617.60 698912.48 +SET 1227811.26 784099.68 +SET 1227823.30 699029.59 +SET 122785.82 72471.21 +SET 1227896.80 766810.20 +SET 1228012.26 724803.03 +SET 122802.90 69914.67 +SET 1228166.32 724893.96 +SET 1228234.70 699263.81 +SET 122826.90 78439.20 +SET 1228320.38 724984.89 +SET 1228440.40 699380.92 +SET 1228646.10 699498.03 +SET 1228662.64 767288.46 +SET 1228726.74 784684.32 +SET 1228833.27 990599.52 +SET 1228851.80 699615.14 +SET 1228879.32 784781.76 +SET 12289.55 8233.61 +SET 122895.50 82336.10 +SET 1229173.20 767607.30 +SET 122921.92 85231.68 +SET 1229244.74 725530.47 +SET 1229387.46 1062706.66 +SET 1229398.80 725621.40 +SET 1229406.40 740483.96 +SET 122942.95 82367.89 +SET 1229428.48 767766.72 +SET 1229468.90 699966.47 +SET 122961.68 92467.36 +SET 1229683.76 767926.14 +SET 122979.48 78536.64 +SET 1229843.60 740747.29 +SET 122990.40 82399.68 +SET 123008.60 70031.78 +SET 1230086.00 700317.80 +SET 1230099.96 785561.28 +SET 1230280.80 741010.62 +SET 1230323.16 726166.98 +SET 1230449.60 768404.40 +SET 1230477.22 726257.91 +SET 12306.27 9127.48 +SET 1230703.10 700669.13 +SET 1230704.88 768563.82 +SET 123078.69 99217.44 +SET 123085.30 82463.26 +SET 123085.38 85345.02 +SET 1230862.86 786048.48 +SET 1230908.80 700786.24 +SET 1230953.34 925678.68 +SET 1230960.16 768723.24 +SET 1231155.20 741537.28 +SET 1231168.02 786243.36 +SET 1231215.44 768882.66 +SET 1231320.20 701020.46 +SET 1231496.91 1064530.11 +SET 12315.60 9134.40 +SET 1231731.60 701254.68 +SET 123191.88 106489.48 +SET 1231930.92 786730.56 +SET 1231937.30 701371.79 +SET 1231981.28 769360.92 +SET 1232.48 727.44 +SET 1232083.50 786828.00 +SET 123214.30 70148.89 +SET 1232143.00 701488.90 +SET 1232171.88 727258.14 +SET 1232236.56 769520.34 +SET 1232289.88 926683.76 +SET 1232325.94 727349.07 +SET 12324.80 7274.40 +SET 1232466.80 742327.27 +SET 1232541.24 787120.32 +SET 1232554.40 701723.12 +SET 1232693.82 787217.76 +SET 1232740.53 993749.28 +SET 123275.10 82590.42 +SET 1232762.58 1065624.18 +SET 1232942.18 727712.79 +SET 1232998.98 787412.64 +SET 1233.70 826.54 +SET 123300.24 76999.86 +SET 1233002.40 769998.60 +SET 1233184.47 1065988.87 +SET 123322.55 82622.21 +SET 123330.57 85515.03 +SET 1233341.20 742853.93 +SET 1233609.30 787802.40 +SET 1233626.42 927688.84 +SET 1233768.24 770476.86 +SET 1233914.46 787997.28 +SET 1233994.30 702542.89 +SET 1234.20 702.66 +SET 123402.06 72834.93 +SET 1234023.52 770636.28 +SET 1234042.95 994799.20 +SET 1234067.04 788094.72 +SET 12341.23 8557.17 +SET 123412.30 85571.70 +SET 1234174.66 728440.23 +SET 123420.00 70266.00 +SET 123437.22 78828.96 +SET 1234482.78 728622.09 +SET 1234534.08 770955.12 +SET 1234611.40 702894.22 +SET 1234694.16 995324.16 +SET 12348.64 4049.92 +SET 1235022.80 703128.44 +SET 1235099.02 728985.81 +SET 1235228.50 703245.55 +SET 1235287.68 788874.24 +SET 1235407.14 729167.67 +SET 1235434.20 703362.66 +SET 1235440.26 788971.68 +SET 1235527.20 744170.58 +SET 1235555.20 771592.80 +SET 123556.12 72925.86 +SET 123575.76 85685.04 +SET 12358.98 7892.64 +SET 123595.68 40535.04 +SET 1235964.40 744433.91 +SET 1235996.58 996374.08 +SET 123613.77 106854.17 +SET 1236203.16 789458.88 +SET 123629.95 92969.90 +SET 1236321.04 772071.06 +SET 1236355.74 789556.32 +SET 1236401.60 744697.24 +SET 1236508.32 789653.76 +SET 1236639.62 729895.11 +SET 1236813.48 789848.64 +SET 1236838.80 744960.57 +SET 1236947.74 730076.97 +SET 1236981.48 1069271.08 +SET 123702.15 82876.53 +SET 123710.18 73016.79 +SET 1237255.86 730258.83 +SET 123727.60 74522.39 +SET 1237271.22 790140.96 +SET 1237342.16 772708.74 +SET 123739.22 85798.38 +SET 1237409.92 730349.76 +SET 123742.38 79023.84 +SET 1237563.98 730440.69 +SET 1237576.38 790335.84 +SET 1237597.44 772868.16 +SET 1237718.04 730531.62 +SET 1238026.16 730713.48 +SET 123810.80 77318.70 +SET 1238150.40 745750.56 +SET 1238180.22 730804.41 +SET 1238247.15 1070365.15 +SET 1238304.31 931206.62 +SET 123831.40 70500.22 +SET 1238314.00 705002.20 +SET 1238334.28 730895.34 +SET 1238339.28 790823.04 +SET 1238363.28 773346.42 +SET 1238488.34 730986.27 +SET 1238491.86 790920.48 +SET 1238519.70 705119.31 +SET 1238587.60 746013.89 +SET 1238601.42 998473.92 +SET 1238669.04 1070729.84 +SET 123891.95 83003.69 +SET 1238931.10 705353.53 +SET 123902.68 85911.72 +SET 1239136.80 705470.64 +SET 1239258.64 731440.92 +SET 1239384.40 773984.10 +SET 123939.40 83035.48 +SET 1239566.76 731622.78 +SET 1239712.50 791700.00 +SET 1239753.90 705821.97 +SET 1239865.08 791797.44 +SET 1239894.96 774302.94 +SET 12399.57 9196.68 +SET 1239959.60 705939.08 +SET 1240165.30 706056.19 +SET 1240170.24 791992.32 +SET 124032.80 40678.40 +SET 1240322.82 792089.76 +SET 1240405.52 774621.78 +SET 1240555.05 1000048.80 +SET 1240627.98 792284.64 +SET 1240933.14 792479.52 +SET 1240988.10 706524.63 +SET 1241193.80 706641.74 +SET 1241238.30 792674.40 +SET 124129.20 83162.64 +SET 1241390.88 792771.84 +SET 1241415.48 732713.94 +SET 1241569.54 732804.87 +SET 1241605.20 706875.96 +SET 124164.80 74785.72 +SET 1241681.92 775418.88 +SET 1241696.04 792966.72 +SET 124172.36 73289.58 +SET 1241810.90 706993.07 +SET 1242001.20 793161.60 +SET 1242044.16 1073647.36 +SET 1242085.20 748120.53 +SET 1242185.78 733168.59 +SET 1242192.48 775737.72 +SET 12422.96 8613.84 +SET 1242222.30 707227.29 +SET 1242306.36 793356.48 +SET 1242339.84 733259.52 +SET 1242428.00 707344.40 +SET 1242647.96 733441.38 +SET 1242703.04 776056.56 +SET 124271.55 83258.01 +SET 1242764.10 793648.80 +SET 1242956.08 733623.24 +SET 1242958.32 776215.98 +SET 12431.90 8328.98 +SET 1243221.84 793941.12 +SET 1243264.20 733805.10 +SET 1243309.83 1074741.43 +SET 1243374.42 794038.56 +SET 1243662.20 708047.06 +SET 1243679.58 794233.44 +SET 1243724.16 776694.24 +SET 1243731.72 1075106.12 +SET 124381.11 100267.36 +SET 1243832.16 794330.88 +SET 1243834.00 749173.85 +SET 1244073.60 708281.28 +SET 124413.90 83353.38 +SET 1244271.20 749437.18 +SET 1244279.30 708398.39 +SET 1244318.74 935729.48 +SET 1244462.31 1003198.56 +SET 1244496.68 734532.54 +SET 124457.55 107583.55 +SET 1244575.50 1075835.50 +SET 1244650.74 734623.47 +SET 124469.92 40821.76 +SET 124474.79 86308.41 +SET 1244896.40 708749.72 +SET 1244900.22 795012.96 +SET 1244987.01 936232.02 +SET 1244997.39 1076200.19 +SET 1245000.56 777491.34 +SET 124556.52 86365.08 +SET 1245663.12 795500.16 +SET 1245764.73 1004248.48 +SET 1245766.40 777969.60 +SET 124579.20 40857.60 +SET 1245815.70 795597.60 +SET 124603.70 83480.54 +SET 1246191.34 735532.77 +SET 1246263.06 1077294.26 +SET 1246273.44 795889.92 +SET 1246345.40 735623.70 +SET 124638.25 86421.75 +SET 1246415.94 1004773.44 +SET 1246426.02 795987.36 +SET 1246499.46 735714.63 +SET 124654.20 70968.66 +SET 1246542.00 709686.60 +SET 124657.86 79608.48 +SET 1246684.95 1077658.95 +SET 1246731.18 796182.24 +SET 1246807.58 735896.49 +SET 124688.48 40893.44 +SET 1246953.40 709920.82 +SET 1247036.34 796377.12 +SET 1247042.80 778766.70 +SET 1247188.92 796474.56 +SET 1247269.76 736169.28 +SET 1247341.50 796572.00 +SET 1247364.80 710155.04 +SET 1247423.82 736260.21 +SET 1247528.73 1078388.33 +SET 1247553.36 779085.54 +SET 1247577.88 736351.14 +SET 1247718.36 1005823.36 +SET 1247731.94 736442.07 +SET 1247776.20 710389.26 +SET 1247799.24 796864.32 +SET 12478.86 7365.33 +SET 1247808.64 779244.96 +SET 1247886.00 736533.00 +SET 124793.50 83607.70 +SET 1247981.90 710506.37 +SET 1248040.06 736623.93 +SET 1248063.92 779404.38 +SET 1248104.40 797059.20 +SET 1248187.60 710623.48 +SET 1248319.20 779563.80 +SET 1248328.36 938744.72 +SET 1248348.18 736805.79 +SET 1248369.57 1006348.32 +SET 1248372.51 1079117.71 +SET 1248502.24 736896.72 +SET 1248574.48 779723.22 +SET 124859.90 71085.77 +SET 1248643.20 752070.48 +SET 1248714.72 797448.96 +SET 1248804.70 710974.81 +SET 1248810.36 737078.58 +SET 1248829.76 779882.64 +SET 124883.44 86591.76 +SET 1249019.88 797643.84 +SET 124907.04 40965.12 +SET 1249118.48 737260.44 +SET 1249172.46 797741.28 +SET 12492.87 9265.88 +SET 1249340.32 780201.48 +SET 124942.66 73744.23 +SET 1249477.62 797936.16 +SET 1249627.50 711443.25 +SET 1249664.90 939749.80 +SET 1249850.88 780520.32 +SET 1250060.07 1080576.47 +SET 1250087.94 798325.92 +SET 1250196.90 737896.95 +SET 1250240.52 798423.36 +SET 1250244.60 711794.58 +SET 1250350.96 737987.88 +SET 12504.69 8670.51 +SET 1250450.30 711911.69 +SET 1250505.02 738078.81 +SET 1250545.68 798618.24 +SET 1250616.72 780998.58 +SET 1250656.00 712028.80 +SET 1250659.08 738169.74 +SET 1250861.70 712145.91 +SET 1250872.00 781158.00 +SET 1251001.44 940754.88 +SET 12511.53 9279.72 +SET 12511.56 7990.08 +SET 1251156.00 799008.00 +SET 125125.60 41036.80 +SET 125125.65 83830.23 +SET 1251273.10 712380.13 +SET 1251429.38 738624.39 +SET 1251461.16 799202.88 +SET 1251478.80 712497.24 +SET 1251583.44 738715.32 +SET 1251625.62 1008973.12 +SET 1251669.71 941257.42 +SET 1251684.50 712614.35 +SET 125173.10 83862.02 +SET 1251747.63 1082035.23 +SET 1251766.32 799397.76 +SET 1251890.20 712731.46 +SET 1251891.56 738897.18 +SET 1251893.12 781795.68 +SET 1251918.90 799495.20 +SET 1252045.62 738988.11 +SET 1252095.90 712848.57 +SET 1252224.06 799690.08 +SET 1252276.83 1009498.08 +SET 125234.88 41072.64 +SET 1252507.80 739260.90 +SET 1252578.00 754440.45 +SET 1252591.41 1082764.61 +SET 1252658.96 782273.94 +SET 1252713.00 713199.90 +SET 125292.09 86875.11 +SET 1252969.98 739533.69 +SET 1252986.96 800177.28 +SET 1253013.30 1083129.30 +SET 1253015.20 754703.78 +SET 1253124.04 739624.62 +SET 1253124.40 713434.12 +SET 125315.45 83957.39 +SET 1253169.52 782592.78 +SET 1253278.10 739715.55 +SET 1253292.12 800372.16 +SET 1253424.80 782752.20 +SET 1253444.70 800469.60 +SET 1253579.25 1010548.00 +SET 1253597.28 800567.04 +SET 125362.90 83989.18 +SET 1253740.28 739988.34 +SET 1253749.86 800664.48 +SET 1253902.44 800761.92 +SET 1253947.20 713902.56 +SET 125410.35 84020.97 +SET 125420.76 80095.68 +SET 1254202.46 740261.13 +SET 1254278.97 1084223.37 +SET 1254512.76 801151.68 +SET 1254664.64 740533.92 +SET 1254665.34 801249.12 +SET 1254700.86 1084588.06 +SET 125476.40 75575.71 +SET 125477.00 71437.10 +SET 12548.85 9307.40 +SET 1254817.92 801346.56 +SET 1254956.48 783708.72 +SET 1254972.76 740715.78 +SET 125505.25 84084.55 +SET 1255122.75 1084952.75 +SET 1255123.08 801541.44 +SET 1255126.82 740806.71 +SET 1255181.40 714605.22 +SET 1255201.20 756020.43 +SET 1255275.66 801638.88 +SET 1255280.88 740897.64 +SET 1255434.94 740988.57 +SET 125552.70 84116.34 +SET 1255544.64 1085317.44 +SET 125558.90 74107.95 +SET 1255580.82 801833.76 +SET 125562.72 41180.16 +SET 1255722.32 784186.98 +SET 12558.18 9314.32 +SET 1255966.53 1085682.13 +SET 1255977.60 784346.40 +SET 1256038.56 802126.08 +SET 1256051.18 741352.29 +SET 1256184.09 1012647.84 +SET 1256209.90 715190.77 +SET 1256232.88 784505.82 +SET 1256343.72 802320.96 +SET 1256415.60 715307.88 +SET 125647.60 84179.92 +SET 1256488.16 784665.24 +SET 1256513.36 741625.08 +SET 125672.00 41216.00 +SET 1256810.31 1086411.51 +SET 125682.70 71554.21 +SET 125683.53 101317.28 +SET 1256954.04 802710.72 +SET 125700.74 87158.46 +SET 1257032.70 715659.21 +SET 1257106.62 802808.16 +SET 125712.96 74198.88 +SET 1257129.60 741988.80 +SET 125723.22 108677.62 +SET 1257238.40 715776.32 +SET 125725.92 80290.56 +SET 1257254.00 785143.50 +SET 1257259.20 802905.60 +SET 12574.25 8424.35 +SET 1257564.36 803100.48 +SET 1257649.80 716010.54 +SET 1257745.84 742352.52 +SET 1257764.56 785462.34 +SET 1258061.20 716244.76 +SET 1258075.98 1087505.58 +SET 1258266.90 716361.87 +SET 1258352.41 946282.82 +SET 1258362.08 742716.24 +SET 1258472.60 716478.98 +SET 1258479.84 803685.12 +SET 125853.04 78594.06 +SET 1258530.40 785940.60 +SET 12586.17 9335.08 +SET 125864.20 87271.80 +SET 1258678.30 716596.09 +SET 1258824.26 742989.03 +SET 1258884.00 716713.20 +SET 1258919.76 1088234.96 +SET 1258937.58 803977.44 +SET 1259020.68 946785.36 +SET 1259040.96 786259.44 +SET 1259089.70 716830.31 +SET 1259242.74 804172.32 +SET 125932.30 84370.66 +SET 1259440.14 1015272.64 +SET 1259440.50 743352.75 +SET 12595.50 9342.00 +SET 1259501.10 717064.53 +SET 1259547.90 804367.20 +SET 1259706.80 717181.64 +SET 1259748.62 743534.61 +SET 1259763.54 1088964.34 +SET 1259853.06 804562.08 +SET 125999.84 41323.52 +SET 1260056.74 743716.47 +SET 1260062.08 786897.12 +SET 1260091.35 1015797.60 +SET 1260210.80 743807.40 +SET 1260317.36 787056.54 +SET 1260323.90 717532.97 +SET 1260357.22 947790.44 +SET 1260364.86 743898.33 +SET 1260529.60 717650.08 +SET 1260572.64 787215.96 +SET 1260607.32 1089693.72 +SET 1260672.98 744080.19 +SET 1260742.56 1016322.56 +SET 1260827.04 744171.12 +SET 1260884.80 759443.72 +SET 1260921.12 805244.16 +SET 1260941.00 717884.30 +SET 1260981.10 744262.05 +SET 1261029.21 1090058.41 +SET 1261073.70 805341.60 +SET 126109.39 87441.81 +SET 126122.10 84497.82 +SET 1261352.40 718118.52 +SET 1261393.77 1016847.52 +SET 1261451.10 1090423.10 +SET 1261531.44 805633.92 +SET 1261558.10 718235.63 +SET 1261593.76 787853.64 +SET 1261597.34 744625.77 +SET 126175.14 74471.67 +SET 1261751.40 744716.70 +SET 1261759.20 759970.38 +SET 1261849.04 788013.06 +SET 1261872.99 1090787.79 +SET 1261905.46 744807.63 +SET 126191.12 87498.48 +SET 1261989.18 805926.24 +SET 1262044.98 1017372.48 +SET 1262104.32 788172.48 +SET 1262141.76 806023.68 +SET 1262294.34 806121.12 +SET 1262294.88 1091152.48 +SET 12623.49 9362.76 +SET 1262359.60 788331.90 +SET 1262367.64 745080.42 +SET 1262614.88 788491.32 +SET 1262675.76 745262.28 +SET 126272.85 87555.15 +SET 1262752.08 806413.44 +SET 1262829.82 745353.21 +SET 126303.03 94980.06 +SET 1263070.80 760760.37 +SET 12632.92 7456.26 +SET 1263409.40 719289.62 +SET 1263514.98 806900.64 +SET 1263560.55 1092246.55 +SET 1263615.10 719406.73 +SET 1263636.00 789129.00 +SET 1263698.57 950303.14 +SET 1263754.18 745898.79 +SET 1263820.14 807095.52 +SET 1263891.28 789288.42 +SET 1263908.24 745989.72 +SET 1263945.20 761287.03 +SET 1263972.72 807192.96 +SET 1263982.44 1092611.24 +SET 1264026.50 719640.95 +SET 12642.15 9376.60 +SET 1264232.20 719758.06 +SET 1264277.88 807387.84 +SET 1264430.46 807485.28 +SET 1264657.12 789766.68 +SET 1264678.54 746444.37 +SET 1264735.62 807680.16 +SET 1264832.60 746535.30 +SET 1265140.72 746717.16 +SET 1265256.80 762077.02 +SET 1265260.70 720343.61 +SET 1265422.96 790244.94 +SET 126549.15 84783.93 +SET 1265498.52 808167.36 +SET 1265602.90 746989.95 +SET 1265651.10 808264.80 +SET 1265670.00 1094070.00 +SET 1265694.00 762340.35 +SET 1265756.96 747080.88 +SET 126596.60 84815.72 +SET 1266091.89 1094434.69 +SET 126618.88 79072.32 +SET 1266219.14 747353.67 +SET 1266373.20 747444.60 +SET 1266414.00 808752.00 +SET 126644.05 84847.51 +SET 1266494.90 721046.27 +SET 1266513.78 1094799.38 +SET 1266700.60 721163.38 +SET 1266719.16 808946.88 +SET 1266871.74 809044.32 +SET 126691.50 84879.30 +SET 1267039.92 952815.84 +SET 1267143.50 747899.25 +SET 1267176.90 809239.20 +SET 1267317.70 721514.71 +SET 126738.95 84911.09 +SET 1267465.20 791520.30 +SET 1267720.48 791679.72 +SET 1267729.10 721748.93 +SET 1267787.22 809628.96 +SET 126786.40 84942.88 +SET 12679.47 9404.28 +SET 1267905.87 1022097.12 +SET 126793.98 80972.64 +SET 1267975.76 791839.14 +SET 1268221.92 748535.76 +SET 1268231.04 791998.56 +SET 1268346.20 722100.26 +SET 1268376.46 953820.92 +SET 1268397.54 810018.72 +SET 126844.96 87951.84 +SET 1268530.04 748717.62 +SET 1268702.70 810213.60 +SET 1268741.60 792317.40 +SET 1269160.44 810505.92 +SET 1269208.29 1023147.04 +SET 1269252.16 792636.24 +SET 126926.69 88008.51 +SET 1269300.34 749172.27 +SET 1269374.70 722685.81 +SET 126945.44 74926.32 +SET 1269454.40 749263.20 +SET 1269465.60 810700.80 +SET 1269507.44 792795.66 +SET 1269580.40 722802.92 +SET 1269608.46 749354.13 +SET 1269618.18 810798.24 +SET 1269628.80 764710.32 +SET 126971.30 95482.60 +SET 126983.36 41646.08 +SET 1269859.50 1023672.00 +SET 1269888.90 1097716.90 +SET 1270070.64 749626.92 +SET 127008.42 88065.18 +SET 1270224.70 749717.85 +SET 1270228.50 811188.00 +SET 1270503.20 765236.98 +SET 1270532.82 749899.71 +SET 1270533.66 811382.88 +SET 1270608.90 723388.47 +SET 1270686.24 811480.32 +SET 1270686.88 749990.64 +SET 1270732.68 1098446.28 +SET 1270814.60 723505.58 +SET 1270838.82 811577.76 +SET 1270940.40 765500.31 +SET 127099.14 81167.52 +SET 1270991.40 811675.20 +SET 127129.44 79391.16 +SET 1271303.12 750354.36 +SET 1271377.60 765763.64 +SET 1271457.18 750445.29 +SET 12716.60 8519.72 +SET 1271601.72 812064.96 +SET 1271611.24 750536.22 +SET 1271637.40 723974.02 +SET 127166.00 85197.20 +SET 1271765.30 750627.15 +SET 1271804.96 794230.44 +SET 1271813.13 1025246.88 +SET 1271906.88 812259.84 +SET 127225.20 76629.03 +SET 1272315.52 794549.28 +SET 127253.61 88235.19 +SET 1272689.66 751172.73 +SET 1272822.36 812844.48 +SET 1272842.13 1100269.73 +SET 1272843.72 751263.66 +SET 1272871.60 724676.68 +SET 1272997.78 751354.59 +SET 1273077.30 724793.79 +SET 1273126.40 766816.96 +SET 1273264.02 1100634.42 +SET 127328.30 72491.09 +SET 1273283.00 724910.90 +SET 1273432.68 813234.24 +SET 1273459.96 751627.38 +SET 12735.45 9445.80 +SET 127355.80 85324.36 +SET 1273591.92 795346.38 +SET 1273685.91 1100999.11 +SET 1273737.84 813429.12 +SET 127384.72 79550.58 +SET 1273847.20 795505.80 +SET 1273900.10 725262.23 +SET 127404.30 81362.40 +SET 1274043.00 813624.00 +SET 1274105.80 725379.34 +SET 1274195.58 813721.44 +SET 127420.48 41789.44 +SET 1274417.97 1027346.72 +SET 1274517.20 725613.56 +SET 1274529.69 1101728.49 +SET 1274653.32 814013.76 +SET 1274846.50 752445.75 +SET 1274868.32 796143.48 +SET 1274928.60 725847.78 +SET 1274951.58 1102093.18 +SET 127498.80 88405.20 +SET 1275111.06 814306.08 +SET 1275134.30 725964.89 +SET 1275154.62 752627.61 +SET 12753.40 7260.82 +SET 1275340.00 726082.00 +SET 1275416.22 814500.96 +SET 127545.60 85451.52 +SET 1275545.70 726199.11 +SET 1275634.16 796621.74 +SET 1275720.39 1028396.64 +SET 127580.53 88461.87 +SET 127593.05 85483.31 +SET 1275957.10 726433.33 +SET 1276026.54 814890.72 +SET 1276387.10 753355.05 +SET 1276395.70 959851.40 +SET 127662.40 76892.36 +SET 1276636.86 815280.48 +SET 1276655.28 797259.42 +SET 1276695.22 753536.91 +SET 1276789.44 815377.92 +SET 1276942.02 815475.36 +SET 1277061.03 1103916.63 +SET 1277061.20 769186.93 +SET 1277063.97 960353.94 +SET 127715.74 75380.97 +SET 1277602.70 727370.21 +SET 1277619.58 754082.49 +SET 1277732.24 960856.48 +SET 1277808.40 727487.32 +SET 1277857.50 816060.00 +SET 1277904.81 1104646.01 +SET 1277927.70 754264.35 +SET 1278081.76 754355.28 +SET 12782.10 9480.40 +SET 1278235.82 754446.21 +SET 127825.72 88631.88 +SET 127830.30 85642.26 +SET 1278326.70 1105010.70 +SET 1278372.80 769976.92 +SET 1278442.24 798375.36 +SET 1278467.82 816449.76 +SET 1278543.94 754628.07 +SET 1278631.20 727955.76 +SET 1278697.52 798534.78 +SET 1278698.00 754719.00 +SET 1278925.56 816742.08 +SET 1279006.12 754900.86 +SET 127907.45 88688.55 +SET 127925.20 85705.84 +SET 1279383.30 817034.40 +SET 127945.40 72842.42 +SET 1279463.36 799013.04 +SET 1279468.30 755173.65 +SET 1279622.36 755264.58 +SET 1279659.70 728541.31 +SET 1279684.40 770766.91 +SET 1279718.64 799172.46 +SET 127972.65 85737.63 +SET 1279776.42 755355.51 +SET 1279841.04 817326.72 +SET 127989.18 88745.22 +SET 128020.10 85769.42 +SET 128023.86 75562.83 +SET 1280436.15 1106834.15 +SET 1280451.36 817716.48 +SET 1280482.50 729009.75 +SET 1280603.94 817813.92 +SET 1280688.20 729126.86 +SET 128070.91 88801.89 +SET 1280756.52 817911.36 +SET 128076.16 42004.48 +SET 1280854.84 755992.02 +SET 1280858.04 1107198.84 +SET 1280909.10 818008.80 +SET 1280930.07 1032596.32 +SET 1281099.60 729361.08 +SET 1281317.02 756264.81 +SET 128150.56 80028.84 +SET 128151.10 72959.53 +SET 1281511.00 729595.30 +SET 1281519.42 818398.56 +SET 128167.20 81849.60 +SET 1281760.88 800447.82 +SET 128177.92 75653.76 +SET 1281870.40 772083.56 +SET 12819.42 9508.08 +SET 1281922.40 729829.52 +SET 1281933.26 756628.53 +SET 1282087.32 756719.46 +SET 128209.90 85896.58 +SET 128234.37 88915.23 +SET 1282410.13 964374.26 +SET 1282434.90 818983.20 +SET 128254.56 110865.76 +SET 1282587.48 819080.64 +SET 1282703.56 757083.18 +SET 1282740.06 819178.08 +SET 1282857.62 757174.11 +SET 128288.37 103417.12 +SET 128294.72 42076.16 +SET 1282950.90 730415.07 +SET 1283011.68 757265.04 +SET 128304.80 85960.16 +SET 128307.84 96487.68 +SET 1283078.40 964876.80 +SET 1283182.00 772873.55 +SET 128319.78 81947.04 +SET 1283197.80 819470.40 +SET 1283319.80 757446.90 +SET 1283350.38 819567.84 +SET 1283534.91 1034696.16 +SET 128356.80 73076.64 +SET 1283619.20 773136.88 +SET 1283655.54 819762.72 +SET 1283746.67 965379.34 +SET 1283773.70 730883.51 +SET 1283781.98 757719.69 +SET 1283811.27 1109751.67 +SET 1284113.28 820055.04 +SET 1284233.16 1110116.36 +SET 1284414.94 965881.88 +SET 128447.15 86055.53 +SET 1284568.96 802201.44 +SET 1284596.50 731351.95 +SET 1284655.05 1110481.05 +SET 1284706.34 758265.27 +SET 128472.36 82044.48 +SET 1284723.60 820444.80 +SET 128479.56 89085.24 +SET 1284802.20 731469.06 +SET 1284824.24 802360.86 +SET 128486.04 75835.62 +SET 1284930.80 773926.87 +SET 1285014.46 758447.13 +SET 1285028.76 820639.68 +SET 1285079.52 802520.28 +SET 128513.28 42147.84 +SET 1285181.34 820737.12 +SET 1285213.60 731703.28 +SET 1285334.80 802679.70 +SET 128536.80 77419.02 +SET 1285476.64 758719.92 +SET 1285486.50 820932.00 +SET 12856.74 9535.76 +SET 1285625.00 731937.50 +SET 1285639.08 821029.44 +SET 128589.50 86150.90 +SET 1286036.40 732171.72 +SET 1286139.75 1036796.00 +SET 128622.56 42183.68 +SET 128624.94 82141.92 +SET 1286242.10 732288.83 +SET 1286342.61 1111939.81 +SET 1286355.92 803317.38 +SET 128636.95 86182.69 +SET 128640.10 75926.55 +SET 1286419.75 967389.50 +SET 128643.02 89198.58 +SET 1286679.60 774980.19 +SET 1286863.18 759538.29 +SET 1287116.80 775243.52 +SET 1287164.88 822003.84 +SET 1287270.60 732874.38 +SET 1287317.46 822101.28 +SET 1287377.04 803955.06 +SET 1287442.17 1037845.92 +SET 1287554.00 775506.85 +SET 1287608.28 1113033.88 +SET 1287622.62 822296.16 +SET 1287632.32 804114.48 +SET 1287682.00 733108.60 +SET 1287756.29 968394.58 +SET 1287787.54 760083.87 +SET 1287887.60 804273.90 +SET 128794.16 76017.48 +SET 1287941.60 760174.80 +SET 1288030.17 1113398.57 +SET 128806.48 89311.92 +SET 1288142.88 804433.32 +SET 1288232.94 822685.92 +SET 1288249.72 760356.66 +SET 1288398.16 804592.74 +SET 12884.73 9556.52 +SET 1288403.78 760447.59 +SET 1288452.06 1113763.26 +SET 128874.20 86341.64 +SET 1288843.26 823075.68 +SET 1288865.96 760720.38 +SET 1288873.95 1114127.95 +SET 128888.21 89368.59 +SET 1289092.83 969399.66 +SET 1289148.42 823270.56 +SET 1289327.60 734045.48 +SET 1289453.58 823465.44 +SET 128950.40 42291.20 +SET 1289533.30 734162.59 +SET 128969.94 89425.26 +SET 1289717.73 1114857.33 +SET 1289758.74 823660.32 +SET 128976.11 96990.22 +SET 1289929.84 805549.26 +SET 1290047.01 1039945.76 +SET 1290063.90 823855.20 +SET 1290098.44 761447.82 +SET 1290150.40 734513.92 +SET 1290185.12 805708.68 +SET 1290216.48 823952.64 +SET 1290406.56 761629.68 +SET 1290429.37 970404.74 +SET 1290521.64 824147.52 +SET 1290561.51 1115586.71 +SET 129059.68 42327.04 +SET 1290614.40 777350.16 +SET 129064.00 86468.80 +SET 1290674.22 824244.96 +SET 1290695.68 806027.52 +SET 1290868.74 761902.47 +SET 1290979.38 824439.84 +SET 129098.34 111595.14 +SET 129102.28 76199.34 +SET 1291022.80 761993.40 +SET 1291051.60 777613.49 +SET 1291178.90 735099.47 +SET 1291284.54 824634.72 +SET 129133.40 89538.60 +SET 1291349.43 1040995.68 +SET 1291437.12 824732.16 +SET 1291461.52 806505.78 +SET 1291488.80 777876.82 +SET 1291589.70 824829.60 +SET 1291639.04 762357.12 +SET 129171.68 80666.52 +SET 1291716.80 806665.20 +SET 1291765.91 971409.82 +SET 129179.60 73545.08 +SET 1291796.00 735450.80 +SET 1291926.00 778140.15 +SET 1291947.16 762538.98 +SET 12922.05 9584.20 +SET 1292249.07 1117045.47 +SET 1292434.18 971912.36 +SET 1292670.96 1117410.16 +SET 1292717.46 762993.63 +SET 1292824.50 736036.35 +SET 1292871.52 763084.56 +SET 1292962.92 825706.56 +SET 1293092.85 1117774.85 +SET 1293102.45 972414.90 +SET 1293115.50 825804.00 +SET 1293179.64 763266.42 +SET 1293441.60 736387.68 +SET 1293514.74 1118139.54 +SET 1293725.82 826193.76 +SET 1293759.04 807940.56 +SET 129385.30 73662.19 +SET 1293853.00 736621.90 +SET 129387.52 42434.56 +SET 1293878.40 826291.20 +SET 1293949.94 763721.07 +SET 1294014.32 808099.98 +SET 1294030.98 826388.64 +SET 1294104.00 763812.00 +SET 1294269.60 808259.40 +SET 1294358.52 1118868.92 +SET 1294470.10 736973.23 +SET 1294549.20 779720.13 +SET 129460.32 89765.28 +SET 1294641.30 826778.40 +SET 1294675.80 737090.34 +SET 1294720.24 764175.72 +SET 1294780.41 1119233.61 +SET 1294881.50 737207.45 +SET 1294986.40 779983.46 +SET 12950.04 9604.96 +SET 1295035.44 808737.66 +SET 1295087.20 737324.56 +SET 1295202.30 1119598.30 +SET 1295336.48 764539.44 +SET 129540.42 82726.56 +SET 1295423.60 780246.79 +SET 1295498.60 737558.78 +SET 129564.46 76472.13 +SET 1295704.30 737675.89 +SET 1295709.36 827460.48 +SET 1295775.53 974425.06 +SET 129585.95 86818.49 +SET 1295861.94 827557.92 +SET 129591.00 73779.30 +SET 1296260.84 765085.02 +SET 1296298.00 780773.45 +SET 1296311.84 809534.76 +SET 1296414.90 765175.95 +SET 1296472.26 827947.68 +SET 1296559.11 1045195.36 +SET 1296567.12 809694.18 +SET 1296723.02 765357.81 +SET 1296732.80 738261.44 +SET 12968.70 9618.80 +SET 129680.85 86882.07 +SET 1296822.40 809853.60 +SET 1296889.86 1121057.06 +SET 129693.00 82824.00 +SET 1296930.00 828240.00 +SET 129705.51 89935.29 +SET 1297077.68 810013.02 +SET 129715.36 42542.08 +SET 129728.30 86913.86 +SET 1297311.75 1121421.75 +SET 1297493.32 765812.46 +SET 1297609.60 781563.44 +SET 1297647.38 765903.39 +SET 1297733.64 1121786.44 +SET 1297780.34 975932.68 +SET 1297843.52 810491.28 +SET 1297955.50 766085.25 +SET 1297967.00 738964.10 +SET 1297998.06 828922.08 +SET 1298046.80 781826.77 +SET 129823.20 86977.44 +SET 1298303.22 829116.96 +SET 1298354.08 810810.12 +SET 1298484.00 782090.10 +SET 1298512.74 1046770.24 +SET 1298571.74 766448.97 +SET 1298609.36 810969.54 +SET 1298725.80 766539.90 +SET 1298760.96 829409.28 +SET 1298789.80 739432.54 +SET 1298864.64 811128.96 +SET 1298879.86 766630.83 +SET 1298913.54 829506.72 +SET 1298995.50 739549.65 +SET 1298999.31 1122880.51 +SET 1299116.88 976937.76 +SET 1299119.92 811288.38 +SET 1299163.95 1047295.20 +SET 1299201.20 739666.76 +SET 129933.92 42613.76 +SET 1299358.40 782616.76 +SET 129937.52 81144.78 +SET 1299371.28 829799.04 +SET 1299375.20 811447.80 +SET 1299406.90 739783.87 +SET 12995.07 9010.53 +SET 129950.70 90105.30 +SET 1299612.60 739900.98 +SET 1299958.28 767267.34 +SET 1299981.60 830188.80 +SET 130013.00 87104.60 +SET 1300232.80 783143.42 +SET 130026.64 76744.92 +SET 1300264.98 1123974.58 +SET 1300266.40 767449.20 +SET 1300420.46 767540.13 +SET 130043.20 42649.60 +SET 13006.02 9646.48 +SET 130060.45 87136.39 +SET 1300670.00 783406.75 +SET 1300728.58 767721.99 +SET 1300744.50 830676.00 +SET 1301049.66 830870.88 +SET 130107.90 87168.18 +SET 1301121.69 978445.38 +SET 1301190.76 767994.78 +SET 1301530.65 1125068.65 +SET 1301544.40 783933.41 +SET 130155.35 87199.97 +SET 1301652.94 768267.57 +SET 1301669.60 741072.08 +SET 1301789.96 978947.92 +SET 13019.28 8130.42 +SET 130192.80 81304.20 +SET 130195.89 90275.31 +SET 1301961.06 768449.43 +SET 1301965.14 831455.52 +SET 130202.80 87231.76 +SET 130208.10 74130.63 +SET 1302081.00 741306.30 +SET 1302117.72 831552.96 +SET 1302183.28 813201.42 +SET 1302286.70 741423.41 +SET 1302374.43 1125798.03 +SET 13024.20 10499.20 +SET 1302418.80 784460.07 +SET 1302422.88 831747.84 +SET 1302423.24 768722.22 +SET 1302438.56 813360.84 +SET 1302492.40 741540.52 +SET 130250.25 87263.55 +SET 130261.76 42721.28 +SET 1302698.10 741657.63 +SET 1302728.04 831942.72 +SET 1302731.36 768904.08 +SET 130285.60 78472.34 +SET 1302856.00 784723.40 +SET 1302880.62 832040.16 +SET 130303.32 83213.76 +SET 1303109.50 741891.85 +SET 1303185.78 832235.04 +SET 1303218.21 1126527.41 +SET 1303501.66 769358.73 +SET 1303520.90 742126.07 +SET 130359.35 90388.65 +SET 1303714.96 814157.94 +SET 1303726.60 742243.18 +SET 1303730.40 785250.06 +SET 1303794.77 980455.54 +SET 1303948.68 832722.24 +SET 1303963.84 769631.52 +SET 1304167.60 785513.39 +SET 130441.08 90445.32 +SET 1304426.02 769904.31 +SET 1304604.80 785776.72 +SET 1304711.58 833209.44 +SET 1304734.14 770086.17 +SET 1304736.08 814795.62 +SET 130488.82 77017.71 +SET 1304888.20 770177.10 +SET 1304960.80 742945.84 +SET 1305024.84 1052019.84 +SET 1305042.00 786040.05 +SET 1305131.31 981460.62 +SET 13052.67 9681.08 +SET 130522.81 90501.99 +SET 1305321.90 833599.20 +SET 1305327.66 1128350.86 +SET 130534.95 87454.29 +SET 1305350.38 770449.89 +SET 1305372.20 743180.06 +SET 1305479.20 786303.38 +SET 1305504.44 770540.82 +SET 1305627.06 833794.08 +SET 1305676.05 1052544.80 +SET 1305749.55 1128715.55 +SET 1305757.20 815433.30 +SET 1305779.64 833891.52 +SET 1305783.60 743414.28 +SET 130589.60 42828.80 +SET 1305932.22 833988.96 +SET 1305989.30 743531.39 +SET 130604.54 90558.66 +SET 130608.48 83408.64 +SET 1306084.80 834086.40 +SET 1306237.38 834183.84 +SET 1306389.96 834281.28 +SET 1306428.80 771086.40 +SET 1306542.54 834378.72 +SET 1306606.40 743882.72 +SET 130677.30 87549.66 +SET 130686.27 90615.33 +SET 130698.88 42864.64 +SET 1307000.28 834671.04 +SET 1307015.22 1129809.62 +SET 1307223.50 744234.05 +SET 1307305.44 834865.92 +SET 1307458.02 834963.36 +SET 1307507.22 771722.91 +SET 13076.80 9067.20 +SET 1307629.68 1054119.68 +SET 1307661.28 771813.84 +SET 1307665.20 787620.03 +SET 13078.59 11305.39 +SET 1307840.60 744585.38 +SET 1308046.30 744702.49 +SET 1308054.72 816868.08 +SET 1308068.34 835353.12 +SET 1308102.40 787883.36 +SET 1308123.46 772086.63 +SET 130819.65 87645.03 +SET 1308373.50 835548.00 +SET 130867.10 87676.82 +SET 1308702.78 1131268.38 +SET 1308739.70 772450.35 +SET 1309074.80 745288.04 +SET 130913.64 83603.52 +SET 1309140.93 984475.86 +SET 130917.44 42936.32 +SET 1309288.98 836132.64 +SET 1309355.94 772814.07 +SET 1309546.56 1131997.76 +SET 130958.64 81782.46 +SET 1309586.40 817824.60 +SET 13096.20 8774.04 +SET 130962.00 87740.40 +SET 1309809.20 984978.40 +SET 1309818.12 773086.86 +SET 13099.32 9715.68 +SET 1310103.30 745873.59 +SET 1310126.24 773268.72 +SET 131030.90 74599.07 +SET 1310309.00 745990.70 +SET 1310352.24 818302.86 +SET 1310434.36 773450.58 +SET 1310477.47 985480.94 +SET 1310509.62 836912.16 +SET 1310588.42 773541.51 +SET 1310725.60 789463.34 +SET 13108.65 9722.60 +SET 1310885.73 1056744.48 +SET 1310926.10 746342.03 +SET 1310967.36 837204.48 +SET 1311.36 430.08 +SET 131104.35 87835.77 +SET 1311050.60 773814.30 +SET 1311119.94 837301.92 +SET 1311131.80 746459.14 +SET 1311145.74 985983.48 +SET 1311162.80 789726.67 +SET 1311234.12 1133456.52 +SET 1311272.52 837399.36 +SET 1311337.50 746576.25 +SET 1311358.72 773996.16 +SET 1311820.90 774268.95 +SET 1311883.92 819259.38 +SET 1311954.60 746927.58 +SET 1311974.96 774359.88 +SET 1312037.20 790253.33 +SET 1312129.02 774450.81 +SET 131213.92 81941.88 +SET 1312139.20 819418.80 +SET 1312188.15 1057794.40 +SET 1312437.14 774632.67 +SET 1312482.28 986988.56 +SET 1312493.16 838178.88 +SET 1312591.20 774723.60 +SET 1312745.26 774814.53 +SET 1312798.32 838373.76 +SET 1312839.36 1058319.36 +SET 1312899.32 774905.46 +SET 1312905.04 819897.06 +SET 1312950.90 838471.20 +SET 1313188.80 747630.24 +SET 1313256.06 838666.08 +SET 1313343.57 1135279.97 +SET 1313408.64 838763.52 +SET 1313415.60 820215.90 +SET 1313515.56 775269.18 +SET 131354.56 43079.68 +SET 1313561.22 838860.96 +SET 1313818.82 987993.64 +SET 1314018.96 839153.28 +SET 1314181.44 820694.16 +SET 1314223.20 791569.98 +SET 1314285.86 775723.83 +SET 13143.65 8805.83 +SET 131436.50 88058.30 +SET 1314439.92 775814.76 +SET 1314476.70 839445.60 +SET 13145.97 9750.28 +SET 1314628.70 748450.01 +SET 131469.20 82101.30 +SET 1314834.40 748567.12 +SET 1314934.44 839737.92 +SET 1315040.10 748684.23 +SET 1315087.02 839835.36 +SET 1315097.60 792096.64 +SET 131531.40 88121.88 +SET 1315364.28 776360.34 +SET 13155.30 9757.20 +SET 1315518.34 776451.27 +SET 1315534.80 792359.97 +SET 1315544.76 840127.68 +SET 1315657.20 749035.56 +SET 1315672.40 776542.20 +SET 1315697.34 840225.12 +SET 13158.53 9123.87 +SET 1315862.90 749152.67 +SET 1315968.40 821810.10 +SET 1316068.60 749269.78 +SET 1316095.41 1060944.16 +SET 1316155.08 840517.44 +SET 1316274.30 749386.89 +SET 131629.68 113783.28 +SET 1316409.20 792886.63 +SET 1316460.24 840712.32 +SET 131648.00 74950.40 +SET 1316685.70 749621.11 +SET 1316750.82 777178.71 +SET 1316765.40 840907.20 +SET 131682.40 43187.20 +SET 1316846.40 793149.96 +SET 1316891.40 749738.22 +SET 1317097.10 749855.33 +SET 1317223.14 841199.52 +SET 1317244.80 822607.20 +SET 1317283.60 793413.29 +SET 1317302.80 749972.44 +SET 131748.76 91352.04 +SET 1317508.50 750089.55 +SET 1317521.12 777633.36 +SET 1317528.30 841394.40 +SET 131768.65 88280.83 +SET 1317720.80 793676.62 +SET 1317919.90 750323.77 +SET 1317983.30 777906.15 +SET 1318137.36 777997.08 +SET 1318138.62 841784.16 +SET 131816.10 88312.62 +SET 1318265.92 823244.88 +SET 131829.12 84188.16 +SET 1318406.25 1139656.25 +SET 1318496.71 991511.42 +SET 131853.70 75067.51 +SET 1318537.00 750675.10 +SET 131863.55 88344.41 +SET 1318700.25 1063044.00 +SET 131875.36 77836.08 +SET 1318753.60 778360.80 +SET 1318901.52 842271.36 +SET 1318907.66 778451.73 +SET 131900.96 43258.88 +SET 1319032.40 794466.61 +SET 13191.10 8837.62 +SET 131912.22 91465.38 +SET 13192.62 9784.88 +SET 1319206.68 842466.24 +SET 1319215.78 778633.59 +SET 1319351.46 1063568.96 +SET 1319359.26 842563.68 +SET 1319359.80 751143.54 +SET 1319565.50 751260.65 +SET 1319797.60 824201.40 +SET 1319817.00 842856.00 +SET 1319969.58 842953.44 +SET 1319976.90 751494.87 +SET 1319986.08 779088.24 +SET 132005.90 88439.78 +SET 1320052.88 824360.82 +SET 13201.95 9791.80 +SET 132010.24 43294.72 +SET 1320122.16 843050.88 +SET 1320140.14 779179.17 +SET 1320182.60 751611.98 +SET 132029.42 77927.01 +SET 132034.40 79525.66 +SET 132053.35 88471.57 +SET 1320579.90 843343.20 +SET 132059.40 75184.62 +SET 1320653.88 1064618.88 +SET 1320732.48 843440.64 +SET 132075.68 91578.72 +SET 1320756.38 779542.89 +SET 1320799.70 751963.31 +SET 1321005.40 752080.42 +SET 1321037.64 843635.52 +SET 132119.52 43330.56 +SET 1321218.40 795783.26 +SET 1321359.48 1142209.08 +SET 1321416.80 752314.64 +SET 1321526.68 779997.54 +SET 1321622.50 752431.75 +SET 1321781.37 1142573.77 +SET 1321988.86 780270.33 +SET 13220.61 9805.64 +SET 1322095.12 825636.18 +SET 1322105.70 844317.60 +SET 1322142.92 780361.26 +SET 1322239.60 752783.08 +SET 1322296.98 780452.19 +SET 132243.15 88598.73 +SET 1322451.04 780543.12 +SET 1322530.00 796573.25 +SET 1322563.44 844609.92 +SET 1322605.10 780634.05 +SET 1322605.68 825955.02 +SET 1322716.02 844707.36 +SET 13229.94 9812.56 +SET 1322913.22 780815.91 +SET 1323047.04 1143667.84 +SET 1323062.40 753251.52 +SET 1323067.28 780906.84 +SET 1323116.24 826273.86 +SET 1323174.60 995029.20 +SET 132320.87 91748.73 +SET 1323221.34 780997.77 +SET 1323258.72 1066718.72 +SET 1323326.34 845097.12 +SET 132337.54 78108.87 +SET 1323371.52 826433.28 +SET 1323375.40 781088.70 +SET 1323404.40 797099.91 +SET 1323529.46 781179.63 +SET 1323626.80 826592.70 +SET 1323784.08 845389.44 +SET 13238.55 8869.41 +SET 1323841.60 797363.24 +SET 132385.50 88694.10 +SET 1323882.08 826752.12 +SET 1323885.20 753719.96 +SET 1323890.82 1144397.22 +SET 13239.27 9819.48 +SET 1323991.64 781452.42 +SET 13240.26 9180.54 +SET 132402.60 91805.40 +SET 1324278.80 797626.57 +SET 132439.44 84577.92 +SET 1324392.64 827070.96 +SET 1324453.82 781725.21 +SET 1324502.30 754071.29 +SET 1324511.14 996034.28 +SET 1324716.00 797889.90 +SET 132480.40 88757.68 +SET 132490.32 82738.98 +SET 1324903.20 827389.80 +SET 1325070.06 782088.93 +SET 1325212.35 1068293.60 +SET 1325462.46 846461.28 +SET 1325530.80 754656.84 +SET 1325578.38 1145855.98 +SET 132566.06 91918.74 +SET 1325686.30 782452.65 +SET 1325767.62 846656.16 +SET 1325840.36 782543.58 +SET 132592.02 84675.36 +SET 1325920.20 846753.60 +SET 1325924.32 828027.48 +SET 1325994.42 782634.51 +SET 1326027.60 798679.89 +SET 1326147.90 755008.17 +SET 1326179.60 828186.90 +SET 1326353.60 755125.28 +SET 1326377.94 847045.92 +SET 132647.79 91975.41 +SET 1326514.77 1069343.52 +SET 1326530.52 847143.36 +SET 1326610.66 782998.23 +SET 1326844.05 1146950.05 +SET 1326945.44 828665.16 +SET 1327072.84 783271.02 +SET 132717.65 88916.63 +SET 1327184.22 998044.44 +SET 132729.52 92032.08 +SET 1327339.20 799469.88 +SET 1327382.10 755710.83 +SET 13274.46 8477.28 +SET 13274.56 8289.84 +SET 1327446.00 847728.00 +SET 132745.60 82898.40 +SET 132765.10 88948.42 +SET 1327793.50 755945.05 +SET 1327817.19 1070393.44 +SET 1327903.74 848020.32 +SET 1327997.20 783816.60 +SET 1327999.20 756062.16 +SET 1328213.60 799996.54 +SET 1328221.84 829462.26 +SET 1328410.60 756296.38 +SET 1328468.40 1070918.40 +SET 13285.92 9854.08 +SET 1328531.61 1148408.81 +SET 1328921.56 784362.18 +SET 1328953.50 1148773.50 +SET 1328971.80 848702.40 +SET 1329027.70 756647.71 +SET 132907.45 89043.79 +SET 1329088.00 800523.20 +SET 1329119.61 1071443.36 +SET 1329229.68 784544.04 +SET 1329375.39 1149138.19 +SET 1329429.54 848994.72 +SET 1329439.10 756881.93 +SET 132953.78 78472.59 +SET 1329537.80 784725.90 +SET 1329845.92 784907.76 +SET 132993.76 43617.28 +SET 1330056.20 757233.26 +SET 1330154.04 785089.62 +SET 1330219.17 1149867.57 +SET 1330308.10 785180.55 +SET 1330399.60 801313.19 +SET 13304.58 9867.92 +SET 1330467.60 757467.48 +SET 133049.80 89139.16 +SET 1330519.36 830897.04 +SET 133056.44 92258.76 +SET 1330641.06 1150232.26 +SET 1330770.28 785453.34 +SET 1330924.34 785544.27 +SET 1331062.95 1150596.95 +SET 1331107.92 850066.56 +SET 1331232.46 785726.13 +SET 1331285.20 831375.30 +SET 13313.91 9874.84 +SET 1331540.48 831534.72 +SET 1331540.58 785907.99 +SET 1331694.64 785998.92 +SET 1331711.20 802103.18 +SET 1331724.45 1073543.20 +SET 1331795.76 831694.14 +SET 1331906.73 1151326.33 +SET 1331907.50 758287.25 +SET 1332023.40 850651.20 +SET 1332051.04 831853.56 +SET 13321.99 9237.21 +SET 1332156.82 786271.71 +SET 1332310.88 786362.64 +SET 1332318.90 758521.47 +SET 1332328.56 850846.08 +SET 1332464.94 786453.57 +SET 133261.90 78654.45 +SET 1332730.30 758755.69 +SET 1332750.51 1152055.71 +SET 1332773.06 786635.43 +SET 133287.05 89298.11 +SET 1333235.24 786908.22 +SET 1333244.04 851430.72 +SET 133334.50 89329.90 +SET 133346.00 80315.65 +SET 133354.92 85162.56 +SET 133381.95 89361.69 +SET 1333897.20 803419.83 +SET 1333964.50 759458.35 +SET 1334.19 989.56 +SET 1334005.54 787362.87 +SET 1334093.28 833128.92 +SET 1334159.52 852015.36 +SET 133429.40 89393.48 +SET 1334312.10 852112.80 +SET 1334313.66 787544.73 +SET 1334334.40 803683.16 +SET 1334375.90 759692.57 +SET 1334464.68 852210.24 +SET 1334467.72 787635.66 +SET 1334535.19 1003572.38 +SET 1334775.84 787817.52 +SET 1334787.30 759926.79 +SET 1334859.96 1153879.16 +SET 1334980.50 1076168.00 +SET 1335083.96 787999.38 +SET 13351.23 9902.52 +SET 1335203.46 1004074.92 +SET 1335380.16 852794.88 +SET 1335610.10 760395.23 +SET 1335815.80 760512.34 +SET 1335837.90 853087.20 +SET 1335990.48 853184.64 +SET 1336008.32 788544.96 +SET 1336135.52 834404.28 +SET 1336143.06 853282.08 +SET 133619.20 89520.64 +SET 1336295.64 853379.52 +SET 1336390.80 834563.70 +SET 1336448.22 853476.96 +SET 1336470.50 788817.75 +SET 1336520.40 804999.81 +SET 133654.00 100508.00 +SET 1336844.30 761097.89 +SET 1336901.36 834882.54 +SET 1336932.68 789090.54 +SET 1336969.41 1155702.61 +SET 13370.50 7612.15 +SET 1337050.00 761215.00 +SET 1337211.12 853964.16 +SET 133724.08 78927.24 +SET 1337255.70 761332.11 +SET 1337394.80 805526.47 +SET 1337411.92 835201.38 +SET 1337461.40 761449.22 +SET 133766.72 83536.08 +SET 1337667.10 761566.33 +SET 1337667.20 835360.80 +SET 1337813.19 1156431.99 +SET 1337821.44 854353.92 +SET 133783.20 80578.98 +SET 1337872.80 761683.44 +SET 133792.01 92768.79 +SET 1337974.02 854451.36 +SET 133809.00 89647.80 +SET 1338126.60 854548.80 +SET 1338269.20 806053.13 +SET 1338284.20 761917.66 +SET 1338433.04 835839.06 +SET 1338473.28 789999.84 +SET 1338489.90 762034.77 +SET 1338695.60 762151.88 +SET 1338736.92 854938.56 +SET 13388.55 9930.20 +SET 1338887.76 1079317.76 +SET 1338901.30 762268.99 +SET 1338943.60 836157.90 +SET 1339089.52 790363.56 +SET 1339198.88 836317.32 +SET 1339243.58 790454.49 +SET 1339312.70 762503.21 +SET 1339454.16 836476.74 +SET 1339499.82 855425.76 +SET 133951.35 89743.17 +SET 1339580.80 806843.12 +SET 133965.24 85552.32 +SET 1339652.40 855523.20 +SET 13397.88 9937.12 +SET 133977.28 43939.84 +SET 1339859.82 790818.21 +SET 1339964.72 836795.58 +SET 134022.00 83695.50 +SET 134032.20 79109.10 +SET 1340322.00 791091.00 +SET 1340415.30 856010.40 +SET 1340546.90 763205.87 +SET 1340752.60 763322.98 +SET 1340784.18 791363.79 +SET 1340892.40 807633.11 +SET 134093.70 89838.54 +SET 1340938.24 791454.72 +SET 1340958.30 763440.09 +SET 1340985.84 837433.26 +SET 1341092.30 791545.65 +SET 1341188.31 1159349.51 +SET 1341400.42 791727.51 +SET 134141.15 89870.33 +SET 134149.26 108141.76 +SET 1341575.40 763791.42 +SET 1341610.20 1159714.20 +SET 1341788.52 856887.36 +SET 134186.26 79200.03 +SET 1341886.16 1009100.32 +SET 1341986.80 764025.64 +SET 1342016.66 792091.23 +SET 1342093.68 857082.24 +SET 1342246.26 857179.68 +SET 1342324.78 792273.09 +SET 1342398.20 764259.86 +SET 1342453.98 1160443.58 +SET 1342517.52 838389.78 +SET 1342603.90 764376.97 +SET 134277.28 83854.92 +SET 13428.35 8996.57 +SET 134282.39 93108.81 +SET 1342856.58 857569.44 +SET 1343.52 996.48 +SET 1343028.08 838708.62 +SET 134305.12 44047.36 +SET 1343078.40 808949.76 +SET 1343095.08 792727.74 +SET 134322.10 76472.83 +SET 134322.27 101010.54 +SET 1343221.00 764728.30 +SET 1343222.70 1010105.40 +SET 1343249.14 792818.67 +SET 134340.32 79290.96 +SET 1343466.90 857959.20 +SET 1343515.60 809213.09 +SET 1343557.26 793000.53 +SET 1343619.48 858056.64 +SET 1343632.40 764962.52 +SET 1343711.32 793091.46 +SET 134378.40 90029.28 +SET 1343793.92 839186.88 +SET 1343890.97 1010607.94 +SET 1343952.80 809476.42 +SET 134414.40 44083.20 +SET 1344141.54 1161902.34 +SET 134422.98 85844.64 +SET 1344229.80 858446.40 +SET 1344249.50 765313.85 +SET 134445.85 93222.15 +SET 1344534.96 858641.28 +SET 1344559.24 1011110.48 +SET 1344559.76 839665.14 +SET 1344660.90 765548.07 +SET 1344687.54 858738.72 +SET 1344748.65 1084042.40 +SET 1344815.04 839824.56 +SET 134494.38 79381.89 +SET 1345070.32 839983.98 +SET 1345097.86 793909.83 +SET 134527.58 93278.82 +SET 134527.80 76589.94 +SET 1345297.86 859128.48 +SET 1345399.86 1084567.36 +SET 1345405.98 794091.69 +SET 134568.20 90156.44 +SET 1345829.10 1163361.10 +SET 1345868.16 794364.48 +SET 1346022.22 794455.41 +SET 1346051.07 1085092.32 +SET 134609.31 93335.49 +SET 1346100.80 766367.84 +SET 1346306.50 766484.95 +SET 134632.96 44154.88 +SET 1346564.05 1012618.10 +SET 1346638.46 794819.13 +SET 1346671.08 860005.44 +SET 1346672.88 1164090.48 +SET 1347013.20 811319.73 +SET 1347094.77 1164455.17 +SET 13472.52 9992.48 +SET 1347232.32 1013120.64 +SET 1347254.70 795182.85 +SET 134733.50 76707.05 +SET 1347353.49 1086142.24 +SET 1347367.84 841418.76 +SET 1347450.40 811583.06 +SET 1347516.66 1164819.86 +SET 134758.00 90283.60 +SET 1347623.12 841578.18 +SET 1347716.88 795455.64 +SET 134772.77 93448.83 +SET 134787.84 84173.76 +SET 1347870.94 795546.57 +SET 1347887.60 811846.39 +SET 134800.47 108666.72 +SET 1348004.70 1086667.20 +SET 134802.50 79563.75 +SET 1348025.00 795637.50 +SET 1348157.80 767538.94 +SET 1348349.46 861077.28 +SET 1348360.44 1165549.24 +SET 1348388.96 842056.44 +SET 1348487.18 795910.29 +SET 1348502.04 861174.72 +SET 134852.90 90347.18 +SET 1348569.20 767773.16 +SET 1348641.24 796001.22 +SET 1348654.62 861272.16 +SET 1348655.91 1087192.16 +SET 1348774.90 767890.27 +SET 1348782.33 1165913.93 +SET 1348807.20 861369.60 +SET 1348899.52 842375.28 +SET 1348949.36 796183.08 +SET 1349112.36 861564.48 +SET 1349204.22 1166278.62 +SET 1349237.13 1014628.26 +SET 1349307.12 1087717.12 +SET 134939.20 76824.16 +SET 1349410.08 842694.12 +SET 1349417.52 861759.36 +SET 134947.80 90410.76 +SET 134960.80 44262.40 +SET 1349875.26 862051.68 +SET 1349920.64 843012.96 +SET 134995.25 90442.55 +SET 1350009.10 768592.93 +SET 1350073.60 813163.04 +SET 1350181.84 796910.52 +SET 135033.30 86234.40 +SET 135043.12 84333.18 +SET 1350469.89 1167372.69 +SET 1350686.48 843491.22 +SET 135070.08 44298.24 +SET 1350790.74 862636.32 +SET 135090.15 90506.13 +SET 1350948.00 813689.70 +SET 1350952.14 797365.17 +SET 135099.69 93675.51 +SET 1351037.60 769178.48 +SET 1351095.90 862831.20 +SET 1351197.04 843810.06 +SET 1351248.48 862928.64 +SET 135137.60 90537.92 +SET 1351385.20 813953.03 +SET 1351414.32 797637.96 +SET 135144.90 76941.27 +SET 1351449.00 769412.70 +SET 1351452.32 843969.48 +SET 135185.05 90569.71 +SET 1352.85 1003.40 +SET 1352157.45 1168831.45 +SET 1352184.62 798092.61 +SET 1352259.60 814479.69 +SET 1352338.68 798183.54 +SET 1352563.17 1090341.92 +SET 1352578.48 1017140.96 +SET 135263.15 93788.85 +SET 1352683.20 770115.36 +SET 13528.50 10034.00 +SET 1352800.86 798456.33 +SET 135288.64 44369.92 +SET 13529.84 8449.26 +SET 1352926.86 864000.48 +SET 135298.40 84492.60 +SET 1352984.00 844926.00 +SET 1353001.23 1169560.83 +SET 1353079.44 864097.92 +SET 1353214.38 1090866.88 +SET 1353232.02 864195.36 +SET 1353239.28 845085.42 +SET 1353384.60 864292.80 +SET 1353417.10 798820.05 +SET 1353506.00 770583.80 +SET 1353537.18 864390.24 +SET 1353571.16 798910.98 +SET 1353571.20 815269.68 +SET 13537.83 10040.92 +SET 1353845.01 1170290.21 +SET 1353915.02 1018146.04 +SET 135397.92 44405.76 +SET 1353994.92 864682.56 +SET 1354008.40 815533.01 +SET 1354033.34 799183.77 +SET 1354187.40 799274.70 +SET 135426.69 117065.49 +SET 1354260.40 845723.10 +SET 1354445.60 815796.34 +SET 1354740.20 771286.46 +SET 1354770.96 846041.94 +SET 1354803.64 799638.42 +SET 1354882.80 816059.67 +SET 135491.04 86526.72 +SET 1354910.40 865267.20 +SET 1354957.70 799729.35 +SET 1355110.68 1171384.28 +SET 1355168.01 1092441.76 +SET 1355215.56 865462.08 +SET 1355265.82 799911.21 +SET 1355368.14 865559.52 +SET 1355419.88 800002.14 +SET 1355520.72 865656.96 +SET 1355532.57 1171748.97 +SET 1355536.80 846520.20 +SET 135556.30 77175.49 +SET 1355573.94 800093.07 +SET 135564.65 90824.03 +SET 1355673.30 865754.40 +SET 135572.80 80018.40 +SET 1355768.70 771872.01 +SET 1355792.08 846679.62 +SET 1355954.46 1172113.66 +SET 1355974.40 771989.12 +SET 1356036.12 800365.86 +SET 1356047.36 846839.04 +SET 135616.48 44477.44 +SET 1356180.10 772106.23 +SET 1356283.62 866144.16 +SET 1356302.64 846998.46 +SET 1356385.80 772223.34 +SET 135643.62 86624.16 +SET 1356470.43 1093491.68 +SET 13565.82 10061.68 +SET 1356557.92 847157.88 +SET 1356588.10 1020156.20 +SET 135659.55 90887.61 +SET 1356652.36 800729.58 +SET 1356798.24 1172843.04 +SET 135707.00 90919.40 +SET 1357121.64 1094016.64 +SET 135726.86 80109.33 +SET 1357268.60 801093.30 +SET 1357506.00 817639.65 +SET 135753.53 94128.87 +SET 135762.00 77292.60 +SET 1357620.00 772926.00 +SET 1357730.78 801366.09 +SET 1357772.85 1094541.60 +SET 1357834.32 847954.98 +SET 1357884.84 801457.02 +SET 1357943.20 817902.98 +SET 135796.20 86721.60 +SET 1358038.90 801547.95 +SET 1358192.96 801638.88 +SET 135835.04 44549.12 +SET 135835.26 94185.54 +SET 1358424.06 1095066.56 +SET 135848.58 117430.18 +SET 1358485.80 1174301.80 +SET 135849.35 91014.77 +SET 1358655.14 801911.67 +SET 1358809.20 802002.60 +SET 1358854.20 773628.66 +SET 1358877.48 867800.64 +SET 1358907.69 1174666.49 +SET 1358963.26 802093.53 +SET 1359117.32 802184.46 +SET 1359261.18 1022166.36 +SET 1359329.58 1175031.18 +SET 1359335.22 868092.96 +SET 1359425.44 802366.32 +SET 135944.25 91078.35 +SET 135944.32 44584.96 +SET 1359471.30 773979.99 +SET 1359621.28 849070.92 +SET 1359640.38 868287.84 +SET 1359733.56 802548.18 +SET 1359751.47 1175395.87 +SET 1359882.70 774214.21 +SET 1359887.62 802639.11 +SET 135998.72 94298.88 +SET 1360131.84 849389.76 +SET 1360250.70 868677.60 +SET 13603.14 10089.36 +SET 1360503.86 803002.83 +SET 1360595.25 1176125.25 +SET 1360657.92 803093.76 +SET 1360705.50 774682.65 +SET 1360708.44 868969.92 +SET 1360861.02 869067.36 +SET 1360897.68 849868.02 +SET 1360911.20 774799.76 +SET 1361017.14 1176489.94 +SET 1361028.90 1097166.40 +SET 1361116.90 774916.87 +SET 1361152.96 850027.44 +SET 1361166.18 869262.24 +SET 1361265.99 1023673.98 +SET 1361428.22 803548.41 +SET 1361439.03 1176854.63 +SET 1361471.34 869457.12 +SET 1361528.30 775151.09 +SET 1361582.28 803639.34 +SET 136162.18 94412.22 +SET 1361623.92 869554.56 +SET 1361734.00 775268.20 +SET 1361736.34 803730.27 +SET 1361776.50 869652.00 +SET 13618.15 9123.73 +SET 1361890.40 803821.20 +SET 1361934.26 1024176.52 +SET 1361939.70 775385.31 +SET 1362.18 1010.32 +SET 1362081.66 869846.88 +SET 1362234.24 869944.32 +SET 1362282.81 1177584.01 +SET 1362315.20 820536.28 +SET 1362352.58 804093.99 +SET 136243.91 94468.89 +SET 1362506.64 804184.92 +SET 136253.94 87013.92 +SET 1362684.64 850983.96 +SET 1362691.98 870236.64 +SET 136272.16 44692.48 +SET 136276.40 91300.88 +SET 1362762.50 775853.75 +SET 1362814.76 804366.78 +SET 1362968.20 775970.86 +SET 1362968.82 804457.71 +SET 1362982.53 1098741.28 +SET 1363126.59 1178313.39 +SET 136323.85 91332.67 +SET 1363302.30 870626.40 +SET 136343.10 80473.05 +SET 1363431.00 804730.50 +SET 1363450.48 851462.22 +SET 1363585.06 804821.43 +SET 1363585.30 776322.19 +SET 1363626.80 821326.27 +SET 1363633.74 1099266.24 +SET 1363760.04 870918.72 +SET 1363912.62 871016.16 +SET 1363970.37 1179042.77 +SET 136406.40 82158.96 +SET 1364065.20 871113.60 +SET 136407.37 94582.23 +SET 1364201.30 805185.15 +SET 1364217.78 871211.04 +SET 1364284.95 1099791.20 +SET 1364370.36 871308.48 +SET 1364392.26 1179407.46 +SET 1364501.20 821852.93 +SET 1364509.42 805367.01 +SET 1364663.48 805457.94 +SET 1364675.52 871503.36 +SET 136497.16 80563.98 +SET 1365275.61 1026689.22 +SET 1365279.72 805821.66 +SET 1365375.60 822379.59 +SET 1365433.78 805912.59 +SET 1365438.42 871990.56 +SET 1365492.72 852737.58 +SET 1365587.37 1100841.12 +SET 1365587.84 806003.52 +SET 136559.10 87208.80 +SET 1365642.30 777493.29 +SET 136584.80 77761.04 +SET 1365848.00 777610.40 +SET 13659.12 10130.88 +SET 1366048.74 872380.32 +SET 1366050.02 806276.31 +SET 1366053.70 777727.51 +SET 136608.55 91523.41 +SET 1366258.56 853215.84 +SET 1366353.90 872575.20 +SET 1366506.48 872672.64 +SET 1366666.26 806640.03 +SET 1366670.80 778078.84 +SET 1366811.64 872867.52 +SET 1366876.50 778195.95 +SET 1366889.79 1101891.04 +SET 136709.28 44835.84 +SET 1367128.44 806912.82 +SET 1367279.68 853853.52 +SET 1367287.90 778430.17 +SET 1367345.49 1181960.29 +SET 13675.41 11024.16 +SET 136750.90 91618.78 +SET 1367534.96 854012.94 +SET 136754.10 110241.60 +SET 1367561.60 823696.24 +SET 1367574.54 873354.72 +SET 13677.78 10144.72 +SET 1367898.74 807367.47 +SET 136790.50 77878.15 +SET 1367948.69 1028699.38 +SET 1367998.80 823959.57 +SET 136805.28 80745.84 +SET 1368110.70 778898.61 +SET 136816.02 94865.58 +SET 136818.56 44871.68 +SET 1368184.86 873744.48 +SET 1368192.21 1102940.96 +SET 1368206.86 807549.33 +SET 136830.08 85449.12 +SET 1368316.40 779015.72 +SET 1368337.44 873841.92 +SET 1368360.92 807640.26 +SET 136843.60 82422.29 +SET 1368436.00 824222.90 +SET 1368811.36 854810.04 +SET 1368873.20 824486.23 +SET 136897.75 94922.25 +SET 1369066.64 854969.46 +SET 1369285.23 1029704.46 +SET 1369285.28 808185.84 +SET 1369344.90 779601.27 +SET 136940.70 91745.94 +SET 1369454.94 1183783.74 +SET 1369494.63 1103990.88 +SET 1369577.20 855288.30 +SET 1369710.66 874718.88 +SET 1369756.30 779835.49 +SET 136979.48 94978.92 +SET 1369876.83 1184148.43 +SET 136988.15 91777.73 +SET 1369901.52 808549.56 +SET 136996.20 77995.26 +SET 1369962.00 779952.60 +SET 1370055.58 808640.49 +SET 137037.12 44943.36 +SET 1370373.40 780186.82 +SET 13705.77 10165.48 +SET 1370579.10 780303.93 +SET 1370598.32 855925.98 +SET 137061.21 95035.59 +SET 1370626.14 875303.52 +SET 1370671.82 809004.21 +SET 137085.36 85608.54 +SET 1370931.30 875498.40 +SET 1370990.50 780538.15 +SET 1371.51 1017.24 +SET 1371059.20 825802.88 +SET 1371083.88 875595.84 +SET 13711.34 8092.77 +SET 1371108.88 856244.82 +SET 137114.25 118524.25 +SET 1371290.04 1031212.08 +SET 137130.50 91873.10 +SET 1371389.04 875790.72 +SET 137142.94 95092.26 +SET 1371496.40 826066.21 +SET 1371564.39 1185607.19 +SET 1371750.24 809640.72 +SET 1371813.30 781006.59 +SET 1371874.72 856723.08 +SET 1371958.31 1031714.62 +SET 1371999.36 876180.48 +SET 1372019.00 781123.70 +SET 1372130.00 856882.50 +SET 1372212.42 809913.51 +SET 1372224.70 781240.81 +SET 1372304.52 876375.36 +SET 1372609.68 876570.24 +SET 1372640.56 857201.34 +SET 137267.46 81018.63 +SET 1372674.60 810186.30 +SET 137272.85 91968.47 +SET 1372750.68 1106615.68 +SET 137280.80 82685.62 +SET 1372914.84 876765.12 +SET 1373047.50 781709.25 +SET 1373067.42 876862.56 +SET 1373136.78 810459.09 +SET 13732.20 8769.60 +SET 137322.00 87696.00 +SET 1373253.20 781826.36 +SET 13733.76 10186.24 +SET 1373401.89 1107140.64 +SET 1373406.40 857679.60 +SET 1373598.96 810731.88 +SET 1373673.84 1187430.64 +SET 1373677.74 877252.32 +SET 1373682.40 827382.86 +SET 1373753.02 810822.81 +SET 1373830.32 877349.76 +SET 137405.31 110766.56 +SET 1374053.10 1107665.60 +SET 1374061.14 811004.67 +SET 1374095.73 1187795.33 +SET 137415.20 92063.84 +SET 1374172.24 858157.86 +SET 1374281.70 782411.91 +SET 1374369.26 811186.53 +SET 1374440.64 877739.52 +SET 1374517.62 1188160.02 +SET 1374523.32 811277.46 +SET 1374593.22 877836.96 +SET 1374677.38 811368.39 +SET 1374682.80 858476.70 +SET 137469.86 95318.94 +SET 1374693.10 782646.13 +SET 1374745.80 877934.40 +SET 1374985.50 811550.25 +SET 1375050.96 878129.28 +SET 1375310.20 782997.46 +SET 1375447.68 811823.04 +SET 137551.59 95375.61 +SET 1375601.74 811913.97 +SET 1375661.28 878519.04 +SET 137575.58 81200.49 +SET 1375755.80 812004.90 +SET 1375813.86 878616.48 +SET 1375868.40 828699.51 +SET 1375959.20 859273.80 +SET 1375967.93 1034729.86 +SET 137605.00 92191.00 +SET 137627.16 87890.88 +SET 1376271.60 878908.80 +SET 1376305.60 828962.84 +SET 1376338.70 783583.01 +SET 1376544.40 783700.12 +SET 1376576.76 879103.68 +SET 1376636.20 1035232.40 +SET 1376657.94 1109765.44 +SET 1376725.04 859752.06 +SET 1376729.34 879201.12 +SET 1376881.92 879298.56 +SET 1376955.80 783934.34 +SET 1376988.28 812732.34 +SET 137699.90 92254.58 +SET 1377048.96 1190348.16 +SET 13771.08 10213.92 +SET 1377142.34 812823.27 +SET 137715.05 95488.95 +SET 1377161.50 784051.45 +SET 1377180.00 829489.50 +SET 1377296.40 812914.20 +SET 1377339.66 879590.88 +SET 137747.35 92286.37 +SET 1377644.82 879785.76 +SET 1377746.16 860389.74 +SET 1377758.58 813186.99 +SET 1377778.60 784402.78 +SET 137779.74 87988.32 +SET 1377797.40 879883.20 +SET 1377960.36 1110815.36 +SET 1378001.44 860549.16 +SET 137802.08 45194.24 +SET 13781.90 7846.37 +SET 1378102.56 880078.08 +SET 1378190.00 784637.00 +SET 1378256.72 860708.58 +SET 1378491.60 830279.49 +SET 13785.12 8608.68 +SET 137851.20 86086.80 +SET 1378560.30 880370.40 +SET 1378682.94 813732.57 +SET 1378736.52 1191806.92 +SET 137878.51 95602.29 +SET 1378837.00 813823.50 +SET 1378865.46 880565.28 +SET 1378928.80 830542.82 +SET 1379022.56 861186.84 +SET 1379145.12 814005.36 +SET 1379218.50 785222.55 +SET 1379262.78 1111865.28 +SET 1379366.00 830806.15 +SET 137958.03 119253.63 +SET 1379628.36 881052.48 +SET 1379780.94 881149.92 +SET 1379788.40 861665.10 +SET 1379933.52 881247.36 +SET 1380002.19 1192900.99 +SET 1380041.30 785690.99 +SET 1380043.68 861824.52 +SET 1380069.48 814550.94 +SET 138024.70 78580.81 +SET 1380247.00 785808.10 +SET 138032.05 92477.11 +SET 1380452.70 785925.21 +SET 1380531.66 814823.73 +SET 1380543.84 881637.12 +SET 1380685.72 814914.66 +SET 13807.95 9250.89 +SET 1380839.78 815005.59 +SET 138084.90 88183.20 +SET 1380864.10 786159.43 +SET 1381001.58 881929.44 +SET 1381069.80 786276.54 +SET 1381216.41 1113440.16 +SET 138126.95 92540.69 +SET 138129.92 45301.76 +SET 1381456.02 815369.31 +SET 1381459.32 882221.76 +SET 138174.40 92572.48 +SET 1381764.14 815551.17 +SET 1381764.48 882416.64 +SET 1381830.64 862940.46 +SET 1381892.60 786744.98 +SET 1381917.06 882514.08 +SET 1381918.20 815642.10 +SET 1382069.64 882611.52 +SET 1382085.92 863099.88 +SET 138221.85 92604.27 +SET 1382222.22 882708.96 +SET 1382304.00 786979.20 +SET 138237.48 88280.64 +SET 138239.20 45337.60 +SET 1382509.70 787096.31 +SET 1382527.38 882903.84 +SET 1382533.53 1195089.13 +SET 1382650.63 1039755.26 +SET 138269.30 92636.06 +SET 13827.06 10255.44 +SET 1382715.40 787213.42 +SET 138287.16 95885.64 +SET 1382921.10 787330.53 +SET 1382985.12 883196.16 +SET 1382996.62 816278.61 +SET 1383107.04 863737.56 +SET 1383137.70 883293.60 +SET 1383304.74 816460.47 +SET 138331.89 104025.78 +SET 1383362.32 863896.98 +SET 1383442.86 883488.48 +SET 1383538.20 787681.86 +SET 1383595.44 883585.92 +SET 13836.39 10262.36 +SET 138361.76 86405.64 +SET 1383748.02 883683.36 +SET 1383766.92 816733.26 +SET 1383821.25 1115540.00 +SET 1383987.17 1040760.34 +SET 1384053.18 883878.24 +SET 1384205.76 883975.68 +SET 1384221.09 1196547.89 +SET 1384229.10 817006.05 +SET 138436.10 78815.03 +SET 1384361.00 788150.30 +SET 1384383.44 864534.66 +SET 1384472.46 1116064.96 +SET 138450.62 95998.98 +SET 1384510.92 884170.56 +SET 1384566.70 788267.41 +SET 138457.76 45409.28 +SET 1384642.98 1196912.58 +SET 1384655.44 1041262.88 +SET 1384663.50 884268.00 +SET 1384691.28 817278.84 +SET 1384772.40 788384.52 +SET 1384845.34 817369.77 +SET 138499.94 81746.07 +SET 1384999.40 817460.70 +SET 1385049.60 834229.44 +SET 138506.55 92795.01 +SET 1385123.67 1116589.92 +SET 1385149.28 865012.92 +SET 1385153.46 817551.63 +SET 1385323.71 1041765.42 +SET 138542.64 88475.52 +SET 1385426.40 884755.20 +SET 1385461.58 817733.49 +SET 1385486.80 834492.77 +SET 13855.05 10276.20 +SET 1385595.20 788852.96 +SET 1385615.64 817824.42 +SET 138567.04 45445.12 +SET 1385774.88 1117114.88 +SET 1385800.90 788970.07 +SET 1385908.65 1198006.65 +SET 1385991.98 1042267.96 +SET 138601.45 92858.59 +SET 1386077.82 818097.21 +SET 1386170.40 865650.60 +SET 1386231.88 818188.14 +SET 1386341.88 885339.84 +SET 13864.38 10283.12 +SET 138641.80 78932.14 +SET 13865.40 8183.70 +SET 1386623.70 789438.51 +SET 1386647.04 885534.72 +SET 1386752.43 1198736.03 +SET 138676.32 45480.96 +SET 1386829.40 789555.62 +SET 138695.81 96168.99 +SET 1387035.10 789672.73 +SET 1387174.32 1199100.72 +SET 1387191.52 866288.28 +SET 1387240.80 789789.84 +SET 138743.80 92953.96 +SET 1387562.52 886119.36 +SET 1387618.42 819006.51 +SET 1387702.08 866607.12 +SET 1387715.10 886216.80 +SET 1387728.51 1118689.76 +SET 1387867.68 886314.24 +SET 138791.25 92985.75 +SET 1388063.60 790258.28 +SET 1388080.60 819279.30 +SET 1388110.00 836072.75 +SET 1388172.84 886509.12 +SET 1388212.64 866925.96 +SET 1388269.30 790375.39 +SET 13883.04 10296.96 +SET 1388379.72 1119214.72 +SET 138838.70 93017.54 +SET 1388388.72 819461.16 +SET 1388439.99 1200194.79 +SET 138847.80 88670.40 +SET 1388547.20 836336.08 +SET 138859.27 96282.33 +SET 1388783.16 886898.88 +SET 138886.15 93049.33 +SET 1388984.40 836599.41 +SET 1389.41 963.39 +SET 1389092.10 790843.83 +SET 1389233.76 867563.64 +SET 1389240.90 887191.20 +SET 1389297.80 790960.94 +SET 138941.00 96339.00 +SET 1389421.60 836862.74 +SET 1389682.14 1120264.64 +SET 1389698.64 887483.52 +SET 1389709.20 791195.16 +SET 1389744.32 867882.48 +SET 1389775.26 820279.53 +SET 1389851.22 887580.96 +SET 1389858.80 837126.07 +SET 139000.38 88767.84 +SET 1390003.80 887678.40 +SET 1390083.38 820461.39 +SET 1390120.60 791429.38 +SET 1390127.55 1201653.55 +SET 139028.50 93144.70 +SET 1390296.00 837389.40 +SET 1390510.16 868360.74 +SET 1390532.00 791663.60 +SET 1390549.44 1202018.24 +SET 1390614.12 888068.16 +SET 1390733.20 837652.73 +SET 139075.95 93176.49 +SET 1390766.70 888165.60 +SET 1390971.33 1202382.93 +SET 1391007.74 821006.97 +SET 1391020.72 868679.58 +SET 1391170.40 837916.06 +SET 1391276.00 868839.00 +SET 1391315.86 821188.83 +SET 1391338.14 1046288.28 +SET 1391529.60 888652.80 +SET 1391531.28 868998.42 +SET 1391560.50 792249.15 +SET 1391635.77 1121839.52 +SET 1391682.18 888750.24 +SET 1391778.04 821461.62 +SET 1391786.56 869157.84 +SET 139186.19 96509.01 +SET 1391971.90 792483.37 +SET 13920.36 10324.64 +SET 1392177.60 792600.48 +SET 1392286.98 1122364.48 +SET 1392292.50 889140.00 +SET 1392394.28 821825.34 +SET 1392445.08 889237.44 +SET 1392482.00 838706.05 +SET 1392548.34 821916.27 +SET 139258.90 79283.47 +SET 1392589.00 792834.70 +SET 1392658.89 1203841.69 +SET 1392674.68 1047293.36 +SET 1392750.24 889432.32 +SET 1392807.68 869795.52 +SET 1392856.46 822098.13 +SET 139305.54 88962.72 +SET 1393080.78 1204206.38 +SET 1393164.58 822279.99 +SET 1393206.10 793186.03 +SET 1393207.98 889724.64 +SET 1393411.80 793303.14 +SET 1393665.72 890016.96 +SET 1393780.82 822643.71 +SET 1393793.60 839496.04 +SET 1393823.20 793537.36 +SET 1393924.56 1204935.76 +SET 1393970.88 890211.84 +SET 1394011.22 1048298.44 +SET 1394028.90 793654.47 +SET 1394088.94 822825.57 +SET 1394230.80 839759.37 +SET 1394240.61 1123939.36 +SET 1394243.00 822916.50 +SET 139431.38 96679.02 +SET 1394346.45 1205300.45 +SET 1394397.06 823007.43 +SET 139441.28 45731.84 +SET 1394551.12 823098.36 +SET 1394581.20 890601.60 +SET 1394646.00 794005.80 +SET 139466.80 84002.27 +SET 1394668.00 840022.70 +SET 1394733.78 890699.04 +SET 1394768.34 1205665.14 +SET 1395057.40 794240.02 +SET 1395167.36 823462.08 +SET 1395344.10 891088.80 +SET 1395360.48 871389.72 +SET 139550.56 45767.68 +SET 139578.36 82382.58 +SET 1395783.60 823825.80 +SET 1395801.84 891381.12 +SET 139594.84 96792.36 +SET 1395979.60 840812.69 +SET 1396016.03 1049806.06 +SET 1396034.01 1206759.21 +SET 1396091.72 824007.66 +SET 139610.70 89157.60 +SET 1396107.00 891576.00 +SET 1396194.24 1125514.24 +SET 139638.16 87202.74 +SET 1396381.60 872027.40 +SET 1396412.16 891770.88 +SET 139645.35 93557.97 +SET 1396455.90 1207123.90 +SET 13967.01 10359.24 +SET 1396707.96 824371.38 +SET 1396854.00 841339.35 +SET 1396877.79 1207488.59 +SET 1396892.16 872346.24 +SET 1396908.70 795294.01 +SET 1397114.40 795411.12 +SET 1397170.14 824644.17 +SET 1397175.06 892258.08 +SET 1397320.10 795528.23 +SET 1397402.72 872665.08 +SET 13975.83 9690.57 +SET 13976.34 10366.16 +SET 139763.28 89255.04 +SET 1397632.32 824916.96 +SET 139769.12 45839.36 +SET 1397721.57 1208217.97 +SET 1397728.40 841866.01 +SET 1397731.50 795762.45 +SET 1397937.20 795879.56 +SET 1398094.50 825189.75 +SET 1398248.56 825280.68 +SET 1398395.70 893037.60 +SET 139840.03 96962.37 +SET 1398402.62 825371.61 +SET 1398548.28 893135.04 +SET 1398679.12 873462.18 +SET 1398689.11 1051816.22 +SET 1398864.80 825644.40 +SET 139893.44 87362.16 +SET 1398934.40 873621.60 +SET 1399.50 1038.00 +SET 1399158.60 893524.80 +SET 1399172.92 825826.26 +SET 139921.76 97019.04 +SET 1399311.18 893622.24 +SET 1399357.38 1052318.76 +SET 1399409.13 1209676.73 +SET 1399444.96 873940.44 +SET 1399463.76 893719.68 +SET 1399582.80 796816.44 +SET 1399768.92 893914.56 +SET 1399789.16 826189.98 +SET 1399914.40 843182.66 +SET 1399955.52 874259.28 +SET 1399994.20 797050.66 +SET 140003.49 97075.71 +SET 1400097.28 826371.84 +SET 140010.15 112866.40 +SET 1400101.50 1128664.00 +SET 1400199.90 797167.77 +SET 1400210.80 874418.70 +SET 140024.95 93812.29 +SET 1400405.60 797284.88 +SET 1400559.46 826644.63 +SET 140068.44 89449.92 +SET 1400684.40 894499.20 +SET 1400713.52 826735.56 +SET 1400721.36 874737.54 +SET 1400788.80 843709.32 +SET 140081.70 79751.91 +SET 140085.22 97132.38 +SET 1400976.64 874896.96 +SET 1401021.64 826917.42 +SET 1401022.70 797636.21 +SET 1401096.69 1211135.49 +SET 1401142.14 894791.52 +SET 1401228.40 797753.32 +SET 1401231.92 875056.38 +SET 1401294.72 894888.96 +SET 14013.66 10393.84 +SET 1401329.76 827099.28 +SET 1401403.92 1129713.92 +SET 1401483.82 827190.21 +SET 1401487.20 875215.80 +SET 1401518.58 1211500.18 +SET 1401791.94 827372.07 +SET 140194.60 82746.30 +SET 1401997.76 875534.64 +SET 1402057.62 895376.16 +SET 1402100.06 827553.93 +SET 1402100.40 844499.31 +SET 140214.75 93939.45 +SET 140221.02 89547.36 +SET 1402256.90 798338.87 +SET 1402462.60 798455.98 +SET 1402508.32 875853.48 +SET 1402515.36 895668.48 +SET 1402537.60 844762.64 +SET 1402667.94 895765.92 +SET 1402668.30 798573.09 +SET 1402763.60 876012.90 +SET 1402870.36 828008.58 +SET 1403024.42 828099.51 +SET 1403079.70 798807.31 +SET 1403178.48 828190.44 +SET 1403206.14 1212958.94 +SET 1403274.16 876331.74 +SET 1403278.26 896155.68 +SET 140336.70 105533.40 +SET 140341.20 84528.93 +SET 1403430.84 896253.12 +SET 140348.66 82837.23 +SET 1403486.60 828372.30 +SET 1403529.44 876491.16 +SET 140357.10 94034.82 +SET 1403628.03 1213323.63 +SET 1403696.80 799158.64 +SET 14037.36 8964.48 +SET 1403784.72 876650.58 +SET 14040.40 8768.10 +SET 1404040.00 876810.00 +SET 1404041.16 896642.88 +SET 1404049.92 1213688.32 +SET 1404102.84 828736.02 +SET 1404286.40 845815.96 +SET 1404346.32 896837.76 +SET 1404471.81 1214053.01 +SET 1404498.90 896935.20 +SET 1404550.56 877128.84 +SET 1404703.54 1056339.08 +SET 1404725.30 799744.19 +SET 140489.37 121441.77 +SET 1404931.00 799861.30 +SET 1405136.70 799978.41 +SET 1405316.40 877607.10 +SET 1405342.40 800095.52 +SET 1405371.81 1056841.62 +SET 140546.90 94161.98 +SET 1405489.38 829554.39 +SET 1405566.96 897617.28 +SET 1405571.68 877766.52 +SET 1405872.12 897812.16 +SET 1405951.56 829827.18 +SET 1406035.20 846869.28 +SET 1406082.24 878085.36 +SET 1406105.62 829918.11 +SET 1406159.37 1215511.77 +SET 1406165.20 800563.96 +SET 1406337.52 878244.78 +SET 140641.80 94225.56 +SET 1406413.74 830099.97 +SET 1406567.80 830190.90 +SET 140657.33 97529.07 +SET 1406581.26 1215876.46 +SET 1406635.02 898299.36 +SET 1406782.30 800915.29 +SET 1406787.60 898396.80 +SET 1406848.08 878563.62 +SET 1406988.00 801032.40 +SET 1407092.76 898591.68 +SET 1407184.04 830554.62 +SET 1407264.81 1134438.56 +SET 1407338.10 830645.55 +SET 1407376.62 1058349.24 +SET 1407397.92 898786.56 +SET 1407399.40 801266.62 +SET 1407492.16 830736.48 +SET 140752.64 46161.92 +SET 1407613.92 879041.88 +SET 1407646.22 830827.41 +SET 140778.40 84792.26 +SET 14078.97 10442.28 +SET 1407810.80 801500.84 +SET 140784.15 94320.93 +SET 1408.83 1044.92 +SET 1408008.24 899176.32 +SET 1408108.40 831100.20 +SET 1408221.20 848185.93 +SET 1408262.46 831191.13 +SET 1408268.82 1217335.22 +SET 1408416.52 831282.06 +SET 1408465.98 899468.64 +SET 1408635.04 879679.56 +SET 1408658.40 848449.26 +SET 140879.05 94384.51 +SET 14088.30 10449.20 +SET 1408878.70 831554.85 +SET 140902.52 97699.08 +SET 1409032.76 831645.78 +SET 1409095.60 848712.59 +SET 1409145.60 879998.40 +SET 1409186.82 831736.71 +SET 1409228.88 899955.84 +SET 1409534.49 1218429.29 +SET 1409649.00 832009.50 +SET 1409686.62 900248.16 +SET 140971.20 46233.60 +SET 140973.95 94448.09 +SET 140983.92 90034.56 +SET 1409839.20 900345.60 +SET 1409911.44 880476.66 +SET 1409956.38 1218793.98 +SET 1409970.00 849239.25 +SET 1410279.20 802906.16 +SET 1410296.94 900637.92 +SET 1410378.27 1219158.67 +SET 1410419.30 832464.15 +SET 1410449.52 900735.36 +SET 1410573.36 832555.08 +SET 1410677.28 880954.92 +SET 141068.85 94511.67 +SET 1410717.97 1060861.94 +SET 141080.48 46269.44 +SET 1410844.40 849765.91 +SET 1411035.54 832827.87 +SET 1411307.70 803491.71 +SET 141136.50 90132.00 +SET 1411443.12 881433.18 +SET 141147.71 97869.09 +SET 1411497.72 833100.66 +SET 1411517.58 901417.44 +SET 141163.75 94575.25 +SET 1411643.94 1220252.74 +SET 1411670.16 901514.88 +SET 141169.84 88159.26 +SET 1411805.84 833282.52 +SET 141189.76 46305.28 +SET 141211.20 94607.04 +SET 1412127.90 901807.20 +SET 141215.60 85055.59 +SET 1412156.00 850555.90 +SET 1412422.08 833646.24 +SET 1412541.90 804194.37 +SET 1412576.14 833737.17 +SET 1412585.64 902099.52 +SET 1412593.20 850819.23 +SET 1412722.78 1062369.56 +SET 1412730.20 833828.10 +SET 1412884.26 833919.03 +SET 141289.08 90229.44 +SET 1412909.61 1221346.81 +SET 1412953.30 804428.59 +SET 1412974.80 882389.70 +SET 1413030.40 851082.56 +SET 1413125.70 1139163.20 +SET 1413159.00 804545.70 +SET 1413195.96 902489.28 +SET 1413346.44 834191.82 +SET 14134.95 10483.80 +SET 1413485.36 882708.54 +SET 1413500.50 834282.75 +SET 1413570.40 804779.92 +SET 1413740.64 882867.96 +SET 1413806.28 902879.04 +SET 1413904.80 851609.22 +SET 1413981.80 805014.14 +SET 14140.10 9473.42 +SET 141408.32 46376.96 +SET 1414111.44 903073.92 +SET 1414116.74 834646.47 +SET 1414264.02 903171.36 +SET 1414393.20 805248.36 +SET 1414416.60 903268.80 +SET 1414424.86 834828.33 +SET 141448.45 94765.99 +SET 1414506.48 883346.22 +SET 1414721.76 903463.68 +SET 1414727.59 1063877.18 +SET 1414779.20 852135.88 +SET 1414804.60 805482.58 +SET 141495.90 94797.78 +SET 1415041.10 835192.05 +SET 141517.60 46412.80 +SET 1415195.16 835282.98 +SET 1415216.00 805716.80 +SET 1415272.32 883824.48 +SET 14153.61 10497.64 +SET 1415332.08 903853.44 +SET 1415527.60 883983.90 +SET 1415637.24 904048.32 +SET 1415653.60 852662.54 +SET 1415782.88 884143.32 +SET 141581.14 83564.67 +SET 1415811.40 835646.70 +SET 1415862.84 1223899.64 +SET 1415942.40 904243.20 +SET 1416038.16 884302.74 +SET 1416038.80 806185.24 +SET 1416064.13 1064882.26 +SET 1416094.98 904340.64 +SET 14162.94 10504.56 +SET 1416247.56 904438.08 +SET 141626.88 46448.64 +SET 1416293.44 884462.16 +SET 1416400.14 904535.52 +SET 1416450.20 806419.46 +SET 141652.80 85318.92 +SET 1416552.72 904632.96 +SET 1416655.90 806536.57 +SET 141673.24 106538.48 +SET 1416735.76 836192.28 +SET 1416889.82 836283.21 +SET 1417059.28 884940.42 +SET 1417067.30 806770.79 +SET 1417128.51 1224993.71 +SET 141719.82 98265.78 +SET 14172.27 10511.48 +SET 1417273.00 806887.90 +SET 14173.52 8365.56 +SET 1417315.62 905120.16 +SET 141733.15 94956.73 +SET 141736.16 46484.48 +SET 1417400.67 1065887.34 +SET 1417402.40 853715.86 +SET 141746.82 90521.76 +SET 141755.04 122535.84 +SET 1417684.17 1142837.92 +SET 141780.60 94988.52 +SET 1417825.12 885418.68 +SET 1417839.60 853979.19 +SET 141801.55 98322.45 +SET 1418231.10 905704.80 +SET 1418507.20 807590.56 +SET 1418584.48 837283.44 +SET 14187.55 9505.21 +SET 1418712.90 807707.67 +SET 1418714.00 854505.85 +SET 1418737.21 1066892.42 +SET 1418816.07 1226452.47 +SET 1418841.42 906094.56 +SET 141889.26 83746.53 +SET 1418918.60 807824.78 +SET 14190.93 10525.32 +SET 1419101.52 886215.78 +SET 1419124.30 807941.89 +SET 1419146.58 906289.44 +SET 1419200.72 837647.16 +SET 1419330.00 808059.00 +SET 1419508.84 837829.02 +SET 1419741.40 808293.22 +SET 1419816.96 838010.88 +SET 1419867.36 886694.04 +SET 1419947.10 808410.33 +SET 1419971.02 838101.81 +SET 1420025.60 855295.84 +SET 1420122.64 886853.46 +SET 1420214.64 906971.52 +SET 1420279.14 838283.67 +SET 1420377.92 887012.88 +SET 142051.98 90716.64 +SET 1420519.80 907166.40 +SET 1420633.20 887172.30 +SET 142065.30 95179.26 +SET 1420741.32 838556.46 +SET 1420824.96 907361.28 +SET 1420888.48 887331.72 +SET 1420900.00 855822.50 +SET 1420925.52 1228275.92 +SET 1420940.22 1145462.72 +SET 1420975.60 808995.88 +SET 1420977.54 907458.72 +SET 142112.75 95211.05 +SET 1421203.50 838829.25 +SET 1421337.20 856085.83 +SET 1421399.04 887650.56 +SET 1421511.62 839011.11 +SET 142160.20 95242.84 +SET 1421654.32 887809.98 +SET 142176.93 122900.53 +SET 1421819.74 839192.97 +SET 1422004.10 809581.43 +SET 14221.02 9860.58 +SET 1422191.19 1229369.99 +SET 1422211.60 856612.49 +SET 1422242.64 1146512.64 +SET 1422415.50 809815.65 +SET 1422420.16 888288.24 +SET 1422613.08 1229734.68 +SET 1422621.20 809932.76 +SET 14228.25 10553.00 +SET 142282.56 46663.68 +SET 142291.93 98662.47 +SET 1422961.08 908725.44 +SET 1423086.00 857139.15 +SET 1423113.66 908822.88 +SET 1423206.28 840011.34 +SET 1423360.34 840102.27 +SET 142341.51 107041.02 +SET 1423418.82 909017.76 +SET 14235.00 9537.00 +SET 142350.00 95370.00 +SET 1423514.40 840193.20 +SET 1423523.20 857402.48 +SET 142357.14 90911.52 +SET 1423668.46 840284.13 +SET 1423723.98 909212.64 +SET 1423822.52 840375.06 +SET 1423855.40 810635.42 +SET 1423951.84 889244.76 +SET 1423960.40 857665.81 +SET 1423976.58 840465.99 +SET 1424181.72 909504.96 +SET 1424196.27 1148087.52 +SET 1424266.80 810869.64 +SET 1424300.64 1231193.44 +SET 1424334.30 909602.40 +SET 1424592.82 840829.71 +SET 1424639.46 909797.28 +SET 1424717.68 889723.02 +SET 1424746.88 840920.64 +SET 1424751.64 1071415.28 +SET 1424883.90 811220.97 +SET 142492.35 95465.37 +SET 1424972.96 889882.44 +SET 1425089.60 811338.08 +SET 1425144.42 1231922.82 +SET 1425295.30 811455.19 +SET 142537.12 98832.48 +SET 142539.80 95497.16 +SET 1425402.36 910284.48 +SET 1425419.91 1071917.82 +SET 142550.10 81157.23 +SET 1425517.18 841375.29 +SET 1425554.94 910381.92 +SET 1425671.24 841466.22 +SET 1425706.70 811689.41 +SET 1425707.52 910479.36 +SET 1425860.10 910576.80 +SET 142587.25 95528.95 +SET 1425912.40 811806.52 +SET 142598.82 123265.22 +SET 1425988.20 1232652.20 +SET 1425994.08 890520.12 +SET 1426012.68 910674.24 +SET 1426088.18 1072420.36 +SET 1426118.10 811923.63 +SET 1426133.42 841739.01 +SET 142614.99 114966.24 +SET 1426146.40 858982.46 +SET 1426317.84 910869.12 +SET 1426323.80 812040.74 +SET 142634.70 95560.74 +SET 1426441.54 841920.87 +SET 1426470.42 910966.56 +SET 14265.57 10580.68 +SET 1426735.20 812274.96 +SET 1426749.66 842102.73 +SET 1426756.45 1072922.90 +SET 1426775.58 911161.44 +SET 1426928.16 911258.88 +SET 1426940.90 812392.07 +SET 1427020.80 859509.12 +SET 1427057.78 842284.59 +SET 1427146.60 812509.18 +SET 142719.68 46807.04 +SET 1427233.32 911453.76 +SET 1427253.87 1233746.27 +SET 142729.60 95624.32 +SET 1427365.90 842466.45 +SET 1427385.90 911551.20 +SET 1427452.32 1150712.32 +SET 1427558.00 812743.40 +SET 1427674.02 842648.31 +SET 1427828.08 842739.24 +SET 1427982.14 842830.17 +SET 1428036.32 891795.48 +SET 1428148.80 912038.40 +SET 1428175.10 813094.73 +SET 14282.45 9568.79 +SET 1428290.26 843012.03 +SET 1428586.50 813328.95 +SET 1428606.54 912330.72 +SET 142871.95 95719.69 +SET 1428754.74 1151762.24 +SET 1428759.12 912428.16 +SET 1428769.60 860562.44 +SET 1428802.16 892273.74 +SET 1428911.70 912525.60 +SET 1429064.28 912623.04 +SET 142919.40 95751.48 +SET 1429203.60 813680.28 +SET 1429206.80 860825.77 +SET 1429312.72 892592.58 +SET 1429363.32 1235569.72 +SET 1429409.30 813797.39 +SET 1429568.00 892752.00 +SET 142961.50 81391.45 +SET 1429615.00 813914.50 +SET 1429644.00 861089.10 +SET 142966.85 95783.27 +SET 142967.68 84383.04 +SET 1429674.60 913012.80 +SET 1429820.70 814031.61 +SET 1429823.28 892911.42 +SET 1429830.86 843921.33 +SET 1430081.20 861352.43 +SET 14302.89 10608.36 +SET 1430232.10 814265.83 +SET 1430293.04 844194.12 +SET 1430447.10 844285.05 +SET 1430518.40 861615.76 +SET 143061.75 95846.85 +SET 1430643.50 814500.05 +SET 1430708.37 1153337.12 +SET 1430742.66 913694.88 +SET 1430755.22 844466.91 +SET 1430849.20 814617.16 +SET 1430909.28 844557.84 +SET 1430955.60 861879.09 +SET 1431050.88 1237028.48 +SET 1431063.34 844648.77 +SET 1431200.40 913987.20 +SET 143121.74 84473.97 +SET 1431260.60 814851.38 +SET 1431371.46 844830.63 +SET 1431392.80 862142.42 +SET 1431434.34 1076440.68 +SET 1431610.24 894027.36 +SET 1431810.72 914376.96 +SET 1431865.52 894186.78 +SET 1431877.70 815202.71 +SET 1431894.66 1237757.86 +SET 1431963.30 914474.40 +SET 143204.10 95942.22 +SET 1432083.40 815319.82 +SET 143212.08 89434.62 +SET 1432120.80 894346.20 +SET 1432267.20 862669.08 +SET 1432289.10 815436.93 +SET 1432421.04 914766.72 +SET 1432449.88 845467.14 +SET 1432494.80 815554.04 +SET 143251.55 95974.01 +SET 1432603.94 845558.07 +SET 1432631.36 894665.04 +SET 14327.58 8456.49 +SET 143272.69 99342.51 +SET 1432726.20 914961.60 +SET 14329.90 9600.58 +SET 1433031.36 915156.48 +SET 1433066.12 845830.86 +SET 1433141.60 863195.74 +SET 1433141.92 894983.88 +SET 1433336.52 915351.36 +SET 1433374.24 846012.72 +SET 1433682.36 846194.58 +SET 1433729.00 816256.70 +SET 143375.36 47022.08 +SET 1433836.42 846285.51 +SET 1433907.76 895462.14 +SET 1433934.70 816373.81 +SET 1433964.42 1155961.92 +SET 1434004.11 1239581.31 +SET 1434016.00 863722.40 +SET 1434144.54 846467.37 +SET 1434163.04 895621.56 +SET 143425.20 91593.60 +SET 1434298.60 846558.30 +SET 1434346.10 816608.03 +SET 1434404.58 916033.44 +SET 143442.60 123994.60 +SET 1434452.66 846649.23 +SET 1434453.20 863985.73 +SET 1434551.80 816725.14 +SET 1434557.16 916130.88 +SET 1434615.63 1156486.88 +SET 1434673.60 895940.40 +SET 1434775.69 1078953.38 +SET 143484.64 47057.92 +SET 1434862.32 916325.76 +SET 1434890.40 864249.06 +SET 14349.54 10642.96 +SET 1435068.90 847012.95 +SET 1435167.48 916520.64 +SET 1435269.78 1240675.38 +SET 1435320.06 916618.08 +SET 143536.25 96164.75 +SET 1435439.44 896418.66 +SET 1435472.64 916715.52 +SET 1435531.08 847285.74 +SET 1435580.30 817310.69 +SET 1435625.22 916812.96 +SET 1435691.67 1241040.07 +SET 1435694.72 896578.08 +SET 143578.60 81742.78 +SET 14358.87 10649.88 +SET 143583.92 84746.76 +SET 143593.92 47093.76 +SET 1435930.38 917007.84 +SET 1435950.00 896737.50 +SET 1435993.26 847558.53 +SET 1436147.32 847649.46 +SET 1436301.38 847740.39 +SET 143631.15 96228.33 +SET 1436535.45 1241769.45 +SET 1436569.26 1158061.76 +SET 1436608.80 817896.24 +SET 1436609.50 847922.25 +SET 1436639.20 865302.38 +SET 1436693.28 917495.04 +SET 1436715.84 897215.76 +SET 143678.05 108046.10 +SET 1436780.50 1080461.00 +SET 14368.20 10656.80 +SET 1436971.12 897375.18 +SET 1437020.20 818130.46 +SET 143703.20 47129.60 +SET 143722.64 89753.46 +SET 1437220.47 1158586.72 +SET 1437303.60 917884.80 +SET 1437431.60 818364.68 +SET 1437456.18 917982.24 +SET 1437513.60 865829.04 +SET 1437533.86 848467.83 +SET 1437608.76 918079.68 +SET 143763.07 99682.53 +SET 1437637.30 818481.79 +SET 143773.50 96323.70 +SET 143784.30 81859.89 +SET 1437996.04 848740.62 +SET 1438048.70 818716.01 +SET 1438150.10 848831.55 +SET 1438223.01 1243228.21 +SET 1438371.66 918566.88 +SET 143838.80 86635.57 +SET 143844.80 99739.20 +SET 1438458.22 849013.41 +SET 1438612.28 849104.34 +SET 143864.49 124359.29 +SET 1438665.80 819067.34 +SET 1438676.82 918761.76 +SET 143868.40 96387.28 +SET 1438758.08 898491.12 +SET 1438785.31 1081968.62 +SET 1439066.79 1243957.59 +SET 1439077.20 819301.56 +SET 1439134.56 919054.08 +SET 1439228.52 849468.06 +SET 1439382.58 849558.99 +SET 1439439.72 919248.96 +SET 1439488.60 819535.78 +SET 1439488.68 1244322.28 +SET 1439536.64 849649.92 +SET 1439694.30 819652.89 +SET 1439744.88 919443.84 +SET 143977.92 89912.88 +SET 1439779.20 899128.80 +SET 1439900.00 819770.00 +SET 1439910.57 1244686.97 +SET 1439998.82 849922.71 +SET 144008.26 99852.54 +SET 144010.75 96482.65 +SET 1440136.80 867409.02 +SET 144031.04 47237.12 +SET 1440311.40 820004.22 +SET 1440461.00 850195.50 +SET 1440545.04 899607.06 +SET 1440574.00 867672.35 +SET 1440660.36 920028.48 +SET 1440790.12 1083476.24 +SET 1440800.32 899766.48 +SET 1441055.60 899925.90 +SET 1441118.10 920320.80 +SET 1441127.73 1161736.48 +SET 1441134.20 820472.66 +SET 1441231.30 850650.15 +SET 1441270.68 920418.24 +SET 1441310.88 900085.32 +SET 1441448.40 868199.01 +SET 1441539.42 850832.01 +SET 1441598.13 1246145.73 +SET 1441693.48 850922.94 +SET 144171.72 99965.88 +SET 1441728.42 920710.56 +SET 1441751.30 820823.99 +SET 1441778.94 1162261.44 +SET 144188.10 92080.80 +SET 144233.20 90072.30 +SET 1442338.74 921100.32 +SET 14424.80 9664.16 +SET 14424.96 4730.88 +SET 1442441.91 1246875.11 +SET 1442463.78 851377.59 +SET 144249.60 47308.80 +SET 144253.45 100022.55 +SET 1442574.10 821292.43 +SET 1442760.00 868989.00 +SET 1442794.93 1084983.86 +SET 1442925.96 851650.38 +SET 1442985.50 821526.65 +SET 1443081.36 1163311.36 +SET 1443101.64 921587.52 +SET 1443197.20 869252.33 +SET 1443234.08 851832.24 +SET 14433.51 10705.24 +SET 144340.68 92178.24 +SET 144342.90 96705.18 +SET 1443602.60 821877.98 +SET 1443634.40 869515.66 +SET 1443732.57 1163836.32 +SET 1443808.30 821995.09 +SET 144390.35 96736.97 +SET 1444014.00 822112.20 +SET 1444158.44 852377.82 +SET 14442.84 10712.16 +SET 1444219.70 822229.31 +SET 144437.80 96768.76 +SET 1444374.24 901998.36 +SET 1444466.56 852559.68 +SET 1444508.80 870042.32 +SET 1444631.10 822463.53 +SET 1444774.68 852741.54 +SET 1444799.74 1086491.48 +SET 1444884.80 902317.20 +SET 1444928.74 852832.47 +SET 144493.26 92275.68 +SET 1445034.99 1164886.24 +SET 1445042.50 822697.75 +SET 1445082.80 852923.40 +SET 14452.17 10719.08 +SET 1445236.86 853014.33 +SET 1445248.20 822814.86 +SET 144532.70 96832.34 +SET 1445390.34 923049.12 +SET 1445453.90 822931.97 +SET 1445650.64 902795.46 +SET 1445659.60 823049.08 +SET 1445686.20 1165411.20 +SET 144580.37 100249.23 +SET 1445820.40 870832.31 +SET 1446000.66 923438.88 +SET 1446007.16 853468.98 +SET 1446136.28 1087496.56 +SET 1446153.24 923536.32 +SET 1446161.20 903114.30 +SET 1446161.22 853559.91 +SET 1446305.82 923633.76 +SET 1446337.41 1165936.16 +SET 1446469.34 853741.77 +SET 1446482.40 823517.52 +SET 14466.21 10030.59 +SET 1446610.98 923828.64 +SET 1446660.81 1250522.01 +SET 1446694.80 871358.97 +SET 144675.05 96927.71 +SET 1446763.56 923926.08 +SET 144686.72 47452.16 +SET 1446893.80 823751.74 +SET 1446927.04 903592.56 +SET 14470.83 10732.92 +SET 1447099.50 823868.85 +SET 144713.20 87162.23 +SET 14472.25 9695.95 +SET 1447221.30 924218.40 +SET 1447373.88 924315.84 +SET 144743.76 90391.14 +SET 1447526.46 924413.28 +SET 1447639.83 1166986.08 +SET 1447692.88 904070.82 +SET 1447831.62 924608.16 +SET 144798.42 92470.56 +SET 14480.16 10739.84 +SET 1448006.40 872148.96 +SET 144817.40 97023.08 +SET 1448203.44 904389.66 +SET 144825.56 100419.24 +SET 1448441.94 924997.92 +SET 1448539.40 824688.62 +SET 1448594.52 925095.36 +SET 1448714.00 904708.50 +SET 1448880.80 872675.62 +SET 14489.49 10746.76 +SET 1448934.30 855196.65 +SET 144907.29 100475.91 +SET 144912.30 97086.66 +SET 1449242.42 855378.51 +SET 1449318.00 872938.95 +SET 1449510.00 925680.00 +SET 1449550.54 855560.37 +SET 1449593.46 1168560.96 +SET 1449704.60 855651.30 +SET 1449773.60 825391.28 +SET 14498.82 10753.68 +SET 144989.02 100532.58 +SET 1450035.93 1253439.53 +SET 145014.59 109051.18 +SET 145018.50 82562.55 +SET 1450192.40 873465.61 +SET 1450244.67 1169085.92 +SET 1450245.68 905665.02 +SET 1450425.48 926264.64 +SET 1450500.96 905824.44 +SET 1450628.96 856196.88 +SET 1450814.17 1091014.34 +SET 1450879.71 1254168.91 +SET 1451007.80 826093.94 +SET 145123.84 47595.52 +SET 1451266.80 906302.70 +SET 145130.16 125453.36 +SET 1451301.60 1254533.60 +SET 1451419.20 826328.16 +SET 145149.55 97245.61 +SET 145150.40 87425.56 +SET 1451504.00 874255.60 +SET 1451522.08 906462.12 +SET 1451646.12 927044.16 +SET 1451723.49 1254898.29 +SET 14519.70 9727.74 +SET 1451951.28 927239.04 +SET 1452015.50 857015.25 +SET 1452036.30 826679.49 +SET 1452103.86 927336.48 +SET 1452145.38 1255262.98 +SET 1452256.44 927433.92 +SET 1452323.62 857197.11 +SET 1452378.40 874782.26 +SET 145244.45 97309.19 +SET 1452447.70 826913.71 +SET 1452477.68 857288.04 +SET 145254.32 90709.98 +SET 1452543.20 907099.80 +SET 145278.58 85746.99 +SET 1452815.60 875045.59 +SET 1452859.10 827147.93 +SET 145315.94 100759.26 +SET 1453247.98 857742.69 +SET 1453324.50 928116.00 +SET 14534.24 4766.72 +SET 1453556.10 857924.55 +SET 1453629.66 928310.88 +SET 1453690.00 875572.25 +SET 1453710.16 858015.48 +SET 1453819.60 907896.90 +SET 1453864.22 858106.41 +SET 1453887.60 827733.48 +SET 1453934.82 928505.76 +SET 1454018.28 858197.34 +SET 1454093.30 827850.59 +SET 1454127.20 875835.58 +SET 1454155.52 1093527.04 +SET 1454254.83 1257086.43 +SET 1454326.40 858379.20 +SET 145434.25 97436.35 +SET 1454480.46 858470.13 +SET 14545.47 10788.28 +SET 1454697.72 928992.96 +SET 1454710.40 828201.92 +SET 1454788.58 858651.99 +SET 145481.70 97468.14 +SET 1454823.79 1094029.58 +SET 1454916.10 828319.03 +SET 1455.48 1079.52 +SET 14550.96 9086.94 +SET 1455121.80 828436.14 +SET 1455155.46 929285.28 +SET 1455327.50 828553.25 +SET 1455460.62 929480.16 +SET 145552.05 125818.05 +SET 1455533.20 828670.36 +SET 1455613.20 929577.60 +SET 1455712.94 859197.57 +SET 1455765.78 929675.04 +SET 1455861.84 909172.26 +SET 145587.60 87688.89 +SET 1455918.36 929772.48 +SET 1455942.39 1258545.19 +SET 1456021.06 859379.43 +SET 1456117.12 909331.68 +SET 1456150.30 829021.69 +SET 1456175.12 859470.36 +SET 145624.05 97563.51 +SET 1456313.20 877152.23 +SET 1456356.00 829138.80 +SET 1456364.28 1258909.88 +SET 1456372.40 909491.10 +SET 1456561.70 829255.91 +SET 1456627.68 909650.52 +SET 1456681.26 930259.68 +SET 145670.24 47774.72 +SET 1456756.77 1174335.52 +SET 1456786.17 1259274.57 +SET 1456882.96 909809.94 +SET 1457099.48 860015.94 +SET 145713.90 93055.20 +SET 1457138.24 909969.36 +SET 145724.59 101042.61 +SET 14573.46 10809.04 +SET 145740.76 86019.78 +SET 1457444.16 930746.88 +SET 1457496.87 1096039.74 +SET 1457596.74 930844.32 +SET 1457624.80 877942.22 +SET 1457629.95 1260003.95 +SET 145764.88 91028.82 +SET 1458054.48 931136.64 +SET 145806.32 101099.28 +SET 1458159.36 910607.04 +SET 1458165.14 1096542.28 +SET 1458207.30 830192.79 +SET 1458359.64 931331.52 +SET 1458473.73 1260733.33 +SET 1458499.20 878468.88 +SET 1458512.22 931428.96 +SET 1458618.70 830427.01 +SET 1458664.80 931526.40 +SET 1458669.92 910925.88 +SET 1458824.40 830544.12 +SET 1458833.41 1097044.82 +SET 145888.80 47846.40 +SET 145894.82 86110.71 +SET 1458948.20 861107.10 +SET 145908.75 97754.25 +SET 1459102.26 861198.03 +SET 1459180.48 911244.72 +SET 1459317.51 1261462.71 +SET 1459361.61 1176435.36 +SET 1459373.60 878995.54 +SET 1459501.68 1097547.36 +SET 145956.20 97786.04 +SET 1459647.20 831012.56 +SET 1459691.04 911563.56 +SET 1459732.86 932208.48 +SET 1460012.82 1176960.32 +SET 1460026.62 861743.61 +SET 1460058.60 831246.78 +SET 1460161.29 1262192.09 +SET 146019.06 93250.08 +SET 146020.16 91188.24 +SET 1460334.74 861925.47 +SET 14604.70 8314.81 +SET 1460470.00 831481.00 +SET 1460495.76 932695.68 +SET 146051.51 101269.29 +SET 1460583.18 1262556.78 +SET 1460664.03 1177485.28 +SET 1460675.70 831598.11 +SET 1460685.20 879785.53 +SET 1460796.92 862198.26 +SET 1460800.92 932890.56 +SET 1460838.22 1098552.44 +SET 1460950.98 862289.19 +SET 1461087.10 831832.33 +SET 1461292.80 831949.44 +SET 1461315.24 1178010.24 +SET 14614.60 9791.32 +SET 1461426.96 1263286.16 +SET 146146.00 97913.20 +SET 1461478.00 912679.50 +SET 1461563.82 933377.76 +SET 1461704.20 832183.66 +SET 146171.64 93347.52 +SET 1461716.40 933475.20 +SET 14620.11 10843.64 +SET 146202.94 86292.57 +SET 1462115.60 832417.88 +SET 146214.97 101382.63 +SET 1462174.14 933767.52 +SET 1462174.76 1099557.52 +SET 1462337.52 863107.56 +SET 1462434.00 880838.85 +SET 146252.70 83265.21 +SET 1462617.66 1179060.16 +SET 1462754.40 913476.60 +SET 1462799.70 863380.35 +SET 1462871.20 881102.18 +SET 14629.44 10850.56 +SET 1462937.04 934254.72 +SET 1463009.68 913636.02 +SET 1463114.52 1264744.92 +SET 1463144.10 833003.43 +SET 146324.22 93444.96 +SET 146325.92 47989.76 +SET 1463261.88 863653.14 +SET 1463264.96 913795.44 +SET 1463415.94 863744.07 +SET 1463520.24 913954.86 +SET 1463761.20 833354.76 +SET 1463775.52 914114.28 +SET 146378.43 101495.97 +SET 1463878.12 864016.86 +SET 1463966.90 833471.87 +SET 1464.81 1086.44 +SET 1464157.68 935034.24 +SET 1464179.57 1101065.14 +SET 1464182.80 881892.17 +SET 1464310.26 935131.68 +SET 1464462.84 935229.12 +SET 146458.40 83382.32 +SET 1464584.00 833823.20 +SET 1464615.42 935326.56 +SET 146462.00 88215.55 +SET 1464620.00 882155.50 +SET 14647.68 9354.24 +SET 146476.80 93542.40 +SET 1464768.00 935424.00 +SET 1464789.70 833940.31 +SET 1464796.64 914751.96 +SET 14648.10 10864.40 +SET 1464802.08 1266203.68 +SET 1465073.16 935618.88 +SET 1465110.60 864744.30 +SET 1465201.10 834174.53 +SET 1465225.74 935716.32 +SET 1465307.20 915070.80 +SET 1465530.90 935911.20 +SET 1465562.48 915230.22 +SET 1465572.78 865017.09 +SET 1465645.86 1266933.06 +SET 1465683.48 936008.64 +SET 1465726.84 865108.02 +SET 146573.05 98199.31 +SET 1465817.76 915389.64 +SET 1466023.90 834642.97 +SET 1466034.96 865289.88 +SET 1466184.38 1102572.76 +SET 146620.50 98231.10 +SET 1466229.60 834760.08 +SET 146623.62 101665.98 +SET 1466293.80 936398.40 +SET 1466368.80 883208.82 +SET 1466435.30 834877.19 +SET 1466524.92 1182209.92 +SET 1466651.20 865653.60 +SET 1466838.88 916027.32 +SET 1466852.65 1103075.30 +SET 1466911.53 1268027.13 +SET 1466959.32 865835.46 +SET 146705.35 101722.65 +SET 1467113.38 865926.39 +SET 146715.40 98294.68 +SET 1467176.13 1182734.88 +SET 1467333.42 1268391.82 +SET 1467349.44 916346.16 +SET 1467361.86 937080.48 +SET 1467575.56 866199.18 +SET 1467667.02 937275.36 +SET 1467669.50 835579.85 +SET 1467827.34 1183259.84 +SET 1467860.00 916665.00 +SET 1467972.18 937470.24 +SET 1468492.30 836048.29 +SET 1468554.80 884525.47 +SET 146857.75 98390.05 +SET 146868.81 101835.99 +SET 146869.80 83616.54 +SET 1468735.08 937957.44 +SET 1468887.66 938054.88 +SET 1468903.70 836282.51 +SET 1468962.10 867017.55 +SET 146899.20 88478.88 +SET 1468992.00 884788.80 +SET 1469020.98 1269850.58 +SET 146905.20 98421.84 +SET 1469129.76 1184309.76 +SET 1469136.40 917462.10 +SET 1469315.10 836516.73 +SET 1469345.40 938347.20 +SET 1469497.98 938444.64 +SET 146950.54 101892.66 +SET 146952.65 98453.63 +SET 1469520.80 836633.84 +SET 1469525.73 1105085.46 +SET 1469578.34 867381.27 +SET 1469646.96 917780.94 +SET 146973.24 86747.22 +SET 1469780.97 1184834.72 +SET 1469803.14 938639.52 +SET 1469886.46 867563.13 +SET 1469932.20 836868.06 +SET 1469955.72 938736.96 +SET 1470.95 985.49 +SET 147000.10 98485.42 +SET 1470194.58 867744.99 +SET 1470343.60 837102.28 +SET 14704.08 10905.92 +SET 147041.28 91825.92 +SET 1470656.76 868017.78 +SET 1470718.62 939224.16 +SET 1470871.20 939321.60 +SET 147090.88 48240.64 +SET 1470960.70 837453.61 +SET 1471023.78 939419.04 +SET 1471130.43 1271674.03 +SET 147114.00 102006.00 +SET 1471178.64 918737.46 +SET 147127.30 86838.15 +SET 1471372.10 837687.83 +SET 147142.45 98580.79 +SET 1471433.92 918896.88 +SET 1471552.32 1272038.72 +SET 1471577.80 837804.94 +SET 1471581.12 868563.36 +SET 1471615.20 886368.78 +SET 147173.46 118640.96 +SET 1471734.60 1186409.60 +SET 1471783.50 837922.05 +SET 1471889.24 868745.22 +SET 147189.90 98612.58 +SET 1471974.21 1272403.41 +SET 147200.16 48276.48 +SET 1472043.30 868836.15 +SET 1472052.40 886632.11 +SET 1472197.36 868927.08 +SET 14722.74 10919.76 +SET 147237.35 98644.37 +SET 1472489.60 886895.44 +SET 1472505.48 869108.94 +SET 1472606.30 838390.49 +SET 1472702.16 940490.88 +SET 1472710.32 919693.98 +SET 147277.46 102119.34 +SET 1472854.74 940588.32 +SET 1472926.80 887158.77 +SET 147296.56 91985.34 +SET 1472965.60 919853.40 +SET 147309.44 48312.32 +SET 1473121.72 869472.66 +SET 1473159.90 940783.20 +SET 1473275.78 869563.59 +SET 147332.25 98707.95 +SET 147336.40 88742.21 +SET 1473364.00 887422.10 +SET 1473429.10 838858.93 +SET 1473465.06 940978.08 +SET 1473583.90 869745.45 +SET 1473661.77 1273862.17 +SET 147392.28 94127.04 +SET 1474.14 1093.36 +SET 1474046.08 870018.24 +SET 1474046.20 839210.26 +SET 1474200.14 870109.17 +SET 1474242.00 920650.50 +SET 147427.15 98771.53 +SET 1474339.44 1188509.44 +SET 147435.42 87020.01 +SET 1474354.20 870200.10 +SET 1474380.54 941562.72 +SET 147440.92 102232.68 +SET 1474533.12 941660.16 +SET 1474662.32 870381.96 +SET 1474663.30 839561.59 +SET 1474816.38 870472.89 +SET 1475124.50 870654.75 +SET 147522.05 98835.11 +SET 147528.00 48384.00 +SET 1475280.40 839912.92 +SET 1475296.02 942147.36 +SET 147544.86 94224.48 +SET 1475518.40 921447.60 +SET 1475540.16 1109608.32 +SET 1475550.00 888738.75 +SET 1475586.68 870927.54 +SET 147569.50 98866.90 +SET 1475771.22 1275685.62 +SET 1475773.68 921607.02 +SET 1475987.20 889002.08 +SET 147604.38 102346.02 +SET 1476058.92 942634.56 +SET 1476211.50 942732.00 +SET 1476284.24 921925.86 +SET 1476293.07 1190084.32 +SET 1476511.04 871473.12 +SET 1476514.60 840615.58 +SET 14766.15 12764.15 +SET 1476615.00 1276415.00 +SET 147664.40 98930.48 +SET 1476665.10 871564.05 +SET 1476669.24 943024.32 +SET 1476819.16 871654.98 +SET 147687.67 111061.34 +SET 14769.39 10954.36 +SET 1476944.28 1190609.28 +SET 1476974.40 943219.20 +SET 1477036.89 1276779.69 +SET 1477050.08 922404.12 +SET 147711.85 98962.27 +SET 1477131.70 840966.91 +SET 147743.54 87201.87 +SET 147746.56 48455.68 +SET 1477560.64 922722.96 +SET 1477584.72 943608.96 +SET 1477736.00 890055.40 +SET 14778.72 10961.28 +SET 1477954.50 841435.35 +SET 1478042.46 943901.28 +SET 1478051.64 872382.42 +SET 147807.12 92304.18 +SET 1478160.20 841552.46 +SET 1478173.20 890318.73 +SET 147824.67 119165.92 +SET 1478302.56 1277873.76 +SET 1478326.48 923201.22 +SET 1478359.76 872564.28 +SET 1478500.20 944193.60 +SET 147855.84 48491.52 +SET 1478571.60 841786.68 +SET 1478581.76 923360.64 +SET 1478610.40 890582.06 +SET 1478837.04 923520.06 +SET 1478897.91 1192184.16 +SET 1478957.94 944485.92 +SET 147897.60 87292.80 +SET 1478976.00 872928.00 +SET 147898.30 84202.09 +SET 1479092.32 923679.48 +SET 1479110.52 944583.36 +SET 1479188.70 842138.01 +SET 147931.30 102572.70 +SET 1479549.12 1192709.12 +SET 1479549.78 1112623.56 +SET 1479858.16 924157.74 +SET 147996.55 99153.01 +SET 1480011.50 842606.45 +SET 148013.03 102629.37 +SET 1480178.58 945265.44 +SET 1480217.20 842723.56 +SET 1480331.16 945362.88 +SET 1480362.54 873746.37 +SET 1480368.72 924476.58 +SET 14804.40 9918.48 +SET 1480412.01 1279697.21 +SET 1480422.90 842840.67 +SET 148051.66 87383.73 +SET 14806.24 9246.36 +SET 1480636.32 945557.76 +SET 1480670.66 873928.23 +SET 1480788.90 945655.20 +SET 1480796.40 891898.71 +SET 1480824.72 874019.16 +SET 148083.39 128006.19 +SET 1480886.32 1113628.64 +SET 1480978.78 874110.09 +SET 1481233.60 892162.04 +SET 1481255.79 1280426.59 +SET 1481389.84 925114.26 +SET 148155.18 94614.24 +SET 1481677.68 1280791.28 +SET 1481704.38 946239.84 +SET 148176.49 102742.71 +SET 1481856.96 946337.28 +SET 1481900.40 925433.10 +SET 1481903.14 874655.67 +SET 1482009.54 946434.72 +SET 148210.80 89268.87 +SET 1482153.96 1194808.96 +SET 1482222.86 1114633.72 +SET 1482274.20 843894.66 +SET 1482365.32 874928.46 +SET 1482467.28 946727.04 +SET 1482479.90 844011.77 +SET 1482545.20 892952.03 +SET 148258.22 102799.38 +SET 1482685.60 844128.88 +SET 1482772.44 946921.92 +SET 1482805.17 1195333.92 +SET 148281.25 99343.75 +SET 1482891.30 844245.99 +SET 1482921.52 926070.78 +SET 1482982.40 893215.36 +SET 148317.68 92623.02 +SET 1483230.18 947214.24 +SET 1483289.68 875474.04 +SET 1483365.24 1282250.04 +SET 1483382.76 947311.68 +SET 14834.70 11002.80 +SET 1483419.60 893478.69 +SET 1483432.08 926389.62 +SET 1483443.74 875564.97 +SET 1483787.13 1282614.73 +SET 1483856.80 893742.02 +SET 1483919.80 844831.54 +SET 1483942.64 926708.46 +SET 1484059.98 875928.69 +SET 1484209.02 1282979.42 +SET 148421.68 102912.72 +SET 1484214.04 876019.62 +SET 1484227.67 1116141.34 +SET 1484294.00 894005.35 +SET 1484298.24 947896.32 +SET 1484331.20 845065.76 +SET 1484368.10 876110.55 +SET 1484603.40 948091.20 +SET 148471.05 99470.91 +SET 1484755.98 948188.64 +SET 1484758.80 1196908.80 +SET 1484948.30 845417.09 +SET 1485052.80 1283708.80 +SET 14851.85 9950.27 +SET 148511.52 48706.56 +SET 1485138.40 876565.20 +SET 1485213.72 948480.96 +SET 1485219.04 927505.56 +SET 1485292.46 876656.13 +SET 1485359.70 845651.31 +SET 1485366.30 948578.40 +SET 1485410.01 1197433.76 +SET 1485518.88 948675.84 +SET 1485565.40 845768.42 +SET 148565.95 99534.49 +SET 148572.96 92782.44 +SET 1485754.64 876928.92 +SET 1485896.58 1284438.18 +SET 1486062.76 877110.78 +SET 148613.40 99566.28 +SET 14862.08 4874.24 +SET 148620.80 48742.40 +SET 1486232.48 1117648.96 +SET 1486240.16 928143.24 +SET 1486281.78 949163.04 +SET 1486318.47 1284802.87 +SET 148648.00 89532.20 +SET 148666.87 103082.73 +SET 1486679.00 877474.50 +SET 1486739.52 949455.36 +SET 1486799.60 846471.08 +SET 1486917.20 895585.33 +SET 1487162.25 1285532.25 +SET 1487197.26 949747.68 +SET 1487261.28 928780.92 +SET 1487349.84 949845.12 +SET 1487416.70 846822.41 +SET 1487603.36 878020.08 +SET 1487622.40 846939.52 +SET 148765.50 95004.00 +SET 1487655.00 950040.00 +SET 1487791.60 896111.99 +SET 1487807.58 950137.44 +SET 1487960.16 950234.88 +SET 148803.20 99693.44 +SET 148821.96 87838.38 +SET 1488219.60 878383.80 +SET 1488228.80 896375.32 +SET 148850.65 99725.23 +SET 1488537.68 929578.02 +SET 1488723.06 950722.08 +SET 1488835.84 878747.52 +SET 1488875.64 950819.52 +SET 148898.10 99757.02 +SET 1488989.90 878838.45 +SET 14890.68 11044.32 +SET 1489048.24 929896.86 +SET 148912.06 103252.74 +SET 1489143.96 878929.38 +SET 148918.08 95101.44 +SET 1489268.00 847876.40 +SET 1489473.70 847993.51 +SET 1489606.14 879202.17 +SET 1489679.40 848110.62 +SET 1489693.59 1287720.39 +SET 1489814.08 930375.12 +SET 1489885.10 848227.73 +SET 148993.79 103309.41 +SET 1489943.70 951501.60 +SET 1489968.48 1201108.48 +SET 1489977.60 897428.64 +SET 14900.01 11051.24 +SET 1490068.32 879474.96 +SET 1490090.80 848344.84 +SET 1490222.38 879565.89 +SET 149024.21 112066.42 +SET 1490296.50 848461.95 +SET 1490414.80 897691.97 +SET 1490554.02 951891.36 +SET 149057.92 48885.76 +SET 1490619.69 1201633.44 +SET 1490684.56 879838.68 +SET 149070.66 95198.88 +SET 1490706.60 951988.80 +SET 149083.52 93101.28 +SET 1490835.20 931012.80 +SET 1490838.62 879929.61 +SET 1490852.00 897955.30 +SET 14909.34 11058.16 +SET 1490992.68 880020.54 +SET 1491119.30 848930.39 +SET 149127.09 120215.84 +SET 1491270.90 1202158.40 +SET 1491325.00 849047.50 +SET 149135.35 99915.97 +SET 1491469.50 952476.00 +SET 1491622.08 952573.44 +SET 1491726.40 898481.96 +SET 1491736.40 849281.72 +SET 14918.67 11065.08 +SET 1491917.04 880566.12 +SET 1491942.10 849398.83 +SET 1492079.82 952865.76 +SET 1492147.80 849515.94 +SET 1492163.60 898745.29 +SET 1492232.40 952963.20 +SET 1492246.91 1122171.82 +SET 1492379.22 880838.91 +SET 1492600.80 899008.62 +SET 1492622.16 932128.74 +SET 1492646.82 1290273.22 +SET 1492764.90 849867.27 +SET 1492841.40 881111.70 +SET 1492877.44 932288.16 +SET 1492915.18 1122674.36 +SET 1492995.30 953450.40 +SET 149320.71 103536.09 +SET 149325.15 100043.13 +SET 1493303.58 881384.49 +SET 149338.20 85021.86 +SET 1493457.64 881475.42 +SET 1493475.20 899535.28 +SET 1493583.45 1123176.90 +SET 1493605.62 953840.16 +SET 1493643.28 932766.42 +SET 149385.76 48993.28 +SET 1493875.74 1204258.24 +SET 1493912.49 1291367.29 +SET 1493999.10 850569.93 +SET 149420.05 100106.71 +SET 14943.82 8820.21 +SET 1494368.52 954327.36 +SET 1494382.00 882021.00 +SET 1494409.12 933244.68 +SET 1494521.10 954424.80 +SET 1494536.06 882111.93 +SET 14946.66 11085.84 +SET 1494616.20 850921.26 +SET 1494664.40 933404.10 +SET 149467.50 100138.50 +SET 1494690.12 882202.86 +SET 1494756.27 1292096.67 +SET 1494844.18 882293.79 +SET 1494919.68 933563.52 +SET 149495.04 49029.12 +SET 1494978.84 954717.12 +SET 1495027.60 851155.48 +SET 149514.95 100170.29 +SET 1495174.96 933722.94 +SET 1495178.16 1205308.16 +SET 1495178.16 1292461.36 +SET 149522.40 90058.86 +SET 1495439.00 851389.70 +SET 1495460.42 882657.51 +SET 1495661.20 900851.93 +SET 1495768.54 882839.37 +SET 1495829.37 1205833.12 +SET 1495894.32 955301.76 +SET 1495922.60 882930.30 +SET 149594.08 93420.12 +SET 1495940.80 934201.20 +SET 1496056.10 851741.03 +SET 1496196.08 934360.62 +SET 1496199.48 955496.64 +SET 1496230.72 883112.16 +SET 1496256.53 1125187.06 +SET 1496451.36 934520.04 +SET 149647.63 103762.77 +SET 1496480.58 1206358.08 +SET 14965.32 11099.68 +SET 149657.30 100265.66 +SET 1496673.20 852092.36 +SET 1496706.64 934679.46 +SET 1496961.92 934838.88 +SET 1496962.38 955983.84 +SET 1497084.60 852326.58 +SET 14971.36 4910.08 +SET 1497155.08 883657.74 +SET 149729.36 103819.44 +SET 1497410.00 901905.25 +SET 1497463.20 883839.60 +SET 1497496.00 852560.80 +SET 1497593.07 1126192.14 +SET 149770.95 129464.95 +SET 1497725.28 956471.04 +SET 1497783.00 1207408.00 +SET 1497847.20 902168.58 +SET 1497877.86 956568.48 +SET 1497907.40 852795.02 +SET 1498030.44 956665.92 +SET 1498131.39 1295014.19 +SET 1498183.02 956763.36 +SET 149822.88 49136.64 +SET 1498233.50 884294.25 +SET 1498318.80 853029.24 +SET 1498335.60 956860.80 +SET 1498434.21 1207932.96 +SET 1498541.62 884476.11 +SET 1498553.28 1295378.88 +SET 1498695.68 884567.04 +SET 1498721.60 902695.24 +SET 1498730.20 853263.46 +SET 1498849.74 884657.97 +SET 149892.82 103932.78 +SET 1498929.61 1127197.22 +SET 149894.55 100424.61 +SET 1498945.92 957250.56 +SET 1498975.17 1295743.57 +SET 1499003.80 884748.90 +SET 1499004.16 936114.24 +SET 1499141.60 853497.68 +SET 1499251.08 957445.44 +SET 14994.20 10045.64 +SET 1499403.66 957542.88 +SET 149942.00 100456.40 +SET 1499465.98 885021.69 +SET 1499514.72 936433.08 +SET 149955.30 85373.19 +SET 1499556.24 957640.32 +SET 149959.60 90322.19 +SET 1499596.00 903221.90 +SET 1499597.88 1127699.76 +SET 149974.55 103989.45 +SET 1499861.40 957835.20 +SET 149989.45 100488.19 +SET 1499928.16 885294.48 +SET 1499964.40 853966.12 +SET 1500013.98 957932.64 +SET 1500236.28 885476.34 +SET 1500319.14 958127.52 +SET 1500387.84 1209507.84 +SET 1500390.34 885567.27 +SET 150041.44 49208.32 +SET 150054.44 88565.82 +SET 1500581.50 854317.45 +SET 1500624.30 958322.40 +SET 1500776.88 958419.84 +SET 1500787.20 854434.56 +SET 150084.35 100551.77 +SET 1500934.42 1128704.84 +SET 1501006.58 885930.99 +SET 1501039.05 1210032.80 +SET 150104.64 93738.96 +SET 1501084.62 1297567.02 +SET 15011.97 11134.28 +SET 1501160.64 886021.92 +SET 1501301.68 937549.02 +SET 1501314.70 886112.85 +SET 1501404.30 854785.89 +SET 150150.72 49244.16 +SET 1501539.78 958907.04 +SET 1501556.96 937708.44 +SET 15016.10 8549.03 +SET 1501610.00 854903.00 +SET 1501622.82 886294.71 +SET 1501776.88 886385.64 +SET 1501812.24 937867.86 +SET 1501844.94 959101.92 +SET 1501930.94 886476.57 +SET 1502.13 1114.12 +SET 1502021.40 855137.22 +SET 1502085.00 886567.50 +SET 15021.30 11141.20 +SET 1502150.10 959296.80 +SET 150226.70 100647.14 +SET 1502350.29 1298661.09 +SET 1502432.80 855371.44 +SET 1502547.18 886840.29 +SET 1502760.42 959686.56 +SET 1502844.20 855605.66 +SET 1502855.30 887022.15 +SET 150291.30 95978.40 +SET 15030.63 11148.12 +SET 1503009.36 887113.08 +SET 150301.47 104216.13 +SET 1503065.58 959881.44 +SET 1503163.42 887204.01 +SET 150321.60 100710.72 +SET 1503317.48 887294.94 +SET 1503343.92 938824.38 +SET 1503461.30 855956.99 +SET 150359.92 93898.38 +SET 1503607.50 1130715.00 +SET 1503615.96 1299755.16 +SET 150362.56 88747.68 +SET 150369.28 49315.84 +SET 1503968.00 905855.20 +SET 1503981.06 960466.08 +SET 1504078.40 856308.32 +SET 1504087.78 887749.59 +SET 1504275.77 1131217.54 +SET 1504284.10 856425.43 +SET 1504286.22 960660.96 +SET 1504365.04 939462.06 +SET 150443.88 96075.84 +SET 1504459.74 1300484.54 +SET 150463.95 100806.09 +SET 150464.93 104329.47 +SET 1504743.96 960953.28 +SET 1504842.40 906381.86 +SET 1504896.54 961050.72 +SET 15049.29 11161.96 +SET 1505106.90 856893.87 +SET 1505303.52 1301213.92 +SET 1505320.26 888477.03 +SET 1505518.30 857128.09 +SET 1505612.31 1132222.62 +SET 150587.84 49387.52 +SET 150596.46 96173.28 +SET 1505964.60 961732.80 +SET 150606.30 100901.46 +SET 15061.52 9405.78 +SET 1506117.18 961830.24 +SET 150614.73 130194.33 +SET 1506147.30 1301943.30 +SET 150615.20 94057.80 +SET 1506280.58 1132725.16 +SET 1506341.10 857596.53 +SET 1506422.34 962025.12 +SET 1506546.80 857713.64 +SET 1506569.19 1302307.99 +SET 1506574.92 962122.56 +SET 150670.68 88929.54 +SET 1506727.50 962220.00 +SET 1506880.08 962317.44 +SET 1506899.94 1214757.44 +SET 1506917.84 941056.26 +SET 150701.20 100965.04 +SET 1507014.92 889477.26 +SET 1507032.66 962414.88 +SET 1507168.98 889568.19 +SET 1507173.12 941215.68 +SET 1507185.24 962512.32 +SET 1507428.40 941375.10 +SET 1507465.60 907961.84 +SET 1507477.10 889750.05 +SET 150748.65 100996.83 +SET 1507642.98 962804.64 +SET 1507683.68 941534.52 +SET 1507781.00 858416.30 +SET 1507785.22 889931.91 +SET 1507834.86 1303402.06 +SET 150791.85 104556.15 +SET 150796.10 101028.62 +SET 1507986.70 858533.41 +SET 1508194.24 941853.36 +SET 150824.74 89020.47 +SET 1508247.40 890204.70 +SET 1508256.75 1303766.75 +SET 1508449.52 942012.78 +SET 15086.61 11189.64 +SET 1508603.80 858884.74 +SET 1508678.64 1304131.44 +SET 1508704.80 942172.20 +SET 1508709.58 890477.49 +SET 1508809.50 859001.85 +SET 15089.10 10109.22 +SET 150891.00 101092.20 +SET 1508960.08 942331.62 +SET 1509100.53 1304496.13 +SET 1509168.78 963779.04 +SET 1509325.82 890841.21 +SET 1509504.78 1216857.28 +SET 1509779.10 964168.80 +SET 150985.90 101155.78 +SET 1509931.68 964266.24 +SET 1509944.31 1305225.51 +SET 1510043.70 859704.51 +SET 1510084.26 964363.68 +SET 1510088.80 909541.82 +SET 1510096.12 891295.86 +SET 151024.96 49530.88 +SET 1510290.20 1135740.40 +SET 151033.35 101187.57 +SET 1510389.42 964558.56 +SET 1510455.10 859938.73 +SET 1510491.76 943288.14 +SET 15105.42 9646.56 +SET 151054.20 96465.60 +SET 1510694.58 964753.44 +SET 1510788.09 1305954.89 +SET 1510807.20 1217907.20 +SET 1510847.16 964850.88 +SET 1510958.47 1136242.94 +SET 1511072.20 860290.06 +SET 1511209.98 1306319.58 +SET 1511277.90 860407.17 +SET 151128.25 101251.15 +SET 151132.86 89202.33 +SET 1511400.40 910331.81 +SET 1511482.66 892114.23 +SET 1511483.60 860524.28 +SET 1511512.88 943925.82 +SET 1511626.74 1136745.48 +SET 1511636.72 892205.16 +SET 1511689.30 860641.39 +SET 151175.70 101282.94 +SET 1511768.16 944085.24 +SET 1511915.22 965532.96 +SET 151200.50 104839.50 +SET 1512053.76 1307048.96 +SET 151206.78 96563.04 +SET 1512109.62 1218957.12 +SET 1512220.38 965727.84 +SET 15123.93 11217.32 +SET 1512306.40 860992.72 +SET 151243.52 49602.56 +SET 1512512.10 861109.83 +SET 1513135.86 966312.48 +SET 1513177.32 893114.46 +SET 151318.05 101378.31 +SET 1513299.84 945041.76 +SET 15133.26 11224.24 +SET 1513319.43 1308143.03 +SET 1513331.38 893205.39 +SET 151352.80 49638.40 +SET 1513540.60 861695.38 +SET 1513593.60 966604.80 +SET 1513639.50 893387.25 +SET 1513741.32 1308507.72 +SET 1513793.56 893478.18 +SET 151381.04 94536.06 +SET 1513898.76 966799.68 +SET 1514023.60 911911.79 +SET 1514051.34 966897.12 +SET 1514065.68 945520.02 +SET 151412.95 101441.89 +SET 1514203.92 966994.56 +SET 1514299.82 1138755.64 +SET 1514363.40 862163.82 +SET 151440.98 89384.19 +SET 1514409.80 893841.90 +SET 1514460.80 912175.12 +SET 1514569.10 862280.93 +SET 1514576.24 945838.86 +SET 151460.40 101473.68 +SET 151462.08 49674.24 +SET 1514661.66 967286.88 +SET 1514717.92 894023.76 +SET 1514831.52 945998.28 +SET 1514898.00 912438.45 +SET 1514966.82 967481.76 +SET 1515026.04 894205.62 +SET 151507.85 101505.47 +SET 1515086.80 946157.70 +SET 151511.94 96757.92 +SET 151527.42 105066.18 +SET 1515342.08 946317.12 +SET 1515424.56 967774.08 +SET 151555.30 101537.26 +SET 1515577.14 967871.52 +SET 1515852.64 946635.96 +SET 1516016.88 1222106.88 +SET 151602.75 101569.05 +SET 151609.15 105122.85 +SET 1516187.46 968261.28 +SET 151636.32 94695.48 +SET 1516566.64 895114.92 +SET 1516646.80 913491.77 +SET 1516873.76 947273.64 +SET 1516874.76 895296.78 +SET 1516950.36 968748.48 +SET 151697.65 101632.63 +SET 1516972.90 1140765.80 +SET 1517037.50 863686.25 +SET 1517084.00 913755.10 +SET 1517182.88 895478.64 +SET 1517319.30 1223156.80 +SET 1517336.94 895569.57 +SET 1517408.10 969040.80 +SET 1517448.90 863920.47 +SET 1517491.00 895660.50 +SET 1517521.20 914018.43 +SET 1517641.17 1141268.34 +SET 1517645.06 895751.43 +SET 1517799.12 895842.36 +SET 1517860.30 864154.69 +SET 1517953.18 895933.29 +SET 1517960.22 1312154.62 +SET 1518066.00 864271.80 +SET 1518107.24 896024.22 +SET 151817.10 96952.80 +SET 1518261.30 896115.15 +SET 1518271.70 864388.91 +SET 1518309.44 1141770.88 +SET 1518415.36 896206.08 +SET 1518477.40 864506.02 +SET 1518569.42 896297.01 +SET 1518628.74 969820.32 +SET 1518781.32 969917.76 +SET 151880.40 131288.40 +SET 1518804.00 1312884.00 +SET 1518888.80 864740.24 +SET 15189.92 4981.76 +SET 151891.60 94854.90 +SET 151899.20 49817.60 +SET 1519086.48 970112.64 +SET 1519185.66 896660.73 +SET 1519239.06 970210.08 +SET 151936.07 105349.53 +SET 1519493.78 896842.59 +SET 1519647.78 1313613.38 +SET 1519647.84 896933.52 +SET 1519849.38 970599.84 +SET 1519917.30 865325.79 +SET 152008.48 49853.44 +SET 1520154.54 970794.72 +SET 152017.80 105406.20 +SET 1520264.08 897297.24 +SET 1520307.12 970892.16 +SET 1520328.70 865560.01 +SET 1520575.35 1225781.60 +SET 1520612.28 971087.04 +SET 15207.90 11279.60 +SET 1520726.26 897570.03 +SET 1520740.10 865794.23 +SET 1520764.86 971184.48 +SET 1520982.52 1143781.04 +SET 1521018.80 916125.07 +SET 1521034.38 897751.89 +SET 1521188.44 897842.82 +SET 152122.26 97147.68 +SET 1521222.60 971476.80 +SET 152124.70 101918.74 +SET 1521335.34 1315072.14 +SET 1521375.18 971574.24 +SET 1521527.76 971671.68 +SET 1521680.34 971769.12 +SET 1521724.08 950302.62 +SET 1521893.20 916651.73 +SET 15221.80 8666.14 +SET 152219.60 101982.32 +SET 1522330.40 916915.06 +SET 1522595.82 972353.76 +SET 152262.99 105576.21 +SET 1522745.20 950940.30 +SET 1522767.60 917178.39 +SET 1522797.10 866965.33 +SET 1523002.80 867082.44 +SET 152302.29 131653.09 +SET 1523053.56 972646.08 +SET 15231.45 10204.59 +SET 152314.50 102045.90 +SET 1523206.14 972743.52 +SET 1523208.50 867199.55 +SET 1523345.28 899115.84 +SET 1523414.20 867316.66 +SET 152344.72 105632.88 +SET 1523444.79 1316895.59 +SET 1523499.34 899206.77 +SET 1523511.04 951418.56 +SET 1523766.32 951577.98 +SET 1523816.46 973133.28 +SET 1523825.60 867550.88 +SET 1523866.68 1317260.28 +SET 1524021.60 951737.40 +SET 152409.40 102109.48 +SET 152423.70 86778.51 +SET 1524237.00 867785.10 +SET 1524274.20 973425.60 +SET 1524423.70 899752.35 +SET 1524482.61 1228931.36 +SET 1524532.16 952056.24 +SET 152456.85 102141.27 +SET 1524577.76 899843.28 +SET 1524579.36 973620.48 +SET 1524710.46 1317989.66 +SET 1524854.10 868136.43 +SET 1524884.52 973815.36 +SET 1524885.88 900025.14 +SET 1524992.14 1146796.28 +SET 1525037.10 973912.80 +SET 152504.30 102173.06 +SET 1525059.80 868253.54 +SET 152508.18 105746.22 +SET 1525189.68 974010.24 +SET 152519.40 90020.70 +SET 1525194.00 900207.00 +SET 1525494.84 974205.12 +SET 1525502.12 900388.86 +SET 152551.75 102204.85 +SET 1525785.03 1229981.28 +SET 15258.00 9744.00 +SET 1525810.24 900570.72 +SET 1525976.13 1319083.73 +SET 1526272.42 900843.51 +SET 152657.44 95333.16 +SET 152664.16 50068.48 +SET 1526705.40 869190.42 +SET 1526734.60 901116.30 +SET 1526819.91 1319813.11 +SET 1527084.96 953650.44 +SET 1527116.80 869424.64 +SET 1527139.60 919811.69 +SET 152724.18 132017.78 +SET 1527241.80 1320177.80 +SET 152741.55 102332.01 +SET 1527504.90 901570.95 +SET 1527658.96 901661.88 +SET 1527663.69 1320542.49 +SET 1527939.60 869893.08 +SET 1528121.14 901934.67 +SET 1528145.30 870010.19 +SET 15282.54 11334.96 +SET 152827.52 90202.56 +SET 15283.51 10597.29 +SET 152835.10 105972.90 +SET 152836.45 102395.59 +SET 1528451.20 920601.68 +SET 1528507.47 1321271.87 +SET 1528762.40 870361.52 +SET 152883.90 102427.38 +SET 152885.16 97634.88 +SET 1528891.44 902389.32 +SET 1528968.10 870478.63 +SET 1529.92 501.76 +SET 1529173.80 870595.74 +SET 1529199.56 902571.18 +SET 152931.35 102459.17 +SET 1529661.74 902843.97 +SET 1529893.04 955404.06 +SET 152992.00 50176.00 +SET 152998.56 106086.24 +SET 15301.20 11348.80 +SET 1530195.03 1322730.63 +SET 1530202.30 871181.29 +SET 1530338.30 1150816.60 +SET 153034.35 123365.60 +SET 1530403.60 955722.90 +SET 1530586.10 903389.55 +SET 1530616.92 1323095.32 +SET 1530658.88 955882.32 +SET 1530740.16 903480.48 +SET 1530819.40 871532.62 +SET 1530914.16 956041.74 +SET 15310.53 11355.72 +SET 1531025.10 871649.73 +SET 1531048.28 903662.34 +SET 1531169.44 956201.16 +SET 153121.15 102586.33 +SET 153135.64 90384.42 +SET 1531424.72 956360.58 +SET 1531510.46 903935.13 +SET 15316.80 9565.20 +SET 153168.60 102618.12 +SET 1531680.00 956520.00 +SET 1531818.58 904116.99 +SET 1531882.59 1324189.39 +SET 153190.32 97829.76 +SET 1531935.28 956679.42 +SET 1531948.80 922708.32 +SET 1531972.64 904207.92 +SET 1532053.60 872235.28 +SET 153216.05 102649.91 +SET 1532190.56 956838.84 +SET 1532386.00 922971.65 +SET 1532445.84 956998.26 +SET 1532465.00 872469.50 +SET 1532588.88 904571.64 +SET 153263.50 102681.70 +SET 1532726.37 1324918.77 +SET 1532742.94 904662.57 +SET 1532956.40 957317.10 +SET 1533011.38 1152826.76 +SET 1533082.10 872820.83 +SET 1533287.80 872937.94 +SET 1533466.96 957635.94 +SET 153358.40 102745.28 +SET 1533679.65 1153329.30 +SET 1533697.60 923761.64 +SET 15338.52 11376.48 +SET 1533975.42 905390.01 +SET 1533977.52 957954.78 +SET 1533992.04 1326012.84 +SET 1534110.60 873406.38 +SET 1534134.80 924024.97 +SET 1534250.76 1236805.76 +SET 1534283.54 905571.87 +SET 1534316.30 873523.49 +SET 1534347.92 1153831.84 +SET 1534488.08 958273.62 +SET 1534745.72 905844.66 +SET 1534899.78 905935.59 +SET 1535016.19 1154334.38 +SET 1535139.10 873991.93 +SET 153538.40 50355.20 +SET 1535509.20 958911.30 +SET 1535670.08 906390.24 +SET 1535679.60 1327471.60 +SET 1535684.46 1154836.92 +SET 1535824.14 906481.17 +SET 153595.65 102904.23 +SET 1535961.90 874460.37 +SET 1536019.76 959230.14 +SET 1536101.49 1327836.29 +SET 1536132.26 906663.03 +SET 1536167.60 874577.48 +SET 1536275.04 959389.56 +SET 1536320.80 925341.62 +SET 1536373.30 874694.59 +SET 1536440.38 906844.89 +SET 153652.40 106539.60 +SET 1536530.32 959548.98 +SET 15366.51 11397.24 +SET 1536784.70 874928.81 +SET 153685.56 123890.56 +SET 1536855.60 1238905.60 +SET 1536990.40 875045.92 +SET 15370.21 11558.42 +SET 153702.10 115584.20 +SET 1537021.00 1155842.00 +SET 1537040.88 959867.82 +SET 15373.80 10299.96 +SET 1537401.80 875280.14 +SET 15375.84 11404.16 +SET 1537506.81 1239430.56 +SET 1537632.40 926131.61 +SET 1537806.72 960346.08 +SET 1537826.92 907663.26 +SET 153785.45 103031.39 +SET 1538062.00 960505.50 +SET 1538069.60 926394.94 +SET 1538210.94 1329659.74 +SET 1538317.28 960664.92 +SET 1538357.54 1156847.08 +SET 1538430.30 875865.69 +SET 15385.17 11411.08 +SET 1538506.80 926658.27 +SET 153863.60 87598.28 +SET 1538632.83 1330024.43 +SET 1538636.00 875982.80 +SET 1538751.28 908208.84 +SET 1538841.70 876099.91 +SET 153894.40 92692.16 +SET 1539.45 1141.80 +SET 1539059.40 908390.70 +SET 1539213.46 908481.63 +SET 1539338.40 961302.60 +SET 15394.50 11418.00 +SET 1539460.44 1241005.44 +SET 1539593.68 961462.02 +SET 1539694.08 1157852.16 +SET 153989.85 133111.85 +SET 1539983.76 908936.28 +SET 1540104.24 961780.86 +SET 1540111.65 1241530.40 +SET 154022.70 103190.34 +SET 1540291.88 909118.14 +SET 1540320.39 1331483.19 +SET 1540359.52 961940.28 +SET 154060.00 90930.00 +SET 154069.30 87715.39 +SET 1540693.00 877153.90 +SET 15408.48 5053.44 +SET 1540898.70 877271.01 +SET 1541104.40 877388.12 +SET 15413.16 11431.84 +SET 1541310.10 877505.23 +SET 1541567.20 928501.58 +SET 1541586.06 1332577.26 +SET 1541635.92 962737.38 +SET 154165.05 103285.71 +SET 1541698.89 1159359.78 +SET 1541721.50 877739.45 +SET 1541891.20 962896.80 +SET 1542004.40 928764.91 +SET 154212.50 103317.50 +SET 1542132.90 877973.67 +SET 154214.06 91020.93 +SET 154224.51 106936.29 +SET 154259.95 103349.29 +SET 1542750.00 878325.00 +SET 1542851.73 1333671.33 +SET 1542878.80 929291.57 +SET 1542955.70 878442.11 +SET 154303.36 50606.08 +SET 154306.24 106992.96 +SET 1543273.62 1334036.02 +SET 154331.60 92955.49 +SET 1543316.00 929554.90 +SET 1543367.70 1244155.20 +SET 154368.12 91111.86 +SET 154370.37 116086.74 +SET 1543933.44 964172.16 +SET 154412.64 50641.92 +SET 1544189.90 879144.77 +SET 1544190.40 930081.56 +SET 1544395.60 879261.88 +SET 1544444.00 964491.00 +SET 1544539.29 1335130.09 +SET 15446.97 10710.63 +SET 1544699.28 964650.42 +SET 154480.70 87949.61 +SET 1544807.00 879496.10 +SET 15450.48 11459.52 +SET 154521.92 50677.76 +SET 1545218.40 879730.32 +SET 154522.18 91202.79 +SET 1545321.33 1245730.08 +SET 1545383.07 1335859.47 +SET 1545424.10 879847.43 +SET 1545708.51 1162375.02 +SET 1545939.20 931134.88 +SET 1546041.20 880198.76 +SET 1546230.96 965606.94 +SET 1546246.90 880315.87 +SET 154631.20 50713.60 +SET 154633.16 107219.64 +SET 1546486.24 965766.36 +SET 154676.24 91293.72 +SET 1546813.60 931661.54 +SET 1546864.00 880667.20 +SET 15469.14 11473.36 +SET 1546996.80 966085.20 +SET 1547070.63 1337318.23 +SET 154734.45 103667.19 +SET 1547686.80 881135.64 +SET 1547762.64 966563.46 +SET 15478.47 11480.28 +SET 154781.90 103698.98 +SET 1547892.50 881252.75 +SET 1547926.17 1247829.92 +SET 1548017.92 966722.88 +SET 1548273.20 966882.30 +SET 154829.35 103730.77 +SET 154830.30 91384.65 +SET 1548303.90 881486.97 +SET 1548381.59 1164385.18 +SET 1548562.40 932714.86 +SET 1548577.38 1248354.88 +SET 154868.70 98901.60 +SET 1548783.76 967201.14 +SET 1549228.59 1248879.84 +SET 154924.25 103794.35 +SET 1549294.32 967519.98 +SET 1549436.80 933241.52 +SET 1549549.60 967679.40 +SET 1549601.97 1339506.37 +SET 1549804.88 967838.82 +SET 154987.98 124940.48 +SET 1550023.86 1339871.06 +SET 1550060.16 967998.24 +SET 155021.28 98999.04 +SET 1550360.90 882658.07 +SET 155041.81 107502.99 +SET 1551054.67 1166395.34 +SET 155114.05 103921.51 +SET 1551182.22 1250454.72 +SET 1551183.70 883126.51 +SET 1551289.53 1340965.13 +SET 155138.42 91566.51 +SET 1551591.84 968954.76 +SET 155161.50 103953.30 +SET 1551722.94 1166897.88 +SET 155173.86 99096.48 +SET 1551800.80 883477.84 +SET 1551833.43 1250979.68 +SET 1552.87 1076.73 +SET 1552006.50 883594.95 +SET 155208.95 103985.09 +SET 155210.24 96927.36 +SET 1552102.40 969273.60 +SET 1552391.21 1167400.42 +SET 1552484.64 1251504.64 +SET 1552497.20 935084.83 +SET 15525.12 11514.88 +SET 155256.40 104016.88 +SET 15528.70 10767.30 +SET 1552934.40 935348.16 +SET 155303.85 104048.67 +SET 15534.45 11521.80 +SET 1553446.40 884414.72 +SET 1553652.10 884531.83 +SET 155368.73 107729.67 +SET 1553727.75 1168405.50 +SET 1553787.06 1252554.56 +SET 1553820.87 1343153.27 +SET 1553889.36 970389.54 +SET 155396.16 50964.48 +SET 1554396.02 1168908.04 +SET 1554680.60 885117.38 +SET 1554683.20 936401.48 +SET 155479.02 99291.36 +SET 1555064.29 1169410.58 +SET 155509.20 88535.16 +SET 15553.11 11535.64 +SET 155532.19 107843.01 +SET 1555930.32 1344976.72 +SET 1555931.60 971664.90 +SET 155600.60 91839.30 +SET 1556120.50 885937.15 +SET 15563.16 9938.88 +SET 1556326.20 886054.26 +SET 1556352.21 1345341.41 +SET 1556400.83 1170415.66 +SET 1556697.44 972143.16 +SET 1556737.60 886288.48 +SET 1556774.10 1345706.10 +SET 155683.45 104302.99 +SET 155706.91 117091.82 +SET 155714.90 88652.27 +SET 15572.08 9724.62 +SET 1557306.40 937981.46 +SET 1557354.70 886639.81 +SET 155754.66 91930.23 +SET 1557617.88 1346435.48 +SET 1557718.56 972780.84 +SET 1557766.10 886874.03 +SET 155777.38 108013.02 +SET 155778.35 104366.57 +SET 155784.18 99486.24 +SET 1557973.84 972940.26 +SET 1558.11 1155.64 +SET 1558039.77 1346800.17 +SET 15581.10 11556.40 +SET 1558229.12 973099.68 +SET 155825.80 104398.36 +SET 1558345.53 1256229.28 +SET 1558383.20 887225.36 +SET 1558405.64 1171923.28 +SET 1558461.66 1347164.86 +SET 1558484.40 973259.10 +SET 1558883.55 1347529.55 +SET 1558996.74 1256754.24 +SET 15590.43 11563.32 +SET 1559000.30 887576.69 +SET 1559073.91 1172425.82 +SET 155908.72 92021.16 +SET 155920.60 88769.38 +SET 155936.76 99583.68 +SET 1559411.70 887810.91 +SET 1559505.52 973896.78 +SET 1559617.40 887928.02 +SET 1559647.95 1257279.20 +SET 1559727.33 1348258.93 +SET 155976.08 97405.62 +SET 1559823.10 888045.13 +SET 15599.76 11570.24 +SET 1559929.60 939561.44 +SET 156022.57 108183.03 +SET 1560271.36 974375.04 +SET 1560299.16 1257804.16 +SET 1560410.45 1173430.90 +SET 1560440.20 888396.46 +SET 1560526.64 974534.46 +SET 156063.05 104557.31 +SET 1560781.92 974693.88 +SET 1560804.00 940088.10 +SET 1560851.60 888630.68 +SET 156089.34 99681.12 +SET 15609.93 13493.53 +SET 156099.30 134935.30 +SET 1560993.00 1349353.00 +SET 15610.43 10823.97 +SET 1561057.30 888747.79 +SET 156110.50 104589.10 +SET 1561263.00 888864.90 +SET 156161.12 51215.36 +SET 1561674.40 889099.12 +SET 1561678.40 940614.76 +SET 156186.03 108296.37 +SET 156205.40 104652.68 +SET 1562058.32 975490.98 +SET 1562085.80 889333.34 +SET 1562115.60 940878.09 +SET 1562258.67 1350447.07 +SET 1562291.50 889450.45 +SET 1562313.60 975650.40 +SET 156252.85 104684.47 +SET 1562552.80 941141.42 +SET 156267.76 108353.04 +SET 156270.40 51251.20 +SET 1562702.90 889684.67 +SET 156290.40 125990.40 +SET 1563079.44 976128.66 +SET 1563083.53 1175441.06 +SET 1563102.45 1351176.45 +SET 15633.20 8900.36 +SET 1563320.00 890036.00 +SET 156349.49 108409.71 +SET 156370.90 92293.95 +SET 1563731.40 890270.22 +SET 156375.18 117594.36 +SET 156379.68 51287.04 +SET 1563864.40 941931.41 +SET 156395.20 104779.84 +SET 1564206.42 1260953.92 +SET 1564348.50 890621.55 +SET 1564355.84 976925.76 +SET 1564420.07 1176446.14 +SET 1564857.63 1261478.88 +SET 156486.64 97724.46 +SET 1564866.40 977244.60 +SET 156490.10 104843.42 +SET 1565088.34 1176948.68 +SET 156512.95 108523.05 +SET 1565211.90 1352999.90 +SET 156524.96 92384.88 +SET 1565376.96 977563.44 +SET 1565377.00 891207.10 +SET 1565508.84 1262003.84 +SET 1565613.20 942984.73 +SET 1565632.24 977722.86 +SET 1565756.61 1177451.22 +SET 15658.50 10490.70 +SET 1565887.52 977882.28 +SET 1566055.68 1353729.28 +SET 1566142.80 978041.70 +SET 156632.45 104938.79 +SET 1566405.50 891792.65 +SET 15665.07 11618.68 +SET 1566611.20 891909.76 +SET 156679.02 92475.81 +SET 156679.90 104970.58 +SET 1566811.26 1263053.76 +SET 1566816.90 892026.87 +SET 1566899.46 1354458.66 +SET 1567.44 1162.56 +SET 156707.52 51394.56 +SET 1567228.30 892261.09 +SET 156741.92 97883.88 +SET 1567419.20 978838.80 +SET 1567434.00 892378.20 +SET 1567462.47 1263578.72 +SET 156774.80 105034.16 +SET 1567761.42 1178958.84 +SET 1567799.20 944301.38 +SET 1567929.76 979157.64 +SET 156816.80 51430.40 +SET 15683.73 11632.52 +SET 156833.08 92566.74 +SET 156839.87 108749.73 +SET 1568429.69 1179461.38 +SET 1568462.50 892963.75 +SET 1568673.60 944828.04 +SET 1568695.60 979635.90 +SET 1568764.89 1264628.64 +SET 1569008.91 1356282.11 +SET 15692.16 10880.64 +SET 1569285.30 893432.19 +SET 15693.06 11639.44 +SET 156941.61 126515.36 +SET 1569416.10 1265153.60 +SET 156949.10 89354.93 +SET 1569491.00 893549.30 +SET 1569548.00 945354.70 +SET 1569696.70 893666.41 +SET 1569852.69 1357011.49 +SET 156987.14 92657.67 +SET 156997.20 98043.30 +SET 1569985.20 945618.03 +SET 157004.82 100265.76 +SET 157012.05 105193.11 +SET 1570274.58 1357376.18 +SET 1570422.40 945881.36 +SET 1570434.50 1180969.00 +SET 1570737.84 980911.26 +SET 1570859.60 946144.69 +SET 1570930.90 894369.07 +SET 1570993.12 981070.68 +SET 15711.72 11653.28 +SET 1571118.36 1358105.56 +SET 1571248.40 981230.10 +SET 1571296.80 946408.02 +SET 1571369.73 1266728.48 +SET 15714.12 9274.86 +SET 1571503.68 981389.52 +SET 157154.80 89472.04 +SET 1571548.00 894720.40 +SET 157157.40 100363.20 +SET 1571771.04 1181974.08 +SET 157201.85 105320.27 +SET 1572014.24 981708.36 +SET 15721.05 11660.20 +SET 1572370.80 895188.84 +SET 1572384.03 1359199.63 +SET 1572439.31 1182476.62 +SET 157249.30 105352.06 +SET 157252.48 98202.72 +SET 1572608.40 947198.01 +SET 1572780.08 982186.62 +SET 1572782.20 895423.06 +SET 1572805.92 1359564.32 +SET 157296.75 105383.85 +SET 1573035.36 982346.04 +SET 1573045.60 947461.34 +SET 157309.98 100460.64 +SET 1573193.60 895657.28 +SET 1573227.81 1359929.01 +SET 157344.20 105415.64 +SET 1573482.80 947724.67 +SET 1573545.92 982664.88 +SET 157360.50 89589.15 +SET 157363.20 51609.60 +SET 157391.65 105447.43 +SET 157392.00 94798.80 +SET 1574016.40 896125.72 +SET 1574357.20 948251.33 +SET 157449.32 92930.46 +SET 1574567.04 983302.56 +SET 1574625.78 1269353.28 +SET 157472.48 51645.44 +SET 1574839.20 896594.16 +SET 157486.55 105511.01 +SET 1574915.37 1361387.77 +SET 157493.71 109203.09 +SET 1575231.60 948777.99 +SET 1575250.60 896828.38 +SET 1575276.99 1269878.24 +SET 1575332.88 983780.82 +SET 1575337.26 1361752.46 +SET 1575456.30 896945.49 +SET 157566.20 89706.26 +SET 1575662.00 897062.60 +SET 1575668.80 949041.32 +SET 1575759.15 1362117.15 +SET 1575780.66 1184989.32 +SET 157581.45 105574.59 +SET 1576073.40 897296.82 +SET 1576106.00 949304.65 +SET 157615.14 100655.52 +SET 1576279.10 897413.93 +SET 1576543.20 949567.98 +SET 15767.70 11694.80 +SET 1577101.90 897882.37 +SET 15773.89 10937.31 +SET 157771.90 89823.37 +SET 1577885.68 985375.02 +SET 157800.32 51752.96 +SET 1578130.40 898467.92 +SET 1578140.96 985534.44 +SET 1578290.49 1364305.29 +SET 1578336.10 898585.03 +SET 1578396.24 985693.86 +SET 1578533.04 1272503.04 +SET 15786.36 11708.64 +SET 157866.15 105765.33 +SET 1578953.20 898936.36 +SET 157911.50 93203.25 +SET 157913.60 105797.12 +SET 1579134.27 1365034.67 +SET 1579184.25 1273028.00 +SET 157920.30 100850.40 +SET 1579417.36 986331.54 +SET 1579556.16 1365399.36 +SET 157961.05 105828.91 +SET 1579790.28 1188004.56 +SET 1579835.46 1273552.96 +SET 1579927.92 986650.38 +SET 1579978.05 1365764.05 +SET 1579981.70 899521.91 +SET 158.61 117.64 +SET 1580040.80 951674.62 +SET 158018.32 98680.98 +SET 1580393.10 899756.13 +SET 1580399.94 1366128.74 +SET 1580438.48 986969.22 +SET 1580478.00 951937.95 +SET 1580486.67 1274077.92 +SET 158065.56 93294.18 +SET 158065.82 109599.78 +SET 158072.88 100947.84 +SET 1580821.83 1366493.43 +SET 1580915.20 952201.28 +SET 1581010.20 900107.46 +SET 1581137.88 1274602.88 +SET 1581215.90 900224.57 +SET 158128.16 51860.48 +SET 1581421.60 900341.68 +SET 158183.30 90057.59 +SET 1581970.16 987925.74 +SET 158198.30 105987.86 +SET 1582038.70 900693.01 +SET 158219.62 93385.11 +SET 158237.44 51896.32 +SET 158245.75 106019.65 +SET 1582463.36 1190014.72 +SET 1582480.72 988244.58 +SET 158266.40 95325.46 +SET 1582664.00 953254.60 +SET 1582736.00 988404.00 +SET 1583091.51 1276177.76 +SET 15833.01 11743.24 +SET 1583478.60 901512.78 +SET 1583501.84 988882.26 +SET 1583684.30 901629.89 +SET 1583742.72 1276702.72 +SET 1583757.12 989041.68 +SET 1583775.06 1369046.26 +SET 158378.04 101142.72 +SET 158388.10 106115.02 +SET 1583890.00 901747.00 +SET 158392.74 109826.46 +SET 1583975.60 954044.59 +SET 1584267.68 989360.52 +SET 1584468.17 1191522.34 +SET 1584618.84 1369775.64 +SET 158474.47 109883.13 +SET 1585033.52 989838.78 +SET 1585124.20 902449.66 +SET 1585329.90 902566.77 +SET 1585544.08 990157.62 +SET 158556.20 109939.80 +SET 158565.28 52003.84 +SET 1585741.30 902800.99 +SET 158577.90 106242.18 +SET 1585884.51 1370869.71 +SET 158625.35 106273.97 +SET 158630.64 137123.44 +SET 1586309.92 990635.88 +SET 1586358.40 903152.32 +SET 1586564.10 903269.43 +SET 1586565.20 990795.30 +SET 1586598.80 955624.57 +SET 1586728.29 1371599.09 +SET 158683.20 101337.60 +SET 1586975.50 903503.65 +SET 158719.66 110053.14 +SET 1587386.90 903737.87 +SET 1587473.20 956151.23 +SET 1587649.98 1279852.48 +SET 15879.66 11777.84 +SET 1587910.40 956414.56 +SET 158800.40 90408.92 +SET 1588096.88 991751.82 +SET 158815.15 106401.13 +SET 1588352.16 991911.24 +SET 1588477.79 1194537.58 +SET 1588621.10 904440.53 +SET 158883.12 110166.48 +SET 1588837.74 1373422.54 +SET 1588862.72 992230.08 +SET 158893.12 52111.36 +SET 158910.05 106464.71 +SET 1589146.06 1195040.12 +SET 1589222.00 957204.55 +SET 1589259.63 1373787.23 +SET 1589373.28 992548.92 +SET 158957.50 106496.50 +SET 1589814.33 1195542.66 +SET 1589855.30 905143.19 +SET 158989.92 93839.76 +SET 159002.40 52147.20 +SET 159004.95 106528.29 +SET 159006.10 90526.03 +SET 1590061.00 905260.30 +SET 1590103.41 1374516.61 +SET 1590139.12 993027.18 +SET 159039.44 99318.66 +SET 1590394.40 993186.60 +SET 159052.53 137488.13 +SET 1590883.80 905728.74 +SET 1590906.03 1282477.28 +SET 159099.85 106591.87 +SET 1591160.24 993664.86 +SET 159128.31 110336.49 +SET 159140.94 101629.92 +SET 1591415.52 993824.28 +SET 159147.30 106623.66 +SET 15916.98 11805.52 +SET 1591670.80 993983.70 +SET 1591819.14 1197050.28 +SET 159210.04 110393.16 +SET 1592181.36 994302.54 +SET 1592208.45 1283527.20 +SET 1592436.64 994461.96 +SET 1592691.92 994621.38 +SET 1592719.60 959311.19 +SET 1592735.10 906782.73 +SET 159289.65 106719.03 +SET 159293.52 101727.36 +SET 159294.72 99478.08 +SET 1592947.20 994780.80 +SET 159298.04 94021.62 +SET 1593056.64 1377069.44 +SET 1593146.50 907016.95 +SET 1593155.68 1198055.36 +SET 1593457.76 995099.64 +SET 1593478.53 1377434.13 +SET 15935.64 11819.36 +SET 159384.55 106782.61 +SET 1593968.32 995418.48 +SET 159432.00 106814.40 +SET 159439.52 52290.56 +SET 1594792.10 907953.83 +SET 1594989.44 996056.16 +SET 1595.43 1183.32 +SET 1595166.09 1378892.89 +SET 1595203.50 908188.05 +SET 1595244.72 996215.58 +SET 15954.88 5232.64 +SET 1595409.20 908305.16 +SET 159546.45 128615.20 +SET 1595464.50 1286152.00 +SET 159548.80 52326.40 +SET 1595500.00 996375.00 +SET 1595587.98 1379257.58 +SET 1595820.60 908539.38 +SET 159618.69 110676.51 +SET 159621.80 106941.56 +SET 1596232.00 908773.60 +SET 1596265.84 996853.26 +SET 15963.63 11840.12 +SET 1596437.70 908890.71 +SET 1596497.03 1200568.06 +SET 1596521.12 997012.68 +SET 159658.08 52362.24 +SET 1596643.40 909007.82 +SET 1596654.40 961681.16 +SET 1597091.60 961944.49 +SET 159716.70 107005.14 +SET 1597260.50 909359.15 +SET 1597275.54 1380716.34 +SET 159760.22 94294.41 +SET 159767.36 52398.08 +SET 159805.28 99796.92 +SET 1598083.30 909827.59 +SET 159828.90 90994.47 +SET 1598403.20 962734.48 +SET 1598541.21 1381810.41 +SET 1598563.36 998288.04 +SET 159863.88 110846.52 +SET 1598906.10 910296.03 +SET 1598963.10 1382175.10 +SET 159906.50 107132.30 +SET 1599073.92 998606.88 +SET 15991.62 11860.88 +SET 159914.28 94385.34 +SET 1599170.11 1202578.22 +SET 1599277.60 963261.14 +SET 1599317.50 910530.25 +SET 1599329.20 998766.30 +SET 1599523.20 910647.36 +SET 1599584.48 998925.72 +SET 1599714.80 963524.47 +SET 1599728.90 910764.47 +SET 1599806.88 1382904.48 +SET 1599838.38 1203080.76 +SET 159985.92 52469.76 +SET 160015.20 96378.78 +SET 1600228.77 1383269.17 +SET 160034.60 91111.58 +SET 1600605.60 999563.40 +SET 1600650.66 1383633.86 +SET 1600674.18 1290351.68 +SET 1600860.88 999722.82 +SET 160096.30 107259.46 +SET 1601026.40 964314.46 +SET 160109.07 111016.53 +SET 1601374.50 911701.35 +SET 1601494.44 1384363.24 +SET 1601843.19 1204588.38 +SET 160190.80 111073.20 +SET 160191.20 107323.04 +SET 16020.90 10231.20 +SET 1602511.46 1205090.92 +SET 1602627.81 1291926.56 +SET 1602647.84 1000838.76 +SET 160272.53 111129.87 +SET 1602775.20 965367.78 +SET 1602814.40 912521.12 +SET 160286.10 107386.62 +SET 1603020.10 912638.23 +SET 16031.82 13858.22 +SET 160315.84 100115.76 +SET 1603182.00 1385822.00 +SET 1603212.40 965631.11 +SET 1603279.02 1292451.52 +SET 1603431.50 912872.45 +SET 1603603.89 1386186.69 +SET 1603649.60 965894.44 +SET 16038.10 10745.02 +SET 16038.48 12060.96 +SET 1603842.90 913106.67 +SET 1603924.24 1001635.86 +SET 1604.76 1190.24 +SET 1604179.52 1001795.28 +SET 16044.60 9134.58 +SET 160452.40 96642.11 +SET 1604524.00 966421.10 +SET 1604665.70 913575.11 +SET 16047.60 11902.40 +SET 160517.72 111299.88 +SET 1605200.64 1002432.96 +SET 160523.35 107545.57 +SET 1605282.80 913926.44 +SET 1605291.45 1387645.45 +SET 1605398.40 966947.76 +SET 1605488.50 914043.55 +SET 1605694.20 914160.66 +SET 160570.80 107577.36 +SET 160571.12 100275.18 +SET 1605713.34 1388010.14 +SET 1605883.86 1294551.36 +SET 1605966.48 1002911.22 +SET 160599.45 111356.55 +SET 1606221.76 1003070.64 +SET 1606311.30 914511.99 +SET 160651.70 91462.91 +SET 16066.26 11916.24 +SET 160684.58 94839.99 +SET 1606928.40 914863.32 +SET 1606979.01 1389104.21 +SET 160713.15 107672.73 +SET 1607134.10 914980.43 +SET 1607147.20 968001.08 +SET 1607189.35 1208608.70 +SET 1607339.80 915097.54 +SET 1607545.50 915214.65 +SET 1607584.40 968264.41 +SET 1607751.20 915331.76 +SET 1607753.44 1004027.16 +SET 1607956.90 915448.87 +SET 1608008.72 1004186.58 +SET 1608021.60 968527.74 +SET 1608162.60 915565.98 +SET 160819.32 102701.76 +SET 160826.40 100434.60 +SET 1608264.00 1004346.00 +SET 1608488.70 1296651.20 +SET 16085.55 10776.81 +SET 1608519.28 1004505.42 +SET 1608574.00 915800.20 +SET 1608774.56 1004664.84 +SET 1608896.00 969054.40 +SET 1608985.40 916034.42 +SET 1609088.46 1390927.66 +SET 1609139.91 1297176.16 +SET 1609396.80 916268.64 +SET 1609540.40 1005143.10 +SET 1609602.50 916385.75 +SET 160971.90 102799.20 +SET 1609770.40 969581.06 +SET 1609795.68 1005302.52 +SET 1609808.20 916502.86 +SET 16100.81 11163.99 +SET 161045.30 107895.26 +SET 1610530.70 1211121.40 +SET 1610561.52 1005780.78 +SET 1610776.02 1392386.42 +SET 161078.72 52828.16 +SET 161089.83 111696.57 +SET 1611093.54 1298751.04 +SET 1611198.97 1211623.94 +SET 161124.48 102896.64 +SET 1611248.10 917322.63 +SET 1611327.36 1006259.04 +SET 1611453.80 917439.74 +SET 161146.76 95112.78 +SET 1611837.92 1006577.88 +SET 1611865.20 917673.96 +SET 161187.65 107990.63 +SET 1612276.60 917908.18 +SET 1612348.48 1006896.72 +SET 1612463.58 1393845.18 +SET 1612535.51 1212629.02 +SET 1612830.80 971424.37 +SET 1612859.04 1007215.56 +SET 161297.28 52899.84 +SET 1613.30 1080.86 +SET 161300.82 95203.71 +SET 1613099.40 918376.62 +SET 161326.80 97168.77 +SET 1613268.00 971687.70 +SET 1613369.60 1007534.40 +SET 1613510.80 918610.84 +SET 1613880.16 1007853.24 +SET 1613922.20 918845.06 +SET 1614127.90 918962.17 +SET 1614151.14 1395303.94 +SET 1614349.59 1301375.84 +SET 1614390.72 1008172.08 +SET 1614579.60 972477.69 +SET 161472.35 108181.37 +SET 161474.50 91931.35 +SET 1615016.80 972741.02 +SET 161519.80 108213.16 +SET 1615208.59 1214639.18 +SET 1615362.10 919664.83 +SET 1615411.84 1008809.76 +SET 1615567.80 919781.94 +SET 1615773.50 919899.05 +SET 161580.21 112036.59 +SET 1615838.70 1396762.70 +SET 161592.24 100912.86 +SET 1616260.59 1397127.39 +SET 1616328.40 973531.01 +SET 1616596.30 920367.49 +SET 161662.15 108308.53 +SET 1616688.24 1009606.86 +SET 1616765.60 973794.34 +SET 16168.89 11992.36 +SET 161680.20 92048.46 +SET 1616943.52 1009766.28 +SET 161709.60 108340.32 +SET 1617104.37 1397856.77 +SET 1617202.80 974057.67 +SET 1617213.40 1216146.80 +SET 1617213.40 920718.82 +SET 161734.80 103286.40 +SET 161743.67 112149.93 +SET 1617454.08 1010085.12 +SET 1617526.26 1398221.46 +SET 16176.40 9743.21 +SET 1617624.80 920953.04 +SET 161763.00 95476.50 +SET 1617640.00 974321.00 +SET 1617964.64 1010403.96 +SET 1618036.20 921187.26 +SET 161851.95 108435.69 +SET 161885.90 92165.57 +SET 1619241.04 1011201.06 +SET 161946.85 108499.27 +SET 1619635.71 1400044.91 +SET 1619826.00 975637.65 +SET 161988.86 112319.94 +SET 1619886.48 1218156.96 +SET 1620006.88 1011679.32 +SET 1620210.48 1306100.48 +SET 1620479.49 1400774.29 +SET 162070.59 112376.61 +SET 162071.12 95658.36 +SET 1620710.30 922709.69 +SET 1620772.72 1012157.58 +SET 1620901.38 1401138.98 +SET 162102.80 101231.70 +SET 1621283.28 1012476.42 +SET 162152.32 112433.28 +SET 1621538.56 1012635.84 +SET 162171.52 53186.56 +SET 1621738.80 923295.24 +SET 1621745.16 1401868.36 +SET 1621944.50 923412.35 +SET 1622012.00 976954.30 +SET 1622164.11 1307675.36 +SET 162225.18 95749.29 +SET 1622355.90 923646.57 +SET 1622559.68 1013273.52 +SET 1622561.60 923763.68 +SET 1622767.30 923880.79 +SET 1622814.96 1013432.94 +SET 1622815.32 1308200.32 +SET 1623010.83 1402962.43 +SET 1623178.70 924115.01 +SET 1623227.83 1220669.66 +SET 1623384.40 924232.12 +SET 1623432.72 1403327.12 +SET 1623466.53 1308725.28 +SET 162358.08 101391.12 +SET 1623580.80 1013911.20 +SET 162373.90 108785.38 +SET 162379.24 95840.22 +SET 1623795.80 924466.34 +SET 1623836.08 1014070.62 +SET 1623854.61 1403691.81 +SET 162389.61 122117.22 +SET 1623896.10 1221172.20 +SET 162390.08 53258.24 +SET 162397.51 112603.29 +SET 1624001.50 924583.45 +SET 1624117.74 1309250.24 +SET 1624276.50 1404056.50 +SET 1624346.64 1014389.46 +SET 1624564.37 1221674.74 +SET 1624635.20 978534.28 +SET 162479.24 112659.96 +SET 162499.36 53294.08 +SET 1625030.00 925169.00 +SET 1625072.40 978797.61 +SET 1625112.48 1014867.72 +SET 1625232.64 1222177.28 +SET 1625235.70 925286.11 +SET 162533.30 95931.15 +SET 1625420.16 1310300.16 +SET 1625441.40 925403.22 +SET 1625509.60 979060.94 +SET 1626058.50 925754.55 +SET 1626071.37 1310825.12 +SET 162608.64 53329.92 +SET 1626388.88 1015664.82 +SET 162642.70 112773.30 +SET 162650.28 103871.04 +SET 1626644.16 1015824.24 +SET 1626881.30 926222.99 +SET 1627087.00 926340.10 +SET 1627154.72 1016143.08 +SET 1627237.45 1223684.90 +SET 162724.43 112829.97 +SET 1627258.40 980114.26 +SET 1627373.79 1311875.04 +SET 1627410.00 1016302.50 +SET 1627498.40 926574.32 +SET 162753.50 109039.70 +SET 1627905.72 1224187.44 +SET 16280.85 12075.40 +SET 16282.72 5340.16 +SET 162841.42 96113.01 +SET 1628431.12 1016940.18 +SET 162849.54 140770.34 +SET 1628686.40 1017099.60 +SET 162887.89 112943.31 +SET 162895.85 109135.07 +SET 16290.18 12082.32 +SET 1629144.00 927511.20 +SET 1629196.96 1017418.44 +SET 1629327.42 1313449.92 +SET 1629349.70 927628.31 +SET 162936.48 53437.44 +SET 162943.30 109166.86 +SET 1629555.40 927745.42 +SET 1629707.52 1017737.28 +SET 1629761.07 1408797.47 +SET 1629881.60 981694.24 +SET 16299.51 12089.24 +SET 162990.75 109198.65 +SET 1629910.53 1225695.06 +SET 1629966.80 927979.64 +SET 163.46 113.34 +SET 1630172.50 928096.75 +SET 1630318.80 981957.57 +SET 163045.76 53473.28 +SET 1630473.36 1018215.54 +SET 163051.35 113056.65 +SET 1630578.80 1226197.60 +SET 1630583.90 928330.97 +SET 1630629.84 1314499.84 +SET 1630789.60 928448.08 +SET 1630995.30 928565.19 +SET 163108.02 104163.36 +SET 1631247.07 1226700.14 +SET 1631448.63 1410256.23 +SET 1631494.48 1018853.22 +SET 1631612.40 928916.52 +SET 1631749.76 1019012.64 +SET 16318.17 12103.08 +SET 163180.55 109325.81 +SET 1631818.10 929033.63 +SET 1632023.80 929150.74 +SET 1632292.41 1410985.61 +SET 1632515.60 1019490.90 +SET 1632583.61 1227705.22 +SET 1632770.88 1019650.32 +SET 1633136.19 1411714.99 +SET 1633258.00 929853.40 +SET 1633281.44 1019969.16 +SET 1633463.70 929970.51 +SET 1633558.08 1412079.68 +SET 16337.92 10202.88 +SET 163370.35 109452.97 +SET 163379.20 102028.80 +SET 1633920.15 1228710.30 +SET 1634080.80 930321.84 +SET 163413.18 104358.24 +SET 163417.80 109484.76 +SET 1634401.86 1412809.06 +SET 1634557.84 1020766.26 +SET 163457.66 96476.73 +SET 16346.00 11334.00 +SET 163465.25 109516.55 +SET 1634690.80 984590.87 +SET 1634813.12 1020925.68 +SET 163482.88 53616.64 +SET 1634903.60 930790.28 +SET 1635109.30 930907.39 +SET 163531.50 93102.45 +SET 1635323.68 1021244.52 +SET 163541.73 113396.67 +SET 1635565.20 985117.53 +SET 163565.76 104455.68 +SET 1635667.53 1413903.13 +SET 1635834.24 1021563.36 +SET 1635932.10 931375.83 +SET 163607.60 109611.92 +SET 1636089.42 1414267.82 +SET 163611.72 96567.66 +SET 1636137.80 931492.94 +SET 163623.46 113453.34 +SET 1636344.80 1021882.20 +SET 1636549.20 931727.16 +SET 163655.05 109643.71 +SET 1636876.80 985907.52 +SET 163693.32 141499.72 +SET 1636933.20 1414997.20 +SET 163702.50 109675.50 +SET 1637166.30 932078.49 +SET 163726.15 123122.30 +SET 1637355.09 1415361.89 +SET 1637365.92 1022519.88 +SET 163737.20 93219.56 +SET 1637621.20 1022679.30 +SET 163786.92 113566.68 +SET 1637876.48 1022838.72 +SET 1637989.10 932546.93 +SET 163810.72 53724.16 +SET 1638188.40 986697.51 +SET 1638194.80 932664.04 +SET 1638387.04 1023157.56 +SET 1638598.04 1232228.08 +SET 1638606.20 932898.26 +SET 1638642.32 1023316.98 +SET 1638897.60 1023476.40 +SET 163892.30 109802.66 +SET 1639062.80 987224.17 +SET 1639152.88 1023635.82 +SET 16392.00 5376.00 +SET 1639223.30 933249.59 +SET 1639266.31 1232730.62 +SET 1639500.00 987487.50 +SET 1639746.78 1321849.28 +SET 163987.20 109866.24 +SET 1639934.58 1233233.16 +SET 1640046.10 933718.03 +SET 1640174.00 1024273.50 +SET 164023.50 104748.00 +SET 164032.11 113736.69 +SET 1640374.40 988014.16 +SET 1640397.99 1322374.24 +SET 1640457.50 933952.25 +SET 1640602.85 1233735.70 +SET 1640663.20 934069.36 +SET 164073.90 96840.45 +SET 1640730.21 1418279.41 +SET 1640811.60 988277.49 +SET 164082.10 109929.82 +SET 1640868.90 934186.47 +SET 1641049.20 1322899.20 +SET 1641074.60 934303.58 +SET 16411.47 12172.28 +SET 164115.21 141864.41 +SET 1641280.30 934420.69 +SET 164145.04 102507.06 +SET 16417.70 10999.34 +SET 1641705.68 1025230.02 +SET 164176.08 104845.44 +SET 164177.00 109993.40 +SET 1641995.88 1419373.48 +SET 1642216.24 1025548.86 +SET 164247.84 53867.52 +SET 1642514.50 935123.35 +SET 1642726.80 1025867.70 +SET 164277.30 113906.70 +SET 1642925.90 935357.57 +SET 16430.13 12186.12 +SET 164319.35 110088.77 +SET 1643261.55 1420467.55 +SET 164328.66 104942.88 +SET 1643434.80 989857.47 +SET 1643492.64 1026345.96 +SET 164354.30 93570.89 +SET 164357.12 53903.36 +SET 1643683.44 1420832.24 +SET 1643748.70 935826.01 +SET 164414.25 110152.35 +SET 1644309.20 990384.13 +SET 164440.76 114020.04 +SET 1644527.22 1421561.62 +SET 1644571.50 936294.45 +SET 164461.70 110184.14 +SET 1644777.20 936411.56 +SET 16448.79 12199.96 +SET 164481.24 105040.32 +SET 1644949.11 1421926.31 +SET 1644956.46 1326048.96 +SET 1645024.32 1027302.48 +SET 1645183.60 990910.79 +SET 1645371.00 1422291.00 +SET 164556.60 110247.72 +SET 16456.00 9368.80 +SET 1645600.00 936880.00 +SET 1645620.80 991174.12 +SET 1645790.16 1027780.74 +SET 1645792.89 1422655.69 +SET 1645805.70 936997.11 +SET 1645949.01 1237756.02 +SET 1646011.40 937114.22 +SET 164604.05 110279.51 +SET 164604.22 114133.38 +SET 1646058.00 991437.45 +SET 1646300.72 1028099.58 +SET 1646495.20 991700.78 +SET 16465.15 11031.13 +SET 164651.50 110311.30 +SET 164655.60 102825.90 +SET 1646556.00 1028259.00 +SET 1646617.28 1238258.56 +SET 1646628.50 937465.55 +SET 1646834.20 937582.66 +SET 164690.14 97204.17 +SET 1646910.09 1327623.84 +SET 1646932.40 991964.11 +SET 164698.95 110343.09 +SET 1647039.90 937699.77 +SET 1647066.56 1028577.84 +SET 1647245.60 937816.88 +SET 1647285.55 1238761.10 +SET 1647321.84 1028737.26 +SET 1647369.60 992227.44 +SET 1647480.45 1424114.45 +SET 1647561.30 1328148.80 +SET 1647577.12 1028896.68 +SET 164765.70 93805.11 +SET 1647657.00 938051.10 +SET 1647862.70 938168.21 +SET 1647902.34 1424479.14 +SET 164793.85 110406.67 +SET 164794.24 54046.72 +SET 1648244.00 992754.10 +SET 164841.30 110438.46 +SET 164844.20 97295.10 +SET 1648598.24 1029534.36 +SET 1648622.09 1239766.18 +SET 1648681.20 993017.43 +SET 1648685.50 938636.65 +SET 1648746.12 1425208.52 +SET 1648853.52 1029693.78 +SET 1648891.20 938753.76 +SET 1649168.01 1425573.21 +SET 164936.20 110502.04 +SET 1649364.08 1030012.62 +SET 16495.44 12234.56 +SET 1649508.30 939105.09 +SET 1649555.60 993544.09 +SET 164958.99 142593.79 +SET 164971.40 93922.22 +SET 164983.65 110533.83 +SET 1649874.64 1030331.46 +SET 16501.28 5411.84 +SET 165012.80 54118.40 +SET 1650385.20 1030650.30 +SET 16504.77 12241.48 +SET 1650536.80 939690.64 +SET 1650626.90 1241273.80 +SET 1650742.50 939807.75 +SET 1650895.76 1030969.14 +SET 165091.56 105430.08 +SET 165094.60 114473.40 +SET 1650948.20 939924.86 +SET 1651151.04 1031128.56 +SET 165126.00 110629.20 +SET 1651277.46 1427396.66 +SET 16514.10 12248.40 +SET 165166.16 103144.74 +SET 1651741.60 994860.74 +SET 1651916.88 1031606.82 +SET 1651963.44 1242278.88 +SET 1651976.70 940510.41 +SET 1652119.77 1331823.52 +SET 1652121.24 1428126.04 +SET 1652178.80 995124.07 +SET 165220.90 110692.78 +SET 16523.43 12255.32 +SET 1652427.44 1031925.66 +SET 1652543.13 1428490.73 +SET 165258.06 114586.74 +SET 1652616.00 995387.40 +SET 1652631.71 1242781.42 +SET 165268.35 110724.57 +SET 1652938.00 1032244.50 +SET 1652965.02 1428855.42 +SET 1653210.90 941213.07 +SET 1653422.19 1332873.44 +SET 1653448.56 1032563.34 +SET 1653622.30 941447.29 +SET 165363.25 110788.15 +SET 1653808.80 1429584.80 +SET 1653959.12 1032882.18 +SET 165410.70 110819.94 +SET 16542.09 12269.16 +SET 165421.44 103304.16 +SET 165421.52 114700.08 +SET 165449.92 54261.76 +SET 1654636.52 1244289.04 +SET 1654650.80 942032.84 +SET 165503.25 114756.75 +SET 1655062.20 942267.06 +SET 1655074.47 1430678.87 +SET 16551.42 12276.08 +SET 1655239.20 996967.38 +SET 1655304.79 1244791.58 +SET 1655473.60 942501.28 +SET 1655490.80 1033838.70 +SET 1655676.40 997230.71 +SET 1655918.25 1431408.25 +SET 1656027.03 1334973.28 +SET 1656090.70 942852.61 +SET 1656296.40 942969.72 +SET 1656340.14 1431772.94 +SET 165647.95 110978.89 +SET 1656511.92 1034476.38 +SET 1656641.33 1245796.66 +SET 165668.48 54333.44 +SET 1656762.03 1432137.63 +SET 1656913.50 943321.05 +SET 165695.40 111010.68 +SET 1656988.00 998020.70 +SET 165701.88 105819.84 +SET 1657022.48 1034795.22 +SET 1657119.20 943438.16 +SET 1657277.76 1034954.64 +SET 165742.85 111042.47 +SET 1657425.20 998284.03 +SET 165748.44 114926.76 +SET 1657530.60 943672.38 +SET 1657533.04 1035114.06 +SET 1657736.30 943789.49 +SET 1657942.00 943906.60 +SET 1657977.87 1246801.74 +SET 1657980.66 1336548.16 +SET 1659176.20 944609.26 +SET 1659293.37 1434325.77 +SET 16593.20 10362.30 +SET 165932.65 111169.63 +SET 1659611.20 999600.68 +SET 1659715.26 1434690.46 +SET 1659793.30 944960.59 +SET 1659830.56 1036548.84 +SET 1659934.29 1338123.04 +SET 1660.75 1112.65 +SET 166007.04 106014.72 +SET 1660085.84 1036708.26 +SET 166027.55 111233.21 +SET 1660485.60 1000127.34 +SET 1660559.04 1435419.84 +SET 166058.55 133864.80 +SET 1660616.10 945429.03 +SET 16607.50 11126.50 +SET 166075.36 115153.44 +SET 1660821.80 945546.14 +SET 1660980.93 1435784.53 +SET 166122.45 111296.79 +SET 1661236.71 1339172.96 +SET 1661319.22 1249314.44 +SET 16616.73 12324.52 +SET 1661850.30 946131.69 +SET 1661872.80 1037824.20 +SET 1661987.49 1249816.98 +SET 1662128.08 1037983.62 +SET 166214.88 54512.64 +SET 1662234.40 1001180.66 +SET 166224.66 143687.86 +SET 1662261.70 946365.91 +SET 166230.74 98113.47 +SET 166238.82 115266.78 +SET 16626.06 12331.44 +SET 1662671.60 1001443.99 +SET 1662673.10 946600.13 +SET 1662878.80 946717.24 +SET 1663090.38 1437607.98 +SET 1663108.80 1001707.32 +SET 1663404.48 1038780.72 +SET 1663546.00 1001970.65 +SET 166359.70 111455.74 +SET 1663701.60 947185.68 +SET 16638.48 9820.44 +SET 1663841.55 1341272.80 +SET 1663907.30 947302.79 +SET 1663915.04 1039099.56 +SET 166402.28 115380.12 +SET 166407.15 111487.53 +SET 1664170.32 1039258.98 +SET 1664318.70 947537.01 +SET 166442.56 103941.84 +SET 1664425.60 1039418.40 +SET 1664524.40 947654.12 +SET 166454.60 111519.32 +SET 1664936.16 1039737.24 +SET 1665191.44 1039896.66 +SET 1665199.83 1439431.43 +SET 1665328.84 1252329.68 +SET 166538.86 98295.33 +SET 16654.05 12352.20 +SET 1665446.72 1040056.08 +SET 1665702.00 1040215.50 +SET 166573.20 100328.73 +SET 166617.00 94859.10 +SET 16663.38 12359.12 +SET 166644.40 111646.48 +SET 1666467.84 1040693.76 +SET 166652.00 54656.00 +SET 1666581.40 948825.22 +SET 1666723.12 1040853.18 +SET 166692.92 98386.26 +SET 166697.84 104101.26 +SET 1666978.40 1041012.60 +SET 1666992.80 949059.44 +SET 1667043.60 1004077.29 +SET 1667404.20 949293.66 +SET 166761.28 54691.84 +SET 1667748.81 1344422.56 +SET 166786.75 111741.85 +SET 1667918.00 1004603.95 +SET 1667999.52 1041650.28 +SET 1668001.92 1254339.84 +SET 1668153.06 1441984.26 +SET 1668227.00 949762.10 +SET 166834.20 111773.64 +SET 1668400.02 1344947.52 +SET 166846.98 98477.19 +SET 1668510.08 1041969.12 +SET 1668574.95 1442348.95 +SET 166870.56 54727.68 +SET 1668792.40 1005130.61 +SET 1668844.10 950113.43 +SET 1668996.84 1442713.64 +SET 1669229.60 1005393.94 +SET 1669255.50 950347.65 +SET 1669275.92 1042447.38 +SET 1669418.73 1443078.33 +SET 1669461.20 950464.76 +SET 166953.12 104260.68 +SET 1669531.20 1042606.80 +SET 1669666.90 950581.87 +SET 166974.39 115776.81 +SET 1669786.48 1042766.22 +SET 1669840.62 1443443.02 +SET 16700.70 12386.80 +SET 1670006.73 1255847.46 +SET 1670041.76 1042925.64 +SET 1670262.51 1443807.71 +SET 1670297.04 1043085.06 +SET 167067.50 125635.00 +SET 167068.44 144417.24 +SET 1670695.40 951167.42 +SET 167075.10 106696.80 +SET 1670978.40 1006447.26 +SET 16710.03 12393.72 +SET 167118.90 111964.38 +SET 1671318.16 1043722.74 +SET 1671415.60 1006710.59 +SET 1671518.20 951635.86 +SET 1671656.07 1347572.32 +SET 167166.35 111996.17 +SET 1671852.80 1006973.92 +SET 16719.36 12400.64 +SET 16719.84 5483.52 +SET 1671929.60 951870.08 +SET 1672084.00 1044201.00 +SET 167213.80 112027.96 +SET 167219.58 115946.82 +SET 1672307.28 1348097.28 +SET 1672341.00 952104.30 +SET 1672546.70 952221.41 +SET 1672958.10 952455.63 +SET 167309.16 98749.98 +SET 1673215.74 1446360.54 +SET 167356.15 112123.33 +SET 1673575.20 952806.96 +SET 167360.97 134914.72 +SET 1673615.68 1045157.52 +SET 1673637.63 1446725.23 +SET 1673870.96 1045316.94 +SET 1674059.52 1447089.92 +SET 1674126.24 1045476.36 +SET 167416.96 54906.88 +SET 1674381.52 1045635.78 +SET 167447.60 100855.39 +SET 1674481.41 1447454.61 +SET 167451.05 112186.91 +SET 1674636.80 1045795.20 +SET 167464.77 116116.83 +SET 1674684.62 1259365.24 +SET 16747.35 12421.40 +SET 1674809.40 953509.62 +SET 1674913.20 1008817.23 +SET 167498.50 112218.70 +SET 1675350.40 1009080.56 +SET 16754.65 11617.35 +SET 1675426.50 953860.95 +SET 1675563.33 1350722.08 +SET 1675913.20 1046592.30 +SET 167593.40 112282.28 +SET 1676021.16 1260370.32 +SET 167617.28 98931.84 +SET 1676224.80 1009607.22 +SET 1676249.30 954329.39 +SET 167645.50 95444.65 +SET 16766.01 12435.24 +SET 1676660.70 954563.61 +SET 1676679.04 1047070.56 +SET 1676689.43 1260872.86 +SET 167688.30 112345.86 +SET 1677099.20 1010133.88 +SET 167744.80 55014.40 +SET 1677516.96 1352296.96 +SET 1677689.20 955149.16 +SET 167771.34 99022.77 +SET 1677973.60 1010660.54 +SET 1678100.60 955383.38 +SET 1678168.17 1352821.92 +SET 1678410.80 1010923.87 +SET 1678512.00 955617.60 +SET 1678717.70 955734.71 +SET 167878.10 112473.02 +SET 1679.40 1245.60 +SET 167912.22 145146.62 +SET 1679129.10 955968.93 +SET 1679231.84 1048664.76 +SET 1679334.80 956086.04 +SET 16794.00 12456.00 +SET 1679470.59 1353871.84 +SET 1679487.12 1048824.18 +SET 1679540.50 956203.15 +SET 16797.30 11253.66 +SET 167973.00 112536.60 +SET 1679965.98 1452195.58 +SET 1680030.78 1263385.56 +SET 1680121.80 1354396.80 +SET 1680157.60 956554.48 +SET 1680252.96 1049302.44 +SET 168036.88 116513.52 +SET 1680387.87 1452560.27 +SET 1680508.24 1049461.86 +SET 168067.90 112600.18 +SET 1680699.05 1263888.10 +SET 168072.64 55121.92 +SET 1680763.52 1049621.28 +SET 1680774.70 956905.81 +SET 168079.46 99204.63 +SET 1680809.76 1452924.96 +SET 1680980.40 957022.92 +SET 1681034.00 1012503.85 +SET 168118.61 116570.19 +SET 16812.66 12469.84 +SET 1681274.08 1049940.12 +SET 1681391.80 957257.14 +SET 1681471.20 1012767.18 +SET 1681908.40 1013030.51 +SET 168200.34 116626.86 +SET 1682039.92 1050418.38 +SET 16821.99 12476.76 +SET 1682214.60 957725.58 +SET 1682295.20 1050577.80 +SET 1682497.32 1454383.72 +SET 168262.60 95795.98 +SET 1682805.76 1050896.64 +SET 1682831.70 958076.91 +SET 168291.20 55193.60 +SET 1683061.04 1051056.06 +SET 16831.32 12483.68 +SET 1683220.00 1013820.50 +SET 1683316.32 1051215.48 +SET 1683372.13 1265898.26 +SET 1683377.85 1357021.60 +SET 168352.60 112790.92 +SET 16836.38 11674.02 +SET 1683654.50 958545.35 +SET 1683860.20 958662.46 +SET 168404.04 126640.08 +SET 1684094.40 1014347.16 +SET 1684184.88 1455842.48 +SET 1684337.44 1051853.16 +SET 1684531.60 1014610.49 +SET 1684592.72 1052012.58 +SET 1684680.27 1358071.52 +SET 16849.98 12497.52 +SET 1684968.80 1014873.82 +SET 1685028.66 1456571.86 +SET 1685103.28 1052331.42 +SET 1685406.00 1015137.15 +SET 168541.64 99477.42 +SET 168542.40 112918.08 +SET 1685450.55 1456936.55 +SET 1685505.80 959599.34 +SET 1685711.50 959716.45 +SET 168589.85 112949.87 +SET 1685982.69 1359121.44 +SET 168600.90 107671.20 +SET 168608.99 116910.21 +SET 1686280.40 1015663.81 +SET 1686534.30 960184.89 +SET 1686634.96 1053287.94 +SET 1686716.22 1458030.62 +SET 1686717.60 1015927.14 +SET 168674.00 96030.20 +SET 168684.75 113013.45 +SET 1686890.24 1053447.36 +SET 168690.72 116966.88 +SET 1687151.40 960536.22 +SET 1687154.80 1016190.47 +SET 168732.20 113045.24 +SET 16875.60 14587.60 +SET 1687562.80 960770.44 +SET 1687592.00 1016453.80 +SET 1687768.50 960887.55 +SET 168779.65 113077.03 +SET 1687911.36 1054085.04 +SET 1687936.32 1360696.32 +SET 1688179.90 961121.77 +SET 1688421.92 1054403.88 +SET 16892.20 11317.24 +SET 1689208.40 961707.32 +SET 1689238.74 1361746.24 +SET 1689340.80 1017507.12 +SET 168935.91 117136.89 +SET 1689386.56 1270421.12 +SET 168995.36 105536.04 +SET 1689953.60 1055360.40 +SET 1690054.83 1270923.66 +SET 169016.90 113235.98 +SET 1690464.16 1055679.24 +SET 169056.16 55444.48 +SET 169058.64 107963.52 +SET 169064.35 113267.77 +SET 169072.31 127142.62 +SET 1690935.12 1461677.52 +SET 1691059.70 962761.31 +SET 1691089.60 1018560.44 +SET 1691485.28 1056316.92 +SET 16915.29 12545.96 +SET 1691526.80 1018823.77 +SET 169159.25 113331.35 +SET 1691740.56 1056476.34 +SET 1691778.90 1462406.90 +SET 1691843.58 1363846.08 +SET 169211.22 108060.96 +SET 1692200.79 1462771.59 +SET 1692401.20 1019350.43 +SET 1692506.40 1056954.60 +SET 169262.83 117363.57 +SET 1692622.68 1463136.28 +SET 1692838.40 1019613.76 +SET 169291.10 96381.53 +SET 1693116.70 963932.41 +SET 1693272.24 1057432.86 +SET 1693322.40 964049.52 +SET 1693396.18 1273436.36 +SET 1693528.10 964166.63 +SET 1693712.80 1020140.42 +SET 1693733.80 964283.74 +SET 1693782.80 1057751.70 +SET 16938.40 5555.20 +SET 1693888.35 1464230.35 +SET 1693939.50 964400.85 +SET 169396.50 113490.30 +SET 1694.66 1000.23 +SET 1694038.08 1057911.12 +SET 1694145.20 964517.96 +SET 1694293.36 1058070.54 +SET 169443.95 113522.09 +SET 1694556.60 964752.18 +SET 1694732.72 1274441.44 +SET 1694762.30 964869.29 +SET 1694803.92 1058389.38 +SET 1695099.63 1366470.88 +SET 1695154.02 1465324.42 +SET 169516.38 108255.84 +SET 1695400.99 1274943.98 +SET 1695575.91 1465689.11 +SET 1695585.10 965337.73 +SET 169589.75 117590.25 +SET 169620.06 100113.93 +SET 1696202.20 965689.06 +SET 1696336.00 1021720.40 +SET 1696773.20 1021983.73 +SET 169681.20 113681.04 +SET 16971.27 12587.48 +SET 1697101.44 1059824.16 +SET 1697210.40 1022247.06 +SET 169740.58 127645.16 +SET 1697436.40 966391.72 +SET 1697647.60 1022510.39 +SET 1697685.36 1467512.56 +SET 1697704.47 1368570.72 +SET 169774.12 100204.86 +SET 169776.10 113744.62 +SET 1697847.80 966625.94 +SET 16980.60 12594.40 +SET 1698053.50 966743.05 +SET 1698122.56 1060461.84 +SET 169823.55 113776.41 +SET 1698355.68 1369095.68 +SET 1698464.90 966977.27 +SET 1698633.12 1060780.68 +SET 16987.10 11380.82 +SET 1698888.40 1060940.10 +SET 1699006.89 1369620.64 +SET 1699082.00 967328.60 +SET 169916.67 117816.93 +SET 169928.18 100295.79 +SET 1699493.40 967562.82 +SET 1699654.24 1061418.36 +SET 169974.12 108548.16 +SET 1699794.81 1469336.01 +SET 16999.26 12608.24 +SET 1699904.80 967797.04 +SET 1699909.52 1061577.78 +SET 169998.40 117873.60 +SET 170013.35 113903.57 +SET 170016.48 106173.72 +SET 1700164.80 1061737.20 +SET 170021.67 146970.07 +SET 1700216.70 1469700.70 +SET 1700270.80 1024090.37 +SET 1700420.08 1061896.62 +SET 170070.80 102435.37 +SET 17008.59 12615.16 +SET 170082.24 100386.72 +SET 1700930.64 1062215.46 +SET 1701139.00 968499.70 +SET 1701344.70 968616.81 +SET 1701441.20 1062534.30 +SET 1701482.37 1470794.77 +SET 1701550.40 968733.92 +SET 1701582.40 1024880.36 +SET 1701696.48 1062693.72 +SET 1701951.76 1062853.14 +SET 1701961.80 968968.14 +SET 170203.15 114030.73 +SET 1702262.94 1372245.44 +SET 1702326.15 1471524.15 +SET 1702462.32 1063171.98 +SET 170250.60 114062.52 +SET 1702578.90 969319.47 +SET 170258.24 55838.72 +SET 170271.76 106333.14 +SET 1702717.60 1063331.40 +SET 1702972.88 1063490.82 +SET 1703169.93 1472253.53 +SET 170319.60 96967.08 +SET 170325.32 118100.28 +SET 1703401.70 969787.91 +SET 1703420.23 1280974.46 +SET 1703565.36 1373295.36 +SET 17036.58 12635.92 +SET 1704013.71 1472982.91 +SET 1704018.80 970139.24 +SET 170408.85 128147.70 +SET 1704224.50 970256.35 +SET 1704249.28 1064287.92 +SET 170431.86 108840.48 +SET 17045.91 12642.84 +SET 1704759.84 1064606.76 +SET 170487.85 114221.47 +SET 170488.78 118213.62 +SET 170508.00 102698.70 +SET 170527.04 106492.56 +SET 170535.30 114253.26 +SET 1705518.99 1374870.24 +SET 1705664.40 971076.12 +SET 170570.51 118270.29 +SET 1705780.96 1065244.44 +SET 1705870.10 971193.23 +SET 1706170.20 1375395.20 +SET 1706281.50 971427.45 +SET 170630.20 114316.84 +SET 17064.57 12656.68 +SET 1706487.20 971544.56 +SET 170652.24 118326.96 +SET 1706966.94 1475535.74 +SET 1707.39 1266.36 +SET 1707057.36 1066041.54 +SET 170725.10 114380.42 +SET 170731.00 97201.30 +SET 170733.97 118383.63 +SET 1707388.83 1475900.43 +SET 1707927.10 972364.33 +SET 1708.20 1144.44 +SET 1708078.48 1066679.22 +SET 1708123.83 1376970.08 +SET 1708132.80 972481.44 +SET 1708140.40 1028830.31 +SET 17082.00 11444.40 +SET 170820.00 114444.00 +SET 1708232.61 1476629.81 +SET 1708333.76 1066838.64 +SET 1708338.50 972598.55 +SET 170852.54 100841.37 +SET 1708589.04 1066998.06 +SET 1708749.90 972832.77 +SET 1708766.39 1284994.78 +SET 1708775.04 1377495.04 +SET 1709076.39 1477359.19 +SET 170914.90 114507.58 +SET 17092.56 12677.44 +SET 1709354.88 1067476.32 +SET 170936.70 97318.41 +SET 1709452.00 1029620.30 +SET 1709498.28 1477723.88 +SET 1709778.40 973418.32 +SET 1709865.44 1067795.16 +SET 17100.66 10093.23 +SET 1710077.46 1378544.96 +SET 171009.80 114571.16 +SET 17101.89 12684.36 +SET 1710102.93 1285999.86 +SET 1710120.72 1067954.58 +SET 1710342.06 1478453.26 +SET 1710763.60 1030410.29 +SET 1710763.95 1478817.95 +SET 1710771.20 1286502.40 +SET 1710806.90 974003.87 +SET 1710886.56 1068432.84 +SET 1711141.84 1068592.26 +SET 1711218.30 974238.09 +SET 1711397.12 1068751.68 +SET 171142.40 97435.52 +SET 171142.62 118666.98 +SET 1711424.00 974355.20 +SET 1711835.40 974589.42 +SET 1711907.68 1069070.52 +SET 171194.76 109327.68 +SET 17120.55 12698.20 +SET 1712041.10 974706.53 +SET 1712107.74 1287507.48 +SET 1712246.80 974823.64 +SET 1712418.24 1069389.36 +SET 1712451.51 1480276.71 +SET 1712452.50 974940.75 +SET 171247.05 114730.11 +SET 1712673.52 1069548.78 +SET 1712863.90 975174.97 +SET 1712873.40 1480641.40 +SET 1712928.80 1069708.20 +SET 1712949.60 1031726.94 +SET 171314.72 101114.16 +SET 1713275.30 975409.19 +SET 1713333.51 1381169.76 +SET 1713439.36 1070027.04 +SET 171348.10 97552.63 +SET 1713481.00 975526.30 +SET 1713824.00 1032253.60 +SET 1713892.40 975760.52 +SET 17139.21 12712.04 +SET 1713949.92 1070345.88 +SET 1713984.72 1381694.72 +SET 1714112.55 1289015.10 +SET 1714139.07 1481735.47 +SET 1714261.20 1032516.93 +SET 171436.85 114857.27 +SET 1714509.50 976111.85 +SET 1714698.40 1032780.26 +SET 1714780.82 1289517.64 +SET 171531.75 114920.85 +SET 1715449.09 1290020.18 +SET 171548.16 107130.24 +SET 171551.27 118950.33 +SET 17157.87 12725.88 +SET 1715743.70 976814.51 +SET 171579.20 114952.64 +SET 1715938.35 1383269.60 +SET 1715949.40 976931.62 +SET 1715992.16 1071621.24 +SET 1716010.00 1033570.25 +SET 1716117.36 1290522.72 +SET 1716155.10 977048.73 +SET 1716247.44 1071780.66 +SET 1716248.52 1483558.92 +SET 171626.65 114984.43 +SET 1716360.80 977165.84 +SET 1716447.20 1033833.58 +SET 1716502.72 1071940.08 +SET 17167.20 12732.80 +SET 171674.10 115016.22 +SET 1716772.20 977400.06 +SET 1716884.40 1034096.91 +SET 1717268.56 1072418.34 +SET 1717523.84 1072577.76 +SET 171759.50 97786.85 +SET 17176.90 11507.98 +SET 171769.00 115079.80 +SET 171776.90 101386.95 +SET 1717891.98 1384844.48 +SET 171796.46 119120.34 +SET 171816.45 115111.59 +SET 1718196.00 1034886.90 +SET 1718357.97 1485382.37 +SET 1718417.80 978336.94 +SET 17185.86 12746.64 +SET 1718623.50 978454.05 +SET 1718633.20 1035150.23 +SET 1718800.24 1073374.86 +SET 1719070.40 1035413.56 +SET 1719194.40 1385894.40 +SET 1719446.30 978922.49 +SET 1719507.60 1035676.89 +SET 171957.66 109814.88 +SET 171959.92 119233.68 +SET 171965.20 97903.96 +SET 1719821.36 1074012.54 +SET 1719845.61 1386419.36 +SET 172006.25 115238.75 +SET 1720063.40 979273.82 +SET 1720076.64 1074171.96 +SET 1720269.10 979390.93 +SET 1720382.00 1036203.55 +SET 1720467.42 1487205.82 +SET 1720474.80 979508.04 +SET 172053.70 115270.54 +SET 172058.72 107449.08 +SET 1720587.20 1074490.80 +SET 172123.38 119347.02 +SET 1721256.40 1036730.21 +SET 17213.85 12767.40 +SET 172131.12 148793.52 +SET 172148.60 115334.12 +SET 1721608.32 1075128.48 +SET 172170.90 98021.07 +SET 1722130.80 1037256.87 +SET 1722326.10 980562.03 +SET 1722374.16 1075606.74 +SET 172239.08 101659.74 +SET 172243.50 115397.70 +SET 1722531.80 980679.14 +SET 172286.84 119460.36 +SET 172290.95 115429.49 +SET 1722943.20 980913.36 +SET 172314.00 107608.50 +SET 1723148.90 981030.47 +SET 1723354.60 981147.58 +SET 172338.40 115461.28 +SET 1723395.28 1076244.42 +SET 1723420.65 1489758.65 +SET 1723442.40 1038046.86 +SET 1723560.30 981264.69 +SET 1723650.56 1076403.84 +SET 172376.60 98138.18 +SET 1723842.54 1490123.34 +SET 172385.85 115493.07 +SET 1723879.60 1038310.19 +SET 1723905.84 1076563.26 +SET 17241.84 12788.16 +SET 1724264.43 1490488.03 +SET 172443.84 56555.52 +SET 1724588.80 981850.24 +SET 1724671.68 1077041.52 +SET 1724686.32 1490852.72 +SET 172480.75 115556.65 +SET 1724926.96 1077200.94 +SET 1725000.20 982084.46 +SET 17251.17 12795.08 +SET 172528.20 115588.44 +SET 172532.03 119630.37 +SET 1725473.14 1297558.28 +SET 1725530.10 1491582.10 +SET 1725617.30 982435.79 +SET 1725628.40 1039363.51 +SET 172569.28 107767.92 +SET 1725692.80 1077679.20 +SET 172575.65 115620.23 +SET 17260.50 12802.00 +SET 1726065.60 1039626.84 +SET 172613.76 119687.04 +SET 1726141.41 1298060.82 +SET 1726203.36 1077998.04 +SET 172623.10 115652.02 +SET 1726440.10 982904.23 +SET 1726458.64 1078157.46 +SET 1726502.80 1039890.17 +SET 17266.24 5662.72 +SET 172662.40 56627.20 +SET 1726645.80 983021.34 +SET 172695.49 119743.71 +SET 1726969.20 1078476.30 +SET 172701.26 101932.53 +SET 1727057.20 983255.56 +SET 1727377.20 1040416.83 +SET 1727479.76 1078795.14 +SET 1727639.55 1493405.55 +SET 172765.45 115747.39 +SET 172777.22 119800.38 +SET 1727814.40 1040680.16 +SET 1727880.00 983724.00 +SET 1728251.60 1040943.49 +SET 1728500.88 1079432.82 +SET 172860.35 115810.97 +SET 172873.14 110399.52 +SET 172880.96 56698.88 +SET 1728908.50 984309.55 +SET 1729011.44 1079751.66 +SET 172907.80 115842.76 +SET 1729114.20 984426.66 +SET 1729482.76 1300573.52 +SET 1729563.20 1041733.48 +SET 17297.49 14952.29 +SET 173002.70 115906.34 +SET 1730170.89 1495593.69 +SET 1730264.97 1394818.72 +SET 1730287.84 1080548.76 +SET 1730437.60 1042260.14 +SET 173081.93 130157.86 +SET 1730819.30 1301578.60 +SET 1730916.18 1395343.68 +SET 1731171.20 985597.76 +SET 173131.20 104278.68 +SET 1731312.00 1042786.80 +SET 1731376.90 985714.87 +SET 1731436.56 1496687.76 +SET 173145.05 116001.71 +SET 1731487.57 1302081.14 +SET 17316.48 12843.52 +SET 173185.87 120083.73 +SET 17319.25 11603.35 +SET 173199.40 98606.62 +SET 1731994.00 986066.20 +SET 1732074.80 1081664.70 +SET 1732218.60 1396393.60 +SET 1732280.34 1497417.14 +SET 1732330.08 1081824.12 +SET 173239.95 116065.29 +SET 1732405.40 986300.42 +SET 173267.60 120140.40 +SET 1732824.11 1303086.22 +SET 1732840.64 1082142.96 +SET 1732869.81 1396918.56 +SET 173287.40 116097.08 +SET 1733095.92 1082302.38 +SET 1733124.12 1498146.52 +SET 1733228.20 986768.86 +SET 1733498.00 1044103.45 +SET 1733639.60 987003.08 +SET 1733845.30 987120.19 +SET 173396.79 149887.59 +SET 173405.10 98723.73 +SET 1734051.00 987237.30 +SET 1734172.23 1397968.48 +SET 1734372.40 1044630.11 +SET 1734462.40 987471.52 +SET 1734627.60 1083258.90 +SET 1734668.10 987588.63 +SET 173477.20 116224.24 +SET 1734823.44 1398493.44 +SET 173483.46 110789.28 +SET 173512.79 120310.41 +SET 1735393.44 1083737.16 +SET 1735474.65 1399018.40 +SET 1735648.72 1083896.58 +SET 173568.40 104542.01 +SET 1735902.30 988291.29 +SET 1735904.00 1084056.00 +SET 1736077.35 1500699.35 +SET 1736165.46 1305598.92 +SET 173645.92 56949.76 +SET 1736519.40 988642.62 +SET 1736558.40 1045946.76 +SET 17366.70 11635.14 +SET 173667.00 116351.40 +SET 1736725.10 988759.73 +SET 1736925.12 1084693.68 +SET 1737342.20 989111.06 +SET 17375.52 5698.56 +SET 1737547.90 989228.17 +SET 173779.68 102569.04 +SET 1737870.00 1046736.75 +SET 173788.62 110984.16 +SET 1737946.24 1085331.36 +SET 173809.35 116446.77 +SET 1738170.27 1307106.54 +SET 173818.68 150252.28 +SET 1738186.80 1502522.80 +SET 1738201.52 1085490.78 +SET 173839.71 120537.09 +SET 173856.80 116478.56 +SET 1738712.08 1085809.62 +SET 1738782.10 989930.83 +SET 1739399.20 990282.16 +SET 1739477.92 1086287.88 +SET 173951.70 116542.14 +SET 1739618.80 1047790.07 +SET 173973.76 57057.28 +SET 1739733.20 1086447.30 +SET 1739874.36 1503981.56 +SET 1740033.12 1402693.12 +SET 174022.20 99075.06 +SET 1740222.00 990750.60 +SET 1740427.70 990867.71 +SET 1740754.32 1087084.98 +SET 17408.49 12070.71 +SET 17408.78 10275.09 +SET 1740843.35 1309116.70 +SET 174087.80 102750.90 +SET 174093.78 111179.04 +SET 174094.05 116637.51 +SET 1741250.50 991336.15 +SET 1741264.88 1087403.82 +SET 1741367.60 1048843.39 +SET 1741520.16 1087563.24 +SET 1741804.80 1049106.72 +SET 17419.11 12919.64 +SET 1742073.30 991804.59 +SET 1742179.89 1310121.78 +SET 1742242.00 1049370.05 +SET 174227.90 99192.17 +SET 1742286.00 1088041.50 +SET 174236.40 116732.88 +SET 1742405.70 1506169.70 +SET 174246.36 111276.48 +SET 174248.36 120820.44 +SET 1742679.20 1049633.38 +SET 1742690.40 992155.92 +SET 1742796.56 1088360.34 +SET 17428.44 12926.56 +SET 1742827.59 1506534.39 +SET 1743051.84 1088519.76 +SET 1743307.50 992507.25 +SET 1743516.43 1311126.86 +SET 174356.24 108883.86 +SET 1743562.40 1088838.60 +SET 17437.77 12933.48 +SET 1743718.90 992741.47 +SET 174378.75 116828.25 +SET 174395.92 102932.76 +SET 1744.71 1294.04 +SET 174411.82 120933.78 +SET 1744184.70 1311629.40 +SET 174433.60 99309.28 +SET 1744336.00 993092.80 +SET 174442.80 105068.67 +SET 1744541.70 993209.91 +SET 1744937.04 1508357.84 +SET 174521.10 116923.62 +SET 174524.28 140689.28 +SET 1745242.80 1406892.80 +SET 1745349.36 1089954.54 +SET 1745521.24 1312634.48 +SET 1745604.64 1090113.96 +SET 174568.55 116955.41 +SET 174575.28 121047.12 +SET 1745775.90 993912.57 +SET 17465.76 12954.24 +SET 1746545.22 1407942.72 +SET 1746614.00 1052003.35 +SET 1746804.40 994498.12 +SET 1747046.49 1510181.29 +SET 1747421.50 994849.45 +SET 1747526.05 1314142.10 +SET 174758.35 117082.57 +SET 1747847.64 1408992.64 +SET 1748244.30 995317.89 +SET 17484.80 5734.40 +SET 174845.00 99543.50 +SET 1748498.85 1409517.60 +SET 174858.10 103205.55 +SET 1748668.00 1092027.00 +SET 174880.00 105332.00 +SET 1748800.00 1053320.00 +SET 1748862.59 1315147.18 +SET 1748923.28 1092186.42 +SET 17490.22 12127.38 +SET 1749178.56 1092345.84 +SET 1749237.20 1053583.33 +SET 1749433.84 1092505.26 +SET 174948.15 117209.73 +SET 1749577.83 1512369.43 +SET 1749689.12 1092664.68 +SET 174983.93 121330.47 +SET 1749999.72 1512734.12 +SET 1750111.60 1054109.99 +SET 1750421.61 1513098.81 +SET 1750454.96 1093142.94 +SET 1750843.50 1513463.50 +SET 175086.74 131665.48 +SET 1750867.40 1316654.80 +SET 1750965.52 1093461.78 +SET 1750986.00 1054636.65 +SET 1751103.69 1411617.44 +SET 175122.08 109362.12 +SET 1751220.80 1093621.20 +SET 175137.95 117336.89 +SET 175147.39 121443.81 +SET 1751476.08 1093780.62 +SET 1751535.67 1317157.34 +SET 175161.84 111861.12 +SET 1751687.28 1514192.88 +SET 175175.84 57451.52 +SET 17521.74 12995.76 +SET 1752203.94 1317659.88 +SET 175229.12 121500.48 +SET 1752297.60 1055426.64 +SET 1752406.11 1412667.36 +SET 1752752.48 1094577.72 +SET 1752769.70 997894.31 +SET 175280.30 117432.26 +SET 1752952.95 1515286.95 +SET 1753007.76 1094737.14 +SET 1753181.10 998128.53 +SET 175320.28 103478.34 +SET 1753386.80 998245.64 +SET 1753708.53 1413717.28 +SET 1753773.60 1095215.40 +SET 1753796.73 1516016.33 +SET 1753798.20 998479.86 +SET 175392.58 121613.82 +SET 1754.04 1300.96 +SET 1754003.90 998596.97 +SET 1754028.88 1095374.82 +SET 1754046.40 1056479.96 +SET 1754218.62 1516381.02 +SET 1754415.30 998831.19 +SET 1754539.44 1095693.66 +SET 17546.70 11205.60 +SET 175462.10 99894.83 +SET 175467.00 112056.00 +SET 175474.34 103569.27 +SET 1754826.70 999065.41 +SET 17549.73 13016.52 +SET 175503.68 57559.04 +SET 175517.55 117591.21 +SET 1755358.00 1057269.95 +SET 1755484.29 1517475.09 +SET 1755545.29 1320172.58 +SET 1755560.56 1096331.34 +SET 17556.50 11762.30 +SET 175565.00 117623.00 +SET 17559.06 13023.44 +SET 1755906.18 1517839.78 +SET 1756213.56 1320675.12 +SET 175632.64 109680.96 +SET 1756881.83 1321177.66 +SET 1756964.58 1416342.08 +SET 1757089.40 1000353.62 +SET 17571.95 12184.05 +SET 175722.24 57630.72 +SET 1757295.10 1000470.73 +SET 175754.40 105858.66 +SET 1757602.80 1097606.70 +SET 1757706.50 1000704.95 +SET 175782.46 103751.13 +SET 1758015.63 1519663.23 +SET 1758113.36 1097925.54 +SET 17582.67 14173.92 +SET 1758267.00 1417392.00 +SET 175831.52 57666.56 +SET 1758437.52 1520027.92 +SET 1758529.30 1001173.39 +SET 175873.50 100129.05 +SET 1758735.00 1001290.50 +SET 1758859.41 1520392.61 +SET 1758879.20 1098403.80 +SET 1758940.70 1001407.61 +SET 175897.15 117845.53 +SET 1759134.48 1098563.22 +SET 175924.74 112348.32 +SET 175928.13 152075.73 +SET 1759352.10 1001641.83 +SET 175936.52 103842.06 +SET 17594.08 5770.24 +SET 175940.80 57702.40 +SET 175944.60 117877.32 +SET 1759554.91 1323187.82 +SET 1759569.42 1418441.92 +SET 1759730.00 1059903.25 +SET 1760125.08 1521486.68 +SET 1760174.90 1002110.27 +SET 176039.50 117940.90 +SET 176046.42 122067.18 +SET 1760666.16 1099519.74 +SET 176077.32 112445.76 +SET 1760871.84 1419491.84 +SET 1760891.45 1324192.90 +SET 1761409.10 1002812.93 +SET 176143.20 109999.80 +SET 176181.85 118036.27 +SET 1761820.50 1003047.15 +SET 1761916.00 1061219.90 +SET 1761942.56 1100316.84 +SET 176209.88 122180.52 +SET 1762174.26 1420541.76 +SET 1762197.84 1100476.26 +SET 1762231.90 1003281.37 +SET 1762453.12 1100635.68 +SET 1762790.40 1061746.56 +SET 1762896.26 1325700.52 +SET 1763054.70 1003749.81 +SET 176324.20 118131.64 +SET 1763466.10 1003984.03 +SET 1763476.68 1421591.68 +SET 176371.65 118163.43 +SET 1763729.52 1101432.78 +SET 176377.92 57845.76 +SET 176398.48 110159.22 +SET 1764127.89 1422116.64 +SET 176423.28 132670.56 +SET 17643.03 13085.72 +SET 1764539.20 1062799.88 +SET 176455.07 122350.53 +SET 176466.55 118227.01 +SET 1764700.30 1004686.69 +SET 1764750.64 1102070.46 +SET 1764765.87 1525498.27 +SET 1764779.10 1422641.60 +SET 1765516.48 1102548.72 +SET 176552.76 104205.78 +SET 1765609.65 1526227.65 +SET 176561.45 118290.59 +SET 1765850.80 1063589.87 +SET 1766031.54 1526592.34 +SET 176608.90 118322.38 +SET 1766140.20 1005506.46 +SET 176618.53 122463.87 +SET 1766282.32 1103026.98 +SET 1766288.00 1063853.20 +SET 1766345.90 1005623.57 +SET 1766453.43 1526957.03 +SET 1766732.73 1424216.48 +SET 1766875.32 1527321.72 +SET 176696.30 100597.49 +SET 1766963.00 1005974.90 +SET 176703.80 118385.96 +SET 176705.76 57953.28 +SET 1767162.40 1064379.86 +SET 1767168.70 1006092.01 +SET 1767297.21 1527686.41 +SET 1767383.94 1424741.44 +SET 176751.25 118417.75 +SET 1767580.10 1006326.23 +SET 176781.99 122577.21 +SET 1767814.00 1103983.50 +SET 1767991.50 1006560.45 +SET 17680.35 13113.40 +SET 1768035.15 1425266.40 +SET 1768069.28 1104142.92 +SET 1768140.99 1528415.79 +SET 1768197.20 1006677.56 +SET 1768474.00 1065169.85 +SET 1768911.20 1065433.18 +SET 176902.00 100714.60 +SET 1769225.70 1007263.11 +SET 1769348.40 1065696.51 +SET 176941.05 118544.91 +SET 1769578.96 1330725.92 +SET 1769828.55 1529874.55 +SET 1769842.80 1007614.44 +SET 1769856.24 1105258.86 +SET 17699.28 11303.04 +SET 176992.80 113030.40 +SET 177.27 131.48 +SET 1770111.52 1105418.28 +SET 177014.94 104478.57 +SET 1770247.23 1331228.46 +SET 1770254.20 1007848.66 +SET 17703.36 5806.08 +SET 177033.60 58060.80 +SET 1770459.90 1007965.77 +SET 1770639.99 1427366.24 +SET 17708.34 13134.16 +SET 177083.40 118640.28 +SET 1770877.36 1105896.54 +SET 1770915.50 1331731.00 +SET 177107.70 100831.71 +SET 1771132.64 1106055.96 +SET 177129.12 142789.12 +SET 1771291.20 1427891.20 +SET 1771488.40 1008551.32 +SET 177169.00 104569.50 +SET 17717.67 13141.08 +SET 177178.30 118703.86 +SET 1771971.60 1067276.49 +SET 1772105.50 1008902.65 +SET 1772153.76 1106693.64 +SET 1772409.04 1106853.06 +SET 177252.16 58132.48 +SET 1772593.62 1428941.12 +SET 1772664.32 1107012.48 +SET 1772722.60 1009253.98 +SET 1772846.00 1067803.15 +SET 1772920.31 1333238.62 +SET 1773134.00 1009488.20 +SET 1773174.88 1107331.32 +SET 1773203.67 1532792.07 +SET 177323.06 104660.43 +SET 1773283.20 1068066.48 +SET 17735.41 12297.39 +SET 177354.10 122973.90 +SET 1773545.40 1009722.42 +SET 177361.44 58168.32 +SET 1773625.56 1533156.76 +SET 1773685.44 1107650.16 +SET 1773896.04 1429991.04 +SET 1773956.80 1009956.64 +SET 1774047.45 1533521.45 +SET 1774196.00 1107969.00 +SET 1774368.20 1010190.86 +SET 17745.66 13161.84 +SET 177450.54 113322.72 +SET 1774547.25 1430516.00 +SET 1774573.90 1010307.97 +SET 1774594.80 1068856.47 +SET 177463.00 118894.60 +SET 1774925.12 1334746.24 +SET 1774985.30 1010542.19 +SET 177503.20 106911.98 +SET 177517.56 123087.24 +SET 1775191.00 1010659.30 +SET 1775217.12 1108606.68 +SET 1775313.12 1534615.52 +SET 1775396.70 1010776.41 +SET 17754.99 13168.76 +SET 1775472.40 1108766.10 +SET 1775602.40 1010893.52 +SET 1775735.01 1534980.21 +SET 177580.00 58240.00 +SET 1775808.10 1011010.63 +SET 1775849.67 1431565.92 +SET 1776156.90 1535344.90 +SET 1776425.20 1011361.96 +SET 1776500.88 1432090.88 +SET 177652.80 119021.76 +SET 1776578.79 1535709.59 +SET 177674.88 110956.32 +SET 1776748.80 1109563.20 +SET 1776780.80 1070173.12 +SET 1776836.60 1011596.18 +SET 1776929.93 1336253.86 +SET 1777000.68 1536074.28 +SET 1777042.30 1011713.29 +SET 1777152.09 1432615.84 +SET 1777248.00 1011830.40 +SET 1777453.70 1011947.51 +SET 1777659.40 1012064.62 +SET 177780.33 143314.08 +SET 177785.24 104933.22 +SET 177798.56 58311.68 +SET 1778025.20 1110360.30 +SET 1778070.80 1012298.84 +SET 1778092.40 1070963.11 +SET 1778266.35 1537168.35 +SET 1778454.51 1433665.76 +SET 1778529.60 1071226.44 +SET 1778535.76 1110679.14 +SET 1778688.24 1537533.04 +SET 1778791.04 1110838.56 +SET 1778966.80 1071489.77 +SET 1779046.32 1110997.98 +SET 177908.28 113615.04 +SET 17792.31 13196.44 +SET 177926.21 123370.59 +SET 17793.75 11921.25 +SET 177930.50 101300.15 +SET 1779301.60 1111157.40 +SET 1779404.00 1071753.10 +SET 1779510.70 1013118.61 +SET 1779556.88 1111316.82 +SET 1779603.01 1338264.02 +SET 1779756.93 1434715.68 +SET 1780278.40 1072279.76 +SET 178032.40 119276.08 +SET 1780322.72 1111795.08 +SET 1780333.50 1013587.05 +SET 1780375.80 1538991.80 +SET 1780408.14 1435240.64 +SET 1780578.00 1111954.50 +SET 178093.36 105115.08 +SET 1780939.55 1339269.10 +SET 1780950.60 1013938.38 +SET 1781088.56 1112273.34 +SET 1781567.70 1014289.71 +SET 1781607.82 1339771.64 +SET 1781641.47 1540085.87 +SET 17817.14 12354.06 +SET 178171.40 123540.60 +SET 1781854.40 1112751.60 +SET 1782.03 1321.72 +SET 17820.30 13217.20 +SET 1782027.20 1073333.08 +SET 178235.68 58455.04 +SET 1782364.96 1113070.44 +SET 178247.42 105206.01 +SET 178269.65 119435.03 +SET 1782875.52 1113389.28 +SET 1782944.36 1340776.72 +SET 1783329.03 1541544.63 +SET 1783338.80 1074123.07 +SET 1783386.08 1113708.12 +SET 178341.90 101534.37 +SET 1783664.19 1437865.44 +SET 17838.96 13231.04 +SET 178401.48 105296.94 +SET 1784036.10 1015695.03 +SET 1784151.92 1114186.38 +SET 1784172.81 1542274.01 +SET 1784241.80 1015812.14 +SET 1784280.90 1341781.80 +SET 1784315.40 1438390.40 +SET 178454.24 58526.72 +SET 1784653.20 1016046.36 +SET 178498.32 123767.28 +SET 178506.90 119593.98 +SET 17851.86 11400.48 +SET 178518.60 114004.80 +SET 1785270.30 1016397.69 +SET 1785428.32 1114983.48 +SET 1785438.48 1543368.08 +SET 178555.54 105387.87 +SET 17857.62 13244.88 +SET 178580.05 123823.95 +SET 1785860.37 1543732.77 +SET 1785887.40 1016749.02 +SET 1786194.16 1115461.74 +SET 178649.25 119689.35 +SET 1786704.15 1544462.15 +SET 17869.60 11159.40 +SET 1786915.90 1017334.57 +SET 1786920.24 1440490.24 +SET 1786953.98 1343791.96 +SET 178696.00 111594.00 +SET 1787710.80 1076756.37 +SET 178782.08 58634.24 +SET 178791.60 119784.72 +SET 1788290.52 1344797.04 +SET 1788355.80 1018154.34 +SET 178839.05 119816.51 +SET 1788491.68 1116896.52 +SET 178863.66 105569.73 +SET 178881.36 154628.56 +SET 178886.50 119848.30 +SET 1788873.87 1442065.12 +SET 1789022.40 1077546.36 +SET 1789178.60 1018622.78 +SET 17894.94 13272.56 +SET 1789459.60 1077809.69 +SET 1789525.08 1442590.08 +SET 1789590.00 1018857.00 +SET 178976.34 114297.12 +SET 1789896.80 1078073.02 +SET 1790079.27 1547379.67 +SET 1790176.29 1443115.04 +SET 1790295.33 1346304.66 +SET 1790334.00 1078336.35 +SET 17904.27 13279.48 +SET 1790501.16 1547744.36 +SET 1790533.92 1118171.88 +SET 179082.75 144364.00 +SET 1790824.20 1019559.66 +SET 1790923.05 1548109.05 +SET 179096.36 134680.72 +SET 1790963.60 1346807.20 +SET 1791029.90 1019676.77 +SET 1791208.40 1078863.01 +SET 1791344.94 1548473.74 +SET 179164.70 102002.81 +SET 179171.78 105751.59 +SET 1791810.32 1118968.98 +SET 1791852.70 1020145.21 +SET 1792082.80 1079389.67 +SET 17921.92 5877.76 +SET 1792300.14 1347812.28 +SET 179233.89 124277.31 +SET 1792469.80 1020496.54 +SET 179252.00 107965.30 +SET 1792520.00 1079653.00 +SET 1792675.50 1020613.65 +SET 179281.50 114492.00 +SET 1792968.41 1348314.82 +SET 179303.25 154993.25 +SET 17932.26 13300.24 +SET 179328.48 58813.44 +SET 1793454.39 1550297.19 +SET 1793498.30 1021082.09 +SET 1794321.10 1021550.53 +SET 179434.08 114589.44 +SET 1794363.12 1120563.18 +SET 179437.76 58849.28 +SET 1794732.50 1021784.75 +SET 179479.08 124447.32 +SET 1794938.20 1021901.86 +SET 1794973.22 1349822.44 +SET 17950.92 13314.08 +SET 1795128.96 1121041.44 +SET 1795141.95 1551755.95 +SET 1795143.90 1022018.97 +SET 1795384.24 1121200.86 +SET 1795385.97 1447314.72 +SET 179547.04 58885.12 +SET 1795580.40 1081496.31 +SET 179560.81 124503.99 +SET 1795641.49 1350324.98 +SET 179576.10 102237.03 +SET 1795894.80 1121519.70 +SET 179598.25 120325.15 +SET 1795985.73 1552485.33 +SET 1796017.60 1081759.64 +SET 1796172.40 1022604.52 +SET 179633.96 106024.38 +SET 1796378.10 1022721.63 +SET 1796405.36 1121838.54 +SET 179645.70 120356.94 +SET 1796789.50 1022955.85 +SET 1796829.51 1553214.71 +SET 1796892.00 1082286.30 +SET 17969.58 13327.92 +SET 1796915.92 1122157.38 +SET 1796978.03 1351330.06 +SET 179717.12 112231.68 +SET 1797171.20 1122316.80 +SET 1797200.90 1023190.07 +SET 179725.14 155357.94 +SET 179733.96 144888.96 +SET 1797339.60 1448889.60 +SET 179740.60 120420.52 +SET 1797646.30 1351832.60 +SET 179765.60 58956.80 +SET 1797673.29 1553944.09 +SET 1797681.76 1122635.64 +SET 17978.91 13334.84 +SET 179781.80 102354.14 +SET 1797818.00 1023541.40 +SET 1797937.04 1122795.06 +SET 1798.06 1246.74 +SET 1798203.60 1083076.29 +SET 1798229.40 1023775.62 +SET 179835.50 120484.10 +SET 1798447.60 1123113.90 +SET 1798640.80 1024009.84 +SET 1798702.88 1123273.32 +SET 17988.24 13341.76 +SET 1798846.50 1024126.95 +SET 179887.73 124730.67 +SET 179891.82 114881.76 +SET 1798938.96 1555038.16 +SET 1799257.90 1024361.17 +SET 1799293.23 1450464.48 +SET 1799463.60 1024478.28 +SET 1799515.20 1083866.28 +SET 179977.85 120579.47 +SET 1799952.40 1084129.61 +SET 18.66 13.84 +SET 1800080.70 1024829.61 +SET 1800204.63 1556132.23 +SET 1800319.38 1353842.76 +SET 18004.44 11497.92 +SET 180051.19 124844.01 +SET 180072.75 120643.05 +SET 1800745.12 1124548.68 +SET 180093.44 59064.32 +SET 180096.14 106297.17 +SET 180120.20 120674.84 +SET 1801314.90 1025532.27 +SET 180147.03 155722.63 +SET 1801510.96 1125026.94 +SET 1801520.60 1025649.38 +SET 180167.65 120706.63 +SET 1801892.19 1557590.99 +SET 180193.20 102588.36 +SET 180202.72 59100.16 +SET 1802021.52 1125345.78 +SET 1802137.70 1026000.71 +SET 1802138.40 1085446.26 +SET 180214.65 124957.35 +SET 1802276.80 1125505.20 +SET 1802343.40 1026117.82 +SET 18025.02 10638.81 +SET 180250.20 106388.10 +SET 1802549.10 1026234.93 +SET 180262.55 120770.21 +SET 1803.10 1208.02 +SET 1803042.64 1125983.46 +SET 180310.00 120802.00 +SET 1803166.20 1026586.26 +SET 1803200.49 1453614.24 +SET 1803297.92 1126142.88 +SET 18034.89 13376.36 +SET 180378.11 125070.69 +SET 1803783.30 1026937.59 +SET 180385.17 145413.92 +SET 1803851.70 1454139.20 +SET 1803887.20 1086499.58 +SET 1804194.70 1027171.81 +SET 1804319.04 1126780.56 +SET 1804324.40 1086762.91 +SET 1804329.00 1356858.00 +SET 1804606.10 1027406.03 +SET 1804829.60 1127099.40 +SET 1804845.42 1560143.82 +SET 1805084.88 1127258.82 +SET 1805198.80 1087289.57 +SET 1805223.20 1027757.36 +SET 1805340.16 1127418.24 +SET 180541.57 125184.03 +SET 1805805.33 1455714.08 +SET 1805840.30 1028108.69 +SET 1805850.72 1127737.08 +SET 180594.70 120992.74 +SET 1806073.20 1087816.23 +SET 18062.33 12524.07 +SET 1806333.81 1358365.62 +SET 1806456.54 1456239.04 +SET 1806457.40 1028460.02 +SET 1806532.98 1561602.58 +SET 1806663.10 1028577.13 +SET 1807107.75 1456764.00 +SET 1807280.20 1028928.46 +SET 1807376.76 1562331.96 +SET 1807382.40 1128693.60 +SET 1807485.90 1029045.57 +SET 1807637.68 1128853.02 +SET 1807798.65 1562696.65 +SET 18078.45 12111.99 +SET 1807822.00 1088869.55 +SET 180784.50 121119.90 +SET 180786.76 125354.04 +SET 1807892.96 1129012.44 +SET 1807897.30 1029279.79 +SET 180807.30 115466.40 +SET 180810.30 102939.69 +SET 1808514.40 1029631.12 +SET 180868.49 125410.71 +SET 1808925.80 1029865.34 +SET 1809006.89 1360375.78 +SET 1809133.60 1089659.54 +SET 1809169.36 1129809.54 +SET 180926.85 121215.27 +SET 180967.68 59351.04 +SET 1809675.16 1360878.32 +SET 180974.30 121247.06 +SET 1809748.60 1030333.78 +SET 1809908.10 1564520.10 +SET 180993.52 113028.78 +SET 1810.02 1342.48 +SET 1810008.00 1090186.20 +SET 1810190.48 1130447.22 +SET 181031.95 125524.05 +SET 181036.38 145938.88 +SET 1810365.70 1030685.11 +SET 1810445.20 1090449.53 +SET 1810777.10 1030919.33 +SET 1811015.01 1459913.76 +SET 181113.68 125580.72 +SET 1811173.77 1565614.17 +SET 1811188.50 1031153.55 +SET 1811466.88 1131244.32 +SET 1811599.90 1031387.77 +SET 181164.10 121374.22 +SET 1811756.80 1091239.52 +SET 181186.24 59422.72 +SET 181195.41 125637.39 +SET 1812217.00 1031739.10 +SET 1812317.43 1460963.68 +SET 1812348.24 1362888.48 +SET 1812631.20 1091766.18 +SET 18128.19 13445.56 +SET 181295.52 59458.56 +SET 1813039.80 1032207.54 +SET 1813253.84 1132360.26 +SET 1813505.60 1092292.84 +SET 1813509.12 1132519.68 +SET 181358.87 125750.73 +SET 1813619.85 1462013.60 +SET 1813684.78 1363893.56 +SET 18137.52 13452.48 +SET 1813705.11 1567802.31 +SET 1813862.60 1032675.98 +SET 1814019.68 1132838.52 +SET 181404.80 59494.40 +SET 1814068.30 1032793.09 +SET 181412.70 156816.70 +SET 1814127.00 1568167.00 +SET 181417.62 115856.16 +SET 1814274.00 1032910.20 +SET 1814274.96 1132997.94 +SET 1814353.05 1364396.10 +SET 181438.00 109281.95 +SET 1814380.00 1092819.50 +SET 181440.60 125807.40 +SET 1814479.70 1033027.31 +SET 1814530.24 1133157.36 +SET 1814785.52 1133316.78 +SET 1814817.20 1093082.83 +SET 1814891.10 1033261.53 +SET 1814922.27 1463063.52 +SET 1814970.78 1568896.38 +SET 181504.08 113347.62 +SET 1815254.40 1093346.16 +SET 1815302.50 1033495.75 +SET 1815508.20 1033612.86 +SET 1815573.48 1463588.48 +SET 18157.02 11595.36 +SET 1815713.90 1033729.97 +SET 1815806.64 1133954.46 +SET 1816128.80 1093872.82 +SET 1816236.45 1569990.45 +SET 181633.10 103408.13 +SET 1816742.40 1034315.52 +SET 1816827.76 1134592.14 +SET 181685.79 125977.41 +SET 181686.05 121723.91 +SET 1817153.80 1034549.74 +SET 18173.35 12175.57 +SET 1817440.40 1094662.81 +SET 1817502.12 1571084.52 +SET 181759.36 113507.04 +SET 1817593.60 1135070.40 +SET 181769.44 136690.88 +SET 1817694.40 1366908.80 +SET 1817770.90 1034901.07 +SET 181780.95 121787.49 +SET 181790.80 107297.40 +SET 1817976.60 1035018.18 +SET 181828.40 121819.28 +SET 1818362.67 1367411.34 +SET 1818388.00 1035252.40 +SET 1818752.00 1095452.80 +SET 1818767.79 1572178.59 +SET 1818829.53 1466213.28 +SET 1818870.00 1135867.50 +SET 1819005.10 1035603.73 +SET 1819030.94 1367913.88 +SET 1819189.20 1095716.13 +SET 1819189.68 1572543.28 +SET 1819210.80 1035720.84 +SET 181923.30 121882.86 +SET 1819480.74 1466738.24 +SET 181951.20 59673.60 +SET 1819699.21 1368416.42 +SET 1819891.12 1136505.18 +SET 1820033.46 1573272.66 +SET 1820033.60 1036189.28 +SET 182012.71 126204.09 +SET 182014.64 113666.46 +SET 1820146.40 1136664.60 +SET 18202.83 13500.92 +SET 182044.50 103642.35 +SET 182060.48 59709.44 +SET 1820650.70 1036540.61 +SET 1820783.16 1467788.16 +SET 1820856.40 1036657.72 +SET 1820877.24 1574002.04 +SET 1820912.24 1137142.86 +SET 1821062.10 1036774.83 +SET 182113.10 122010.02 +SET 18212.16 13507.84 +SET 1821299.13 1574366.73 +SET 1821422.80 1137461.70 +SET 182160.55 122041.81 +SET 182169.76 59745.28 +SET 1821704.02 1369924.04 +SET 182180.52 116343.36 +SET 1821812.40 1097296.11 +SET 182208.00 122073.60 +SET 1822090.60 1037360.38 +SET 1822142.91 1575096.11 +SET 1822443.92 1138099.38 +SET 182252.98 107570.19 +SET 182256.48 157546.08 +SET 1822564.80 1575460.80 +SET 1822686.80 1097822.77 +SET 1822707.70 1037711.71 +SET 182279.04 59781.12 +SET 1822913.40 1037828.82 +SET 1822986.69 1575825.49 +SET 182302.90 122137.18 +SET 1823040.56 1370929.12 +SET 1823124.00 1098086.10 +SET 1823324.80 1038063.04 +SET 1823561.20 1098349.43 +SET 1823708.83 1371431.66 +SET 182388.32 59816.96 +SET 1823941.90 1038414.37 +SET 18240.15 13528.60 +SET 182421.36 126487.44 +SET 1824230.88 1139215.32 +SET 1824252.36 1576919.56 +SET 1824435.60 1098876.09 +SET 1824559.00 1038765.70 +SET 1824741.44 1139534.16 +SET 182497.60 59852.80 +SET 1824970.40 1038999.92 +SET 1825045.37 1372436.74 +SET 1825176.10 1039117.03 +SET 182525.20 113985.30 +SET 1825252.00 1139853.00 +SET 182540.15 122296.13 +SET 1825518.03 1578013.63 +SET 1825747.20 1099666.08 +SET 18258.81 13542.44 +SET 1825939.92 1578378.32 +SET 1826273.12 1140490.68 +SET 182661.60 103993.68 +SET 182678.37 157910.77 +SET 18268.14 13549.36 +SET 18268.25 12239.15 +SET 1827050.18 1373944.36 +SET 1827295.26 1473037.76 +SET 1827627.48 1579837.08 +SET 1827644.50 1040522.35 +SET 1827718.45 1374446.90 +SET 1827804.80 1141447.20 +SET 1827850.20 1040639.46 +SET 182790.84 116733.12 +SET 182824.85 122486.87 +SET 182825.44 59960.32 +SET 1828315.36 1141766.04 +SET 1828570.64 1141925.46 +SET 1828597.68 1474087.68 +SET 1828673.00 1041107.90 +SET 182872.30 122518.66 +SET 1828825.92 1142084.88 +SET 1829081.20 1142244.30 +SET 1829084.40 1041342.12 +SET 1829244.80 1101772.72 +SET 1829290.10 1041459.23 +SET 182934.72 59996.16 +SET 182943.42 116830.56 +SET 182990.01 147513.76 +SET 182993.47 126884.13 +SET 1830102.32 1142881.98 +SET 1830119.20 1102299.38 +SET 1830158.82 1582025.22 +SET 183023.28 108024.84 +SET 1830318.60 1042044.78 +SET 183035.76 114304.14 +SET 18305.46 13577.04 +SET 1830524.30 1042161.89 +SET 18307.30 10422.79 +SET 18307.52 12694.08 +SET 1830935.70 1042396.11 +SET 183096.00 116928.00 +SET 1830993.60 1102826.04 +SET 1831002.60 1582754.60 +SET 183105.98 137695.96 +SET 1831059.80 1376959.60 +SET 1831141.40 1042513.22 +SET 18314.79 13583.96 +SET 18315.70 12270.94 +SET 1831634.00 1143838.50 +SET 1831728.07 1377462.14 +SET 1831758.50 1042864.55 +SET 1831853.73 1476712.48 +SET 183186.80 110335.27 +SET 1831868.00 1103352.70 +SET 1831964.20 1042981.66 +SET 183204.45 122741.19 +SET 1832144.56 1144157.34 +SET 1832305.20 1103616.03 +SET 1832375.60 1043215.88 +SET 1832581.30 1043332.99 +SET 183262.56 60103.68 +SET 1832690.16 1584213.36 +SET 1832742.40 1103879.36 +SET 1832787.00 1043450.10 +SET 1832910.40 1144635.60 +SET 1832992.70 1043567.21 +SET 1833064.61 1378467.22 +SET 18333.45 13597.80 +SET 1833420.96 1144954.44 +SET 1833616.80 1104406.02 +SET 1833815.50 1044035.65 +SET 1833931.52 1145273.28 +SET 183394.25 122868.35 +SET 18342.78 13604.72 +SET 1834226.90 1044269.87 +SET 1834377.72 1585672.12 +SET 1834442.08 1145592.12 +SET 1834491.20 1104932.68 +SET 1834799.61 1586036.81 +SET 183483.85 127224.15 +SET 1834952.64 1145910.96 +SET 1835049.70 1044738.31 +SET 1835255.40 1044855.42 +SET 1835461.10 1044972.53 +SET 1835463.20 1146229.80 +SET 183584.05 122995.51 +SET 1835872.50 1045206.75 +SET 183590.40 60211.20 +SET 1835973.76 1146548.64 +SET 1836065.28 1587130.88 +SET 1836229.04 1146708.06 +SET 183624.00 110598.60 +SET 1836240.00 1105986.00 +SET 183631.50 123027.30 +SET 183647.31 127337.49 +SET 1836484.32 1146867.48 +SET 1836487.17 1587495.57 +SET 1836677.20 1106249.33 +SET 1836739.60 1147026.90 +SET 183690.10 104579.23 +SET 1836901.00 1045792.30 +SET 183699.68 60247.04 +SET 1836994.88 1147186.32 +SET 183706.32 117317.76 +SET 1837063.41 1480912.16 +SET 1837074.23 1381482.46 +SET 1837250.16 1147345.74 +SET 183726.40 123090.88 +SET 183729.04 127394.16 +SET 1837330.95 1588224.95 +SET 1837505.44 1147505.16 +SET 1837518.10 1046143.63 +SET 1837723.80 1046260.74 +SET 183773.85 123122.67 +SET 1837752.84 1588589.64 +SET 1837929.50 1046377.85 +SET 1838.01 1363.24 +SET 18380.10 13632.40 +SET 18380.16 11478.24 +SET 183801.60 114782.40 +SET 183808.96 60282.88 +SET 1838135.20 1046494.96 +SET 183821.30 123154.46 +SET 1838526.56 1148142.84 +SET 183868.75 123186.25 +SET 1838752.30 1046846.29 +SET 18389.25 12750.75 +SET 183895.80 104696.34 +SET 1838958.00 1046963.40 +SET 1839037.12 1148461.68 +SET 1839079.04 1382990.08 +SET 1839292.40 1148621.10 +SET 183947.64 108570.42 +SET 1839547.68 1148780.52 +SET 1839668.25 1483012.00 +SET 1839747.31 1383492.62 +SET 18398.76 13646.24 +SET 1839802.96 1148939.94 +SET 1840058.24 1149099.36 +SET 184011.48 117512.64 +SET 1840174.80 1108355.97 +SET 1840284.18 1590777.78 +SET 1840313.52 1149258.78 +SET 1840397.90 1047783.17 +SET 18408.09 13653.16 +SET 1840824.08 1149577.62 +SET 1840970.67 1484061.92 +SET 18410.60 12334.52 +SET 1841049.20 1108882.63 +SET 1841083.85 1384497.70 +SET 1841334.64 1149896.46 +SET 184136.80 60390.40 +SET 1841549.85 1591871.85 +SET 1841589.92 1150055.88 +SET 1841632.10 1048485.83 +SET 184164.06 117610.08 +SET 1841923.60 1109409.29 +SET 1842043.50 1048720.05 +SET 1842100.48 1150374.72 +SET 1842249.20 1048837.16 +SET 1842360.80 1109672.62 +SET 1842454.90 1048954.27 +SET 1842798.00 1109935.95 +SET 1842866.32 1150852.98 +SET 184292.43 148563.68 +SET 1842924.30 1485636.80 +SET 184307.20 104930.56 +SET 184312.16 115101.24 +SET 1843121.60 1151012.40 +SET 1843237.41 1593330.61 +SET 184343.25 123504.15 +SET 184355.36 60462.08 +SET 1843575.51 1486161.76 +SET 1843632.16 1151331.24 +SET 1843659.30 1593695.30 +SET 1843756.93 1386507.86 +SET 1843894.80 1049774.04 +SET 184438.15 123567.73 +SET 184442.52 138701.04 +SET 1844425.20 1387010.40 +SET 18445.41 13680.84 +SET 1844511.90 1050125.37 +SET 1844546.80 1110989.27 +SET 1844717.60 1050242.48 +SET 1844877.93 1487211.68 +SET 1844908.56 1152128.34 +SET 1844923.30 1050359.59 +SET 1844984.00 1111252.60 +SET 1845093.47 1387512.94 +SET 184512.90 105047.67 +SET 1845346.86 1595154.06 +SET 18454.74 13687.76 +SET 1845419.12 1152447.18 +SET 1845421.20 1111515.93 +SET 1845529.14 1487736.64 +SET 184567.44 115260.66 +SET 1845768.75 1595518.75 +SET 1845858.40 1111779.26 +SET 1845929.68 1152766.02 +SET 1846190.64 1595883.44 +SET 18462.18 11790.24 +SET 184627.95 123694.89 +SET 184628.07 128017.53 +SET 1846295.60 1112042.59 +SET 1846695.52 1153244.28 +SET 1846732.80 1112305.92 +SET 184675.40 123726.68 +SET 1846831.56 1488786.56 +SET 1846950.80 1153403.70 +SET 1847.34 1370.16 +SET 18470.98 12807.42 +SET 1847034.42 1596612.82 +SET 1847170.00 1112569.25 +SET 1847391.70 1051764.91 +SET 1847456.31 1596977.51 +SET 1847597.40 1051882.02 +SET 1847607.20 1112832.58 +SET 1847716.64 1153881.96 +SET 1848044.40 1113095.91 +SET 1848420.20 1052350.46 +SET 1848625.90 1052467.57 +SET 184872.00 109116.00 +SET 184873.26 128187.54 +SET 1848918.80 1113622.57 +SET 184901.76 60641.28 +SET 1849103.09 1390528.18 +SET 1849143.87 1598436.27 +SET 18492.06 13715.44 +SET 1849356.00 1113885.90 +SET 184943.64 149088.64 +SET 1849436.40 1490886.40 +SET 1849448.70 1052936.01 +SET 1849503.60 1154997.90 +SET 184954.99 128244.21 +SET 1849565.76 1598800.96 +SET 184960.10 123917.42 +SET 1849654.40 1053053.12 +SET 1849758.88 1155157.32 +SET 1849793.20 1114149.23 +SET 1850.55 1239.81 +SET 185011.04 60677.12 +SET 1850269.44 1155476.16 +SET 1850271.50 1053404.45 +SET 185036.72 128300.88 +SET 1850439.63 1391533.26 +SET 185055.00 123981.00 +SET 1850682.90 1053638.67 +SET 18510.72 13729.28 +SET 1851035.28 1155954.42 +SET 1851094.30 1053872.89 +SET 185110.79 139203.58 +SET 185118.45 128357.55 +SET 185120.32 60712.96 +SET 1851290.56 1156113.84 +SET 1851505.70 1054107.11 +SET 1851542.00 1115202.55 +SET 1851776.17 1392538.34 +SET 185180.12 109297.86 +SET 1851801.12 1156432.68 +SET 1851917.10 1054341.33 +SET 1852311.68 1156751.52 +SET 185244.80 124108.16 +SET 1852739.90 1054809.77 +SET 18529.38 13743.12 +SET 1852945.60 1054926.88 +SET 1853343.66 1494036.16 +SET 1853357.00 1055161.10 +SET 185338.88 60784.64 +SET 185339.70 124171.74 +SET 185387.15 124203.53 +SET 1854165.20 1116782.53 +SET 1854179.80 1055629.54 +SET 1854353.92 1158026.88 +SET 1854628.44 1603177.24 +SET 185482.05 124267.11 +SET 18552.71 12864.09 +SET 18552.95 12429.89 +SET 185527.10 128640.90 +SET 1855297.29 1495611.04 +SET 185541.40 105633.22 +SET 1855414.00 1056332.20 +SET 1855630.32 1158823.98 +SET 185576.95 124330.69 +SET 1855785.79 1395553.58 +SET 1855885.60 1158983.40 +SET 1855914.00 1117835.85 +SET 18563.16 16046.36 +SET 185666.72 60892.16 +SET 185671.85 124394.27 +SET 1856737.89 1605000.69 +SET 1856853.90 1057151.97 +SET 1857.76 609.28 +SET 1857059.60 1057269.08 +SET 1857122.33 1396558.66 +SET 1857159.78 1605365.38 +SET 1857162.00 1159780.50 +SET 185719.30 124426.06 +SET 1857265.30 1057386.19 +SET 1857417.28 1159939.92 +SET 1857471.00 1057503.30 +SET 1857676.70 1057620.41 +SET 185776.00 60928.00 +SET 1857902.13 1497710.88 +SET 185796.36 109661.58 +SET 1858183.12 1160418.18 +SET 185842.44 118681.92 +SET 1858425.45 1606459.45 +SET 185843.84 116057.76 +SET 1858438.40 1160577.60 +SET 1858499.50 1058088.85 +SET 18585.36 13784.64 +SET 1858553.34 1498235.84 +SET 1858705.20 1058205.96 +SET 1858974.40 1119679.16 +SET 185909.10 124553.22 +SET 18594.69 13791.56 +SET 1859411.60 1119942.49 +SET 185950.42 109752.51 +SET 1859528.00 1058674.40 +SET 1859733.70 1058791.51 +SET 1859795.41 1398568.82 +SET 1859848.80 1120205.82 +SET 186017.48 128980.92 +SET 1860225.36 1161693.54 +SET 18604.02 13798.48 +SET 1860463.68 1399071.36 +SET 1860506.97 1499810.72 +SET 186051.45 124648.59 +SET 186053.49 160828.29 +SET 1860723.20 1120732.48 +SET 1860735.92 1162012.38 +SET 1860762.20 1059377.06 +SET 186099.21 129037.59 +SET 186104.48 109843.44 +SET 1861160.40 1120995.81 +SET 1861379.30 1059728.39 +SET 186146.35 124712.17 +SET 186147.60 118876.80 +SET 1861501.76 1162490.64 +SET 1862012.32 1162809.48 +SET 186213.12 61071.36 +SET 18622.68 13812.32 +SET 1862267.60 1162968.90 +SET 1862407.80 1060313.94 +SET 1862460.60 1501385.60 +SET 186262.67 129150.93 +SET 1862644.35 1610106.35 +SET 1862819.20 1060548.16 +SET 1862909.20 1122049.13 +SET 186300.18 118974.24 +SET 1863024.90 1060665.27 +SET 1863136.76 1401081.52 +SET 18632.01 13819.24 +SET 186336.15 124839.33 +SET 18634.44 12920.76 +SET 186344.40 129207.60 +SET 1863488.13 1610835.73 +SET 186354.40 116376.60 +SET 186364.20 106101.66 +SET 1863642.00 1061016.60 +SET 1863783.60 1122575.79 +SET 1863799.28 1163925.42 +SET 186383.60 124871.12 +SET 1863847.70 1061133.71 +SET 18641.34 13826.16 +SET 186412.60 110025.30 +SET 1864220.80 1122839.12 +SET 186426.13 129264.27 +SET 186431.68 61143.04 +SET 186447.33 140208.66 +SET 1864658.00 1123102.45 +SET 18647.85 12493.47 +SET 186475.38 161192.98 +SET 1864753.80 1611929.80 +SET 18650.67 13833.08 +SET 1865287.60 1061953.48 +SET 1865586.24 1165041.36 +SET 1865597.58 1612659.18 +SET 186566.66 110116.23 +SET 186569.90 106218.77 +SET 186573.40 124998.28 +SET 1865841.52 1165200.78 +SET 1865969.60 1123892.44 +SET 1866110.40 1062421.92 +SET 1866367.86 1504535.36 +SET 1866441.36 1613388.56 +SET 1866521.80 1062656.14 +SET 1866607.36 1165679.04 +SET 186671.32 129434.28 +SET 1866862.64 1165838.46 +SET 1866933.20 1062890.36 +SET 1867117.92 1165997.88 +SET 1867138.90 1063007.47 +SET 1867281.20 1124682.43 +SET 186753.05 129490.95 +SET 1867550.30 1063241.69 +SET 186757.92 119266.56 +SET 186775.60 106335.88 +SET 18678.66 13853.84 +SET 1867961.70 1063475.91 +SET 1868321.49 1506110.24 +SET 186834.78 129547.62 +SET 1868578.80 1063827.24 +SET 1868904.88 1167113.82 +SET 186897.27 161557.67 +SET 1868972.70 1615576.70 +SET 1868990.20 1064061.46 +SET 186905.55 125220.81 +SET 186916.51 129604.29 +SET 1869195.90 1064178.57 +SET 1869394.59 1615941.39 +SET 1869467.20 1125999.08 +SET 186953.00 125252.60 +SET 1869816.48 1616306.08 +SET 187000.45 125284.39 +SET 1870181.28 1167910.92 +SET 1870275.12 1507685.12 +SET 187028.84 110389.02 +SET 1870430.10 1064881.23 +SET 1870436.56 1168070.34 +SET 187047.90 125316.18 +SET 1870660.26 1617035.46 +SET 1870778.80 1126789.07 +SET 187079.97 129717.63 +SET 1870841.50 1065115.45 +SET 1871047.20 1065232.56 +SET 187115.60 140711.20 +SET 1871202.40 1168548.60 +SET 1871252.90 1065349.67 +SET 1871458.60 1065466.78 +SET 18715.98 13881.52 +SET 18716.17 12977.43 +SET 187161.70 129774.30 +SET 1871712.96 1168867.44 +SET 187182.90 110479.95 +SET 1871925.93 1618129.53 +SET 187196.64 61393.92 +SET 1871968.24 1169026.86 +SET 1872347.82 1618494.22 +SET 1872478.80 1169345.70 +SET 1872492.54 1408117.08 +SET 1872769.71 1618858.91 +SET 1872879.96 1509784.96 +SET 1872964.80 1128105.72 +SET 1872989.36 1169664.54 +SET 1873104.20 1066403.66 +SET 187332.60 125506.92 +SET 18734.64 13895.36 +SET 1873531.17 1510309.92 +SET 187392.70 106687.21 +SET 1873927.00 1066872.10 +SET 187415.20 61465.60 +SET 18742.75 12557.05 +SET 1874265.76 1170461.64 +SET 187427.50 125570.50 +SET 1874457.27 1620317.67 +SET 1874497.35 1409624.70 +SET 187474.95 125602.29 +SET 1874833.59 1511359.84 +SET 1874879.16 1620682.36 +SET 1875.33 1390.92 +SET 1875031.60 1170939.90 +SET 1875150.80 1129422.37 +SET 187520.82 119753.76 +SET 187522.40 125634.08 +SET 1875301.05 1621047.05 +SET 187548.48 151188.48 +SET 1875484.80 1511884.80 +SET 1875588.00 1129685.70 +SET 187570.35 130057.65 +SET 187598.40 106804.32 +SET 1875984.00 1068043.20 +SET 1876025.20 1129949.03 +SET 1876189.70 1068160.31 +SET 1876502.16 1411132.32 +SET 187652.08 130114.32 +SET 1876563.28 1171896.42 +SET 18767.34 11985.12 +SET 1876818.56 1172055.84 +SET 1877073.84 1172215.26 +SET 1877170.43 1411634.86 +SET 1877336.80 1130739.02 +SET 1877423.90 1068862.97 +SET 1877584.40 1172534.10 +SET 187783.87 141213.74 +SET 1877839.68 1172693.52 +SET 187804.10 106921.43 +SET 187807.10 125824.82 +SET 1878089.64 1513984.64 +SET 18781.29 13929.96 +SET 187815.54 130227.66 +SET 1878211.20 1131265.68 +SET 1878246.70 1069331.41 +SET 1878350.24 1173012.36 +SET 1878648.40 1131529.01 +SET 1878658.10 1069565.63 +SET 1878676.17 1623964.57 +SET 1878860.80 1173331.20 +SET 1878863.80 1069682.74 +SET 1879069.50 1069799.85 +SET 1879098.06 1624329.26 +SET 1879175.24 1413142.48 +SET 1879275.20 1069916.96 +SET 1879371.36 1173650.04 +SET 18795.32 11093.46 +SET 1879522.80 1132055.67 +SET 187953.20 110934.60 +SET 18796.16 6164.48 +SET 187961.60 61644.80 +SET 18797.90 13034.10 +SET 1879892.30 1070268.29 +SET 18799.95 13943.80 +SET 1879941.84 1625058.64 +SET 187996.00 113231.90 +SET 1880363.73 1625423.33 +SET 1880392.48 1174287.72 +SET 1880647.76 1174447.14 +SET 1880715.10 1070736.73 +SET 1880834.40 1132845.66 +SET 188091.80 126015.56 +SET 1880920.80 1070853.84 +SET 188107.26 111025.53 +SET 1881126.50 1070970.95 +SET 1881158.32 1174765.98 +SET 1881207.51 1626152.71 +SET 188131.14 120143.52 +SET 1881332.20 1071088.06 +SET 188139.25 126047.35 +SET 1881537.90 1071205.17 +SET 1881668.88 1175084.82 +SET 188186.70 126079.14 +SET 1881924.16 1175244.24 +SET 1881949.30 1071439.39 +SET 188199.69 151713.44 +SET 1881996.90 1517134.40 +SET 1882155.00 1071556.50 +SET 188224.19 130511.01 +SET 1882648.11 1517659.36 +SET 18827.94 13964.56 +SET 1882977.80 1072024.94 +SET 1883183.50 1072142.05 +SET 1883200.56 1176041.34 +SET 1883711.12 1176360.18 +SET 1883738.85 1628340.85 +SET 188376.50 126206.30 +SET 1883800.60 1072493.38 +SET 1883950.53 1518709.28 +SET 188396.64 117651.96 +SET 188415.38 111207.39 +SET 1884160.74 1628705.54 +SET 188423.95 126238.09 +SET 1884476.96 1176838.44 +SET 188452.14 141716.28 +SET 1884521.40 1417162.80 +SET 1884732.24 1176997.86 +SET 1884987.52 1177157.28 +SET 1885004.52 1629434.92 +SET 188508.00 61824.00 +SET 1885206.40 1135478.96 +SET 1885252.95 1519759.20 +SET 188551.11 130737.69 +SET 1885651.90 1073547.37 +SET 188566.30 126333.46 +SET 188569.44 111298.32 +SET 188584.83 163016.43 +SET 1885857.94 1418167.88 +SET 188588.88 120435.84 +SET 1885904.16 1520284.16 +SET 1886008.64 1177794.96 +SET 188626.90 107389.87 +SET 1886270.19 1630528.99 +SET 1886474.70 1074015.81 +SET 1886518.00 1136268.95 +SET 1886519.20 1178113.80 +SET 1886692.08 1630893.68 +SET 1887091.80 1074367.14 +SET 188714.57 130851.03 +SET 1887206.58 1521334.08 +SET 1887285.04 1178592.06 +SET 1887392.40 1136795.61 +SET 1887829.60 1137058.94 +SET 1887914.60 1074835.58 +SET 18883.92 14006.08 +SET 1888306.16 1179229.74 +SET 188835.84 61931.52 +SET 188850.90 152238.40 +SET 1888509.00 1522384.00 +SET 188851.00 126524.20 +SET 1888531.02 1420178.04 +SET 1888561.44 1179389.16 +SET 188870.40 113758.56 +SET 1888704.00 1137585.60 +SET 1888816.72 1179548.58 +SET 188894.04 120630.72 +SET 188898.45 126555.99 +SET 188907.20 117970.80 +SET 1889072.00 1179708.00 +SET 1889148.80 1075538.24 +SET 1889160.21 1522908.96 +SET 1889223.42 1633081.82 +SET 188945.12 61967.36 +SET 188945.90 126587.78 +SET 1889578.40 1138112.26 +SET 1889811.42 1523433.92 +SET 1889971.60 1076006.68 +SET 1890015.60 1138375.59 +SET 189006.72 163381.12 +SET 18902.58 14019.92 +SET 189031.62 111571.11 +SET 189038.30 107624.09 +SET 189054.40 62003.20 +SET 1890588.70 1076358.01 +SET 1890910.98 1634540.58 +SET 1891113.84 1524483.84 +SET 1891205.80 1076709.34 +SET 1891332.87 1634905.27 +SET 189135.70 126714.94 +SET 1891369.52 1181142.78 +SET 1891411.50 1076826.45 +SET 1891617.20 1076943.56 +SET 1891765.05 1525008.80 +SET 1891822.90 1077060.67 +SET 189183.15 126746.73 +SET 189185.68 111662.04 +SET 1891872.37 1422690.74 +SET 1891880.08 1181461.62 +SET 18919.92 12082.56 +SET 189199.20 120825.60 +SET 1892176.65 1635634.65 +SET 1892234.30 1077294.89 +SET 1892645.92 1181939.88 +SET 189278.05 126810.31 +SET 189286.68 131247.72 +SET 1892901.20 1182099.30 +SET 1893020.43 1636364.03 +SET 1893057.10 1077763.33 +SET 189307.60 114021.89 +SET 1893076.00 1140218.90 +SET 1893156.48 1182258.72 +SET 18932.55 12684.21 +SET 1893208.91 1423695.82 +SET 1893442.32 1636728.72 +SET 1893468.50 1077997.55 +SET 1893674.20 1078114.66 +SET 189368.41 131304.39 +SET 189372.95 126873.89 +SET 1893864.21 1637093.41 +SET 1893877.18 1424198.36 +SET 1893879.90 1078231.77 +SET 1894085.60 1078348.88 +SET 1894177.60 1182896.40 +SET 189420.40 126905.68 +SET 1894286.10 1637458.10 +SET 1894369.89 1527108.64 +SET 1894387.60 1141008.89 +SET 1894432.88 1183055.82 +SET 189450.14 131361.06 +SET 1894545.45 1424700.90 +SET 1894688.16 1183215.24 +SET 1894707.99 1637822.79 +SET 1894908.40 1078817.32 +SET 1894943.44 1183374.66 +SET 189502.11 152763.36 +SET 189515.30 126969.26 +SET 1895213.72 1425203.44 +SET 1895262.00 1141535.55 +SET 1895454.00 1183693.50 +SET 1895551.77 1638552.17 +SET 1895672.31 1528158.56 +SET 1895699.20 1141798.88 +SET 1895936.90 1079402.87 +SET 1895964.56 1184012.34 +SET 189600.80 62182.40 +SET 18961.36 13147.44 +SET 189613.60 131474.40 +SET 1896142.60 1079519.98 +SET 1896219.84 1184171.76 +SET 1896395.55 1639281.55 +SET 1896554.00 1079754.20 +SET 189657.65 127064.63 +SET 1896730.40 1184490.60 +SET 1896974.73 1529208.48 +SET 1896985.68 1184650.02 +SET 189705.10 127096.42 +SET 1897171.10 1080105.53 +SET 1897240.96 1184809.44 +SET 1897376.80 1080222.64 +SET 1897496.24 1184968.86 +SET 1897582.50 1080339.75 +SET 1897625.94 1529733.44 +SET 1897751.52 1185128.28 +SET 1897885.20 1143115.53 +SET 1898.00 1271.60 +SET 18980.00 12716.00 +SET 189800.00 127160.00 +SET 1898006.80 1185287.70 +SET 189809.52 121215.36 +SET 1898277.15 1530258.40 +SET 1898405.30 1080808.19 +SET 189847.45 127191.79 +SET 18985.05 16411.05 +SET 1898517.36 1185606.54 +SET 1898555.07 1427716.14 +SET 189861.10 108092.53 +SET 1898759.60 1143642.19 +SET 1898926.89 1641469.69 +SET 189894.90 127223.58 +SET 1899027.92 1185925.38 +SET 1899228.10 1081276.63 +SET 189928.64 62289.92 +SET 1899283.20 1186084.80 +SET 1899348.78 1641834.38 +SET 1899538.48 1186244.22 +SET 189955.98 112116.69 +SET 1899579.57 1531308.32 +SET 1899793.76 1186403.64 +SET 1899845.20 1081627.96 +SET 1900256.60 1081862.18 +SET 19005.21 14096.04 +SET 1900559.88 1429223.76 +SET 190066.80 108209.64 +SET 1900873.70 1082213.51 +SET 1900881.99 1532358.24 +SET 190110.04 112207.62 +SET 1901285.10 1082447.73 +SET 190132.15 127382.53 +SET 1901382.80 1145222.17 +SET 19014.72 6236.16 +SET 1901458.23 1643657.83 +SET 1901580.72 1187519.58 +SET 1901696.50 1082681.95 +SET 190179.60 127414.32 +SET 1901820.00 1145485.50 +SET 1901836.00 1187679.00 +SET 1901896.42 1430228.84 +SET 1902091.28 1187838.42 +SET 1902302.01 1644387.21 +SET 1902313.60 1083033.28 +SET 190256.48 62397.44 +SET 190267.26 121507.68 +SET 1902694.40 1146012.16 +SET 190272.50 108326.75 +SET 1902723.90 1644751.90 +SET 1902835.62 1533933.12 +SET 1903342.10 1083618.83 +SET 1903486.83 1534458.08 +SET 190349.17 131984.43 +SET 1903567.68 1645481.28 +SET 1903901.23 1431736.46 +SET 1903959.20 1083970.16 +SET 1904133.52 1189113.78 +SET 1904138.04 1534983.04 +SET 190418.16 112389.48 +SET 1904569.50 1432239.00 +SET 1904644.08 1189432.62 +SET 1904899.36 1189592.04 +SET 190511.75 127636.85 +SET 1905193.40 1084672.82 +SET 1905317.60 1147592.14 +SET 1905409.92 1189910.88 +SET 1905440.46 1536032.96 +SET 1905665.20 1190070.30 +SET 1905754.80 1147855.47 +SET 1905920.48 1190229.72 +SET 1906091.67 1536557.92 +SET 1906099.02 1647669.42 +SET 190654.10 127732.22 +SET 1906574.31 1433746.62 +SET 1906629.20 1148382.13 +SET 190693.60 62540.80 +SET 190694.16 119086.74 +SET 1907066.40 1148645.46 +SET 19072.50 12180.00 +SET 1907242.58 1434249.16 +SET 190725.00 121800.00 +SET 190726.28 112571.34 +SET 19074.90 12779.58 +SET 1907456.10 1085961.03 +SET 190796.45 127827.59 +SET 190802.88 62576.64 +SET 1908208.47 1649492.87 +SET 1908378.00 1149435.45 +SET 190839.55 132324.45 +SET 190843.90 127859.38 +SET 190877.58 121897.44 +SET 1908896.00 1086780.80 +SET 190891.35 127891.17 +SET 1908983.84 1192142.76 +SET 1909101.70 1086897.91 +SET 190912.16 62612.48 +SET 190938.80 127922.96 +SET 1909494.40 1192461.60 +SET 1909513.10 1087132.13 +SET 1909718.80 1087249.24 +SET 1909749.68 1192621.02 +SET 19098.51 14165.24 +SET 1909998.93 1539707.68 +SET 1910004.96 1192780.44 +SET 191003.01 132437.79 +SET 1910130.20 1087483.46 +SET 1910260.24 1192939.86 +SET 1910564.00 1150752.10 +SET 191084.74 132494.46 +SET 1911001.20 1151015.43 +SET 1911158.70 1088069.01 +SET 191116.17 165204.57 +SET 1911161.70 1652045.70 +SET 191125.22 143726.44 +SET 1911252.20 1437264.40 +SET 1911281.36 1193577.54 +SET 1911301.35 1540757.60 +SET 1911364.40 1088186.12 +SET 19117.17 14179.08 +SET 191182.74 122092.32 +SET 191188.46 112844.13 +SET 1911920.47 1437766.94 +SET 1912005.48 1652775.08 +SET 1912047.20 1194055.80 +SET 1912187.20 1088654.56 +SET 1912302.48 1194215.22 +SET 191240.00 62720.00 +SET 1912750.00 1152068.75 +SET 19130.10 10891.23 +SET 191301.00 108912.30 +SET 1913068.32 1194693.48 +SET 1913257.01 1438772.02 +SET 191329.93 132664.47 +SET 1913323.60 1194852.90 +SET 1913578.88 1195012.32 +SET 1913693.04 1654233.84 +SET 1913832.80 1089591.44 +SET 1913906.19 1542857.44 +SET 1913925.28 1439274.56 +SET 1914061.60 1152858.74 +SET 191413.30 128240.86 +SET 1914344.72 1195490.58 +SET 1914557.40 1543382.40 +SET 1914593.55 1439777.10 +SET 191460.00 119565.00 +SET 1914600.00 1195650.00 +SET 1914655.60 1090059.88 +SET 1914855.28 1195809.42 +SET 191493.60 115338.54 +SET 191496.58 113025.99 +SET 191506.70 109029.41 +SET 1915067.00 1090294.10 +SET 1915208.61 1543907.36 +SET 1915261.82 1440279.64 +SET 1915380.60 1655692.60 +SET 191567.84 62827.52 +SET 1915802.49 1656057.29 +SET 1915810.40 1153912.06 +SET 1915930.09 1440782.18 +SET 1916095.50 1090879.65 +SET 1916224.38 1656421.98 +SET 19163.82 14213.68 +SET 191650.55 128399.81 +SET 191650.64 113116.92 +SET 19169.80 12843.16 +SET 191712.40 109146.52 +SET 1917162.24 1545482.24 +SET 1917266.63 1441787.26 +SET 19173.15 14220.60 +SET 1917329.70 1091582.31 +SET 191745.45 128463.39 +SET 1917490.05 1657516.05 +SET 1917813.45 1546007.20 +SET 1917911.94 1657880.74 +SET 1917918.64 1197722.46 +SET 191793.06 122482.08 +SET 191793.49 144228.98 +SET 1917934.90 1442289.80 +SET 1918152.50 1092050.75 +SET 1918429.20 1198041.30 +SET 1918433.60 1155492.04 +SET 1918464.66 1546532.16 +SET 1918684.48 1198200.72 +SET 1918870.80 1155755.37 +SET 191902.04 133061.16 +SET 191918.10 109263.63 +SET 191930.80 115601.87 +SET 191935.25 128590.55 +SET 1919386.70 1092753.41 +SET 191945.64 122579.52 +SET 1919450.32 1198678.98 +SET 1919599.50 1659339.50 +SET 191970.56 119883.84 +SET 1919705.60 1198838.40 +SET 1919745.20 1156282.03 +SET 1919798.10 1092987.63 +SET 191982.70 128622.34 +SET 1920003.80 1093104.74 +SET 192030.15 128654.13 +SET 1920418.29 1548107.04 +SET 1920443.28 1660068.88 +SET 19206.55 13317.45 +SET 1920726.72 1199476.08 +SET 1920826.60 1093573.18 +SET 1921.98 1425.52 +SET 1921069.50 1548632.00 +SET 1921238.00 1093807.40 +SET 192125.05 128717.71 +SET 1921276.25 1444802.50 +SET 1921287.06 1660798.26 +SET 1921443.70 1093924.51 +SET 1921492.56 1199954.34 +SET 1921494.00 1157335.35 +SET 19217.25 12874.95 +SET 192172.50 128749.50 +SET 1921855.10 1094158.73 +SET 19219.80 14255.20 +SET 1921944.52 1445305.04 +SET 192219.95 128781.29 +SET 192225.84 120043.26 +SET 1922258.40 1200432.60 +SET 1922266.50 1094392.95 +SET 1922371.92 1549681.92 +SET 1922472.20 1094510.06 +SET 19225.08 12277.44 +SET 192250.80 122774.40 +SET 192266.88 113480.64 +SET 1922768.96 1200751.44 +SET 1922805.60 1158125.34 +SET 1922974.62 1662257.02 +SET 1923281.06 1446310.12 +SET 192329.50 109497.85 +SET 1923500.70 1095095.61 +SET 1923534.80 1201229.70 +SET 192368.00 115865.20 +SET 1924045.36 1201548.54 +SET 1924117.20 1158915.33 +SET 1924117.80 1095446.94 +SET 1924325.55 1551256.80 +SET 192457.20 128940.24 +SET 192461.76 144731.52 +SET 1924662.18 1663715.78 +SET 192474.15 133457.85 +SET 1924976.76 1551781.76 +SET 192504.65 128972.03 +SET 1925084.07 1664080.47 +SET 1925146.30 1096032.49 +SET 1925285.87 1447817.74 +SET 192535.20 109614.96 +SET 192551.36 63150.08 +SET 192552.10 129003.82 +SET 192555.88 133514.52 +SET 1925832.32 1202664.48 +SET 1925927.85 1664809.85 +SET 1925969.10 1096500.93 +SET 1926087.60 1202823.90 +SET 1926349.74 1665174.54 +SET 192647.00 129067.40 +SET 1926598.16 1203142.74 +SET 192660.64 63185.92 +SET 1926622.41 1448822.82 +SET 1926771.63 1665539.23 +SET 1926791.90 1096969.37 +SET 1927108.72 1203461.58 +SET 192729.06 113753.43 +SET 192736.40 120362.10 +SET 192741.90 129130.98 +SET 1927874.56 1203939.84 +SET 1927958.95 1449827.90 +SET 1928231.80 1097789.14 +SET 192836.80 129194.56 +SET 1928385.12 1204258.68 +SET 1928459.19 1666997.99 +SET 19285.11 14303.64 +SET 1928627.22 1450330.44 +SET 1928643.20 1098023.36 +SET 192883.12 113844.36 +SET 1928848.90 1098140.47 +SET 1928881.08 1667362.68 +SET 1929150.96 1204736.94 +SET 1929302.97 1667727.37 +SET 192931.70 129258.14 +SET 192946.60 109849.18 +SET 1929724.86 1668092.06 +SET 1929877.40 1098726.02 +SET 192988.48 63293.44 +SET 1929963.76 1451335.52 +SET 1930083.10 1098843.13 +SET 193013.70 123261.60 +SET 1930186.44 1555981.44 +SET 193026.60 129321.72 +SET 1930288.80 1098960.24 +SET 1930427.36 1205534.04 +SET 193046.26 133854.54 +SET 1930568.64 1668821.44 +SET 1930632.03 1451838.06 +SET 1930700.20 1099194.46 +SET 1930905.90 1099311.57 +SET 1930937.92 1205852.88 +SET 193097.76 63329.28 +SET 1931111.60 1099428.68 +SET 1931193.20 1206012.30 +SET 193127.99 133911.21 +SET 193130.03 145234.06 +SET 1931317.30 1099545.79 +SET 1931523.00 1099662.90 +SET 1931549.60 1163391.94 +SET 193166.28 123359.04 +SET 1931834.31 1669915.51 +SET 1931934.40 1099897.12 +SET 1931959.04 1206490.56 +SET 193207.04 63365.12 +SET 193209.72 133967.88 +SET 193216.40 129448.88 +SET 19322.43 14331.32 +SET 193242.40 116391.86 +SET 193246.96 120680.94 +SET 1932551.50 1100248.45 +SET 1932791.28 1558081.28 +SET 1932861.20 1164181.93 +SET 1932980.16 1207128.24 +SET 1933099.98 1671009.58 +SET 19331.76 14338.24 +SET 193311.30 129512.46 +SET 1933298.40 1164445.26 +SET 1933305.11 1453848.22 +SET 19335.80 11008.34 +SET 1933521.87 1671374.27 +SET 193358.75 129544.25 +SET 193373.18 134081.22 +SET 1933785.70 1100951.11 +SET 1933943.76 1671738.96 +SET 1933973.38 1454350.76 +SET 1934001.28 1207765.92 +SET 193409.37 155913.12 +SET 19342.56 6343.68 +SET 1934256.56 1207925.34 +SET 1934365.65 1672103.65 +SET 1934402.80 1101302.44 +SET 193453.65 129607.83 +SET 1934608.50 1101419.55 +SET 1934610.00 1165235.25 +SET 1934641.65 1454853.30 +SET 1934744.91 1559656.16 +SET 193499.36 114208.08 +SET 193501.10 129639.62 +SET 193502.24 120840.36 +SET 1935225.60 1101770.88 +SET 1935396.12 1560181.12 +SET 193563.70 110200.51 +SET 1935631.32 1673197.72 +SET 1935637.00 1102005.10 +SET 1935788.24 1208881.86 +SET 1935842.70 1102122.21 +SET 19359.75 14359.00 +SET 193596.00 129703.20 +SET 1935978.19 1455858.38 +SET 1936053.21 1673562.41 +SET 193624.02 123651.36 +SET 193643.45 129734.99 +SET 193653.42 114299.01 +SET 1936646.46 1456360.92 +SET 193679.60 116655.19 +SET 1936896.99 1674291.79 +SET 19370.01 13430.79 +SET 1937076.90 1102824.87 +SET 1937233.20 1166815.23 +SET 1937314.73 1456863.46 +SET 1937318.88 1674656.48 +SET 193738.35 129798.57 +SET 1937670.40 1167078.56 +SET 19377.66 12374.88 +SET 1937740.77 1675021.17 +SET 193781.83 134364.57 +SET 1937830.48 1210157.22 +SET 1937899.70 1103293.31 +SET 19379.83 14573.66 +SET 1937983.00 1457366.00 +SET 1938000.96 1562280.96 +SET 1938085.76 1210316.64 +SET 1938105.40 1103410.42 +SET 1938341.04 1210476.06 +SET 1938516.80 1103644.64 +SET 1938544.80 1167605.22 +SET 1938596.32 1210635.48 +SET 1938722.50 1103761.75 +SET 1939006.44 1676115.24 +SET 1939106.88 1210954.32 +SET 1939319.54 1458371.08 +SET 1939362.16 1211113.74 +SET 1939419.20 1168131.88 +SET 1939428.33 1676479.93 +SET 1939545.30 1104230.19 +SET 1939617.44 1211273.16 +SET 1939954.59 1563855.84 +SET 1939987.81 1458873.62 +SET 19401.28 12115.92 +SET 1940162.40 1104581.52 +SET 194027.02 134534.58 +SET 1940293.60 1168658.54 +SET 1940368.10 1104698.63 +SET 1940383.28 1211751.42 +SET 194060.58 156438.08 +SET 1940638.56 1211910.84 +SET 194069.40 167757.40 +SET 194070.50 130021.10 +SET 1940779.50 1104932.85 +SET 194081.28 63651.84 +SET 19411.56 11457.18 +SET 194117.95 130052.89 +SET 1941190.90 1105167.07 +SET 1941257.01 1564905.76 +SET 1941396.60 1105284.18 +SET 19415.73 14400.52 +SET 1941537.78 1678303.38 +SET 1941602.30 1105401.29 +SET 1941605.20 1169448.53 +SET 1942042.40 1169711.86 +SET 194212.85 130116.47 +SET 1942219.40 1105752.62 +SET 1942381.56 1679032.76 +SET 1942425.52 1213026.78 +SET 1942559.43 1565955.68 +SET 194272.21 134704.59 +SET 1942916.80 1170238.52 +SET 1943042.20 1106221.06 +SET 194307.75 130180.05 +SET 1943247.90 1106338.17 +SET 1943329.16 1461386.32 +SET 1943354.00 1170501.85 +SET 1943453.60 1106455.28 +SET 1943659.30 1106572.39 +SET 1943791.20 1170765.18 +SET 194386.92 124138.56 +SET 1943957.20 1213983.30 +SET 194402.65 130243.63 +SET 1944069.12 1680491.52 +SET 1944070.70 1106806.61 +SET 1944212.48 1214142.72 +SET 1944467.76 1214302.14 +SET 1944665.70 1462391.40 +SET 1944723.04 1214461.56 +SET 1944912.90 1681220.90 +SET 194517.40 134874.60 +SET 194518.40 63795.20 +SET 194523.36 121478.04 +SET 19453.05 14428.20 +SET 1945334.79 1681585.59 +SET 1945488.88 1214939.82 +SET 1945540.00 1171818.50 +SET 194592.45 130370.79 +SET 1945922.00 1107860.60 +SET 1945977.20 1172081.83 +SET 194627.68 63831.04 +SET 194639.90 130402.58 +SET 1946670.51 1463899.02 +SET 1946744.80 1108329.04 +SET 1946851.60 1172608.49 +SET 194687.35 130434.37 +SET 194692.08 124333.44 +SET 19471.71 14442.04 +SET 194711.79 156963.04 +SET 1947156.20 1108563.26 +SET 1947288.80 1172871.82 +SET 1947444.24 1683409.04 +SET 1947567.60 1108797.48 +SET 194762.59 135044.61 +SET 1947726.00 1173135.15 +SET 1947773.30 1108914.59 +SET 1947786.40 1216374.60 +SET 194797.90 110903.17 +SET 1947979.00 1109031.70 +SET 1948007.05 1464904.10 +SET 1948163.20 1173398.48 +SET 1948288.02 1684138.42 +SET 1948390.40 1109265.92 +SET 1948420.32 1570680.32 +SET 1948552.24 1216852.86 +SET 194877.15 130561.53 +SET 194885.90 115026.45 +SET 1949037.60 1173925.14 +SET 1949071.53 1571205.28 +SET 1949131.80 1684867.80 +SET 1949213.20 1109734.36 +SET 194924.60 130593.32 +SET 194926.05 135157.95 +SET 1949418.90 1109851.47 +SET 1949474.80 1174188.47 +SET 1949573.36 1217490.54 +SET 1949624.60 1109968.58 +SET 1949722.74 1571730.24 +SET 1949830.30 1110085.69 +SET 1949912.00 1174451.80 +SET 1950011.86 1466411.72 +SET 195003.60 111020.28 +SET 1950036.00 1110202.80 +SET 19501.95 13065.69 +SET 195019.50 130656.90 +SET 195033.92 121796.88 +SET 1950349.20 1174715.13 +SET 1950373.95 1572255.20 +SET 1950447.40 1110437.02 +SET 195064.80 63974.40 +SET 1950819.36 1686326.56 +SET 1950849.76 1218287.64 +SET 1950858.80 1110671.24 +SET 19509.03 14469.72 +SET 1951064.50 1110788.35 +SET 1951105.04 1218447.06 +SET 195114.40 130720.48 +SET 1951223.60 1175241.79 +SET 1951241.25 1686691.25 +SET 1951475.90 1111022.57 +SET 195174.08 64010.24 +SET 19518.36 14476.64 +SET 1951887.30 1111256.79 +SET 195194.02 115208.31 +SET 1952016.67 1467919.34 +SET 1952298.70 1111491.01 +SET 1952535.20 1176031.78 +SET 1952636.72 1219403.58 +SET 1952684.94 1468421.88 +SET 1952710.10 1111725.23 +SET 1952892.00 1219563.00 +SET 1952978.79 1574355.04 +SET 195304.20 130847.64 +SET 1953327.20 1112076.56 +SET 1953350.70 1688514.70 +SET 1953353.21 1468924.42 +SET 195351.65 130879.43 +SET 1953532.90 1112193.67 +SET 19536.30 15748.80 +SET 195363.00 157488.00 +SET 1953630.00 1574880.00 +SET 1953772.59 1688879.39 +SET 1953913.12 1220200.68 +SET 19541.50 11125.45 +SET 195428.40 117708.51 +SET 1954284.00 1177085.10 +SET 1954423.68 1220519.52 +SET 195446.55 130943.01 +SET 1954561.40 1112779.22 +SET 19546.35 14497.40 +SET 1954689.75 1469929.50 +SET 1954767.10 1112896.33 +SET 195494.00 130974.80 +SET 1955038.26 1689973.46 +SET 1955189.52 1220997.78 +SET 1955384.20 1113247.66 +SET 195541.45 131006.59 +SET 1955460.15 1690338.15 +SET 19555.68 14504.32 +SET 1955589.90 1113364.77 +SET 195579.89 135611.31 +SET 1955882.04 1690702.84 +SET 1955955.36 1221476.04 +SET 1956001.30 1113598.99 +SET 195611.20 64153.60 +SET 19565.62 11548.11 +SET 195656.20 115481.10 +SET 1956694.56 1471437.12 +SET 195683.80 131101.96 +SET 1957029.80 1114184.54 +SET 1957235.50 1114301.65 +SET 1957344.40 1178928.41 +SET 1957362.83 1471939.66 +SET 1957441.20 1114418.76 +SET 1957537.26 1578029.76 +SET 1957569.60 1692161.60 +SET 195778.70 131165.54 +SET 1957781.60 1179191.74 +SET 1957991.49 1692526.29 +SET 1957997.60 1222751.40 +SET 195803.11 147244.22 +SET 1958058.30 1114770.09 +SET 1958252.88 1222910.82 +SET 1958264.00 1114887.20 +SET 195829.76 64225.28 +SET 19583.67 14525.08 +SET 1958656.00 1179718.40 +SET 1958699.37 1472944.74 +SET 195873.60 131229.12 +SET 1958763.44 1223229.66 +SET 1958839.68 1579079.68 +SET 1959093.20 1179981.73 +SET 195912.72 125112.96 +SET 19593.00 14532.00 +SET 195939.04 64261.12 +SET 1959490.89 1579604.64 +SET 195964.32 115662.96 +SET 1959679.05 1693985.05 +SET 195988.54 135894.66 +SET 1959967.60 1180508.39 +SET 1960039.84 1224026.76 +SET 196014.21 158012.96 +SET 1960321.00 1116058.30 +SET 196048.32 64296.96 +SET 1960526.70 1116175.41 +SET 196063.40 131356.28 +SET 196065.30 125210.40 +SET 1960704.18 1474452.36 +SET 1960732.40 1116292.52 +SET 1960793.31 1580654.56 +SET 1960842.00 1181035.05 +SET 1960944.72 1695079.12 +SET 1961060.96 1224664.44 +SET 196110.85 131388.07 +SET 1961372.45 1474954.90 +SET 1961444.52 1581179.52 +SET 19615.20 13600.80 +SET 1961555.20 1116760.96 +SET 196158.30 131419.86 +SET 1961966.60 1116995.18 +SET 19620.99 14552.76 +SET 1962040.72 1475457.44 +SET 1962095.73 1581704.48 +SET 196253.20 131483.44 +SET 1962583.70 1117346.51 +SET 1962592.64 1225620.96 +SET 1962632.28 1696537.88 +SET 1962746.94 1582229.44 +SET 1962847.92 1225780.38 +SET 1962995.10 1117580.73 +SET 19630.32 14559.68 +SET 196302.80 118235.17 +SET 1963028.00 1182351.70 +SET 196315.46 136121.34 +SET 1963358.48 1226099.22 +SET 1963398.15 1582754.40 +SET 1963465.20 1182615.03 +SET 1963613.76 1226258.64 +SET 196370.46 125405.28 +SET 1963817.90 1118049.17 +SET 1963869.04 1226418.06 +SET 1963897.95 1697631.95 +SET 19639.65 14566.60 +SET 196395.55 131578.81 +SET 196397.19 136178.01 +SET 1964124.32 1226577.48 +SET 196426.50 115935.75 +SET 1964339.60 1183141.69 +SET 1964379.60 1226736.90 +SET 1964435.00 1118400.50 +SET 1964846.40 1118634.72 +SET 1964890.16 1227055.74 +SET 1965052.10 1118751.83 +SET 1965163.62 1698726.02 +SET 1965382.07 1477970.14 +SET 1965400.72 1227374.58 +SET 1965463.50 1118986.05 +SET 1965669.20 1119103.16 +SET 196585.35 131705.97 +SET 196594.72 64476.16 +SET 1966007.40 1699455.40 +SET 1966080.60 1119337.38 +SET 1966166.56 1227852.84 +SET 196632.80 131737.76 +SET 1966421.84 1228012.26 +SET 1966429.29 1699820.09 +SET 1966525.60 1184458.34 +SET 1966654.20 1585379.20 +SET 1966697.70 1119688.71 +SET 1966718.61 1478975.22 +SET 196680.25 131769.55 +SET 1966903.40 1119805.82 +SET 1966932.40 1228331.10 +SET 1967.04 645.12 +SET 196704.00 64512.00 +SET 1967187.68 1228490.52 +SET 196727.70 131801.34 +SET 1967386.88 1479477.76 +SET 19674.00 11849.85 +SET 196740.00 118498.50 +SET 1967698.24 1228809.36 +SET 196775.15 131833.13 +SET 1967931.90 1120391.37 +SET 1968.63 1460.12 +SET 196805.84 136461.36 +SET 1968055.15 1479980.30 +SET 1968208.80 1229128.20 +SET 196822.60 131864.92 +SET 196854.90 112074.27 +SET 1968549.00 1120742.70 +SET 196888.68 116208.54 +SET 1968960.40 1120976.92 +SET 1968974.64 1229606.46 +SET 1969166.10 1121094.03 +SET 1969229.92 1229765.88 +SET 1969485.20 1229925.30 +SET 1969586.00 1186301.65 +SET 1969740.48 1230084.72 +SET 196980.78 125795.04 +SET 197012.40 131992.08 +SET 197022.63 170310.23 +SET 1970226.30 1703102.30 +SET 19704.96 14615.04 +SET 1970400.30 1121796.69 +SET 1970460.40 1186828.31 +SET 197059.85 132023.87 +SET 1970606.00 1121913.80 +SET 1970728.23 1481990.46 +SET 197076.16 123072.24 +SET 1970811.70 1122030.91 +SET 1970897.60 1187091.64 +SET 1971016.88 1230881.82 +SET 1971017.40 1122148.02 +SET 1971070.08 1703831.68 +SET 1971272.16 1231041.24 +SET 197133.36 125892.48 +SET 197141.12 64655.36 +SET 1971491.97 1704196.37 +SET 1971527.44 1231200.66 +SET 197177.20 118761.83 +SET 19719.68 11639.04 +SET 1971913.86 1704561.06 +SET 197196.80 116390.40 +SET 1972064.77 1482995.54 +SET 1972251.60 1122850.68 +SET 197250.40 64691.20 +SET 1972757.64 1705290.44 +SET 1972803.84 1231997.76 +SET 1972868.70 1123202.01 +SET 197296.22 136801.38 +SET 197297.10 132182.82 +SET 1973074.40 1123319.12 +SET 1973083.60 1188408.29 +SET 197316.63 159062.88 +SET 1973179.53 1705655.13 +SET 1973314.40 1232316.60 +SET 197344.55 132214.61 +SET 1973485.80 1123553.34 +SET 1973520.80 1188671.62 +SET 1973601.42 1706019.82 +SET 1973958.00 1188934.95 +SET 19742.28 14642.72 +SET 197438.52 126087.36 +SET 197439.45 132278.19 +SET 197444.52 170674.92 +SET 1974468.72 1591678.72 +SET 197468.96 64762.88 +SET 19747.20 11242.56 +SET 197472.00 112425.60 +SET 1974737.85 1485005.70 +SET 1974867.09 1707113.89 +SET 197504.92 116572.26 +SET 19751.61 14649.64 +SET 1975269.60 1189724.94 +SET 1975288.98 1707478.58 +SET 197541.41 136971.39 +SET 1975542.80 1124724.44 +SET 1975748.50 1124841.55 +SET 197578.24 64798.72 +SET 197581.80 132373.56 +SET 197591.10 126184.80 +SET 197614.40 119025.16 +SET 1976144.00 1190251.60 +SET 1976377.76 1234229.64 +SET 1976571.30 1125309.99 +SET 197658.98 116663.19 +SET 1976581.20 1190514.93 +SET 1976777.00 1125427.10 +SET 1976976.54 1708937.34 +SET 1976982.70 1125544.21 +SET 197724.15 132468.93 +SET 1977398.43 1709302.03 +SET 1977398.88 1234867.32 +SET 1977599.80 1125895.54 +SET 1977654.16 1235026.74 +SET 197771.60 132500.72 +SET 197786.60 137141.40 +SET 1977892.80 1191304.92 +SET 19779.60 14670.40 +SET 1977909.44 1235186.16 +SET 197796.80 64870.40 +SET 197807.92 148751.84 +SET 1978079.20 1487518.40 +SET 197819.05 132532.51 +SET 1978330.00 1191568.25 +SET 1978375.98 1594828.48 +SET 19786.65 13256.43 +SET 197866.50 132564.30 +SET 1978664.10 1710396.10 +SET 197868.33 137198.07 +SET 1978930.56 1235823.84 +SET 1979027.19 1595353.44 +SET 1979204.40 1192094.91 +SET 1979415.74 1488523.48 +SET 197950.06 137254.74 +SET 1979507.88 1711125.48 +SET 197961.40 132627.88 +SET 1979656.80 1127066.64 +SET 197967.84 159587.84 +SET 1979696.40 1236302.10 +SET 19798.26 14684.24 +SET 1979862.50 1127183.75 +SET 1980068.20 1127300.86 +SET 1980078.80 1192621.57 +SET 1980273.90 1127417.97 +SET 198031.79 137311.41 +SET 1980351.66 1711854.86 +SET 1980462.24 1236780.36 +SET 1980773.55 1712219.55 +SET 1980953.20 1193148.23 +SET 1980980.82 1596928.32 +SET 198113.52 137368.08 +SET 1981302.40 1128003.52 +SET 1981390.40 1193411.56 +SET 1981617.33 1712948.93 +SET 1981713.80 1128237.74 +SET 1981827.60 1193674.89 +SET 1981919.50 1128354.85 +SET 198198.65 132786.83 +SET 198201.42 126574.56 +SET 1982039.22 1713313.62 +SET 1982283.24 1597978.24 +SET 198233.92 65013.76 +SET 1982461.11 1713678.31 +SET 1982536.60 1128706.18 +SET 1982702.00 1194201.55 +SET 1982742.30 1128823.29 +SET 1982757.09 1491036.18 +SET 198293.55 132850.41 +SET 1982948.00 1128940.40 +SET 1983139.20 1194464.88 +SET 1983153.70 1129057.51 +SET 1983270.32 1238533.98 +SET 1983304.89 1714407.69 +SET 19834.10 13288.22 +SET 19835.58 14711.92 +SET 198352.56 123869.34 +SET 198354.00 126672.00 +SET 198358.71 137538.09 +SET 1983585.66 1599028.16 +SET 1983726.78 1714772.38 +SET 1983780.88 1238852.82 +SET 1984148.67 1715137.07 +SET 1984182.20 1129643.06 +SET 1984236.87 1599553.12 +SET 198429.28 117117.84 +SET 1984291.44 1239171.66 +SET 198435.90 132945.78 +SET 1984387.90 1129760.17 +SET 19844.91 14718.84 +SET 198440.44 137594.76 +SET 198452.48 65085.44 +SET 1984570.56 1715501.76 +SET 1984593.60 1129877.28 +SET 1984802.00 1239490.50 +SET 198506.58 126769.44 +SET 1985210.70 1130228.61 +SET 198522.17 137651.43 +SET 1985312.56 1239809.34 +SET 1985539.29 1600603.04 +SET 1985567.84 1239968.76 +SET 198561.76 65121.28 +SET 198583.34 117208.77 +SET 198607.84 124028.76 +SET 1986078.40 1240287.60 +SET 1986098.44 1493548.88 +SET 1986190.50 1601128.00 +SET 1986239.20 1130814.16 +SET 1986444.90 1130931.27 +SET 1986588.96 1240606.44 +SET 198671.04 65157.12 +SET 198673.15 133104.73 +SET 1986841.71 1601652.96 +SET 1986844.24 1240765.86 +SET 1987.29 1473.96 +SET 198706.20 113128.26 +SET 1987074.00 1196834.85 +SET 1987267.70 1131399.71 +SET 198737.40 117299.70 +SET 1987473.40 1131516.82 +SET 198768.05 133168.31 +SET 1987865.36 1241403.54 +SET 1987945.68 1718419.28 +SET 198811.74 126964.32 +SET 19882.23 14746.52 +SET 198849.09 137878.11 +SET 198863.12 124188.18 +SET 1988631.20 1241881.80 +SET 1988789.46 1719148.66 +SET 1988795.34 1603227.84 +SET 19888.96 6522.88 +SET 1988886.48 1242041.22 +SET 1988913.30 1132336.59 +SET 198910.40 133263.68 +SET 198911.90 113245.37 +SET 1989141.76 1242200.64 +SET 1989211.35 1719513.35 +SET 198926.00 119815.15 +SET 1989260.00 1198151.50 +SET 1989446.55 1603752.80 +SET 1989530.40 1132687.92 +SET 198957.85 133295.47 +SET 1989633.24 1719878.04 +SET 1989652.32 1242519.48 +SET 1989697.20 1198414.83 +SET 19900.89 14760.36 +SET 199012.55 137991.45 +SET 1990147.50 1133039.25 +SET 1990353.20 1133156.36 +SET 1990418.16 1242997.74 +SET 1990748.97 1604802.72 +SET 1990898.91 1720972.11 +SET 1990970.30 1133507.69 +SET 199117.60 113362.48 +SET 1991176.00 1133624.80 +SET 199118.40 124347.60 +SET 1991184.00 1243476.00 +SET 1991320.80 1721336.80 +SET 1991439.28 1243635.42 +SET 199144.46 149756.92 +SET 1991444.60 1497569.20 +SET 1991446.00 1199468.15 +SET 1991694.56 1243794.84 +SET 1991742.69 1721701.49 +SET 1991883.20 1199731.48 +SET 19919.55 14774.20 +SET 1991949.84 1243954.26 +SET 1992164.58 1722066.18 +SET 1992204.50 1134210.35 +SET 1992205.12 1244113.68 +SET 1992586.47 1722430.87 +SET 199270.26 160637.76 +SET 19928.88 14781.12 +SET 1992970.96 1244591.94 +SET 1993226.24 1244751.36 +SET 1993353.81 1606902.56 +SET 1993430.25 1723160.25 +SET 1993438.70 1134913.01 +SET 1993449.41 1499076.82 +SET 199373.68 124507.02 +SET 1993736.80 1245070.20 +SET 1993850.10 1135147.23 +SET 199421.20 138274.80 +SET 1994656.23 1607952.48 +SET 1994672.90 1135615.67 +SET 1995013.20 1245867.30 +SET 199507.70 117754.35 +SET 1995307.44 1608477.44 +SET 1995380.80 1201838.12 +SET 1995454.22 1500584.44 +SET 1995495.70 1136084.11 +SET 1995523.76 1246186.14 +SET 19956.87 14801.88 +SET 1995701.40 1136201.22 +SET 1995779.04 1246345.56 +SET 1995958.65 1609002.40 +SET 1995961.59 1725348.39 +SET 1996.62 1480.88 +SET 1996034.32 1246504.98 +SET 1996318.50 1136552.55 +SET 1996383.48 1725713.08 +SET 199654.56 65479.68 +SET 1996692.40 1202628.11 +SET 1996800.16 1246983.24 +SET 1996805.37 1726077.77 +SET 1996935.60 1136903.88 +SET 1997055.44 1247142.66 +SET 1997129.60 1202891.44 +SET 1997141.30 1137020.99 +SET 19975.53 14815.72 +SET 1997552.70 1137255.21 +SET 1997566.00 1247461.50 +SET 1997566.80 1203154.77 +SET 1997649.15 1726807.15 +SET 1997821.28 1247620.92 +SET 199800.40 120341.81 +SET 199811.95 133867.69 +SET 19984.86 14822.64 +SET 1998492.93 1727536.53 +SET 1998786.90 1137957.87 +SET 199884.24 124825.86 +SET 1998914.82 1727901.22 +SET 1998992.60 1138074.98 +SET 199911.58 138614.82 +SET 1999315.60 1204208.09 +SET 1999336.71 1728265.91 +SET 1999352.96 1248577.44 +SET 199940.40 113830.92 +SET 1999404.00 1138309.20 +SET 1999463.84 1503599.68 +SET 199954.30 133963.06 +SET 1999609.70 1138426.31 +SET 199969.88 118027.14 +SET 1999758.60 1728630.60 +SET 19998.24 6558.72 +SET 200001.75 133994.85 +SET 2000132.11 1504102.22 +SET 2000226.80 1138777.64 +SET 20003.52 14836.48 +SET 2000638.20 1139011.86 +SET 200075.04 138728.16 +SET 2000800.38 1504604.76 +SET 2000843.90 1139128.97 +SET 2001049.60 1139246.08 +SET 2001064.40 1205261.41 +SET 20012.85 14843.40 +SET 200144.10 134090.22 +SET 2001446.16 1730089.36 +SET 200146.10 113948.03 +SET 2001650.48 1250012.22 +SET 2001666.70 1139597.41 +SET 2001819.54 1613727.04 +SET 200184.96 127841.28 +SET 200191.55 134122.01 +SET 2002161.04 1250331.06 +SET 20022.18 14850.32 +SET 2002289.94 1730818.74 +SET 2002470.75 1614252.00 +SET 2002489.50 1140065.85 +SET 20027.80 11820.90 +SET 200278.00 118209.00 +SET 2002805.19 1506112.38 +SET 2002813.20 1206314.73 +SET 200286.45 134185.59 +SET 20031.51 14857.24 +SET 200310.24 65694.72 +SET 200337.54 127938.72 +SET 2003437.44 1251128.16 +SET 2003518.00 1140651.40 +SET 2003948.00 1251447.00 +SET 200397.75 173227.75 +SET 2004124.80 1207104.72 +SET 200428.80 134280.96 +SET 2004424.38 1615826.88 +SET 2004458.56 1251765.84 +SET 2004562.00 1207368.05 +SET 200481.00 150762.00 +SET 200483.69 139011.51 +SET 200490.12 128036.16 +SET 2004999.20 1207631.38 +SET 2005243.17 1733371.57 +SET 2005369.30 1141705.39 +SET 2005436.40 1207894.71 +SET 2005478.27 1508122.54 +SET 2005479.68 1252403.52 +SET 200565.42 139068.18 +SET 2005665.06 1733736.26 +SET 2005780.70 1141939.61 +SET 2005873.60 1208158.04 +SET 2005986.40 1142056.72 +SET 2006146.54 1508625.08 +SET 2006378.01 1617401.76 +SET 200638.08 65802.24 +SET 2006756.08 1253200.62 +SET 2006809.20 1142525.16 +SET 2007352.62 1735195.02 +SET 200747.36 65838.08 +SET 2007521.92 1253678.88 +SET 200763.20 114299.36 +SET 2007680.43 1618451.68 +SET 20078.16 14891.84 +SET 200795.28 128231.04 +SET 2008043.40 1143227.82 +SET 2008059.60 1209474.69 +SET 200810.61 139238.19 +SET 2008151.35 1510132.70 +SET 2008196.40 1735924.40 +SET 2008287.76 1254157.14 +SET 2008798.32 1254475.98 +SET 2008866.20 1143696.26 +SET 200892.34 139294.86 +SET 200894.24 118572.72 +SET 200905.36 125463.54 +SET 2009277.60 1143930.48 +SET 2009483.30 1144047.59 +SET 200950.75 134630.65 +SET 2009689.00 1144164.70 +SET 200974.07 139351.53 +SET 2009819.44 1255113.66 +SET 2010074.72 1255273.08 +SET 2010245.60 1210791.34 +SET 2010305.85 1737747.85 +SET 20105.58 13940.82 +SET 2010511.80 1144633.14 +SET 201055.80 139408.20 +SET 2010682.80 1211054.67 +SET 20107.52 6594.56 +SET 2010727.74 1738112.54 +SET 201075.20 65945.60 +SET 2010923.20 1144867.36 +SET 2010936.48 1621076.48 +SET 201100.44 128425.92 +SET 20111.20 12113.18 +SET 201140.55 134757.81 +SET 2011492.70 1512645.40 +SET 20115.48 14919.52 +SET 2011571.52 1738841.92 +SET 2011746.00 1145335.80 +SET 2012116.96 1256548.44 +SET 2012157.40 1145570.02 +SET 201223.89 162212.64 +SET 2012372.24 1256707.86 +SET 201253.02 128523.36 +SET 2012568.80 1145804.24 +SET 2012868.80 1212371.32 +SET 2012980.20 1146038.46 +SET 201300.99 139578.21 +SET 2013306.00 1212634.65 +SET 20134.14 14933.36 +SET 2013597.30 1146389.79 +SET 2013803.00 1146506.90 +SET 201403.04 66053.12 +SET 201405.60 128620.80 +SET 201415.92 125782.38 +SET 2014159.20 1257823.80 +SET 2014165.78 1514655.56 +SET 2014214.40 1146741.12 +SET 20143.47 14940.28 +SET 2014420.10 1146858.23 +SET 2014617.60 1213424.64 +SET 2014625.80 1146975.34 +SET 201464.45 139691.55 +SET 2014669.76 1258142.64 +SET 2014843.74 1624226.24 +SET 201510.48 118936.44 +SET 2015448.60 1147443.78 +SET 2015492.00 1213951.30 +SET 2015502.32 1515660.64 +SET 2015654.30 1147560.89 +SET 2015690.88 1258780.32 +SET 201615.05 135075.71 +SET 20162.13 14954.12 +SET 2016201.44 1259099.16 +SET 201627.91 139804.89 +SET 2016366.40 1214477.96 +SET 2016456.72 1259258.58 +SET 2016477.10 1148029.33 +SET 2016634.20 1743218.20 +SET 20167.12 12594.18 +SET 2016967.28 1259577.42 +SET 2017094.20 1148380.66 +SET 201710.76 128815.68 +SET 2017222.56 1259736.84 +SET 2017448.58 1626326.08 +SET 2017505.60 1148614.88 +SET 2017711.30 1148731.99 +SET 201804.85 135202.87 +SET 20181.86 11911.83 +SET 2018115.20 1215531.28 +SET 2018328.40 1149083.32 +SET 201852.30 135234.66 +SET 2018552.40 1215794.61 +SET 201873.10 139974.90 +SET 2018743.65 1745041.65 +SET 201875.10 162737.60 +SET 2018751.00 1627376.00 +SET 2018843.67 1518173.34 +SET 2019151.20 1149551.76 +SET 201926.48 126101.22 +SET 201949.44 66232.32 +SET 2019511.94 1518675.88 +SET 20199.45 14981.80 +SET 2020053.42 1628425.92 +SET 202015.92 129010.56 +SET 202042.10 135361.82 +SET 2020431.21 1746500.41 +SET 2020591.10 1150371.53 +SET 2020704.63 1628950.88 +SET 20208.78 14988.72 +SET 2020853.10 1746865.10 +SET 202089.55 135393.61 +SET 2021208.20 1150722.86 +SET 202126.72 119300.16 +SET 2021274.99 1747229.79 +SET 20213.70 13542.54 +SET 2021307.04 1262287.56 +SET 2021355.84 1629475.84 +SET 202137.00 135425.40 +SET 2021413.90 1150839.97 +SET 2021516.75 1520183.50 +SET 2021562.32 1262446.98 +SET 202168.50 129108.00 +SET 202181.76 126260.64 +SET 2022007.05 1630000.80 +SET 2022185.02 1520686.04 +SET 202231.90 135488.98 +SET 2022328.16 1262925.24 +SET 2022658.26 1630525.76 +SET 20227.44 15002.56 +SET 202279.35 135520.77 +SET 202280.78 119391.09 +SET 2022838.72 1263244.08 +SET 2022853.29 1521188.58 +SET 2022924.40 1218427.91 +SET 2023059.50 1151776.85 +SET 202321.08 129205.44 +SET 2023384.44 1749053.24 +SET 2023470.90 1152011.07 +SET 202363.48 140314.92 +SET 2023676.60 1152128.18 +SET 2023798.80 1218954.57 +SET 2023960.68 1631575.68 +SET 2024.61 1501.64 +SET 202421.70 135616.14 +SET 2024228.22 1749782.62 +SET 202434.84 119482.02 +SET 2024611.89 1632100.64 +SET 2024650.11 1750147.31 +SET 2024705.10 1152713.73 +SET 2024858.10 1522696.20 +SET 2024910.80 1152830.84 +SET 202495.84 66411.52 +SET 2025263.10 1632625.60 +SET 2025391.52 1264838.28 +SET 2025493.89 1750876.69 +SET 2025527.90 1153182.17 +SET 202564.05 135711.51 +SET 2025646.80 1264997.70 +SET 202588.90 119572.95 +SET 2025902.08 1265157.12 +SET 2025939.30 1153416.39 +SET 20261.15 13574.33 +SET 202614.50 115353.35 +SET 2026145.00 1153533.50 +SET 20264.76 15030.24 +SET 2026422.00 1220534.55 +SET 202692.32 126579.48 +SET 2026967.80 1154001.94 +SET 202706.40 135806.88 +SET 2027178.48 1265954.22 +SET 2027181.45 1752335.45 +SET 2027216.73 1634200.48 +SET 2027296.40 1221061.21 +SET 2027584.90 1154353.27 +SET 202778.82 129497.76 +SET 2027944.32 1266432.48 +SET 2027996.30 1154587.49 +SET 202801.30 135870.46 +SET 202820.20 115470.46 +SET 202823.68 66519.04 +SET 2028407.70 1154821.71 +SET 2028447.12 1753429.52 +SET 2028454.88 1266751.32 +SET 202848.75 135902.25 +SET 202853.86 140654.94 +SET 202860.80 122185.12 +SET 2028613.40 1154938.82 +SET 2028869.01 1753794.21 +SET 2028965.44 1267070.16 +SET 2029024.80 1155173.04 +SET 2029045.20 1222114.53 +SET 2029220.72 1267229.58 +SET 202931.40 129595.20 +SET 202943.65 135965.83 +SET 202947.60 126738.90 +SET 2029476.00 1267389.00 +SET 2029535.99 1526213.98 +SET 2029847.60 1155641.48 +SET 202991.10 135997.62 +SET 2029919.60 1222641.19 +SET 20302.08 15057.92 +SET 2030204.26 1526716.52 +SET 2030241.84 1267867.26 +SET 203051.08 119845.74 +SET 2030670.40 1156109.92 +SET 2030794.00 1223167.85 +SET 20308.60 13606.12 +SET 203083.98 129692.64 +SET 2030876.10 1156227.03 +SET 20311.41 15064.84 +SET 2031493.20 1156578.36 +SET 2031518.24 1268664.36 +SET 203154.08 152772.16 +SET 2031775.20 1637875.20 +SET 203180.90 136124.78 +SET 2031904.60 1156812.58 +SET 2032028.80 1268983.20 +SET 203205.14 119936.67 +SET 2032244.13 1756711.73 +SET 203228.35 136156.57 +SET 203236.56 129790.08 +SET 203260.80 66662.40 +SET 203275.80 136188.36 +SET 2032980.00 1224484.50 +SET 2033.94 1508.56 +SET 20330.07 15078.68 +SET 2033087.91 1757441.11 +SET 2033138.80 1157515.24 +SET 2033305.20 1269780.30 +SET 2033417.20 1224747.83 +SET 2033545.61 1529229.22 +SET 203370.08 66698.24 +SET 203370.70 136251.94 +SET 2033854.40 1225011.16 +SET 2034167.30 1158100.79 +SET 2034353.58 1758535.18 +SET 2034373.00 1158217.90 +SET 2034380.04 1639975.04 +SET 203458.16 127057.74 +SET 2034775.47 1758899.87 +SET 2034784.40 1158452.12 +SET 2034882.15 1530234.30 +SET 2034990.10 1158569.23 +SET 20350.77 14110.83 +SET 203507.70 141108.30 +SET 203513.05 136347.31 +SET 203513.26 120118.53 +SET 2035166.00 1225801.15 +SET 2035195.80 1158686.34 +SET 2035197.36 1759264.56 +SET 2035347.44 1271055.66 +SET 2035401.50 1158803.45 +SET 203541.72 129984.96 +SET 2035602.72 1271215.08 +SET 2035603.20 1226064.48 +SET 2035682.46 1641024.96 +SET 2035812.90 1159037.67 +SET 2036018.60 1159154.78 +SET 2036040.40 1226327.81 +SET 2036041.14 1759993.94 +SET 20364.30 11593.89 +SET 2036477.60 1226591.14 +SET 203671.16 141221.64 +SET 2036884.92 1760723.32 +SET 2037047.10 1159740.33 +SET 2037252.80 1159857.44 +SET 2037306.81 1761088.01 +SET 2037389.68 1272331.02 +SET 203750.30 136506.26 +SET 2037664.20 1160091.66 +SET 2037869.90 1160208.77 +SET 2037900.24 1272649.86 +SET 203797.75 136538.05 +SET 2038075.60 1160325.88 +SET 2038150.59 1761817.39 +SET 2038155.52 1272809.28 +SET 2038223.50 1532747.00 +SET 203828.73 164312.48 +SET 203834.62 141334.98 +SET 2038410.80 1272968.70 +SET 203846.88 130179.84 +SET 203848.70 116056.01 +SET 2038572.48 1762182.08 +SET 2038666.08 1273128.12 +SET 2038692.70 1160677.21 +SET 203892.65 136601.63 +SET 2038921.36 1273287.54 +SET 2038938.51 1643649.76 +SET 2038994.37 1762546.77 +SET 2039104.10 1160911.43 +SET 2039309.80 1161028.54 +SET 203940.10 136633.42 +SET 2039416.26 1762911.46 +SET 2039431.92 1273606.38 +SET 203975.44 120391.32 +SET 2039838.15 1763276.15 +SET 2039926.90 1161379.87 +SET 2040228.31 1534254.62 +SET 20404.71 15134.04 +SET 2040453.04 1274244.06 +SET 2040955.40 1161965.42 +SET 2041103.82 1764370.22 +SET 2041286.80 1229487.77 +SET 204129.50 120482.25 +SET 20414.04 15140.96 +SET 2041474.16 1274881.74 +SET 204152.04 130374.72 +SET 2041543.35 1645749.60 +SET 204161.54 141561.66 +SET 2041729.44 1275041.16 +SET 2041947.60 1765099.60 +SET 20422.40 12753.60 +SET 204224.00 127536.00 +SET 20423.37 15147.88 +SET 204243.27 141618.33 +SET 204244.32 66984.96 +SET 2042598.40 1230277.76 +SET 204260.10 116290.23 +SET 204283.56 120573.18 +SET 2042845.77 1646799.52 +SET 2043005.84 1275838.26 +SET 2043035.60 1230541.09 +SET 204304.62 130472.16 +SET 20432.50 14167.50 +SET 20432.70 15154.80 +SET 2043213.27 1766193.67 +SET 2043261.12 1275997.68 +SET 2043423.80 1163370.74 +SET 2043629.50 1163487.85 +SET 2043635.16 1766558.36 +SET 2043835.20 1163604.96 +SET 204406.73 141731.67 +SET 2044237.93 1537269.86 +SET 2044452.30 1163956.29 +SET 2044537.52 1276794.78 +SET 2044784.40 1231594.41 +SET 2044799.40 1648374.40 +SET 2044906.20 1537772.40 +SET 20450.95 13701.49 +SET 2045069.40 1164307.62 +SET 2045450.61 1648899.36 +SET 2045658.80 1232121.07 +SET 2045686.50 1164658.95 +SET 2045813.92 1277591.88 +SET 2045892.20 1164776.06 +SET 20460.69 15175.56 +SET 204609.78 130667.04 +SET 2046579.76 1278070.14 +SET 2046588.39 1769111.19 +SET 2046753.03 1649949.28 +SET 2046911.01 1539280.02 +SET 2047090.32 1278388.98 +SET 2047126.40 1165478.72 +SET 204734.56 127854.84 +SET 2047404.24 1650474.24 +SET 204745.74 120845.97 +SET 2047579.28 1539782.56 +SET 20479.35 15189.40 +SET 204790.72 67164.16 +SET 204794.20 137205.64 +SET 2048111.44 1279026.66 +SET 2048275.95 1770569.95 +SET 2048282.00 1233701.05 +SET 204841.65 137237.43 +SET 2048622.00 1279345.50 +SET 20489.98 12093.69 +SET 204897.11 142071.69 +SET 204899.80 120936.90 +SET 204900.00 67200.00 +SET 2049132.56 1279664.34 +SET 2049357.87 1652049.12 +SET 2049389.10 1166766.93 +SET 20498.01 15203.24 +SET 205.70 117.11 +SET 2050006.20 1167118.26 +SET 2050009.08 1652574.08 +SET 205009.28 67235.84 +SET 2050153.68 1280302.02 +SET 2050211.90 1167235.37 +SET 2050252.36 1541792.72 +SET 2050385.40 1772393.40 +SET 205046.80 123501.77 +SET 205060.57 142185.03 +SET 2050660.29 1653099.04 +SET 205067.52 130959.36 +SET 2050807.29 1772758.09 +SET 2050829.00 1167586.70 +SET 2050905.20 1235281.03 +SET 2051174.80 1280939.70 +SET 205118.56 67271.68 +SET 2051229.18 1773122.78 +SET 2051240.40 1167820.92 +SET 205131.15 165362.40 +SET 2051311.50 1653624.00 +SET 20514.23 14224.17 +SET 205142.30 142241.70 +SET 2051430.08 1281099.12 +SET 205173.80 137459.96 +SET 2051962.71 1654148.96 +SET 2052063.20 1168289.36 +SET 2052072.96 1773852.16 +SET 2052195.92 1281577.38 +SET 205221.25 137491.75 +SET 2052216.80 1236071.02 +SET 2052268.90 1168406.47 +SET 205245.12 128173.68 +SET 2052451.20 1281736.80 +SET 2052494.85 1774216.85 +SET 2052916.74 1774581.54 +SET 2052961.76 1282055.64 +SET 2053091.70 1168874.91 +SET 2053217.04 1282215.06 +SET 2053265.13 1655198.88 +SET 2053503.10 1169109.13 +SET 205361.98 121209.69 +SET 2053965.60 1237124.34 +SET 2053982.88 1282693.32 +SET 2054238.16 1282852.74 +SET 2054531.60 1169694.68 +SET 20548.40 12376.51 +SET 205484.00 123765.10 +SET 2054840.00 1237651.00 +SET 2054930.25 1545310.50 +SET 205494.30 116992.89 +SET 205500.40 128333.10 +SET 2055004.00 1283331.00 +SET 2055148.70 1170046.01 +SET 205525.26 131251.68 +SET 20553.99 15244.76 +SET 205555.68 67415.04 +SET 2055598.52 1545813.04 +SET 2055765.80 1170397.34 +SET 2055869.97 1777134.37 +SET 2056177.20 1170631.56 +SET 2056280.40 1284128.10 +SET 2056382.90 1170748.67 +SET 2056588.80 1238704.32 +SET 2056713.75 1777863.75 +SET 205677.84 131349.12 +SET 2056790.96 1284446.94 +SET 2056794.30 1170982.89 +SET 205695.75 137809.65 +SET 20570.00 11711.00 +SET 2057301.52 1284765.78 +SET 205755.68 128492.52 +SET 205782.36 165887.36 +SET 205790.65 137873.23 +SET 2057979.42 1778957.82 +SET 20581.98 15265.52 +SET 2058322.64 1285403.46 +SET 2058474.81 1659398.56 +SET 205877.87 142751.73 +SET 2058774.80 1240020.97 +SET 2058833.20 1285722.30 +SET 205885.55 137936.81 +SET 205905.70 117227.11 +SET 2059088.48 1285881.72 +SET 20591.31 15272.44 +SET 2059212.00 1240284.30 +SET 2059245.09 1780051.89 +SET 2059343.76 1286041.14 +SET 20595.96 14280.84 +SET 205959.60 142808.40 +SET 2059649.20 1240547.63 +SET 2059666.98 1780416.58 +SET 2059777.23 1660448.48 +SET 205978.22 121573.41 +SET 2059854.32 1286359.98 +SET 206010.96 128651.94 +SET 206027.90 138032.18 +SET 206041.33 142865.07 +SET 2060428.44 1660973.44 +SET 2060932.65 1781510.65 +SET 2060944.68 1549833.36 +SET 2061.93 1529.32 +SET 206102.08 67594.24 +SET 2061079.65 1661498.40 +SET 2061130.72 1287157.08 +SET 206122.80 138095.76 +SET 206123.06 142921.74 +SET 2061386.00 1287316.50 +SET 2061776.43 1782240.03 +SET 206204.79 142978.41 +SET 206211.36 67630.08 +SET 206217.70 138159.34 +SET 2062198.32 1782604.72 +SET 2062272.40 1242127.61 +SET 2062620.21 1782969.41 +SET 206266.24 128811.36 +SET 20628.63 15300.12 +SET 206286.52 143035.08 +SET 206288.16 131738.88 +SET 2063033.28 1663073.28 +SET 206312.60 138222.92 +SET 206317.10 117461.33 +SET 206320.64 67665.92 +SET 2063428.24 1288591.86 +SET 2063584.00 1242917.60 +SET 2063617.76 1551843.52 +SET 206368.25 143091.75 +SET 2063684.49 1663598.24 +SET 2063938.80 1288910.70 +SET 2064286.03 1552346.06 +SET 2064307.77 1784428.17 +SET 2064335.70 1664123.20 +SET 20644.04 12184.62 +SET 2064458.40 1243444.26 +SET 206454.95 138318.29 +SET 2064959.92 1289548.38 +SET 2065151.55 1785157.55 +SET 206521.52 128970.78 +SET 206522.80 117578.44 +SET 206531.71 143205.09 +SET 206539.20 67737.60 +SET 20656.62 15320.88 +SET 2065725.76 1290026.64 +SET 206594.46 121937.13 +SET 206613.44 143261.76 +SET 2066236.32 1290345.48 +SET 206644.75 138445.45 +SET 206648.48 67773.44 +SET 2066491.60 1290504.90 +SET 2066746.88 1290664.32 +SET 2067002.16 1290823.74 +SET 20672.61 17869.81 +SET 206726.10 178698.10 +SET 206748.52 122028.06 +SET 2067518.80 1245287.57 +SET 20677.68 12913.02 +SET 2067956.00 1245550.90 +SET 2068023.28 1291461.42 +SET 2068104.78 1787710.38 +SET 2068278.56 1291620.84 +SET 2068295.65 1555361.30 +SET 206834.55 138572.61 +SET 2068393.20 1245814.23 +SET 206867.04 67845.12 +SET 2068789.12 1291939.68 +SET 2068830.40 1246077.56 +SET 206902.58 122118.99 +SET 20693.94 15348.56 +SET 2069370.45 1788804.45 +SET 206976.90 138667.98 +SET 2070196.59 1668847.84 +SET 2070214.23 1789533.83 +SET 207022.09 143545.11 +SET 2070576.08 1293055.62 +SET 2070579.20 1247130.88 +SET 2070636.12 1789898.52 +SET 207071.80 138731.56 +SET 2070831.36 1293215.04 +SET 2071058.01 1790263.21 +SET 2071341.92 1293533.88 +SET 207147.99 179062.79 +SET 2071499.01 1669897.76 +SET 207185.55 143658.45 +SET 20721.93 15369.32 +SET 2072305.27 1558376.54 +SET 207232.80 124818.42 +SET 2072363.04 1294171.56 +SET 207261.60 138858.72 +SET 2072618.32 1294330.98 +SET 2073128.88 1294649.82 +SET 2073202.40 1248710.86 +SET 207349.01 143771.79 +SET 20735.65 13892.23 +SET 207356.22 132420.96 +SET 2073639.44 1294968.66 +SET 2073641.81 1559381.62 +SET 2074011.24 1792816.04 +SET 2074076.80 1249237.52 +SET 2074103.85 1671997.60 +SET 207413.44 68024.32 +SET 207430.74 143828.46 +SET 2074433.13 1793180.73 +SET 207451.40 138985.88 +SET 2074660.56 1295606.34 +SET 2074755.06 1672522.56 +SET 2074855.02 1793545.42 +SET 2074951.20 1249764.18 +SET 20750.88 13251.84 +SET 207512.47 143885.13 +SET 2075171.12 1295925.18 +SET 207518.82 122482.71 +SET 207542.64 129608.46 +SET 2075426.40 1296084.60 +SET 2075698.80 1794274.80 +SET 2075825.60 1250290.84 +SET 2076.32 680.96 +SET 2076057.48 1673572.48 +SET 2076120.69 1794639.49 +SET 207641.20 139113.04 +SET 2076447.52 1296722.28 +SET 2076542.58 1795004.18 +SET 2076700.00 1250817.50 +SET 2076708.69 1674097.44 +SET 207672.88 122573.64 +SET 207675.93 143998.47 +SET 20768.58 15403.92 +SET 207688.65 139144.83 +SET 2077137.20 1251080.83 +SET 2077359.90 1674622.40 +SET 2077468.64 1297359.96 +SET 20775.70 11828.11 +SET 207757.66 144055.14 +SET 2077723.92 1297519.38 +SET 2077808.25 1796098.25 +SET 2077979.20 1297678.80 +SET 2078011.11 1675147.36 +SET 2078011.60 1251607.49 +SET 207813.96 132713.28 +SET 2078230.14 1796462.94 +SET 2078234.48 1297838.22 +SET 207826.94 122664.57 +SET 207831.00 139240.20 +SET 207839.39 144111.81 +SET 2078662.32 1675672.32 +SET 2078886.00 1252134.15 +SET 2079255.60 1298475.90 +SET 2079323.20 1252397.48 +SET 207959.84 68203.52 +SET 207962.70 118398.21 +SET 207966.54 132810.72 +SET 2079917.70 1797921.70 +SET 2079964.74 1676722.24 +SET 2080324.51 1564407.02 +SET 2080339.59 1798286.39 +SET 2080634.80 1253187.47 +SET 2080761.48 1798651.08 +SET 208084.58 144281.82 +SET 2081042.56 1299591.84 +SET 2081072.00 1253450.80 +SET 2081183.37 1799015.77 +SET 208135.06 122846.43 +SET 2081605.26 1799380.46 +SET 208166.31 144338.49 +SET 208168.40 118515.32 +SET 208178.40 68275.20 +SET 2081808.40 1300070.10 +SET 2082027.15 1799745.15 +SET 2082329.32 1565914.64 +SET 208248.04 144395.16 +SET 2082569.58 1678822.08 +SET 2082870.93 1800474.53 +SET 2082997.59 1566417.18 +SET 208308.48 130086.72 +SET 2083220.79 1679347.04 +SET 208329.77 144451.83 +SET 208352.95 139589.89 +SET 2083695.20 1255030.78 +SET 2083714.71 1801203.91 +SET 208396.96 68346.88 +SET 208400.40 139621.68 +SET 2084105.92 1301504.88 +SET 208411.50 144508.50 +SET 2084132.40 1255294.11 +SET 2084361.20 1301664.30 +SET 2084523.21 1680396.96 +SET 2084616.48 1301823.72 +SET 208493.23 144565.17 +SET 208495.30 139685.26 +SET 2084980.38 1802297.98 +SET 208506.24 68382.72 +SET 20852.55 15466.20 +SET 208542.75 139717.05 +SET 2085444.00 1256084.10 +SET 208563.76 130246.14 +SET 208574.96 144621.84 +SET 208576.86 133200.48 +SET 208579.80 118749.54 +SET 2085881.20 1256347.43 +SET 208590.20 139748.84 +SET 2086148.16 1302780.24 +SET 208615.52 68418.56 +SET 2086246.05 1803392.05 +SET 2086318.40 1256610.76 +SET 2086338.94 1568929.88 +SET 2086755.60 1256874.09 +SET 2086914.00 1303258.50 +SET 20871.21 15480.04 +SET 2087128.05 1682496.80 +SET 2087169.28 1303417.92 +SET 2087511.72 1804486.12 +SET 2087630.00 1257400.75 +SET 2087675.48 1569934.96 +SET 208780.00 139876.00 +SET 208785.50 118866.65 +SET 2087935.12 1303896.18 +SET 2088067.20 1257664.08 +SET 208834.08 68490.24 +SET 2088430.47 1683546.72 +SET 2088504.40 1257927.41 +SET 2088700.96 1304374.44 +SET 2088777.39 1805580.19 +SET 208882.02 133395.36 +SET 2089.92 1550.08 +SET 2089012.02 1570940.04 +SET 2089081.68 1684071.68 +SET 2089211.52 1304693.28 +SET 208943.36 68526.08 +SET 208969.80 140003.16 +SET 208983.61 144905.19 +SET 20899.20 15500.80 +SET 2090043.06 1806674.26 +SET 2090253.20 1258980.73 +SET 20903.46 13349.28 +SET 209034.60 133492.80 +SET 2090487.92 1305490.38 +SET 209052.64 68561.92 +SET 209065.34 144961.86 +SET 2090743.20 1305649.80 +SET 2090886.84 1807403.64 +SET 2090998.48 1305809.22 +SET 2091016.83 1572447.66 +SET 2091127.60 1259507.39 +SET 2091253.76 1305968.64 +SET 209168.51 157295.02 +SET 2091685.10 1572950.20 +SET 20917.86 15514.64 +SET 209207.05 140162.11 +SET 2092274.88 1306606.32 +SET 2092337.73 1686696.48 +SET 2092353.37 1573452.74 +SET 20925.45 14019.39 +SET 2092574.40 1808862.40 +SET 20927.19 15521.56 +SET 2093040.72 1307084.58 +SET 209339.76 133687.68 +SET 2093418.18 1809591.78 +SET 20936.52 15528.48 +SET 2093640.15 1687746.40 +SET 2093689.91 1574457.82 +SET 209402.60 119217.98 +SET 209418.80 126135.07 +SET 2094291.36 1688271.36 +SET 2094358.18 1574960.36 +SET 209444.30 140321.06 +SET 20945.85 15535.40 +SET 2094683.85 1810685.85 +SET 209473.99 145245.21 +SET 2094942.57 1688796.32 +SET 2095082.96 1308359.94 +SET 2095105.74 1811050.54 +SET 209539.20 140384.64 +SET 2095499.60 1262140.69 +SET 20955.18 15542.32 +SET 209555.72 145301.88 +SET 2095593.78 1689321.28 +SET 2095694.72 1575965.44 +SET 2095848.80 1308838.20 +SET 2096359.36 1309157.04 +SET 20964.51 15549.24 +SET 209644.92 133882.56 +SET 209675.66 123755.73 +SET 2096793.30 1812509.30 +SET 2096869.92 1309475.88 +SET 209708.32 68776.96 +SET 2097215.19 1812873.99 +SET 2097248.40 1263194.01 +SET 209729.00 140511.80 +SET 20973.84 15556.16 +SET 2097380.48 1309794.72 +SET 2097637.08 1813238.68 +SET 2097699.53 1577473.06 +SET 209797.50 133980.00 +SET 2098058.97 1813603.37 +SET 20981.40 11945.22 +SET 2098198.62 1691421.12 +SET 209840.16 131043.24 +SET 20985.60 12639.84 +SET 209856.00 126398.40 +SET 2098560.00 1263984.00 +SET 2098912.16 1310751.24 +SET 2099167.44 1310910.66 +SET 209926.88 68848.64 +SET 2099422.72 1311070.08 +SET 209950.08 134077.44 +SET 209964.37 145585.23 +SET 2099746.53 1815062.13 +SET 209983.78 123937.59 +SET 2100188.56 1311548.34 +SET 2100590.31 1815791.51 +SET 210061.15 140734.33 +SET 2100746.00 1265300.65 +SET 2100803.46 1693520.96 +SET 210102.66 134174.88 +SET 2101454.67 1694045.92 +SET 2101709.15 1580488.30 +SET 2101720.24 1312504.86 +SET 2101975.52 1312664.28 +SET 21020.49 15590.76 +SET 2102230.80 1312823.70 +SET 210225.40 119686.42 +SET 2102377.42 1580990.84 +SET 210298.40 140893.28 +SET 2103507.20 1313620.80 +SET 210373.02 145868.58 +SET 21039.15 15604.60 +SET 2103965.43 1818709.03 +SET 2104273.04 1314099.06 +SET 210431.10 119803.53 +SET 2104382.23 1582498.46 +SET 2104528.32 1314258.48 +SET 2104680.80 1267670.62 +SET 210473.28 69027.84 +SET 2104783.60 1314417.90 +SET 21048.48 15611.52 +SET 2104809.21 1819438.41 +SET 210523.11 181980.31 +SET 2105294.16 1314736.74 +SET 2105549.44 1314896.16 +SET 2105555.20 1268197.28 +SET 21056.04 13446.72 +SET 210560.40 134467.20 +SET 2105718.77 1583503.54 +SET 2105992.40 1268460.61 +SET 210606.00 131521.50 +SET 2106315.28 1315374.42 +SET 2106570.56 1315533.84 +SET 21067.80 14114.76 +SET 210678.00 141147.60 +SET 2106866.80 1268987.27 +SET 210699.94 146095.26 +SET 2107081.12 1315852.68 +SET 210725.45 141179.39 +SET 2107304.00 1269250.60 +SET 2107336.40 1316012.10 +SET 2107340.55 1821626.55 +SET 2107591.68 1316171.52 +SET 210772.90 141211.18 +SET 2107723.58 1585011.16 +SET 210781.67 146151.93 +SET 2107966.77 1699295.52 +SET 2108.58 1563.92 +SET 210801.12 69135.36 +SET 2108178.40 1269777.26 +SET 2108184.33 1822355.93 +SET 210861.28 131680.92 +SET 2108612.80 1316809.20 +SET 210910.40 69171.20 +SET 210915.25 141306.55 +SET 2109378.64 1317287.46 +SET 2109450.00 1823450.00 +SET 2109889.20 1317606.30 +SET 210992.04 170087.04 +SET 211010.15 141370.13 +SET 211019.68 69207.04 +SET 2110396.66 1587021.32 +SET 2110399.76 1317925.14 +SET 2110655.04 1318084.56 +SET 2110801.60 1271357.24 +SET 2111137.56 1824908.76 +SET 2111165.60 1318403.40 +SET 211128.96 69242.88 +SET 21113.79 15659.96 +SET 2111420.88 1318562.82 +SET 2111559.45 1825273.45 +SET 2111676.00 1271883.90 +SET 211173.32 158802.64 +SET 2111931.44 1318881.66 +SET 211199.95 141497.29 +SET 211216.26 124665.03 +SET 21123.12 15666.88 +SET 2112442.00 1319200.50 +SET 211253.90 120271.97 +SET 211272.05 146491.95 +SET 2112987.60 1272673.89 +SET 2113069.74 1589031.48 +SET 2113247.01 1826732.21 +SET 211347.52 69314.56 +SET 2113668.90 1827096.90 +SET 2113738.01 1589534.02 +SET 211389.75 141624.45 +SET 21141.78 15680.72 +SET 2114478.87 1704545.12 +SET 2114484.24 1320475.86 +SET 211459.60 120389.08 +SET 2114739.52 1320635.28 +SET 211475.88 135051.84 +SET 211484.65 141688.03 +SET 211532.10 141719.82 +SET 2115356.46 1828555.66 +SET 2115778.35 1828920.35 +SET 211598.97 146718.63 +SET 2116015.92 1321432.38 +SET 211604.80 127451.72 +SET 2116200.24 1829285.04 +SET 2116432.50 1706120.00 +SET 211674.45 141815.19 +SET 2117.91 1570.84 +SET 2117079.36 1592046.72 +SET 2117083.71 1706644.96 +SET 2117465.91 1830379.11 +SET 211769.35 141878.77 +SET 2117734.92 1707169.92 +SET 2117747.63 1592549.26 +SET 2117796.80 1275570.52 +SET 2118058.16 1322707.74 +SET 211816.80 141910.56 +SET 2118234.00 1275833.85 +SET 211832.50 125028.75 +SET 2118415.90 1593051.80 +SET 211871.00 120623.30 +SET 2118731.58 1831473.18 +SET 21188.43 15715.32 +SET 211893.92 69493.76 +SET 2119037.34 1708219.84 +SET 2119575.36 1832202.56 +SET 2119589.84 1323664.26 +SET 2119688.55 1708744.80 +SET 2119752.44 1594056.88 +SET 212003.20 69529.60 +SET 212007.62 147001.98 +SET 2120100.40 1323983.10 +SET 2120419.14 1832931.94 +SET 21207.09 15729.16 +SET 212076.70 120740.41 +SET 2120841.03 1833296.63 +SET 2120857.20 1277413.83 +SET 212086.20 135441.60 +SET 2120866.24 1324461.36 +SET 212089.35 147058.65 +SET 21210.15 14210.13 +SET 2121088.98 1595061.96 +SET 212137.68 132478.02 +SET 212148.95 142133.09 +SET 21216.42 15736.08 +SET 2121684.81 1834026.01 +SET 2121757.25 1595564.50 +SET 212210.67 183439.07 +SET 2122293.39 1710844.64 +SET 212238.78 135539.04 +SET 2122397.92 1325417.88 +SET 2122425.52 1596067.04 +SET 21225.75 15743.00 +SET 212252.81 147171.99 +SET 2122908.48 1325736.72 +SET 212291.30 142228.46 +SET 212334.54 147228.66 +SET 2123419.04 1326055.56 +SET 2123480.40 1278993.81 +SET 2123595.81 1711894.56 +SET 2123674.32 1326214.98 +SET 212391.36 135636.48 +SET 2124.98 1473.42 +SET 212416.27 147285.33 +SET 2124216.15 1836214.15 +SET 212433.65 142323.83 +SET 2124354.80 1279520.47 +SET 2124440.16 1326693.24 +SET 2124695.44 1326852.66 +SET 2124898.23 1712944.48 +SET 21249.80 14734.20 +SET 2125098.60 1598077.20 +SET 2125229.20 1280047.13 +SET 212528.55 142387.41 +SET 2125549.44 1713469.44 +SET 2125716.56 1327490.34 +SET 212579.73 147398.67 +SET 2125971.84 1327649.76 +SET 212602.80 125483.40 +SET 2126227.12 1327809.18 +SET 212648.24 132796.86 +SET 2126540.80 1280837.12 +SET 212658.88 69744.64 +SET 212661.46 147455.34 +SET 2126737.68 1328128.02 +SET 2126851.86 1714519.36 +SET 212696.52 135831.36 +SET 2126978.00 1281100.45 +SET 2126992.96 1328287.44 +SET 21272.40 15777.60 +SET 2127415.20 1281363.78 +SET 212743.19 147512.01 +SET 2127503.07 1715044.32 +SET 2127503.52 1328606.28 +SET 2127591.27 1839131.67 +SET 2127852.40 1281627.11 +SET 2128013.16 1839496.36 +SET 21281.73 15784.52 +SET 2128439.95 1600589.90 +SET 212877.44 69816.32 +SET 2129035.20 1329562.80 +SET 212910.92 125665.26 +SET 212945.67 171661.92 +SET 2129456.70 1716619.20 +SET 2129776.49 1601594.98 +SET 213001.68 136026.24 +SET 2130056.32 1330200.48 +SET 2130107.91 1717144.16 +SET 2130311.60 1330359.90 +SET 21305.05 14273.71 +SET 213054.45 184168.45 +SET 213070.11 147738.69 +SET 21309.72 15805.28 +SET 2130912.80 1283470.42 +SET 2130966.39 1842049.19 +SET 2131077.44 1330838.16 +SET 2131410.33 1718194.08 +SET 213154.26 136123.68 +SET 213158.80 133115.70 +SET 213178.13 160310.26 +SET 2131781.30 1603102.60 +SET 2131787.20 1283997.08 +SET 213205.28 69923.84 +SET 2132061.54 1718719.04 +SET 213219.04 125847.12 +SET 213240.30 142864.26 +SET 2132449.57 1603605.14 +SET 2132653.95 1843507.95 +SET 2132661.60 1284523.74 +SET 2132864.40 1331954.10 +SET 213306.84 136221.12 +SET 2133119.68 1332113.52 +SET 213314.56 69959.68 +SET 213315.30 147908.70 +SET 213335.20 142927.84 +SET 2133363.96 1719768.96 +SET 2133374.96 1332272.94 +SET 2133497.73 1844237.33 +SET 213353.60 128505.04 +SET 2133536.00 1285050.40 +SET 2133630.24 1332432.36 +SET 21337.71 15826.04 +SET 2133919.62 1844602.02 +SET 213397.03 147965.37 +SET 2133973.20 1285313.73 +SET 2134015.17 1720293.92 +SET 213414.08 133275.12 +SET 213423.84 69995.52 +SET 2134410.40 1285577.06 +SET 2134454.38 1605112.76 +SET 2134651.36 1333070.04 +SET 213476.34 184533.14 +SET 2134847.60 1285840.39 +SET 2135.25 1430.55 +SET 2135161.92 1333388.88 +SET 2135185.29 1845696.09 +SET 21352.50 14305.50 +SET 213525.00 143055.00 +SET 213527.16 126028.98 +SET 2135284.80 1286103.72 +SET 2135417.20 1333548.30 +SET 21356.37 15839.88 +SET 2135607.18 1846060.78 +SET 2135722.00 1286367.05 +SET 213596.88 172186.88 +SET 2135968.80 1721868.80 +SET 2136.12 1364.16 +SET 2136.57 1584.68 +SET 21361.20 13641.60 +SET 213612.00 136416.00 +SET 213619.90 143118.58 +SET 213642.40 70067.20 +SET 2136596.40 1286893.71 +SET 213667.35 143150.37 +SET 213669.36 133434.54 +SET 213681.22 126119.91 +SET 2136948.88 1334504.82 +SET 2137033.60 1287157.04 +SET 2137127.46 1607122.92 +SET 213714.80 143182.16 +SET 2137204.16 1334664.24 +SET 213722.30 121677.29 +SET 213723.95 148192.05 +SET 2137459.44 1334823.66 +SET 213751.68 70103.04 +SET 2137714.72 1334983.08 +SET 213805.68 148248.72 +SET 2138345.20 1287947.03 +SET 213835.28 126210.84 +SET 21384.36 15860.64 +SET 2138464.00 1608128.00 +SET 213857.15 143277.53 +SET 213887.41 148305.39 +SET 213904.60 143309.32 +SET 213917.16 136610.88 +SET 2139219.60 1288473.69 +SET 2139224.85 1724493.60 +SET 21393.69 15867.56 +SET 2139656.80 1288737.02 +SET 21399.95 14337.29 +SET 2140247.97 1850072.37 +SET 214046.95 143404.69 +SET 2140531.20 1289263.68 +SET 214069.74 136708.32 +SET 2141288.64 1337214.96 +SET 214132.60 148475.40 +SET 214133.70 121911.51 +SET 2141405.60 1289790.34 +SET 214141.85 143468.27 +SET 214143.40 126392.70 +SET 2141513.64 1851166.44 +SET 2141543.92 1337374.38 +SET 2141805.35 1610640.70 +SET 2141829.69 1726593.44 +SET 2141842.80 1290053.67 +SET 214188.80 70246.40 +SET 21422.80 12903.17 +SET 214222.32 136805.76 +SET 214228.00 129031.70 +SET 2142309.76 1337852.64 +SET 2142357.42 1851895.82 +SET 2142717.20 1290580.33 +SET 214284.20 143563.64 +SET 2143075.60 1338330.90 +SET 2143141.89 1611645.78 +SET 2143330.88 1338490.32 +SET 214339.40 122028.62 +SET 2143586.16 1338649.74 +SET 2143623.09 1852989.89 +SET 214374.90 136903.20 +SET 214377.79 148645.41 +SET 214379.10 143627.22 +SET 2143841.44 1338809.16 +SET 21440.34 15902.16 +SET 2144096.72 1338968.58 +SET 2144466.00 1291633.65 +SET 2144478.43 1612650.86 +SET 214451.52 126574.56 +SET 214459.52 148702.08 +SET 2144607.28 1339287.42 +SET 21447.40 14369.08 +SET 2145.90 1591.60 +SET 2145085.74 1729218.24 +SET 2145146.70 1613153.40 +SET 214516.64 70353.92 +SET 214545.10 122145.73 +SET 2145628.40 1339925.10 +SET 214568.90 143754.38 +SET 2145732.54 1854813.34 +SET 2145814.97 1613655.94 +SET 2146154.43 1855178.03 +SET 214616.35 143786.17 +SET 2146214.80 1292686.97 +SET 2146394.24 1340403.36 +SET 214663.80 143817.96 +SET 214704.71 148872.09 +SET 2147151.51 1614661.02 +SET 2147160.08 1340881.62 +SET 2147415.36 1341041.04 +SET 214742.01 185627.21 +SET 2147420.10 1856272.10 +SET 214759.64 126756.42 +SET 2147670.64 1341200.46 +SET 21477.66 15929.84 +SET 214786.44 148928.76 +SET 2147925.92 1341359.88 +SET 2147963.60 1293740.29 +SET 214853.60 143945.12 +SET 21486.99 15936.76 +SET 214868.17 148985.43 +SET 2148685.77 1857366.17 +SET 2148838.00 1294266.95 +SET 21489.93 17323.68 +SET 2148993.00 1732368.00 +SET 2149107.66 1857730.86 +SET 2149275.20 1294530.28 +SET 21494.85 14400.87 +SET 21494.99 14904.21 +SET 214953.76 70497.28 +SET 21496.32 15943.68 +SET 214985.22 137292.96 +SET 214995.95 144040.49 +SET 2149951.44 1858460.24 +SET 2149968.16 1342635.24 +SET 2150149.60 1295056.94 +SET 215043.40 144072.28 +SET 215067.76 126938.28 +SET 2150795.22 1859189.62 +SET 2150946.63 1733942.88 +SET 2151161.13 1617676.26 +SET 2151217.11 1859554.31 +SET 2151244.56 1343432.34 +SET 215137.80 137390.40 +SET 2151499.84 1343591.76 +SET 21516.39 18599.19 +SET 215162.20 122497.06 +SET 2151639.00 1859919.00 +SET 215172.32 70568.96 +SET 2152010.40 1343910.60 +SET 2152060.89 1860283.69 +SET 21524.31 15964.44 +SET 2152520.96 1344229.44 +SET 2152772.80 1296636.92 +SET 21528.16 7060.48 +SET 215290.38 137487.84 +SET 2153031.52 1344548.28 +SET 2153326.56 1861377.76 +SET 215358.55 149325.45 +SET 2153647.20 1297163.58 +SET 215375.55 144294.81 +SET 2154052.64 1345185.96 +SET 2154170.34 1862107.14 +SET 2154502.48 1620188.96 +SET 2154521.60 1297690.24 +SET 2154563.20 1345504.80 +SET 2154592.23 1862471.83 +SET 215470.45 144358.39 +SET 2154818.48 1345664.22 +SET 2155014.12 1862836.52 +SET 2155170.75 1620691.50 +SET 2155436.01 1863201.21 +SET 215550.51 173761.76 +SET 2155839.60 1346301.90 +SET 215585.79 186356.59 +SET 215595.54 137682.72 +SET 21561.63 15992.12 +SET 215612.80 144453.76 +SET 2156156.31 1738142.56 +SET 2156507.29 1621696.58 +SET 2156707.60 1299006.89 +SET 2156807.52 1738667.52 +SET 2156860.72 1346939.58 +SET 215707.70 144517.34 +SET 2157123.57 1864659.97 +SET 2157175.56 1622199.12 +SET 2157458.73 1739192.48 +SET 2157545.46 1865024.66 +SET 215779.30 122848.39 +SET 2157843.83 1622701.66 +SET 2158019.20 1299796.88 +SET 2158109.94 1739717.44 +SET 215828.00 70784.00 +SET 215838.06 127392.93 +SET 215848.93 149665.47 +SET 2158647.68 1348055.52 +SET 2159233.02 1866483.42 +SET 2159413.52 1348533.78 +SET 2159654.91 1866848.11 +SET 2159668.80 1348693.20 +SET 2159768.00 1300850.20 +SET 21598.50 12296.55 +SET 215985.00 122965.50 +SET 215992.40 144708.08 +SET 2160076.80 1867212.80 +SET 216012.39 149778.81 +SET 2160179.36 1349012.04 +SET 2160516.91 1624711.82 +SET 2160714.78 1741817.28 +SET 2160920.58 1867942.18 +SET 2160945.20 1349490.30 +SET 216134.75 144803.45 +SET 216146.18 127574.79 +SET 2161516.80 1301903.52 +SET 21617.61 16033.64 +SET 2161764.36 1868671.56 +SET 216182.20 144835.24 +SET 216190.70 123082.61 +SET 2161954.00 1302166.85 +SET 2162017.20 1742867.20 +SET 216229.65 144867.03 +SET 2162521.72 1626219.44 +SET 216257.58 149948.82 +SET 2162732.16 1350606.24 +SET 216277.10 144898.82 +SET 2162828.40 1302693.51 +SET 2162987.44 1350765.66 +SET 2163189.99 1626721.98 +SET 216324.55 144930.61 +SET 2163265.60 1302956.84 +SET 2163319.62 1743917.12 +SET 2163498.00 1351084.50 +SET 216358.44 138169.92 +SET 2163753.28 1351243.92 +SET 2163858.26 1627224.52 +SET 216396.40 123199.72 +SET 2163970.83 1744442.08 +SET 216414.00 130348.35 +SET 2164140.00 1303483.50 +SET 21645.60 16054.40 +SET 2164577.20 1303746.83 +SET 216477.44 135188.16 +SET 2164774.40 1351881.60 +SET 216483.68 70999.04 +SET 216502.77 150118.83 +SET 216511.02 138267.36 +SET 2165194.80 1628229.60 +SET 2165273.25 1745492.00 +SET 2165451.60 1304273.49 +SET 2165540.24 1352359.86 +SET 21658.45 15017.55 +SET 2165863.07 1628732.14 +SET 2165888.80 1304536.82 +SET 2165924.46 1746016.96 +SET 2165983.26 1872318.46 +SET 2166306.08 1352838.12 +SET 216656.70 145153.14 +SET 2166561.36 1352997.54 +SET 216666.23 150232.17 +SET 2167327.20 1353475.80 +SET 216762.42 127938.51 +SET 2167670.82 1873777.22 +SET 2167837.76 1353794.64 +SET 2167878.09 1747591.84 +SET 2168092.71 1874141.91 +SET 2168093.04 1353954.06 +SET 2168348.32 1354113.48 +SET 216851.20 130611.68 +SET 216852.93 174811.68 +SET 2168536.15 1630742.30 +SET 2168858.88 1354432.32 +SET 216893.95 145312.09 +SET 216911.42 150402.18 +SET 21692.25 16089.00 +SET 216920.80 71142.40 +SET 2169358.38 1875235.98 +SET 2169780.27 1875600.67 +SET 2169831.72 1749166.72 +SET 2169872.69 1631747.38 +SET 2169880.00 1355070.00 +SET 216993.15 150458.85 +SET 2170202.16 1875965.36 +SET 2170482.93 1749691.68 +SET 2170698.00 1307433.45 +SET 2170901.12 1355707.68 +SET 2171156.40 1355867.10 +SET 2171209.23 1632752.46 +SET 217139.36 71214.08 +SET 2171467.83 1877059.43 +SET 217178.65 145502.83 +SET 217187.75 163325.50 +SET 2171877.50 1633255.00 +SET 2171889.72 1877424.12 +SET 2171922.24 1356345.36 +SET 217226.10 145534.62 +SET 2172311.61 1877788.81 +SET 2172446.80 1308486.77 +SET 217273.35 187815.35 +SET 217288.40 130875.01 +SET 21729.57 16116.68 +SET 2173087.77 1751791.52 +SET 2173155.39 1878518.19 +SET 217320.07 150685.53 +SET 2173321.20 1309013.43 +SET 217357.92 71285.76 +SET 217368.45 145629.99 +SET 2173882.31 1634762.62 +SET 2173964.48 1357620.72 +SET 2173999.17 1879247.57 +SET 2174195.60 1309540.09 +SET 2174632.80 1309803.42 +SET 217467.20 71321.60 +SET 21748.23 16130.52 +SET 217483.53 150798.87 +SET 2175507.20 1310330.08 +SET 217558.25 145757.15 +SET 2175692.61 1753891.36 +SET 2175751.44 1358736.66 +SET 217576.48 71357.44 +SET 2175944.40 1310593.41 +SET 2176262.00 1359055.50 +SET 2176381.60 1310856.74 +SET 2176555.39 1636772.78 +SET 217685.76 71393.28 +SET 217695.24 188180.04 +SET 2176995.03 1754941.28 +SET 2177027.84 1359533.76 +SET 2177256.00 1311383.40 +SET 2177374.29 1882165.09 +SET 217748.05 145884.31 +SET 217753.84 135985.26 +SET 21776.22 16151.28 +SET 2177891.93 1637777.86 +SET 2178048.96 1360171.44 +SET 217810.45 151025.55 +SET 2178218.07 1882894.47 +SET 2178304.24 1360330.86 +SET 217836.30 124019.49 +SET 2178639.96 1883259.16 +SET 217890.40 145979.68 +SET 21794.88 16165.12 +SET 2179483.74 1883988.54 +SET 2179580.64 1361127.96 +SET 217973.91 151138.89 +SET 217985.30 146043.26 +SET 217994.90 128665.95 +SET 2180316.40 1313226.71 +SET 21804.21 16172.04 +SET 2180753.60 1313490.04 +SET 218117.13 188544.73 +SET 2181171.30 1885447.30 +SET 2181190.80 1313753.37 +SET 218122.88 71536.64 +SET 218127.65 146138.63 +SET 2181367.60 1362243.90 +SET 218137.37 151252.23 +SET 218148.96 128756.88 +SET 2181553.50 1758616.00 +SET 2181593.19 1885811.99 +SET 218162.80 131401.67 +SET 2181628.00 1314016.70 +SET 218175.10 146170.42 +SET 2181878.16 1362562.74 +SET 2182015.08 1886176.68 +SET 218219.10 151308.90 +SET 21822.87 16185.88 +SET 2182388.72 1362881.58 +SET 218247.70 124253.71 +SET 21827.00 14623.40 +SET 2182855.92 1759665.92 +SET 2182939.60 1314806.69 +SET 218303.02 128847.81 +SET 2183154.56 1363359.84 +SET 2183409.84 1363519.26 +SET 218341.44 71608.32 +SET 218364.90 146297.58 +SET 2183814.00 1315333.35 +SET 218382.56 151422.24 +SET 218412.35 146329.37 +SET 2184546.42 1888364.82 +SET 2184574.63 1642803.26 +SET 218464.29 151478.91 +SET 2184686.24 1364316.36 +SET 2184809.55 1761240.80 +SET 2184968.31 1888729.51 +SET 21850.86 16206.64 +SET 218507.25 146392.95 +SET 2185390.20 1889094.20 +SET 2185452.08 1364794.62 +SET 218546.02 151535.58 +SET 21856.00 7168.00 +SET 218560.00 71680.00 +SET 2185707.36 1364954.04 +SET 2186.00 1316.65 +SET 218600.00 131665.00 +SET 2186111.97 1762290.72 +SET 218669.28 71715.84 +SET 2186763.18 1762815.68 +SET 2186874.40 1317176.66 +SET 2186983.76 1365751.14 +SET 2187077.76 1890552.96 +SET 21874.45 14655.19 +SET 2187499.65 1890917.65 +SET 218765.20 129120.60 +SET 2187749.60 1366229.40 +SET 21878.85 16227.40 +SET 2187921.54 1891282.34 +SET 2188004.88 1366388.82 +SET 218806.56 176386.56 +SET 2188065.60 1763865.60 +SET 2188623.20 1318229.98 +SET 218864.80 124605.04 +SET 2188770.72 1366867.08 +SET 21888.18 16234.32 +SET 2189026.00 1367026.50 +SET 2189187.21 1892376.41 +SET 2189252.52 1646321.04 +SET 2189281.28 1367185.92 +SET 2189497.60 1318756.64 +SET 218954.67 151818.93 +SET 2189609.10 1892741.10 +SET 21897.51 16241.24 +SET 218981.75 146710.85 +SET 218997.12 71823.36 +SET 2190030.99 1893105.79 +SET 2190047.12 1367664.18 +SET 21903.64 15187.56 +SET 2190302.40 1367823.60 +SET 219036.40 151875.60 +SET 219037.20 131928.33 +SET 2190372.00 1319283.30 +SET 2190452.88 1893470.48 +SET 2190557.68 1367983.02 +SET 219070.50 124722.15 +SET 219106.40 71859.20 +SET 219118.13 151932.27 +SET 219124.10 146806.22 +SET 2191257.33 1647828.66 +SET 2191321.65 1766490.40 +SET 2191323.52 1368461.28 +SET 219171.55 146838.01 +SET 2191834.08 1368780.12 +SET 219192.56 164833.12 +SET 2191972.86 1767015.36 +SET 2192120.80 1320336.62 +SET 219215.68 71895.04 +SET 2192344.64 1369098.96 +SET 21925.50 16262.00 +SET 2192593.87 1648833.74 +SET 2192624.07 1767540.32 +SET 219266.45 146901.59 +SET 219285.52 136941.78 +SET 2192995.20 1320863.28 +SET 219313.90 146933.38 +SET 219324.96 71930.88 +SET 2193262.14 1649336.28 +SET 2193275.28 1768065.28 +SET 219363.32 152102.28 +SET 219381.44 129484.32 +SET 2193930.41 1649838.82 +SET 2194249.89 1896752.69 +SET 21944.16 16275.84 +SET 219457.77 176911.52 +SET 2194577.70 1769115.20 +SET 2194598.68 1650341.36 +SET 2194642.16 1370533.74 +SET 2194744.00 1321916.60 +SET 2194897.44 1370693.16 +SET 219503.70 147060.54 +SET 2195093.67 1897482.07 +SET 2195181.20 1322179.93 +SET 2195266.95 1650843.90 +SET 21953.49 16282.76 +SET 219535.50 129575.25 +SET 21954.08 13710.12 +SET 219540.80 137101.20 +SET 2195408.00 1371012.00 +SET 219543.52 72002.56 +SET 2195515.56 1897846.76 +SET 2195618.40 1322443.26 +SET 2195935.22 1651346.44 +SET 2196055.60 1322706.59 +SET 219652.80 72038.40 +SET 219690.24 152328.96 +SET 2197194.96 1372127.94 +SET 21972.15 16296.60 +SET 2197450.24 1372287.36 +SET 219762.08 72074.24 +SET 2197625.01 1899670.21 +SET 219771.97 152385.63 +SET 2197833.75 1771740.00 +SET 219788.40 147251.28 +SET 2197960.80 1372606.20 +SET 219804.69 190003.49 +SET 2198241.60 1324023.24 +SET 219835.85 147283.07 +SET 2198468.79 1900399.59 +SET 2198471.36 1372925.04 +SET 2198484.96 1772264.96 +SET 21985.37 15244.23 +SET 219860.83 165335.66 +SET 2198608.30 1653356.60 +SET 2198678.80 1324286.57 +SET 2198726.64 1373084.46 +SET 2199116.00 1324549.90 +SET 2199553.20 1324813.23 +SET 2199734.46 1901493.66 +SET 219997.68 129848.04 +SET 2200156.35 1901858.35 +SET 220017.16 152555.64 +SET 2200258.32 1374040.98 +SET 2200438.59 1773839.84 +SET 2200513.60 1374200.40 +SET 2200613.11 1654864.22 +SET 220073.10 147442.02 +SET 220089.92 72181.76 +SET 22009.47 16324.28 +SET 220098.89 152612.31 +SET 2201000.13 1902587.73 +SET 2201024.16 1374519.24 +SET 2201279.44 1374678.66 +SET 22016.80 14750.56 +SET 220172.94 140605.92 +SET 2201843.91 1903317.11 +SET 220199.20 72217.60 +SET 2202045.28 1375156.92 +SET 220215.45 147537.39 +SET 2202555.84 1375475.76 +SET 220262.90 147569.18 +SET 2202687.69 1904046.49 +SET 220304.70 125424.81 +SET 220306.64 137579.46 +SET 2203066.40 1375794.60 +SET 220310.35 147600.97 +SET 2203109.58 1904411.18 +SET 220325.52 140703.36 +SET 220344.08 152782.32 +SET 2203488.00 1327183.20 +SET 220357.80 147632.76 +SET 22037.46 16345.04 +SET 2203925.20 1327446.53 +SET 220405.25 147664.55 +SET 220417.76 72289.28 +SET 220425.81 152838.99 +SET 2204345.85 1776989.60 +SET 2204362.40 1327709.86 +SET 2204598.08 1376751.12 +SET 22046.79 16351.96 +SET 2204997.06 1777514.56 +SET 220500.15 147728.13 +SET 2205108.64 1377069.96 +SET 2205219.03 1906234.63 +SET 2205236.80 1328236.52 +SET 220529.10 165838.20 +SET 2205291.00 1658382.00 +SET 22056.12 16358.88 +SET 220561.92 137738.88 +SET 2205640.92 1906599.32 +SET 2205674.00 1328499.85 +SET 2206.71 1530.09 +SET 2206062.81 1906964.01 +SET 2206111.20 1328763.18 +SET 220613.92 130211.76 +SET 2206299.48 1778564.48 +SET 220630.68 140898.24 +SET 22064.25 14782.35 +SET 2206548.40 1329026.51 +SET 2206640.32 1378026.48 +SET 22067.10 15300.90 +SET 2206895.60 1378185.90 +SET 2206906.59 1907693.39 +SET 2207406.16 1378504.74 +SET 2207422.80 1329553.17 +SET 220745.60 72396.80 +SET 2207661.44 1378664.16 +SET 220783.26 140995.68 +SET 2207916.72 1378823.58 +SET 2208172.00 1378983.00 +SET 2208172.26 1908787.46 +SET 22084.11 16379.64 +SET 2208682.56 1379301.84 +SET 2208734.40 1330343.16 +SET 2209171.60 1330606.49 +SET 22093.44 16386.56 +SET 2209300.62 1661397.24 +SET 220935.84 141093.12 +SET 220964.16 72468.48 +SET 2209859.82 1910246.22 +SET 2210214.24 1380258.36 +SET 221022.10 148077.82 +SET 2210469.52 1380417.78 +SET 2210637.16 1662402.32 +SET 2210703.60 1910975.60 +SET 221072.48 138057.72 +SET 221073.44 72504.32 +SET 221088.42 141190.56 +SET 2210980.08 1380736.62 +SET 2211.21 1640.04 +SET 22111.70 14814.14 +SET 221117.00 148141.40 +SET 22112.10 16400.40 +SET 2211357.60 1331923.14 +SET 221161.38 153349.02 +SET 2211745.92 1381214.88 +SET 221182.72 72540.16 +SET 2211973.70 1663407.40 +SET 221211.90 148204.98 +SET 221223.20 133244.98 +SET 2212232.00 1332449.80 +SET 2212256.48 1381533.72 +SET 221230.16 130575.48 +SET 2212391.16 1912434.36 +SET 2212511.76 1381693.14 +SET 221259.35 148236.77 +SET 2212669.20 1332713.13 +SET 221292.00 72576.00 +SET 221354.25 148300.35 +SET 2213656.83 1913528.43 +SET 221384.22 130666.41 +SET 2213980.80 1333503.12 +SET 22140.09 16421.16 +SET 2214078.72 1913893.12 +SET 2214298.72 1382809.08 +SET 2214554.00 1382968.50 +SET 2214765.21 1785388.96 +SET 2214855.20 1334029.78 +SET 221488.30 153575.70 +SET 22149.42 16428.08 +SET 2215319.84 1383446.76 +SET 221538.90 126127.47 +SET 221546.16 141482.88 +SET 2215729.60 1334556.44 +SET 2216085.68 1383925.02 +SET 221619.84 72683.52 +SET 2216340.96 1384084.44 +SET 2216596.24 1384243.86 +SET 221660.40 133508.31 +SET 2216610.06 1916081.26 +SET 2216651.59 1666925.18 +SET 2217041.20 1335346.43 +SET 2217362.08 1384722.12 +SET 221781.30 148586.46 +SET 2217872.64 1385040.96 +SET 2218127.92 1385200.38 +SET 221815.22 153802.38 +SET 221828.75 148618.25 +SET 221846.40 130939.20 +SET 22186.74 16455.76 +SET 221865.64 166843.28 +SET 2218719.51 1917904.71 +SET 2219141.40 1918269.40 +SET 2219227.20 1336663.08 +SET 2219323.68 1789063.68 +SET 2219404.32 1385997.48 +SET 2219563.29 1918634.09 +SET 2219659.60 1386156.90 +SET 2219664.40 1336926.41 +SET 2219914.88 1386316.32 +SET 2219985.18 1918998.78 +SET 2219992.94 1669437.88 +SET 2220.54 1646.96 +SET 2220170.16 1386475.74 +SET 222018.55 148745.41 +SET 2220407.07 1919363.47 +SET 22205.40 16469.60 +SET 222060.41 153972.39 +SET 222062.61 179011.36 +SET 2220661.21 1669940.42 +SET 222113.45 148808.99 +SET 2221191.28 1387113.42 +SET 2221329.48 1670442.96 +SET 2221413.20 1337979.73 +SET 222142.14 154029.06 +SET 2221701.84 1387432.26 +SET 2222212.40 1387751.10 +SET 222223.87 154085.73 +SET 2222516.52 1921186.92 +SET 2222579.73 1791688.48 +SET 2222724.80 1338769.72 +SET 222275.52 72898.56 +SET 2222978.24 1388229.36 +SET 22230.56 15414.24 +SET 222303.25 148936.15 +SET 222308.58 131211.99 +SET 222309.06 141970.08 +SET 2223162.00 1339033.05 +SET 222348.88 138854.82 +SET 2223782.19 1922280.99 +SET 2223882.15 1792738.40 +SET 222398.15 148999.73 +SET 2224002.56 1672453.12 +SET 2224533.36 1793263.36 +SET 222461.64 142067.52 +SET 222462.64 131302.92 +SET 2224670.83 1672955.66 +SET 222493.05 149063.31 +SET 2225184.57 1793788.32 +SET 22252.05 16504.20 +SET 2225275.76 1389664.14 +SET 222534.80 134034.97 +SET 222540.50 149095.10 +SET 2225469.75 1923739.75 +SET 2225531.04 1389823.56 +SET 222567.40 126713.02 +SET 222587.95 149126.89 +SET 222603.36 73006.08 +SET 222614.22 142164.96 +SET 222635.40 149158.68 +SET 2226552.16 1390461.24 +SET 2226675.64 1674463.28 +SET 2226807.44 1390620.66 +SET 222682.85 149190.47 +SET 2227096.80 1341403.02 +SET 222713.82 179536.32 +SET 222714.25 154425.75 +SET 2227573.28 1391098.92 +SET 222770.76 131484.78 +SET 2227789.41 1795888.16 +SET 222795.98 154482.42 +SET 22280.04 16524.96 +SET 222825.20 149285.84 +SET 2228339.12 1391577.18 +SET 222859.44 139173.66 +SET 222877.71 154539.09 +SET 2228844.87 1926657.27 +SET 2228845.60 1342456.34 +SET 222920.10 149349.42 +SET 2229266.76 1927021.96 +SET 2229615.52 1392374.28 +SET 222967.55 149381.21 +SET 2229688.65 1927386.65 +SET 22297.20 13429.83 +SET 222972.00 134298.30 +SET 2229720.00 1342983.00 +SET 222978.80 126947.24 +SET 2229870.80 1392533.70 +SET 223.92 166.08 +SET 2230.15 1494.13 +SET 2230016.99 1676975.98 +SET 2230126.08 1392693.12 +SET 223015.00 149413.00 +SET 2230157.20 1343246.33 +SET 2230381.36 1392852.54 +SET 2230394.25 1797988.00 +SET 223040.48 73149.44 +SET 223071.96 142457.28 +SET 223078.88 131666.64 +SET 2231147.20 1393330.80 +SET 2231376.21 1928845.41 +SET 2231402.48 1393490.22 +SET 2231468.80 1344036.32 +SET 223157.35 149508.37 +SET 2231696.67 1799037.92 +SET 223184.50 127064.35 +SET 2231913.04 1393809.06 +SET 223202.18 167848.36 +SET 223232.94 131757.57 +SET 2232347.88 1799562.88 +SET 2232423.60 1394127.90 +SET 223252.25 149571.95 +SET 223259.04 73221.12 +SET 2232641.88 1929939.48 +SET 2232780.40 1344826.31 +SET 223299.70 149603.74 +SET 2232999.09 1800087.84 +SET 2233063.77 1930304.17 +SET 2233444.72 1394765.58 +SET 22336.02 16566.48 +SET 2233654.80 1345352.97 +SET 223377.12 142652.16 +SET 223390.20 127181.46 +SET 223394.60 149667.32 +SET 2233955.28 1395084.42 +SET 2234301.51 1801137.76 +SET 223442.05 149699.11 +SET 2234465.84 1395403.26 +SET 22348.95 14973.09 +SET 2234952.72 1801662.72 +SET 2235173.22 1932127.62 +SET 223531.55 154992.45 +SET 2235363.15 1680996.30 +SET 22354.68 16580.32 +SET 2235403.60 1346406.29 +SET 223541.06 131939.43 +SET 2235486.96 1396040.94 +SET 223584.40 149794.48 +SET 2236031.42 1681498.84 +SET 223625.28 139651.92 +SET 2236252.80 1396519.20 +SET 2236255.14 1802712.64 +SET 223631.85 149826.27 +SET 2236438.89 1933221.69 +SET 223679.30 149858.06 +SET 223682.28 142847.04 +SET 2236906.35 1803237.60 +SET 223696.16 73364.48 +SET 2237152.40 1347459.61 +SET 223726.75 149889.85 +SET 2237367.96 1682503.92 +SET 2237529.20 1397316.30 +SET 2237704.56 1934315.76 +SET 223776.74 155162.46 +SET 2238208.77 1804287.52 +SET 2238295.04 1397794.56 +SET 223834.86 142944.48 +SET 223846.40 134824.96 +SET 2238464.00 1348249.60 +SET 223849.18 132121.29 +SET 2238548.34 1935045.14 +SET 2238805.60 1398113.40 +SET 2238901.20 1348512.93 +SET 2239060.88 1398272.82 +SET 22392.00 16608.00 +SET 2239316.16 1398432.24 +SET 2239392.12 1935774.52 +SET 2239775.60 1349039.59 +SET 2239826.72 1398751.08 +SET 223987.44 143041.92 +SET 2240082.00 1398910.50 +SET 2240162.40 1805862.40 +SET 2240212.80 1349302.92 +SET 2240337.28 1399069.92 +SET 224058.90 150112.38 +SET 2240847.84 1399388.76 +SET 224103.66 155389.14 +SET 224106.35 150144.17 +SET 2241103.12 1399548.18 +SET 2241358.40 1399707.60 +SET 2241377.58 1685519.16 +SET 224153.80 150175.96 +SET 224157.30 132303.15 +SET 224185.39 155445.81 +SET 22419.99 16628.76 +SET 2241923.46 1937962.66 +SET 2241961.60 1350356.24 +SET 224201.25 150207.75 +SET 22421.30 12764.99 +SET 2242379.52 1400345.28 +SET 224242.56 73543.68 +SET 224248.70 150239.54 +SET 22429.26 14323.68 +SET 22429.32 16635.68 +SET 224292.60 143236.80 +SET 2243189.13 1939056.73 +SET 2243400.64 1400982.96 +SET 2243418.45 1808487.20 +SET 224351.84 73579.52 +SET 2243710.40 1351409.56 +SET 224391.05 150334.91 +SET 224391.12 140130.18 +SET 2243911.20 1401301.80 +SET 2244032.91 1939786.11 +SET 2244050.66 1687529.32 +SET 22443.85 15036.67 +SET 224438.50 150366.70 +SET 2244421.76 1401620.64 +SET 2244454.80 1940150.80 +SET 224461.12 73615.36 +SET 2244677.04 1401780.06 +SET 224485.95 150398.49 +SET 2244876.69 1940515.49 +SET 2244932.32 1401939.48 +SET 2245298.58 1940880.18 +SET 224533.40 150430.28 +SET 2245387.20 1688534.40 +SET 2245442.88 1402258.32 +SET 224570.40 73651.20 +SET 224580.85 150462.07 +SET 224594.04 155729.16 +SET 2246142.36 1941609.56 +SET 224619.48 132575.94 +SET 224667.45 181111.20 +SET 2246723.74 1689539.48 +SET 224675.75 150525.65 +SET 2246986.14 1942338.94 +SET 2247325.71 1811636.96 +SET 22475.97 16670.28 +SET 224770.65 150589.23 +SET 2247740.40 1403693.10 +SET 2247995.68 1403852.52 +SET 2248.53 1667.72 +SET 2248082.40 1354042.86 +SET 224818.10 150621.02 +SET 2248251.81 1943433.01 +SET 224839.23 155899.17 +SET 22485.30 16677.20 +SET 224867.37 194379.77 +SET 2248728.55 1691047.10 +SET 2248761.52 1404330.78 +SET 2248956.80 1354569.52 +SET 224927.60 132757.80 +SET 2249279.34 1813211.84 +SET 22494.63 16684.12 +SET 2249517.48 1944527.08 +SET 2249527.36 1404809.04 +SET 224960.45 150716.39 +SET 2249939.37 1944891.77 +SET 225007.90 150748.18 +SET 2250268.40 1355359.51 +SET 225055.35 150779.97 +SET 225055.50 143724.00 +SET 2250581.76 1814261.76 +SET 225102.80 150811.76 +SET 2251059.04 1405765.56 +SET 2251232.97 1814786.72 +SET 2251314.32 1405924.98 +SET 225150.25 150843.55 +SET 2251580.00 1356149.50 +SET 2251626.93 1946350.53 +SET 225197.70 150875.34 +SET 2252048.82 1946715.22 +SET 225206.99 169355.98 +SET 2252454.40 1356676.16 +SET 2252535.39 1815836.64 +SET 2252892.60 1947444.60 +SET 22531.95 16711.80 +SET 2253101.28 1407040.92 +SET 225329.61 156239.19 +SET 2253328.80 1357202.82 +SET 225360.66 143918.88 +SET 225387.50 151002.50 +SET 225389.78 133030.59 +SET 22541.28 16718.72 +SET 2254158.27 1948538.67 +SET 225447.20 128352.56 +SET 2254489.02 1817411.52 +SET 2254580.16 1948903.36 +SET 2254640.40 1357992.81 +SET 22550.61 16725.64 +SET 2255002.05 1949268.05 +SET 2255077.60 1358256.14 +SET 225513.24 144016.32 +SET 2255143.52 1408316.28 +SET 225543.84 133121.52 +SET 22557.48 15640.92 +SET 225577.30 151129.66 +SET 22559.94 16732.56 +SET 2255952.00 1358782.80 +SET 2256079.52 1696575.04 +SET 225656.53 156465.87 +SET 225665.82 144113.76 +SET 225667.52 140927.28 +SET 2256675.20 1409272.80 +SET 22569.27 16739.48 +SET 2257111.50 1951091.50 +SET 2257185.76 1409591.64 +SET 2257263.60 1359572.79 +SET 2257416.06 1697580.12 +SET 2257441.04 1409751.06 +SET 2257533.39 1951456.19 +SET 225772.48 74045.44 +SET 2257951.60 1410069.90 +SET 2257955.28 1951820.88 +SET 225818.40 144211.20 +SET 225819.99 156579.21 +SET 2258462.16 1410388.74 +SET 225851.96 133303.38 +SET 2258575.20 1360362.78 +SET 22586.20 15132.04 +SET 22587.93 16753.32 +SET 2258972.72 1410707.58 +SET 225901.72 156635.88 +SET 2259047.49 1821086.24 +SET 225909.45 151352.19 +SET 225922.80 141086.70 +SET 2259642.84 1953279.64 +SET 225969.87 182161.12 +SET 2259698.70 1821611.20 +SET 2259738.56 1411185.84 +SET 226004.35 151415.77 +SET 2260064.73 1953644.33 +SET 226032.40 136141.61 +SET 2260324.00 1361416.10 +SET 2260349.91 1822136.16 +SET 2260486.62 1954009.02 +SET 226064.30 128703.89 +SET 2260757.41 1700092.82 +SET 2260908.51 1954373.71 +SET 226100.32 74152.96 +SET 2261001.12 1822661.12 +SET 2261014.96 1411982.94 +SET 2261330.40 1954738.40 +SET 226146.91 156805.89 +SET 2261635.60 1362206.09 +SET 226178.08 141246.12 +SET 2261780.80 1412461.20 +SET 226194.15 151542.93 +SET 226209.60 74188.80 +SET 2262174.18 1955467.78 +SET 226228.64 156862.56 +SET 226241.60 151574.72 +SET 22625.25 16781.00 +SET 2262546.64 1412939.46 +SET 22627.00 12882.10 +SET 226270.00 128821.00 +SET 226276.14 144503.52 +SET 226289.05 151606.51 +SET 2262947.20 1362996.08 +SET 2262954.75 1824236.00 +SET 226318.88 74224.64 +SET 226336.50 151638.30 +SET 2263384.40 1363259.41 +SET 2263439.85 1956561.85 +SET 2263567.76 1413577.14 +SET 2263821.60 1363522.74 +SET 2263861.74 1956926.54 +SET 22639.21 15697.59 +SET 2264078.32 1413895.98 +SET 2264257.17 1825285.92 +SET 2264283.63 1957291.23 +SET 226431.40 151701.88 +SET 2264333.60 1414055.40 +SET 2264588.88 1414214.82 +SET 22646.82 13366.71 +SET 226469.60 136404.94 +SET 226475.70 128938.11 +SET 2264908.38 1825810.88 +SET 2265133.20 1364312.73 +SET 226537.44 74296.32 +SET 2265559.59 1826335.84 +SET 2265610.00 1414852.50 +SET 226573.75 151797.25 +SET 226581.30 144698.40 +SET 2265971.19 1958749.99 +SET 2266120.56 1415171.34 +SET 226621.20 151829.04 +SET 226637.29 157145.91 +SET 2266393.08 1959114.68 +SET 2266771.84 1704615.68 +SET 2266862.01 1827385.76 +SET 226688.64 141564.96 +SET 226719.02 157202.58 +SET 2267396.96 1415968.44 +SET 2267440.11 1705118.22 +SET 2267513.22 1827910.72 +SET 226756.00 74368.00 +SET 2267658.75 1960208.75 +SET 226776.32 133848.96 +SET 226800.75 157259.25 +SET 2268162.80 1416446.70 +SET 2268164.43 1828435.68 +SET 2268418.08 1416606.12 +SET 2268502.53 1960938.13 +SET 226858.45 151987.99 +SET 2268630.80 1366419.37 +SET 2268673.36 1416765.54 +SET 2268815.64 1828960.64 +SET 226887.10 129172.33 +SET 2268928.64 1416924.96 +SET 226930.38 133939.89 +SET 226943.92 141724.38 +SET 2269444.92 1706625.84 +SET 2269505.20 1366946.03 +SET 226974.56 74439.68 +SET 2269942.40 1367209.36 +SET 2270113.19 1707128.38 +SET 2270118.06 1830010.56 +SET 2270205.04 1417722.06 +SET 2270379.60 1367472.69 +SET 2270715.60 1418040.90 +SET 227083.84 74475.52 +SET 2271033.87 1963126.27 +SET 2271226.16 1418359.74 +SET 2271420.48 1831060.48 +SET 2271481.44 1418519.16 +SET 2271992.00 1418838.00 +SET 2272071.69 1831585.44 +SET 227209.40 157542.60 +SET 227211.80 170863.60 +SET 2272118.00 1708636.00 +SET 2272128.40 1368526.01 +SET 227238.05 152242.31 +SET 227238.50 134121.75 +SET 2272757.84 1419316.26 +SET 2272786.27 1709138.54 +SET 227285.50 152274.10 +SET 227291.13 157599.27 +SET 2273268.40 1419635.10 +SET 227344.00 136931.60 +SET 227344.20 145185.60 +SET 2273440.00 1369316.00 +SET 2273454.54 1709641.08 +SET 2273523.68 1419794.52 +SET 227372.86 157655.94 +SET 2273778.96 1419953.94 +SET 227380.40 152337.68 +SET 2273987.10 1965679.10 +SET 227427.85 152369.47 +SET 2274314.40 1369842.66 +SET 2274544.80 1420432.20 +SET 22746.54 16870.96 +SET 2274791.08 1710646.16 +SET 2274830.88 1966408.48 +SET 227496.78 145283.04 +SET 2275188.80 1370369.32 +SET 227520.96 74618.88 +SET 227536.32 157769.28 +SET 2275626.00 1370632.65 +SET 2275978.95 1834735.20 +SET 2276063.20 1370895.98 +SET 2276331.76 1421548.14 +SET 227649.36 145380.48 +SET 227665.10 152528.42 +SET 2276842.32 1421866.98 +SET 2276940.33 1968231.93 +SET 227699.78 157882.62 +SET 2277281.37 1835785.12 +SET 2277352.88 1422185.82 +SET 2277362.22 1968596.62 +SET 22774.53 16891.72 +SET 2277464.16 1712656.32 +SET 2277784.11 1968961.31 +SET 2277863.44 1422504.66 +SET 2277932.58 1836310.08 +SET 227801.94 145477.92 +SET 22782.06 19693.26 +SET 227820.60 196932.60 +SET 2278583.79 1836835.04 +SET 2278627.89 1969690.69 +SET 227902.35 152687.37 +SET 22792.35 18373.60 +SET 227923.50 183736.00 +SET 2279235.00 1837360.00 +SET 22793.19 16905.56 +SET 227965.04 142362.06 +SET 2279886.21 1837884.96 +SET 228026.70 158109.30 +SET 228044.70 152782.74 +SET 2280805.51 1715169.02 +SET 228092.15 152814.53 +SET 2281188.63 1838934.88 +SET 228121.30 129874.99 +SET 2281947.92 1425055.38 +SET 2282003.01 1972608.21 +SET 2282142.05 1716174.10 +SET 228218.40 137458.26 +SET 2282203.20 1425214.80 +SET 228242.49 197297.29 +SET 228259.68 145770.24 +SET 2282713.76 1425533.64 +SET 2283142.26 1840509.76 +SET 228316.92 134758.26 +SET 2283224.32 1425852.48 +SET 2283268.68 1973702.28 +SET 228327.00 129992.10 +SET 2283478.59 1717179.18 +SET 2283479.60 1426011.90 +SET 2283495.60 1375372.59 +SET 2283690.57 1974066.97 +SET 2283734.88 1426171.32 +SET 2283793.47 1841034.72 +SET 2283990.16 1426330.74 +SET 2284245.44 1426490.16 +SET 228435.35 158392.65 +SET 2284370.00 1375899.25 +SET 2284534.35 1974796.35 +SET 228470.98 134849.19 +SET 2284756.00 1426809.00 +SET 2284807.20 1376162.58 +SET 2284815.13 1718184.26 +SET 2284956.24 1975161.04 +SET 2285011.28 1426968.42 +SET 228504.48 74941.44 +SET 228519.20 153100.64 +SET 2285244.40 1376425.91 +SET 2285266.56 1427127.84 +SET 2285378.13 1975525.73 +SET 2285483.40 1718686.80 +SET 228566.65 153132.43 +SET 2286118.80 1376952.57 +SET 228614.10 153164.22 +SET 2286221.91 1976255.11 +SET 2286287.68 1427765.52 +SET 2286542.96 1427924.94 +SET 228655.60 137721.59 +SET 2286556.00 1377215.90 +SET 228664.38 197661.98 +SET 228680.54 158562.66 +SET 228717.42 146062.56 +SET 2287308.80 1428403.20 +SET 2287430.40 1377742.56 +SET 2287488.21 1720194.42 +SET 228756.45 153259.59 +SET 2287819.36 1428722.04 +SET 2288.44 1586.76 +SET 2288074.64 1428881.46 +SET 2288156.48 1720696.96 +SET 2288331.36 1978078.56 +SET 2288351.94 1844709.44 +SET 22884.40 15867.60 +SET 228844.00 158676.00 +SET 2288585.20 1429200.30 +SET 22887.00 14616.00 +SET 228898.80 153354.96 +SET 2289003.15 1845234.40 +SET 2289095.76 1429519.14 +SET 228925.73 158732.67 +SET 228941.60 75084.80 +SET 2289493.02 1721702.04 +SET 22895.82 16981.68 +SET 2289616.40 1379059.21 +SET 2289654.36 1845759.36 +SET 2290018.92 1979537.32 +SET 229007.46 158789.34 +SET 2290116.88 1430156.82 +SET 2290372.16 1430316.24 +SET 2290440.81 1979902.01 +SET 2290490.80 1379585.87 +SET 229050.88 75120.64 +SET 229086.27 198026.67 +SET 229087.22 135212.91 +SET 2290882.72 1430635.08 +SET 2291365.20 1380112.53 +SET 2291393.28 1430953.92 +SET 2291497.83 1723209.66 +SET 2291607.99 1847334.24 +SET 2291648.56 1431113.34 +SET 229170.92 158902.68 +SET 2291706.48 1980996.08 +SET 229175.16 146354.88 +SET 229183.50 153545.70 +SET 22923.81 17002.44 +SET 229269.44 75192.32 +SET 229278.40 153609.28 +SET 2292972.15 1982090.15 +SET 229327.74 146452.32 +SET 2293435.52 1432229.28 +SET 229355.50 130577.65 +SET 2293551.20 1381429.18 +SET 229378.72 75228.16 +SET 2293815.93 1982819.53 +SET 2293988.40 1381692.51 +SET 229416.11 159072.69 +SET 2294170.91 1725219.82 +SET 2294425.60 1381955.84 +SET 2294456.64 1432866.96 +SET 2294659.71 1983548.91 +SET 2294862.80 1382219.17 +SET 2294864.04 1849959.04 +SET 2295.18 1702.32 +SET 229508.16 198391.36 +SET 229515.65 153768.23 +SET 2295300.00 1382482.50 +SET 229549.40 135485.70 +SET 2295515.25 1850484.00 +SET 2295733.04 1433664.06 +SET 2295737.20 1382745.83 +SET 229579.57 159186.03 +SET 229610.55 153831.81 +SET 2296243.60 1433982.90 +SET 229661.30 159242.70 +SET 2296769.16 1985372.36 +SET 229705.45 153895.39 +SET 2297191.05 1985737.05 +SET 2297264.72 1434620.58 +SET 229752.00 143478.00 +SET 229766.90 130811.87 +SET 2297775.28 1434939.42 +SET 2297923.20 1384062.48 +SET 229800.35 153958.97 +SET 2298030.56 1435098.84 +SET 2298034.83 1986466.43 +SET 229815.84 75371.52 +SET 2298285.84 1435258.26 +SET 2298456.72 1986831.12 +SET 2298541.12 1435417.68 +SET 2298796.40 1435577.10 +SET 2298878.61 1987195.81 +SET 229906.49 159412.71 +SET 2299234.80 1384852.47 +SET 229930.05 198756.05 +SET 2299422.51 1853633.76 +SET 2299517.07 1729240.14 +SET 2299562.24 1436055.36 +SET 2299672.00 1385115.80 +SET 2299722.39 1987925.19 +SET 22998.45 17057.80 +SET 2300073.72 1854158.72 +SET 2300144.28 1988289.88 +SET 230034.40 75443.20 +SET 2300566.17 1988654.57 +SET 2300583.36 1436693.04 +SET 2300988.06 1989019.26 +SET 2301604.48 1437330.72 +SET 230165.64 135849.42 +SET 230179.95 154213.29 +SET 2301831.84 1989748.64 +SET 2301858.00 1386432.45 +SET 2301859.76 1437490.14 +SET 2302027.35 1855733.60 +SET 2302115.04 1437649.56 +SET 2302295.20 1386695.78 +SET 230252.96 75514.88 +SET 2302678.56 1856258.56 +SET 230315.14 159696.06 +SET 230319.70 135940.35 +SET 2303391.44 1438446.66 +SET 23035.77 17085.48 +SET 230351.94 199120.74 +SET 2303606.80 1387485.77 +SET 230369.75 154340.45 +SET 230384.00 131163.20 +SET 2303902.00 1438765.50 +SET 2303941.29 1991572.09 +SET 230395.80 147134.40 +SET 2304044.00 1387749.10 +SET 230417.20 154372.24 +SET 2304363.18 1991936.78 +SET 23047.86 15980.94 +SET 2305355.60 1388539.09 +SET 2305433.68 1439722.02 +SET 2305628.85 1993030.85 +SET 2305688.96 1439881.44 +SET 23058.08 7562.24 +SET 230589.70 131280.31 +SET 2305934.61 1858883.36 +SET 2305944.24 1440040.86 +SET 2306050.74 1993395.54 +SET 230607.00 154499.40 +SET 2306199.77 1734265.54 +SET 2306472.63 1993760.23 +SET 2306667.20 1389329.08 +SET 2306710.08 1440519.12 +SET 230690.08 75658.24 +SET 230701.90 154562.98 +SET 2307104.40 1389592.41 +SET 23073.09 17113.16 +SET 2307475.92 1440997.38 +SET 2307536.31 1735270.62 +SET 230773.12 144115.68 +SET 2307738.30 1994854.30 +SET 2307986.48 1441316.22 +SET 230805.52 160036.08 +SET 2308160.19 1995218.99 +SET 2308241.76 1441475.64 +SET 230841.60 139038.24 +SET 2308416.00 1390382.40 +SET 2308539.45 1860983.20 +SET 2308752.32 1441794.48 +SET 230887.25 160092.75 +SET 2308872.85 1736275.70 +SET 230908.64 75729.92 +SET 2309190.66 1861508.16 +SET 2309290.40 1390909.06 +SET 230935.94 136304.07 +SET 230939.15 154721.93 +SET 2309541.12 1736778.24 +SET 2309727.60 1391172.39 +SET 2309773.44 1442432.16 +SET 2309847.75 1996677.75 +SET 231001.10 131514.53 +SET 231006.12 147524.16 +SET 23101.08 17133.92 +SET 231017.92 75765.76 +SET 2310269.64 1997042.44 +SET 2310284.00 1442751.00 +SET 231034.05 154785.51 +SET 231050.71 160206.09 +SET 2310539.28 1442910.42 +SET 2310794.56 1443069.84 +SET 231081.50 154817.30 +SET 2310877.66 1737783.32 +SET 23110.41 17140.84 +SET 2311039.20 1391962.38 +SET 2311144.29 1863083.04 +SET 231127.20 75801.60 +SET 231128.95 154849.09 +SET 231132.44 160262.76 +SET 2311535.31 1998136.51 +SET 2311545.93 1738285.86 +SET 23119.74 17147.76 +SET 2311957.20 1998501.20 +SET 231221.42 173878.84 +SET 231223.85 154912.67 +SET 231236.48 75837.44 +SET 2312446.71 1864132.96 +SET 2312581.52 1444185.78 +SET 231271.30 154944.46 +SET 2312788.00 1393015.70 +SET 2312800.98 1999230.58 +SET 2312836.80 1444345.20 +SET 23129.07 17154.68 +SET 231295.90 160376.10 +SET 2313347.36 1444664.04 +SET 2313644.76 1999959.96 +SET 2313662.40 1393542.36 +SET 23138.40 17161.60 +SET 231398.12 136576.86 +SET 2314488.54 2000689.34 +SET 231459.36 160489.44 +SET 2314879.04 1445620.56 +SET 2314910.43 2001054.03 +SET 2315051.55 1866232.80 +SET 231508.55 155103.41 +SET 2315134.32 1445779.98 +SET 231541.09 160546.11 +SET 2315411.20 1394595.68 +SET 23155.60 15513.52 +SET 231556.00 155135.20 +SET 231564.32 75944.96 +SET 2315644.88 1446098.82 +SET 2315754.21 2001783.41 +SET 231603.45 155166.99 +SET 2316155.44 1446417.66 +SET 231616.44 147913.92 +SET 2316176.10 2002148.10 +SET 2316223.82 1741803.64 +SET 2316597.99 2002512.79 +SET 231704.55 160659.45 +SET 231706.24 136758.72 +SET 23171.60 13956.49 +SET 23175.72 17189.28 +SET 2317560.36 1742808.72 +SET 2317942.40 1447533.60 +SET 2318307.60 1868857.60 +SET 2318452.96 1447852.44 +SET 231860.30 136849.65 +SET 2318708.24 1448011.86 +SET 2318896.90 1743813.80 +SET 2318908.80 1396702.32 +SET 2318963.52 1448171.28 +SET 231921.60 148108.80 +SET 23194.38 17203.12 +SET 2319729.36 1448649.54 +SET 232001.44 76088.32 +SET 2320220.40 1397492.31 +SET 2320233.44 1744818.88 +SET 2320239.92 1448968.38 +SET 23203.95 20057.95 +SET 232039.50 200579.50 +SET 2320495.20 1449127.80 +SET 2320657.60 1397755.64 +SET 232074.18 148206.24 +SET 2320912.44 1870957.44 +SET 2321005.76 1449446.64 +SET 232110.72 76124.16 +SET 2321238.78 2006524.38 +SET 232125.40 155516.68 +SET 23213.04 17216.96 +SET 232153.20 139828.23 +SET 232172.85 155548.47 +SET 2321771.60 1449924.90 +SET 2322082.56 2007253.76 +SET 232220.00 76160.00 +SET 2322238.25 1746326.50 +SET 232226.76 148303.68 +SET 2322504.45 2007618.45 +SET 2322792.72 1450562.58 +SET 2322843.60 1399072.29 +SET 2322926.34 2007983.14 +SET 232304.80 145072.20 +SET 232315.20 155643.84 +SET 232322.48 137122.44 +SET 2323280.80 1399335.62 +SET 232329.28 76195.84 +SET 2323303.28 1450881.42 +SET 2323574.79 1747331.58 +SET 2323718.00 1399598.95 +SET 2323770.12 2008712.52 +SET 2324168.49 1873582.24 +SET 2324192.01 2009077.21 +SET 232457.55 155739.21 +SET 2324579.68 1451678.52 +SET 2324819.70 1874107.20 +SET 2324911.33 1748336.66 +SET 23250.36 17244.64 +SET 2325035.79 2009806.59 +SET 232505.00 155771.00 +SET 2325090.24 1451997.36 +SET 232521.85 161226.15 +SET 232531.92 148498.56 +SET 2325466.80 1400652.27 +SET 232552.45 155802.79 +SET 232557.96 174883.92 +SET 2325879.57 2010535.97 +SET 23259.69 17251.56 +SET 2326111.36 1452635.04 +SET 2326341.20 1401178.93 +SET 2326366.64 1452794.46 +SET 232646.70 132451.41 +SET 2326621.92 1452953.88 +SET 2326723.35 2011265.35 +SET 2326773.33 1875682.08 +SET 2326778.40 1401442.26 +SET 2326877.20 1453113.30 +SET 23269.02 17258.48 +SET 2326916.14 1749844.28 +SET 232742.25 155929.95 +SET 2327643.04 1453591.56 +SET 2328075.75 1876732.00 +SET 2328090.00 1402232.25 +SET 2328410.91 2012724.11 +SET 2328664.16 1454229.24 +SET 2328726.96 1877256.96 +SET 2328919.44 1454388.66 +SET 232930.50 161509.50 +SET 2329378.17 1877781.92 +SET 2329430.00 1454707.50 +SET 2329589.22 1751854.44 +SET 2329685.28 1454866.92 +SET 23297.01 17279.24 +SET 2329838.80 1403285.57 +SET 232989.66 148790.88 +SET 2330098.47 2014182.87 +SET 233026.95 156120.69 +SET 233027.60 140354.89 +SET 2330276.00 1403548.90 +SET 233058.10 132685.63 +SET 2330706.40 1455504.60 +SET 233074.40 156152.48 +SET 2330942.25 2014912.25 +SET 2330961.68 1455664.02 +SET 233133.18 187935.68 +SET 2331364.14 2015276.94 +SET 2331472.24 1455982.86 +SET 23315.67 17293.08 +SET 233169.30 156216.06 +SET 2331982.80 1456301.70 +SET 2332024.80 1404602.22 +SET 2332207.92 2016006.32 +SET 2332238.08 1456461.12 +SET 233226.23 175386.46 +SET 2332462.00 1404865.55 +SET 2332493.36 1456620.54 +SET 233257.42 161736.18 +SET 233264.20 156279.64 +SET 2332748.64 1456779.96 +SET 2332899.20 1405128.88 +SET 2332930.57 1754367.14 +SET 2333051.70 2016735.70 +SET 233312.80 76518.40 +SET 2333285.43 1880931.68 +SET 2333598.84 1754869.68 +SET 2333769.76 1457417.64 +SET 2333773.60 1405655.54 +SET 2333895.48 2017465.08 +SET 23343.66 17313.84 +SET 233447.40 149083.20 +SET 233454.00 156406.80 +SET 2334587.85 1881981.60 +SET 233501.45 156438.59 +SET 233502.61 161906.19 +SET 23352.99 17320.76 +SET 2335239.06 1882506.56 +SET 2335522.40 1406708.86 +SET 2335583.04 2018923.84 +SET 233581.20 145869.30 +SET 2336004.93 2019288.53 +SET 23362.32 17327.68 +SET 2336271.92 1756879.84 +SET 2336396.80 1407235.52 +SET 233640.64 76625.92 +SET 233666.07 162019.53 +SET 2336833.12 1459330.68 +SET 233691.25 156565.75 +SET 2337088.40 1459490.10 +SET 233709.02 137940.81 +SET 2337192.69 1884081.44 +SET 2337270.60 2020382.60 +SET 2337343.68 1459649.52 +SET 233738.70 156597.54 +SET 23374.78 16207.62 +SET 233747.80 162076.20 +SET 233749.92 76661.76 +SET 233752.56 149278.08 +SET 2337608.46 1757884.92 +SET 2337692.49 2020747.29 +SET 2337708.40 1408025.51 +SET 233784.39 188460.64 +SET 2337843.90 1884606.40 +SET 2338114.38 2021111.98 +SET 2338536.27 2021476.67 +SET 233859.20 76697.60 +SET 233863.08 138031.74 +SET 233881.05 156692.91 +SET 23389.45 17588.90 +SET 23390.31 17348.44 +SET 233905.14 149375.52 +SET 2339130.64 1460765.46 +SET 2339146.32 1885656.32 +SET 233928.50 156724.70 +SET 2339380.05 2022206.05 +SET 2339613.27 1759392.54 +SET 2339797.53 1886181.28 +SET 2339896.48 1461243.72 +SET 233992.99 162246.21 +SET 2340151.76 1461403.14 +SET 2340448.74 1886706.24 +SET 234057.72 149472.96 +SET 2340645.72 2023300.12 +SET 234070.85 156820.07 +SET 2340768.80 1409868.82 +SET 2340917.60 1461881.40 +SET 2341172.88 1462040.82 +SET 234156.45 162359.55 +SET 23417.12 13821.36 +SET 2341751.16 1887756.16 +SET 2341911.39 2024394.19 +SET 234210.30 149570.40 +SET 2342194.00 1462678.50 +SET 2342286.35 1761402.70 +SET 2342402.37 1888281.12 +SET 2342449.28 1462837.92 +SET 234260.65 156947.23 +SET 234292.30 133388.29 +SET 2342954.80 1411185.47 +SET 2343177.06 2025488.26 +SET 234325.26 138304.53 +SET 2343392.00 1411448.80 +SET 2343598.95 2025852.95 +SET 234362.88 149667.84 +SET 2343704.79 1889331.04 +SET 2343725.68 1463635.02 +SET 2343829.20 1411712.13 +SET 2343980.96 1463794.44 +SET 23440.30 15704.26 +SET 2344020.84 2026217.64 +SET 2344236.24 1463953.86 +SET 2344291.16 1762910.32 +SET 234450.45 157074.39 +SET 234483.37 162586.23 +SET 234497.90 157106.18 +SET 2345286.51 2027311.71 +SET 234545.35 157137.97 +SET 2345578.00 1412765.45 +SET 23456.51 16264.29 +SET 234562.77 176391.54 +SET 2345627.70 1763915.40 +SET 2345658.42 1890905.92 +SET 234592.80 157169.76 +SET 2346023.20 1465069.80 +SET 2346130.29 2028041.09 +SET 234624.16 76948.48 +SET 2346309.63 1891430.88 +SET 23464.95 17403.80 +SET 2346533.76 1465388.64 +SET 2346552.18 2028405.78 +SET 234668.04 149862.72 +SET 2347044.32 1465707.48 +SET 2347299.60 1465866.90 +SET 2347554.88 1466026.32 +SET 2347612.05 1892480.80 +SET 234776.40 141408.21 +SET 2347817.85 2029499.85 +SET 234782.60 157296.92 +SET 2348065.44 1466345.16 +SET 234810.29 162812.91 +SET 234820.62 149960.16 +SET 2348263.26 1893005.76 +SET 2348300.78 1765925.56 +SET 2348320.72 1466504.58 +SET 23487.75 15736.05 +SET 2348969.05 1766428.10 +SET 2349086.56 1466982.84 +SET 234909.40 133739.62 +SET 234924.95 157392.29 +SET 2349341.84 1467142.26 +SET 234941.50 138668.25 +SET 2349512.80 1415135.42 +SET 2349637.32 1766930.64 +SET 23497.32 15005.76 +SET 234973.20 150057.60 +SET 2350349.19 2031687.99 +SET 2350362.96 1467779.94 +SET 235055.48 162982.92 +SET 2350618.24 1467939.36 +SET 2350771.08 2032052.68 +SET 2350824.40 1415925.41 +SET 2350973.86 1767935.72 +SET 235112.88 146825.82 +SET 235114.75 157519.45 +SET 235137.21 163039.59 +SET 2351642.13 1768438.26 +SET 235170.56 77127.68 +SET 2351894.64 1468736.46 +SET 235209.65 157583.03 +SET 2352136.00 1416715.40 +SET 235249.62 138850.11 +SET 235278.36 150252.48 +SET 2352821.73 1896680.48 +SET 2352915.76 1469374.14 +SET 235320.80 133973.84 +SET 2353447.60 1417505.39 +SET 235352.00 157678.40 +SET 2353681.60 1469852.40 +SET 2353724.31 2034605.51 +SET 23538.24 16320.96 +SET 235382.40 163209.60 +SET 235389.12 77199.36 +SET 23539.59 17459.16 +SET 235403.68 138941.04 +SET 235414.62 203497.02 +SET 2354146.20 2034970.20 +SET 2354447.44 1470330.66 +SET 235446.90 157741.98 +SET 23548.92 17466.08 +SET 235545.86 163322.94 +SET 2355633.60 1418822.04 +SET 2355833.76 2036428.96 +SET 235589.25 157837.35 +SET 235623.44 147144.66 +SET 2356255.65 2036793.65 +SET 235627.59 163379.61 +SET 235636.70 157869.14 +SET 235650.80 141934.87 +SET 2356508.00 1419348.70 +SET 2356677.54 2037158.34 +SET 23567.58 17479.92 +SET 23571.18 13912.29 +SET 235711.80 139122.90 +SET 235716.96 77306.88 +SET 235732.20 134208.06 +SET 235736.10 150544.80 +SET 2357380.20 1900355.20 +SET 2357382.40 1419875.36 +SET 2357819.60 1420138.69 +SET 235791.05 163492.95 +SET 2357943.21 2038252.41 +SET 2358256.80 1420402.02 +SET 235826.24 77342.72 +SET 2358365.10 2038617.10 +SET 235865.86 139213.83 +SET 2358682.62 1901405.12 +SET 235872.78 163549.62 +SET 235873.95 158028.09 +SET 2358787.20 1473040.80 +SET 235899.31 177396.62 +SET 2359042.48 1473200.22 +SET 2359131.20 1420928.68 +SET 2359208.88 2039346.48 +SET 235921.40 158059.88 +SET 2359333.83 1901930.08 +SET 23595.57 17500.68 +SET 2359568.40 1421192.01 +SET 2359808.32 1473678.48 +SET 2359985.04 1902455.04 +SET 2360063.60 1473837.90 +SET 23604.90 17507.60 +SET 236041.26 150739.68 +SET 2360442.80 1421718.67 +SET 2360636.25 1902980.00 +SET 2360829.44 1474316.16 +SET 236088.00 142198.20 +SET 2360997.91 1775473.82 +SET 236117.97 163719.63 +SET 2361317.20 1422245.33 +SET 2361340.00 1474635.00 +SET 236158.65 158218.83 +SET 2361595.28 1474794.42 +SET 2361740.22 2041534.62 +SET 2362162.11 2041899.31 +SET 2362191.60 1422771.99 +SET 23623.56 17521.44 +SET 2362334.45 1776478.90 +SET 236258.40 204226.40 +SET 2362589.88 1904554.88 +SET 2362628.80 1423035.32 +SET 2363002.72 1776981.44 +SET 2363066.00 1423298.65 +SET 23632.89 17528.36 +SET 236346.42 150934.56 +SET 236349.30 134559.39 +SET 2363637.52 1476069.78 +SET 2363670.99 1777483.98 +SET 2363849.67 2043358.07 +SET 2363892.30 1905604.80 +SET 2363892.80 1476229.20 +SET 2363940.40 1423825.31 +SET 236395.90 158377.78 +SET 23642.22 17535.28 +SET 2364271.56 2043722.76 +SET 2364339.26 1777986.52 +SET 2364377.60 1424088.64 +SET 236443.35 158409.57 +SET 2364814.80 1424351.97 +SET 2365424.48 1477185.72 +SET 236555.00 134676.50 +SET 236567.58 177899.16 +SET 2365675.80 1778991.60 +SET 2365845.93 1907179.68 +SET 236585.70 158504.94 +SET 2365935.04 1477504.56 +SET 236608.35 164059.65 +SET 2366126.40 1425141.96 +SET 236633.15 158536.73 +SET 2366344.07 1779494.14 +SET 2366445.60 1477823.40 +SET 2366497.14 1907704.64 +SET 236651.58 151129.44 +SET 236680.60 158568.52 +SET 2366802.90 2045910.90 +SET 236690.08 164116.32 +SET 2367000.80 1425668.62 +SET 2367012.34 1779996.68 +SET 2367148.35 1908229.60 +SET 2367211.44 1478301.66 +SET 2367224.79 2046275.59 +SET 2367646.68 2046640.28 +SET 23677.55 15863.21 +SET 2367722.00 1478620.50 +SET 236775.50 158632.10 +SET 2367977.28 1478779.92 +SET 2368232.56 1478939.34 +SET 2368348.88 1781001.76 +SET 2369253.68 1479577.02 +SET 236935.27 164286.33 +SET 236965.30 158759.26 +SET 2369685.42 1782006.84 +SET 2369753.19 1910329.44 +SET 2369756.13 2048463.73 +SET 2369764.24 1479895.86 +SET 23698.20 17576.80 +SET 2370019.52 1480055.28 +SET 2370061.20 1427511.93 +SET 23701.70 16434.30 +SET 2370498.40 1427775.26 +SET 2370599.91 2049193.11 +SET 237060.20 158822.84 +SET 23707.53 17583.72 +SET 2370935.60 1428038.59 +SET 2371040.64 1480692.96 +SET 237107.65 158854.63 +SET 2371295.92 1480852.38 +SET 237155.10 158886.42 +SET 237155.12 148101.18 +SET 2371690.23 1783514.46 +SET 2372.50 1589.50 +SET 2372358.50 1784017.00 +SET 237250.00 158950.00 +SET 237252.40 140032.20 +SET 2372684.40 1429091.91 +SET 2373026.77 1784519.54 +SET 2373082.88 1481968.32 +SET 2373121.60 1429355.24 +SET 237344.90 159013.58 +SET 2373593.44 1482287.16 +SET 237377.80 135144.94 +SET 237392.35 159045.37 +SET 237399.60 142988.19 +SET 237406.46 140123.13 +SET 2374104.00 1482606.00 +SET 2374359.28 1482765.42 +SET 2374363.31 1785524.62 +SET 237439.80 159077.16 +SET 2374396.92 2052475.32 +SET 23744.85 17611.40 +SET 2374614.56 1482924.84 +SET 237465.44 77880.32 +SET 2374869.84 1483084.26 +SET 237507.38 164683.02 +SET 2375125.12 1483243.68 +SET 2375307.60 1430671.89 +SET 2375635.68 1483562.52 +SET 2375744.80 1430935.22 +SET 237582.15 159172.53 +SET 2376182.00 1431198.55 +SET 2376265.29 1915579.04 +SET 23763.51 17625.24 +SET 2376401.52 1484040.78 +SET 2376506.37 2054298.77 +SET 2376619.20 1431461.88 +SET 237665.68 148420.02 +SET 2376656.80 1484200.20 +SET 237677.05 159236.11 +SET 237684.00 77952.00 +SET 237691.65 191610.40 +SET 237714.58 140304.99 +SET 2377167.36 1484519.04 +SET 23772.45 15926.79 +SET 23772.84 17632.16 +SET 237724.50 159267.90 +SET 2377350.15 2055028.15 +SET 2377493.60 1431988.54 +SET 2377567.71 1916628.96 +SET 2377677.92 1484837.88 +SET 237771.95 159299.69 +SET 2377772.04 2055392.84 +SET 2378188.48 1485156.72 +SET 23782.17 17639.08 +SET 237834.30 164909.70 +SET 2378372.93 1788539.86 +SET 237866.85 159363.27 +SET 237872.22 151908.96 +SET 2378805.20 1432778.53 +SET 2378954.32 1485634.98 +SET 23791.50 17646.00 +SET 237916.03 164966.37 +SET 2379709.47 1789544.94 +SET 2379720.16 1486113.24 +SET 2379881.49 2057216.29 +SET 2379975.44 1486272.66 +SET 2380172.55 1918728.80 +SET 23802.48 15200.64 +SET 238022.70 140486.85 +SET 2380230.72 1486432.08 +SET 238024.80 152006.40 +SET 2380303.38 2057580.98 +SET 2380486.00 1486591.50 +SET 2380554.00 1433831.85 +SET 23810.16 17659.84 +SET 238104.10 159522.22 +SET 2381147.16 2058310.36 +SET 2381507.12 1487229.18 +SET 238151.55 159554.01 +SET 2381569.05 2058675.05 +SET 238161.22 165136.38 +SET 2381714.28 1791052.56 +SET 238176.76 140577.78 +SET 2381865.60 1434621.84 +SET 238199.00 159585.80 +SET 2382126.18 1920303.68 +SET 2382272.96 1487707.44 +SET 2382302.80 1434885.17 +SET 2382382.55 1791555.10 +SET 238242.95 165193.05 +SET 238274.00 143514.85 +SET 2382777.39 1920828.64 +SET 23828.82 17673.68 +SET 2382834.72 2059769.12 +SET 238293.90 159649.38 +SET 2383256.61 2060133.81 +SET 2383678.50 2060498.50 +SET 2383804.64 1488663.96 +SET 238388.80 159712.96 +SET 2384051.60 1435938.49 +SET 238406.41 165306.39 +SET 2384315.20 1488982.80 +SET 2384387.36 1793062.72 +SET 23847.48 17687.52 +SET 2384731.02 1922403.52 +SET 238483.70 159776.54 +SET 2385055.63 1793565.26 +SET 2385366.06 2061957.26 +SET 2385382.23 1922928.48 +SET 23856.81 17694.44 +SET 238569.87 165419.73 +SET 2386237.60 1437255.14 +SET 238626.05 159871.91 +SET 2386357.44 1490258.16 +SET 238638.94 140850.57 +SET 2386392.17 1794570.34 +SET 23865.16 16547.64 +SET 23866.14 17701.36 +SET 2386612.72 1490417.58 +SET 238673.50 159903.70 +SET 2387053.62 2063416.02 +SET 2387112.00 1437781.80 +SET 238720.95 159935.49 +SET 238768.40 159967.28 +SET 238789.74 206414.54 +SET 2387897.40 2064145.40 +SET 23879.30 14094.15 +SET 2387987.07 1925028.32 +SET 238815.85 159999.07 +SET 238817.70 135964.71 +SET 2388423.60 1438571.79 +SET 2388741.18 2064874.78 +SET 238886.08 78346.24 +SET 2388860.80 1438835.12 +SET 238896.79 165646.41 +SET 2389163.07 2065239.47 +SET 2389165.52 1492011.78 +SET 23894.13 17722.12 +SET 238940.28 152591.04 +SET 238942.08 149217.12 +SET 2389420.80 1492171.20 +SET 238958.20 160094.44 +SET 2389584.96 2065604.16 +SET 2389733.52 1797083.04 +SET 239005.65 160126.23 +SET 239023.40 136081.82 +SET 2390401.79 1797585.58 +SET 239053.10 160158.02 +SET 2390697.20 1492968.30 +SET 239092.86 152688.48 +SET 239100.55 160189.81 +SET 2391463.04 1493446.56 +SET 2391694.41 2067427.61 +SET 2391738.33 1798590.66 +SET 2391894.33 1928178.08 +SET 239211.63 206779.23 +SET 239213.92 78453.76 +SET 2392484.16 1494084.24 +SET 2392795.60 1441205.09 +SET 2392994.72 1494403.08 +SET 23932.32 7848.96 +SET 2393232.80 1441468.42 +SET 239337.80 160348.76 +SET 2393670.00 1441731.75 +SET 2394225.75 2069615.75 +SET 2394271.12 1495200.18 +SET 239432.70 160412.34 +SET 2394411.41 1800600.82 +SET 2394526.40 1495359.60 +SET 23946.89 16604.31 +SET 239468.90 166043.10 +SET 2394981.60 1442521.74 +SET 23950.11 17763.64 +SET 2395036.96 1495678.44 +SET 2395069.53 2070345.13 +SET 2395079.68 1801103.36 +SET 2395292.24 1495837.86 +SET 239541.76 78561.28 +SET 2395491.42 2070709.82 +SET 239550.60 152980.80 +SET 239550.63 166099.77 +SET 239563.30 141396.15 +SET 2395801.59 1931327.84 +SET 2395802.80 1496156.70 +SET 2395856.00 1443048.40 +SET 23962.25 16053.95 +SET 239632.36 166156.44 +SET 2396335.20 2071439.20 +SET 239640.50 136433.15 +SET 23968.77 17777.48 +SET 239707.92 149695.38 +SET 2397084.49 1802610.98 +SET 239717.36 141487.08 +SET 239717.40 160603.08 +SET 2397178.98 2072168.58 +SET 239760.32 78632.96 +SET 239764.85 160634.87 +SET 2397752.76 1803113.52 +SET 239795.82 166269.78 +SET 2398355.60 1497750.90 +SET 239869.60 78668.80 +SET 23987.43 17791.32 +SET 239871.42 141578.01 +SET 239877.55 166326.45 +SET 2398866.54 2073627.34 +SET 2398916.40 1444891.71 +SET 2399057.64 1933952.64 +SET 239907.20 160730.24 +SET 239908.93 180411.86 +SET 2399121.44 1498229.16 +SET 2399288.43 2073992.03 +SET 239954.65 160762.03 +SET 23996.76 17798.24 +SET 2400142.56 1498866.84 +SET 2400360.06 1935002.56 +SET 240049.55 160825.61 +SET 24006.09 17805.16 +SET 2401418.96 1499663.94 +SET 2401819.77 2076180.17 +SET 240191.90 160920.98 +SET 240197.44 78776.32 +SET 2402430.65 1806631.30 +SET 2402663.55 2076909.55 +SET 2402695.36 1500461.04 +SET 24028.62 16660.98 +SET 240286.80 160984.56 +SET 2402950.64 1500620.46 +SET 240296.49 193710.24 +SET 2402964.90 1937102.40 +SET 240313.50 153468.00 +SET 2403205.92 1500779.88 +SET 240333.60 141850.80 +SET 240334.25 161016.35 +SET 24034.08 17825.92 +SET 2403929.22 2078003.62 +SET 2404.16 788.48 +SET 24041.60 7884.80 +SET 240416.00 78848.00 +SET 2404162.80 1448051.67 +SET 240429.15 161079.93 +SET 2404351.11 2078368.31 +SET 24046.00 14483.15 +SET 240460.00 144831.50 +SET 240463.30 136901.59 +SET 240466.08 153565.44 +SET 240473.76 150173.64 +SET 2404773.00 2078733.00 +SET 2405194.89 2079097.69 +SET 24052.74 17839.76 +SET 240525.28 78883.84 +SET 240531.39 166779.81 +SET 2405474.40 1448841.66 +SET 2405569.74 1939202.24 +SET 24057.15 16117.53 +SET 240571.50 161175.30 +SET 2405772.00 1809144.00 +SET 240613.12 166836.48 +SET 2406348.80 1449368.32 +SET 2406460.56 2080191.76 +SET 240666.40 161238.88 +SET 2406786.00 1449631.65 +SET 2407035.12 1503171.18 +SET 2407108.54 1810149.08 +SET 240729.04 150333.06 +SET 2407523.37 1940777.12 +SET 240761.30 161302.46 +SET 240771.24 153760.32 +SET 2407776.81 1810651.62 +SET 24080.73 17860.52 +SET 240808.75 161334.25 +SET 2408097.60 1450421.64 +SET 2408174.58 1941302.08 +SET 2408570.01 2082015.21 +SET 240897.20 145094.83 +SET 24090.06 17867.44 +SET 240923.82 153857.76 +SET 2409332.64 1504605.96 +SET 240940.04 167063.16 +SET 240947.70 194235.20 +SET 240951.10 161429.62 +SET 2409587.92 1504765.38 +SET 240984.32 150492.48 +SET 241021.77 167119.83 +SET 2410257.57 2083473.97 +SET 2410449.89 1812661.78 +SET 2410864.32 1505562.48 +SET 2411118.16 1813164.32 +SET 2411119.60 1505721.90 +SET 2411158.00 1452264.95 +SET 2411595.20 1452528.28 +SET 2411945.13 2084932.73 +SET 241228.98 154052.64 +SET 2412367.02 2085297.42 +SET 2412454.70 1814169.40 +SET 241266.96 167289.84 +SET 241290.24 79134.72 +SET 2413122.97 1814671.94 +SET 2413161.84 1506997.26 +SET 241321.08 208602.68 +SET 2413384.26 1945501.76 +SET 24136.71 17902.04 +SET 2413632.69 2086391.49 +SET 241381.56 154150.08 +SET 241399.52 79170.56 +SET 2414035.47 1946026.72 +SET 2414218.40 1454108.26 +SET 24146.04 17908.96 +SET 2414655.60 1454371.59 +SET 2414686.68 1946551.68 +SET 241491.80 137487.14 +SET 241494.88 150811.32 +SET 2414948.80 1508113.20 +SET 24150.88 7920.64 +SET 241508.80 79206.40 +SET 2415127.78 1816179.56 +SET 24152.05 16181.11 +SET 2415204.08 1508272.62 +SET 2415320.25 2087850.25 +SET 2415337.89 1947076.64 +SET 2415530.00 1454898.25 +SET 241567.95 161842.89 +SET 2415742.14 2088214.94 +SET 2415967.20 1455161.58 +SET 2415989.10 1947601.60 +SET 2416.47 1792.28 +SET 2416480.48 1509069.72 +SET 241675.61 167573.19 +SET 241686.72 154344.96 +SET 241710.30 161938.26 +SET 241720.14 142669.17 +SET 241727.36 79278.08 +SET 24174.03 17929.72 +SET 2417429.70 2089673.70 +SET 241750.16 150970.74 +SET 241771.60 145621.49 +SET 2417716.00 1456214.90 +SET 2418153.20 1456478.23 +SET 2418267.44 1510185.66 +SET 2418273.48 2090403.08 +SET 241839.07 167686.53 +SET 241839.30 154442.40 +SET 241852.65 162033.63 +SET 2418593.94 1949701.44 +SET 2418695.37 2090767.77 +SET 24187.42 14276.01 +SET 241900.10 162065.42 +SET 24192.69 17943.56 +SET 2419539.15 2091497.15 +SET 2419896.36 1950751.36 +SET 242005.44 151130.16 +SET 2420054.40 1511301.60 +SET 2420309.68 1511461.02 +SET 2420382.93 2092226.53 +SET 2420564.96 1511620.44 +SET 2420804.82 2092591.22 +SET 242089.90 162192.58 +SET 2421142.21 1820702.42 +SET 242137.35 162224.37 +SET 242144.46 154637.28 +SET 242164.48 79421.44 +SET 242182.32 142941.96 +SET 242184.80 162256.16 +SET 24220.68 17964.32 +SET 2422088.00 1458848.20 +SET 242232.25 162287.95 +SET 2422501.20 1952851.20 +SET 2422607.20 1512895.80 +SET 242273.76 79457.28 +SET 2422962.40 1459374.86 +SET 242297.04 154734.72 +SET 242327.15 162351.53 +SET 2423336.16 2094779.36 +SET 2423373.04 1513374.06 +SET 2423758.05 2095144.05 +SET 2423815.29 1822712.58 +SET 242383.04 79493.12 +SET 242411.18 168083.22 +SET 2424179.94 2095508.74 +SET 2424274.00 1460164.85 +SET 2424483.56 1823215.12 +SET 2424601.83 2095873.43 +SET 242469.50 162446.90 +SET 2424711.20 1460428.18 +SET 24248.67 17985.08 +SET 2424904.72 1514330.58 +SET 242492.91 168139.89 +SET 24251.60 15144.90 +SET 2425106.04 1954951.04 +SET 2425160.00 1514490.00 +SET 2425415.28 1514649.42 +SET 242564.40 162510.48 +SET 2425925.84 1514968.26 +SET 24260.22 15492.96 +SET 242601.60 79564.80 +SET 242602.20 154929.60 +SET 242611.85 162542.27 +SET 2426460.00 1461481.50 +SET 24267.33 17998.92 +SET 2426897.20 1461744.83 +SET 2426946.96 1515605.94 +SET 2427059.67 1956525.92 +SET 2427156.64 1825225.28 +SET 24273.81 16830.99 +SET 242738.10 168309.90 +SET 242754.78 155027.04 +SET 2427555.06 2098426.26 +SET 2427712.80 1516084.20 +SET 2427771.60 1462271.49 +SET 242798.56 143305.68 +SET 242820.16 79636.48 +SET 2428362.09 1957575.84 +SET 2428493.18 1826230.36 +SET 24285.99 18012.76 +SET 2428989.20 1516881.30 +SET 242901.56 168423.24 +SET 242907.36 155124.48 +SET 2429161.45 1826732.90 +SET 2429242.62 2099885.02 +SET 2429244.48 1517040.72 +SET 242944.00 162764.80 +SET 2429499.76 1517200.14 +SET 2429755.04 1517359.56 +SET 242983.29 168479.91 +SET 2430315.72 1959150.72 +SET 24304.65 18026.60 +SET 2430497.99 1827737.98 +SET 2430508.29 2100979.09 +SET 243059.94 155221.92 +SET 2430966.93 1959675.68 +SET 2431166.26 1828240.52 +SET 2431269.20 1464378.13 +SET 24313.98 18033.52 +SET 2431352.07 2101708.47 +SET 243137.40 138424.02 +SET 243146.75 168593.25 +SET 2431542.00 1518475.50 +SET 2431618.14 1960200.64 +SET 2431834.53 1828743.06 +SET 243212.52 155319.36 +SET 24323.31 18040.44 +SET 2432563.12 1519113.18 +SET 2432580.80 1465168.12 +SET 243276.15 162987.33 +SET 243281.84 151927.26 +SET 2432818.40 1519272.60 +SET 2433039.63 2103167.23 +SET 2433073.68 1519432.02 +SET 2433455.20 1465694.78 +SET 2433461.52 2103531.92 +SET 243371.05 163050.91 +SET 2433839.34 1830250.68 +SET 2433883.41 2103896.61 +SET 243391.94 168763.26 +SET 24341.48 14366.94 +SET 24341.97 18054.28 +SET 243414.80 143669.40 +SET 2434222.98 1962300.48 +SET 243430.53 210426.13 +SET 24351.30 18061.20 +SET 243517.68 155514.24 +SET 2435175.88 1831255.76 +SET 243520.40 146674.81 +SET 243537.12 152086.68 +SET 243548.80 138658.24 +SET 243552.54 196335.04 +SET 2435525.40 1963350.40 +SET 243560.85 163178.07 +SET 2435626.48 1521026.22 +SET 2435992.86 2105720.06 +SET 24360.63 18068.12 +SET 2436078.40 1467274.76 +SET 243608.30 163209.86 +SET 2436392.32 1521504.48 +SET 243655.75 163241.65 +SET 243670.26 155611.68 +SET 2436836.64 2106449.44 +SET 24369.44 7992.32 +SET 24369.96 18075.04 +SET 243694.40 79923.20 +SET 2436952.80 1467801.42 +SET 243718.86 168989.94 +SET 2437180.69 1832763.38 +SET 2437258.53 2106814.13 +SET 2437390.00 1468064.75 +SET 2437479.03 1964925.28 +SET 2437668.72 1522301.58 +SET 2437827.20 1468328.08 +SET 2437848.96 1833265.92 +SET 243800.59 169046.61 +SET 2438102.31 2107543.51 +SET 243822.84 155709.12 +SET 243882.32 169103.28 +SET 24389.30 16340.06 +SET 243893.00 163400.60 +SET 2438945.12 1523098.68 +SET 2439367.98 2108637.58 +SET 243940.45 163432.39 +SET 2439455.68 1523417.52 +SET 2439576.00 1469381.40 +SET 243964.05 169159.95 +SET 2439710.96 1523576.94 +SET 243975.42 155806.56 +SET 2439853.77 1834773.54 +SET 2440013.20 1469644.73 +SET 2440083.87 1967025.12 +SET 2440221.52 1523895.78 +SET 244035.35 163495.97 +SET 244045.78 169216.62 +SET 2440476.80 1524055.20 +SET 24407.28 18102.72 +SET 244082.80 163527.76 +SET 2440987.36 1524374.04 +SET 2441242.64 1524533.46 +SET 244130.25 163559.55 +SET 244131.52 80066.56 +SET 2441324.80 1470434.72 +SET 2441477.43 2110461.03 +SET 2441497.92 1524692.88 +SET 24416.61 18109.64 +SET 24425.94 18116.56 +SET 2442688.71 1969124.96 +SET 244274.31 211155.51 +SET 244290.97 169386.63 +SET 2443029.60 1525649.40 +SET 2443073.60 1471488.04 +SET 244350.08 80138.24 +SET 244367.50 163718.50 +SET 24437.27 16944.33 +SET 2444008.77 2112649.17 +SET 2444306.00 1526446.50 +SET 2444385.20 1472278.03 +SET 2444531.66 1838291.32 +SET 244454.43 169499.97 +SET 244459.36 80174.08 +SET 244462.40 163782.08 +SET 2444822.40 1472541.36 +SET 244509.85 163813.87 +SET 2445199.93 1838793.86 +SET 2445327.12 1527084.18 +SET 244536.16 169556.64 +SET 244557.30 163845.66 +SET 2445582.40 1527243.60 +SET 244585.74 156196.32 +SET 2445868.20 1839296.40 +SET 244604.75 163877.45 +SET 2446118.22 2114472.62 +SET 2446134.00 1473331.35 +SET 244617.89 169613.31 +SET 244647.28 144396.84 +SET 2446571.20 1473594.68 +SET 244677.92 80245.76 +SET 24469.62 21152.02 +SET 2446962.00 2115202.00 +SET 244699.65 163941.03 +SET 2447008.40 1473858.01 +SET 2447624.64 1528518.96 +SET 24478.30 13936.09 +SET 24478.72 8028.16 +SET 244783.00 139360.90 +SET 244801.34 144487.77 +SET 24481.92 18158.08 +SET 244813.52 152883.78 +SET 244842.00 164036.40 +SET 244854.96 197384.96 +SET 2448541.28 1841306.56 +SET 2448549.60 1973849.60 +SET 244863.08 169783.32 +SET 2448645.76 1529156.64 +SET 2448649.56 2116660.76 +SET 2448757.20 1474911.33 +SET 244890.90 156391.20 +SET 24491.25 18165.00 +SET 2449156.32 1529475.48 +SET 2449194.40 1475174.66 +SET 244936.90 164099.98 +SET 244944.81 169839.99 +SET 2449493.34 2117390.14 +SET 244955.40 144578.70 +SET 2449631.60 1475437.99 +SET 2449666.88 1529794.32 +SET 2449852.02 1974899.52 +SET 24500.58 18171.92 +SET 2450068.80 1475701.32 +SET 2450337.12 2118119.52 +SET 24506.88 15304.32 +SET 245068.80 153043.20 +SET 2450688.00 1530432.00 +SET 2450759.01 2118484.21 +SET 245079.25 164195.35 +SET 2451.90 1700.10 +SET 245109.46 144669.63 +SET 245115.04 80389.12 +SET 245126.70 164227.14 +SET 2451380.40 1476491.31 +SET 2451453.84 1530910.26 +SET 2451805.65 1976474.40 +SET 2451817.60 1476754.64 +SET 2451882.63 1843819.26 +SET 24519.00 17001.00 +SET 245190.00 170010.00 +SET 2451964.40 1531229.10 +SET 2452024.68 2119578.28 +SET 2452456.86 1976999.36 +SET 245263.52 144760.56 +SET 2452730.24 1531707.36 +SET 2453.79 1819.96 +SET 2453290.35 2120672.35 +SET 245348.64 156683.52 +SET 2453496.08 1532185.62 +SET 245353.46 170123.34 +SET 245363.95 164386.09 +SET 245400.10 139712.23 +SET 2454261.92 1532663.88 +SET 245435.19 170180.01 +SET 245442.88 80496.64 +SET 2454555.71 1845829.42 +SET 2454556.02 2121766.42 +SET 245458.85 164449.67 +SET 24547.23 18206.52 +SET 2454878.00 1478597.95 +SET 245506.30 164481.46 +SET 2455223.98 1846331.96 +SET 2455315.20 1478861.28 +SET 245539.98 212249.58 +SET 245553.75 164513.25 +SET 24556.56 18213.44 +SET 2455793.60 1533620.40 +SET 245601.20 164545.04 +SET 2456189.60 1479387.94 +SET 2456243.58 2123225.18 +SET 2456364.12 1980149.12 +SET 245648.65 164576.83 +SET 24565.38 15687.84 +SET 2456665.47 2123589.87 +SET 2457325.28 1534576.92 +SET 245743.55 164640.41 +SET 2457666.54 1981199.04 +SET 245770.72 80604.16 +SET 2457835.84 1534895.76 +SET 2457897.06 1848342.12 +SET 2457931.14 2124683.94 +SET 245806.38 156975.84 +SET 245811.50 139946.45 +SET 2458353.03 2125048.63 +SET 2458375.60 1480704.59 +SET 245838.45 164703.99 +SET 245843.84 170463.36 +SET 2458601.68 1535374.02 +SET 2458812.80 1480967.92 +SET 245885.90 164735.78 +SET 2458968.96 1982248.96 +SET 2459112.24 1535692.86 +SET 2459250.00 1481231.25 +SET 245933.35 164767.57 +SET 2459367.52 1535852.28 +SET 245958.96 157073.28 +SET 2459687.20 1481494.58 +SET 245989.28 80675.84 +SET 2459901.87 1849849.74 +SET 2460271.38 1983298.88 +SET 246028.25 164831.15 +SET 246033.82 145215.21 +SET 2460570.14 1850352.28 +SET 2460884.37 2127236.77 +SET 246098.56 80711.68 +SET 2461154.48 1536968.22 +SET 246157.38 198434.88 +SET 2461665.04 1537287.06 +SET 246170.60 164926.52 +SET 2461920.32 1537446.48 +SET 246218.05 164958.31 +SET 2462310.40 1483074.56 +SET 2462430.88 1537765.32 +SET 2462574.95 1851859.90 +SET 24626.55 16499.01 +SET 2462686.16 1537924.74 +SET 2462876.22 1985398.72 +SET 2462993.82 2129060.22 +SET 246312.95 165021.89 +SET 246317.12 80783.36 +SET 2463527.43 1985923.68 +SET 246360.40 165053.68 +SET 2463911.49 1852864.98 +SET 2464.96 1454.88 +SET 24640.53 18275.72 +SET 246416.70 157365.60 +SET 2464259.49 2130154.29 +SET 2464473.12 1539040.68 +SET 2464579.76 1853367.52 +SET 24649.86 18282.64 +SET 2464933.60 1484654.54 +SET 246497.68 170916.72 +SET 246502.75 165149.05 +SET 2465248.03 1853870.06 +SET 2465370.80 1484917.87 +SET 2465494.24 1539678.36 +SET 246579.41 170973.39 +SET 246580.80 148518.12 +SET 246591.63 185437.26 +SET 2466004.80 1539997.20 +SET 2466260.08 1540156.62 +SET 2466368.94 2131977.74 +SET 246644.96 80890.88 +SET 246645.10 165244.42 +SET 2466515.36 1540316.04 +SET 2466682.40 1485707.86 +SET 2467.40 1653.08 +SET 2467119.60 1485971.19 +SET 246721.86 157560.48 +SET 2467212.72 2132707.12 +SET 246740.00 165308.00 +SET 2467634.61 2133071.81 +SET 24677.85 18303.40 +SET 246787.45 165339.79 +SET 2468.40 1405.32 +SET 246804.12 145669.86 +SET 2468047.04 1541272.56 +SET 246834.90 165371.58 +SET 246840.00 140532.00 +SET 2468478.39 2133801.19 +SET 24687.18 18310.32 +SET 2469068.16 1541910.24 +SET 2469257.65 1856885.30 +SET 2469388.32 1990648.32 +SET 246958.18 145760.79 +SET 246972.80 80998.40 +SET 247024.70 165498.74 +SET 247045.70 140649.11 +SET 247069.79 171313.41 +SET 2470690.74 1991698.24 +SET 2470855.12 1543026.18 +SET 2471054.40 1488341.16 +SET 247112.24 145851.72 +SET 247119.60 165562.32 +SET 2471262.46 1858392.92 +SET 2471431.62 2136354.02 +SET 24715.17 18331.08 +SET 247151.52 171370.08 +SET 247167.05 165594.11 +SET 24717.96 15785.28 +SET 2471876.24 1543663.86 +SET 247191.36 81070.08 +SET 2471928.80 1488867.82 +SET 2471930.73 1858895.46 +SET 247214.50 165625.90 +SET 2472275.40 2137083.40 +SET 2472599.00 1859398.00 +SET 247266.30 145942.65 +SET 2472697.29 2137448.09 +SET 247309.40 165689.48 +SET 2473240.40 1489657.81 +SET 24733.83 18344.92 +SET 247366.32 154477.98 +SET 2473935.54 1860403.08 +SET 247420.36 146033.58 +SET 2474384.85 2138906.85 +SET 2474429.04 1545258.06 +SET 24745.98 19948.48 +SET 2474598.00 1994848.00 +SET 2474603.81 1860905.62 +SET 2474806.74 2139271.54 +SET 247484.76 158047.68 +SET 247499.20 165816.64 +SET 2475249.21 1995372.96 +SET 2475272.08 1861408.16 +SET 2475426.40 1490974.46 +SET 247546.65 165848.43 +SET 2475705.44 1546055.16 +SET 2475900.42 1995897.92 +SET 2476300.80 1491501.12 +SET 2476471.28 1546533.42 +SET 2476551.63 1996422.88 +SET 247662.80 141000.44 +SET 247689.00 165943.80 +SET 2477276.89 1862915.78 +SET 247737.76 81249.28 +SET 2477492.40 1547171.10 +SET 2477854.05 1997472.80 +SET 2478181.86 2142189.06 +SET 2478258.24 1547649.36 +SET 247847.04 81285.12 +SET 2478486.80 1492817.77 +SET 247868.50 141117.55 +SET 247876.88 154796.82 +SET 2478768.80 1547968.20 +SET 247878.80 166070.96 +SET 247882.54 146306.37 +SET 2479024.08 1548127.62 +SET 2479025.64 2142918.44 +SET 2479279.36 1548287.04 +SET 2479361.20 1493344.43 +SET 247968.82 171936.78 +SET 2479869.42 2143647.82 +SET 2480045.20 1548765.30 +SET 2480458.89 1999572.64 +SET 24806.56 8135.68 +SET 248068.60 166198.12 +SET 248071.32 214437.72 +SET 2480811.04 1549243.56 +SET 248095.08 158437.44 +SET 2481110.00 1494397.75 +SET 248116.05 166229.91 +SET 2481761.31 2000622.56 +SET 2481832.16 1549881.24 +SET 2481978.87 2145471.27 +SET 2482087.44 1550040.66 +SET 2482598.00 1550359.50 +SET 2482623.05 1866936.10 +SET 2482853.28 1550518.92 +SET 2483108.56 1550678.34 +SET 248353.30 166388.86 +SET 24836.46 18421.04 +SET 2483714.94 2002197.44 +SET 248377.47 172220.13 +SET 248400.75 166420.65 +SET 2484088.32 2147294.72 +SET 2484170.40 1496241.06 +SET 2484366.15 2002722.40 +SET 2484640.24 1551634.86 +SET 248485.60 141468.88 +SET 2484895.52 1551794.28 +SET 248493.21 214802.41 +SET 2485017.36 2003247.36 +SET 248552.82 158729.76 +SET 2485668.57 2003772.32 +SET 2485775.88 2148753.48 +SET 2486171.92 1552591.38 +SET 248642.72 155275.08 +SET 2486793.60 1497821.04 +SET 248721.28 81571.84 +SET 248732.90 166643.18 +SET 2487622.20 2005347.20 +SET 2487703.60 1553547.90 +SET 2487958.88 1553707.32 +SET 2488214.16 1553866.74 +SET 2488469.44 1554026.16 +SET 248857.98 158924.64 +SET 2488637.48 1871458.96 +SET 2488729.11 2151306.31 +SET 248897.00 141703.10 +SET 2488980.00 1554345.00 +SET 2489305.75 1871961.50 +SET 2489572.89 2152035.69 +SET 2489575.83 2006922.08 +SET 248960.96 146942.88 +SET 248970.15 166802.13 +SET 2489745.84 1554823.26 +SET 2489974.02 1872464.04 +SET 24901.77 18469.48 +SET 249010.56 159022.08 +SET 2490416.67 2152765.07 +SET 249049.12 81679.36 +SET 2490642.29 1872966.58 +SET 249065.05 166865.71 +SET 2490838.56 2153129.76 +SET 249102.70 141820.21 +SET 2491022.24 1555620.36 +SET 249112.50 166897.50 +SET 2491310.56 1873469.12 +SET 249153.28 155593.92 +SET 249159.95 166929.29 +SET 2491602.80 1500717.67 +SET 2491682.34 2153859.14 +SET 2491788.08 1556098.62 +SET 249194.77 172786.83 +SET 2491978.83 1873971.66 +SET 24920.40 15009.81 +SET 24920.43 18483.32 +SET 2492043.36 1556258.04 +SET 249269.08 147124.74 +SET 2492831.88 2009546.88 +SET 24929.76 18490.24 +SET 249315.72 159216.96 +SET 249336.99 215531.79 +SET 249349.75 167056.45 +SET 249358.23 172900.17 +SET 24939.09 18497.16 +SET 249408.56 155753.34 +SET 2494134.30 2010596.80 +SET 2494340.88 1557692.82 +SET 2494635.57 2156411.97 +SET 249468.30 159314.40 +SET 24948.42 18504.08 +SET 2495106.72 1558171.08 +SET 249514.10 142054.43 +SET 249539.55 167183.61 +SET 2495436.72 2011646.72 +SET 2495537.60 1503087.64 +SET 24958.70 16721.54 +SET 2495901.24 2157506.04 +SET 2495988.45 1876986.90 +SET 249603.42 173070.18 +SET 2496127.84 1558808.76 +SET 249620.88 159411.84 +SET 2496412.00 1503614.30 +SET 2496739.14 2012696.64 +SET 2496745.02 2158235.42 +SET 2496893.68 1559287.02 +SET 249731.26 147397.53 +SET 2497404.24 1559605.86 +SET 24976.41 18524.84 +SET 249766.88 173183.52 +SET 249773.46 159509.28 +SET 2498010.69 2159329.49 +SET 2498160.80 1504667.62 +SET 2498170.08 1560084.12 +SET 2498425.36 1560243.54 +SET 2498661.53 1878997.06 +SET 2498680.64 1560402.96 +SET 2498692.77 2014271.52 +SET 2498854.47 2160058.87 +SET 2499035.20 1505194.28 +SET 249919.15 167437.93 +SET 249925.50 142288.65 +SET 2499276.36 2160423.56 +SET 2499329.80 1879499.60 +SET 2499343.98 2014796.48 +SET 2499957.04 1561200.06 +SET 2499995.19 2015321.44 +SET 2500.44 1854.56 +SET 2500120.14 2161152.94 +SET 2500212.32 1561359.48 +SET 2500346.80 1505984.27 +SET 2500467.60 1561518.90 +SET 2500542.03 2161517.63 +SET 250064.64 201584.64 +SET 2500722.88 1561678.32 +SET 250078.62 159704.16 +SET 25009.38 17341.02 +SET 250093.80 173410.20 +SET 2500963.92 2161882.32 +SET 2500978.16 1561837.74 +SET 2501221.20 1506510.93 +SET 2501385.81 2162247.01 +SET 250141.92 82037.76 +SET 2501658.40 1506774.26 +SET 250174.40 156231.60 +SET 250193.44 147670.32 +SET 2501999.28 1562475.42 +SET 250203.85 167628.67 +SET 2502229.59 2162976.39 +SET 250231.20 159801.60 +SET 25025.12 8207.36 +SET 250251.30 167660.46 +SET 250298.75 167692.25 +SET 25032.39 18566.36 +SET 2503251.24 2017946.24 +SET 250336.90 142522.87 +SET 250347.50 147761.25 +SET 250360.48 82109.44 +SET 2503786.24 1563591.36 +SET 250383.78 159899.04 +SET 2503844.40 1508090.91 +SET 2504007.69 1883017.38 +SET 2504041.52 1563750.78 +SET 250420.72 173636.88 +SET 2504675.96 1883519.92 +SET 250469.76 82145.28 +SET 2504718.80 1508617.57 +SET 250488.55 167819.41 +SET 2505156.00 1508880.90 +SET 2505344.23 1884022.46 +SET 250536.36 159996.48 +SET 250583.45 167882.99 +SET 250584.18 173750.22 +SET 250601.25 188452.50 +SET 2506012.50 1884525.00 +SET 250602.66 216625.86 +SET 2506030.40 1509407.56 +SET 2506594.32 1565344.98 +SET 2506680.77 1885027.54 +SET 250715.85 202109.60 +SET 2507349.04 1885530.08 +SET 2507360.16 1565823.24 +SET 250748.30 142757.09 +SET 2507615.44 1565982.66 +SET 2507714.16 2167717.36 +SET 2507870.72 1566142.08 +SET 2508017.31 1886032.62 +SET 250841.52 160191.36 +SET 2508460.92 2022145.92 +SET 2508636.56 1566620.34 +SET 2508653.60 1510987.54 +SET 250868.15 168073.73 +SET 25088.37 18607.88 +SET 2508891.84 1566779.76 +SET 2508979.83 2168811.43 +SET 2509.77 1861.48 +SET 2509090.80 1511250.87 +SET 250915.60 168105.52 +SET 250940.24 156709.86 +SET 2509823.61 2169540.81 +SET 250992.83 174033.57 +SET 2509965.20 1511777.53 +SET 251.91 186.84 +SET 2510022.12 1887540.24 +SET 251057.95 168200.89 +SET 2510678.80 1567895.70 +SET 25107.03 18621.72 +SET 2511065.76 2024245.76 +SET 25111.78 14821.59 +SET 251146.68 160386.24 +SET 25125.69 18635.56 +SET 2512695.20 1889550.40 +SET 2512721.04 1569171.06 +SET 2512976.32 1569330.48 +SET 251299.26 160483.68 +SET 2513.44 824.32 +SET 251319.75 174260.25 +SET 2513620.62 2172823.02 +SET 251365.40 143108.42 +SET 2513670.60 2026345.60 +SET 251390.00 151414.75 +SET 2514.85 1684.87 +SET 251401.48 174316.92 +SET 2514337.20 1514410.83 +SET 2514508.00 1570287.00 +SET 2514886.29 2173917.09 +SET 25153.68 18656.32 +SET 2515308.18 2174281.78 +SET 2515529.12 1570924.68 +SET 2515624.23 2027920.48 +SET 251564.94 174430.26 +SET 251571.10 143225.53 +SET 2515730.07 2174646.47 +SET 2516036.55 1892063.10 +SET 2516086.00 1515464.15 +SET 251627.35 168582.37 +SET 2516294.96 1571402.94 +SET 2516573.85 2175375.85 +SET 2516805.52 1571721.78 +SET 2516995.74 2175740.54 +SET 2517060.80 1571881.20 +SET 25172.34 18670.16 +SET 25172.84 17454.36 +SET 251728.40 174543.60 +SET 2517417.63 2176105.23 +SET 25175.70 16077.60 +SET 251769.70 168677.74 +SET 251781.12 82575.36 +SET 2518041.36 1893570.72 +SET 2518229.07 2030020.32 +SET 2518261.41 2176834.61 +SET 251827.20 151678.08 +SET 2518272.00 1516780.80 +SET 2518880.28 2030545.28 +SET 251891.86 174656.94 +SET 251909.58 160873.44 +SET 25195.95 16880.49 +SET 2519583.60 1517570.79 +SET 251961.36 157347.54 +SET 2519613.60 1573475.40 +SET 251982.50 143459.75 +SET 2519948.97 2178293.37 +SET 251999.68 82647.04 +SET 2520182.70 2031595.20 +SET 2520370.86 2178658.06 +SET 2520458.00 1518097.45 +SET 252054.40 168868.48 +SET 252055.32 174770.28 +SET 2520714.44 1895580.88 +SET 2520895.20 1518360.78 +SET 2521214.64 2179387.44 +SET 252149.30 168932.06 +SET 25218.99 18704.76 +SET 252216.64 157506.96 +SET 2522166.40 1575069.60 +SET 252218.24 82718.72 +SET 252244.20 168995.64 +SET 252264.40 151941.41 +SET 2522644.00 1519414.10 +SET 25228.32 18711.68 +SET 2522902.20 2180846.20 +SET 252291.65 169027.43 +SET 2522932.24 1575547.86 +SET 2523081.20 1519677.43 +SET 2523387.52 1897591.04 +SET 2523438.75 2034220.00 +SET 252386.55 169091.01 +SET 252393.90 143693.97 +SET 2524167.87 2181940.27 +SET 2524208.64 1576344.96 +SET 25243.40 16912.28 +SET 2524463.92 1576504.38 +SET 2524589.76 2182304.96 +SET 252463.97 175053.63 +SET 252519.90 161263.20 +SET 2525392.33 1899098.66 +SET 252545.70 175110.30 +SET 2525704.40 1521257.41 +SET 2525740.32 1577301.48 +SET 252576.35 169218.17 +SET 2525855.43 2183399.03 +SET 2525995.60 1577460.90 +SET 2526141.60 1521520.74 +SET 2526277.32 2183763.72 +SET 25265.84 14912.52 +SET 2526506.16 1577779.74 +SET 252658.40 149125.20 +SET 252669.48 203684.48 +SET 252672.48 161360.64 +SET 2526728.87 1900103.74 +SET 252701.60 152204.74 +SET 2527016.00 1522047.40 +SET 252709.16 175223.64 +SET 25272.72 15782.58 +SET 25274.97 18746.28 +SET 2527453.20 1522310.73 +SET 252764.64 82897.92 +SET 252766.15 169345.33 +SET 252790.89 175280.31 +SET 2527997.22 2037894.72 +SET 2528037.84 1578736.26 +SET 252805.30 143928.19 +SET 2528065.41 1901108.82 +SET 252813.60 169377.12 +SET 2528327.60 1522837.39 +SET 252873.92 82933.76 +SET 2529299.64 2038944.64 +SET 25293.63 18760.12 +SET 2529401.95 1902113.90 +SET 252954.35 175393.65 +SET 252955.95 169472.49 +SET 252977.64 161555.52 +SET 2529824.80 1579852.20 +SET 252983.20 82969.60 +SET 2529950.85 2039469.60 +SET 2530074.33 2187045.93 +SET 2530080.08 1580011.62 +SET 25302.96 18767.04 +SET 2530335.36 1580171.04 +SET 253036.08 175450.32 +SET 2530602.06 2039994.56 +SET 2530738.49 1903118.98 +SET 2530918.11 2187775.31 +SET 253092.48 83005.44 +SET 253098.30 169567.86 +SET 2531.34 2188.14 +SET 253117.81 175506.99 +SET 253120.58 149397.99 +SET 2531253.27 2040519.52 +SET 2531356.48 1580808.72 +SET 253138.80 152468.07 +SET 2531761.89 2188504.69 +SET 2531867.04 1581127.56 +SET 253199.54 175563.66 +SET 253201.76 83041.28 +SET 25321.62 18780.88 +SET 2532122.32 1581286.98 +SET 253237.76 158144.64 +SET 2532555.69 2041569.44 +SET 25328.28 16175.04 +SET 253281.27 175620.33 +SET 253282.80 161750.40 +SET 25330.95 18787.80 +SET 2533143.44 1581924.66 +SET 253335.55 169726.81 +SET 2533411.57 1905129.14 +SET 25338.30 16975.86 +SET 253383.00 169758.60 +SET 2533871.34 2190328.14 +SET 2534079.84 1905631.68 +SET 253420.32 83112.96 +SET 253428.70 149579.85 +SET 2534293.23 2190692.83 +SET 2534419.84 1582721.76 +SET 2534675.12 1582881.18 +SET 2534748.11 1906134.22 +SET 253477.90 169822.18 +SET 2535160.53 2043669.28 +SET 2535185.68 1583200.02 +SET 25352.96 8314.88 +SET 253526.46 175790.34 +SET 2535322.80 1527050.67 +SET 253555.89 219178.69 +SET 25357.60 15273.14 +SET 253572.80 169885.76 +SET 253582.76 149670.78 +SET 2535951.52 1583678.28 +SET 2536197.20 1527577.33 +SET 2536402.68 2192516.28 +SET 2536462.08 1583997.12 +SET 2536634.40 1527840.66 +SET 2536717.36 1584156.54 +SET 2537071.60 1528103.99 +SET 2537114.16 2045244.16 +SET 253736.82 149761.71 +SET 2537421.19 1908144.38 +SET 2537738.48 1584794.22 +SET 2537765.37 2045769.12 +SET 2537946.00 1528630.65 +SET 253833.80 144513.74 +SET 2538383.20 1528893.98 +SET 2538416.58 2046294.08 +SET 2538504.32 1585272.48 +SET 2538512.13 2194339.73 +SET 253853.38 176017.02 +SET 25386.93 18829.32 +SET 2538759.60 1585431.90 +SET 253890.88 149852.64 +SET 2538934.02 2194704.42 +SET 2539067.79 2046819.04 +SET 253935.11 176073.69 +SET 2539426.00 1909652.00 +SET 253966.72 83292.16 +SET 2539719.00 2047344.00 +SET 254003.60 158622.90 +SET 2540132.00 1529947.30 +SET 254044.94 149943.57 +SET 254045.70 162237.60 +SET 2540621.58 2196163.18 +SET 254098.57 176187.03 +SET 2541006.40 1530473.96 +SET 2541021.42 2048393.92 +SET 25414.92 18850.08 +SET 2541430.81 1911159.62 +SET 2541822.96 1587344.94 +SET 2541887.25 2197257.25 +SET 254198.28 162335.04 +SET 254199.00 150034.50 +SET 2542078.24 1587504.36 +SET 2542099.08 1911662.16 +SET 2542318.00 1531263.95 +SET 25424.25 18857.00 +SET 2542588.80 1587823.20 +SET 2542755.20 1531527.28 +SET 2542767.35 1912164.70 +SET 2543099.36 1588142.04 +SET 254350.86 162432.48 +SET 2543574.81 2198716.01 +SET 2543626.26 2050493.76 +SET 254379.45 170426.19 +SET 2544066.80 1532317.27 +SET 2544103.89 1913169.78 +SET 25442.91 18870.84 +SET 254425.49 176413.71 +SET 2544375.76 1588939.14 +SET 2544418.59 2199445.39 +SET 254450.90 144865.07 +SET 2544504.00 1532580.60 +SET 2544631.04 1589098.56 +SET 2544928.68 2051543.68 +SET 2544941.20 1532843.93 +SET 254521.80 170521.56 +SET 2545396.88 1589576.82 +SET 2545652.16 1589736.24 +SET 2545684.26 2200539.46 +SET 25461.57 18884.68 +SET 2546162.72 1590055.08 +SET 254622.40 83507.20 +SET 2546231.10 2052593.60 +SET 2546528.04 2201268.84 +SET 254661.18 150307.29 +SET 254664.15 170616.93 +SET 2546690.00 1533897.25 +SET 254670.68 176583.72 +SET 2546928.56 1590533.34 +SET 2546949.93 2201633.53 +SET 2547127.20 1534160.58 +SET 254731.68 83543.04 +SET 2547445.24 1915682.48 +SET 254759.05 170680.51 +SET 2547793.71 2202362.91 +SET 25480.23 18898.52 +SET 2548001.60 1534687.24 +SET 254840.96 83578.88 +SET 254862.30 145099.29 +SET 2548715.52 1591649.28 +SET 2548781.78 1916687.56 +SET 25489.56 18905.44 +SET 254915.87 176753.73 +SET 2549313.20 1535477.23 +SET 2549481.27 2203821.67 +SET 2549481.36 1592127.54 +SET 254961.18 162822.24 +SET 2550187.60 1536003.89 +SET 2550247.20 1592605.80 +SET 255043.75 170871.25 +SET 255059.52 83650.56 +SET 25506.80 14521.64 +SET 2550624.80 1536267.22 +SET 2550746.94 2204915.74 +SET 255091.20 170903.04 +SET 255123.36 150580.08 +SET 2551454.86 1918697.72 +SET 2551523.60 1593402.90 +SET 255161.06 176923.74 +SET 255168.80 83686.40 +SET 2551936.40 1537057.21 +SET 2552.80 1594.20 +SET 2552034.16 1593721.74 +SET 2552123.13 1919200.26 +SET 255277.42 150671.01 +SET 255278.08 83722.24 +SET 25528.00 15942.00 +SET 25528.10 17103.02 +SET 255280.00 159420.00 +SET 255281.00 171030.20 +SET 2552810.80 1537583.87 +SET 2552856.39 2206739.19 +SET 2553248.00 1537847.20 +SET 255375.90 171093.78 +SET 255387.36 83758.08 +SET 2554045.62 2058893.12 +SET 255406.25 177093.75 +SET 2554122.06 2207833.26 +SET 255423.35 171125.57 +SET 2554559.60 1538637.19 +SET 2554696.83 2059418.08 +SET 255496.64 83793.92 +SET 2554965.84 2208562.64 +SET 255518.25 171189.15 +SET 255535.28 159579.42 +SET 2555434.00 1539163.85 +SET 255565.70 171220.94 +SET 255569.71 177207.09 +SET 2555809.62 2209292.02 +SET 2555999.25 2060468.00 +SET 2556.42 1896.08 +SET 2556231.51 2209656.71 +SET 2556308.40 1539690.51 +SET 25564.20 18960.80 +SET 255665.34 221002.14 +SET 2556653.40 2210021.40 +SET 2556801.02 1922718.04 +SET 255715.20 83865.60 +SET 2557182.80 1540217.17 +SET 255724.08 163309.44 +SET 25573.53 18967.72 +SET 255739.60 150943.80 +SET 2557469.29 1923220.58 +SET 2558340.96 2211480.16 +SET 2558762.85 2211844.85 +SET 2558805.83 1924225.66 +SET 255893.66 151034.73 +SET 255897.85 171443.47 +SET 25592.19 18981.56 +SET 2559474.10 1924728.20 +SET 2559606.63 2212574.23 +SET 255978.36 177490.44 +SET 2559906.51 2063617.76 +SET 2560028.52 2212938.92 +SET 25601.52 18988.48 +SET 2560243.20 1542060.48 +SET 256040.20 171538.84 +SET 256043.04 83973.12 +SET 2560680.40 1542323.81 +SET 2560810.64 1925733.28 +SET 256096.50 145801.95 +SET 2561478.91 1926235.82 +SET 2561554.80 1542850.47 +SET 2561860.14 2065192.64 +SET 2561992.00 1543113.80 +SET 2562137.97 2214762.37 +SET 2562511.35 2065717.60 +SET 256261.60 84044.80 +SET 2562866.40 1543640.46 +SET 256305.28 177717.12 +SET 2563162.56 2066242.56 +SET 256324.90 171729.58 +SET 2563740.80 1544167.12 +SET 2563813.77 2066767.52 +SET 2563825.53 2216221.13 +SET 256387.01 177773.79 +SET 2564178.00 1544430.45 +SET 2564247.42 2216585.82 +SET 256467.25 171824.95 +SET 256468.74 177830.46 +SET 256480.16 84116.48 +SET 256486.98 163796.64 +SET 256509.12 221731.52 +SET 2565488.53 1929251.06 +SET 2565934.98 2218044.58 +SET 256615.68 192975.36 +SET 2566356.87 2218409.27 +SET 256639.56 163894.08 +SET 2566418.61 2068867.36 +SET 25666.83 19036.92 +SET 2566778.76 2218773.96 +SET 2566825.07 1930256.14 +SET 256698.72 84188.16 +SET 256751.95 172015.69 +SET 25676.16 19043.84 +SET 2568044.43 2219868.03 +SET 2568466.32 2220232.72 +SET 256877.39 178113.81 +SET 2568829.88 1931763.76 +SET 2568888.21 2220597.41 +SET 256941.75 172142.85 +SET 2569498.15 1932266.30 +SET 2570153.88 2221691.48 +SET 2570166.42 1932768.84 +SET 257026.56 84295.68 +SET 2570325.87 2072017.12 +SET 257036.65 172206.43 +SET 2570977.08 2072542.08 +SET 25712.50 14638.75 +SET 2571610.40 1548907.06 +SET 257179.00 172301.80 +SET 2572047.60 1549170.39 +SET 257226.45 172333.59 +SET 257280.20 151853.10 +SET 257283.95 193477.90 +SET 257286.04 178397.16 +SET 2572922.00 1549697.05 +SET 2572930.71 2074116.96 +SET 257367.77 178453.83 +SET 2573950.89 2224973.69 +SET 2574176.04 1935784.08 +SET 2574233.13 2075166.88 +SET 257463.68 84439.04 +SET 2574670.80 1550750.37 +SET 25750.80 19099.20 +SET 257510.80 155101.37 +SET 2575108.00 1551013.70 +SET 257511.15 172524.33 +SET 257536.40 146621.72 +SET 2575545.20 1551277.03 +SET 2575638.45 2226432.45 +SET 257577.52 160854.78 +SET 25760.13 19106.12 +SET 2576060.34 2226797.14 +SET 257612.96 178623.84 +SET 2576482.23 2227161.83 +SET 257682.24 84510.72 +SET 2576849.12 1937794.24 +SET 2576856.80 1552067.02 +SET 2576904.12 2227526.52 +SET 257700.95 172651.49 +SET 257707.62 164576.16 +SET 2577294.00 1552330.35 +SET 2577489.18 2077791.68 +SET 2577517.39 1938296.78 +SET 25778.79 19119.96 +SET 2578168.40 1552857.01 +SET 25783.28 16101.42 +SET 257832.80 161014.20 +SET 257843.30 172746.86 +SET 257858.15 178793.85 +SET 25786.02 16467.36 +SET 2578605.60 1553120.34 +SET 2578853.93 1939301.86 +SET 25790.08 8458.24 +SET 257938.20 172810.44 +SET 25794.80 15536.47 +SET 257947.80 146855.94 +SET 257985.65 172842.23 +SET 2579857.35 2230079.35 +SET 2579917.20 1553910.33 +SET 258010.08 84618.24 +SET 258012.78 164771.04 +SET 2580279.24 2230444.04 +SET 258033.10 172874.02 +SET 2580701.13 2230808.73 +SET 2580745.23 2080416.48 +SET 2580791.60 1554436.99 +SET 258088.08 161173.62 +SET 258103.34 178963.86 +SET 2581123.02 2231173.42 +SET 2581228.80 1554700.32 +SET 2581396.44 2080941.44 +SET 2581527.01 1941312.02 +SET 258165.36 164868.48 +SET 258185.07 179020.53 +SET 258196.68 223190.28 +SET 258204.56 152398.68 +SET 2582103.20 1555226.98 +SET 258222.90 173001.18 +SET 25825.44 19154.56 +SET 2582540.40 1555490.31 +SET 2582810.58 2232632.18 +SET 258317.94 164965.92 +SET 2583232.47 2232996.87 +SET 258337.92 84725.76 +SET 258365.25 173096.55 +SET 2583852.00 1556280.30 +SET 2584001.28 2083041.28 +SET 2584076.25 2233726.25 +SET 2584200.09 1943322.18 +SET 258447.20 84761.60 +SET 2584498.14 2234090.94 +SET 258460.15 173160.13 +SET 2584868.36 1943824.72 +SET 2584920.03 2234455.63 +SET 258507.60 173191.92 +SET 258511.99 179247.21 +SET 2585163.60 1557070.29 +SET 258530.37 208409.12 +SET 2585341.92 2234820.32 +SET 258555.05 173223.71 +SET 258556.48 84797.44 +SET 2585600.80 1557333.62 +SET 2585954.91 2084616.16 +SET 258602.50 173255.50 +SET 2586038.00 1557596.95 +SET 258620.49 194482.98 +SET 2586204.90 1944829.80 +SET 2586475.20 1557860.28 +SET 258675.45 179360.55 +SET 2586873.17 1945332.34 +SET 2587451.37 2236643.77 +SET 2587541.44 1945834.88 +SET 258770.60 147324.38 +SET 258775.04 84869.12 +SET 25882.08 15276.24 +SET 258820.80 152762.40 +SET 2588209.71 1946337.42 +SET 258822.40 155891.36 +SET 258838.91 179473.89 +SET 258853.92 161651.88 +SET 2588661.20 1559176.93 +SET 2588717.04 2237737.84 +SET 258887.20 173446.24 +SET 2588877.98 1946839.96 +SET 2589210.96 2087240.96 +SET 2589560.82 2238467.22 +SET 2589972.80 1559966.92 +SET 25900.08 19209.92 +SET 2590214.52 1947845.04 +SET 2590410.00 1560230.25 +SET 2590847.20 1560493.58 +SET 2590882.79 1948347.58 +SET 259124.45 173605.19 +SET 2591248.38 2239925.98 +SET 2591551.06 1948850.12 +SET 2591815.80 2089340.80 +SET 259182.00 147558.60 +SET 2592092.16 2240655.36 +SET 259266.80 173700.56 +SET 259282.98 153035.19 +SET 259288.76 194985.52 +SET 2592887.60 1949855.20 +SET 2593.86 1656.48 +SET 2593357.83 2241749.43 +SET 259361.70 173764.14 +SET 2593769.43 2090915.68 +SET 2593779.72 2242114.12 +SET 25938.60 16564.80 +SET 2593907.60 1562336.89 +SET 259411.02 179870.58 +SET 2594201.61 2242478.81 +SET 2594224.14 1950860.28 +SET 259430.72 85084.16 +SET 259437.04 153126.12 +SET 259492.75 179927.25 +SET 259504.05 173859.51 +SET 259538.58 165745.44 +SET 2595723.06 2092490.56 +SET 259591.10 153217.05 +SET 259593.40 147792.82 +SET 259598.95 173923.09 +SET 259646.40 173954.88 +SET 25965.39 19258.36 +SET 259696.80 156418.02 +SET 2597405.20 1564443.53 +SET 259745.16 153307.98 +SET 259758.56 85191.68 +SET 259788.75 174050.25 +SET 259799.10 147909.93 +SET 259819.67 180153.93 +SET 259832.79 209459.04 +SET 2598716.80 1565233.52 +SET 259883.65 174113.83 +SET 259884.24 224649.04 +SET 2598842.40 2246490.40 +SET 2598902.03 1954378.06 +SET 2598979.11 2095115.36 +SET 259899.22 153398.91 +SET 25990.14 18021.06 +SET 259901.40 180210.60 +SET 25993.38 19279.12 +SET 259957.03 195488.06 +SET 2599591.20 1565760.18 +SET 2599686.18 2247219.78 +SET 259977.12 85263.36 +SET 259978.55 174177.41 +SET 2600028.40 1566023.51 +SET 260004.80 148027.04 +SET 26002.71 19286.04 +SET 260026.00 174209.20 +SET 2600281.53 2096165.28 +SET 2600465.60 1566286.84 +SET 2600529.96 2247949.16 +SET 260053.28 153489.84 +SET 2600906.84 1955885.68 +SET 2600951.85 2248313.85 +SET 260130.32 162448.98 +SET 2601340.00 1566813.50 +SET 2601373.74 2248678.54 +SET 260146.59 180380.61 +SET 2601575.11 1956388.22 +SET 2601583.95 2097215.20 +SET 260210.50 148144.15 +SET 2602217.52 2249407.92 +SET 2602235.16 2097740.16 +SET 2602243.38 1956890.76 +SET 260263.25 174368.15 +SET 2602651.60 1567603.49 +SET 26030.70 19306.80 +SET 2603088.80 1567866.82 +SET 260310.05 180493.95 +SET 2603483.19 2250501.99 +SET 2603526.00 1568130.15 +SET 26036.14 15367.17 +SET 26038.56 16260.84 +SET 260391.78 180550.62 +SET 2604.84 2099.84 +SET 2604188.79 2099315.04 +SET 2604248.19 1958398.38 +SET 2604326.97 2251231.37 +SET 2604748.86 2251596.06 +SET 2604837.60 1568920.14 +SET 260547.95 174558.89 +SET 260555.24 180663.96 +SET 260571.20 156944.68 +SET 260621.90 148378.37 +SET 260642.85 174622.47 +SET 26068.02 19334.48 +SET 260690.30 174654.26 +SET 260728.02 225378.42 +SET 260737.75 174686.05 +SET 2607589.54 1960911.08 +SET 26077.35 19341.40 +SET 2607898.00 1570763.45 +SET 2608096.05 2102464.80 +SET 2608123.98 2254513.58 +SET 260827.60 148495.48 +SET 260851.36 85550.08 +SET 2608545.87 2254878.27 +SET 2608772.40 1571290.11 +SET 260896.16 162927.24 +SET 2608967.76 2255242.96 +SET 260911.80 166622.40 +SET 260927.55 174813.21 +SET 2609389.65 2255607.65 +SET 260963.89 180947.31 +SET 26097.50 17484.50 +SET 261008.40 157208.01 +SET 261022.45 174876.79 +SET 261033.30 148612.59 +SET 261045.62 181003.98 +SET 261069.90 174908.58 +SET 2610700.89 2104564.64 +SET 26114.67 19369.08 +SET 2611499.10 2257431.10 +SET 26117.92 8565.76 +SET 261179.20 85657.60 +SET 2612.40 1937.60 +SET 2612003.31 2105614.56 +SET 261209.08 181117.32 +SET 2612342.88 2258160.48 +SET 261239.00 148729.70 +SET 261259.70 175035.74 +SET 2612707.20 1573660.08 +SET 2612764.77 2258525.17 +SET 261290.81 181173.99 +SET 261293.57 196493.14 +SET 261307.15 175067.53 +SET 26133.33 19382.92 +SET 261354.60 175099.32 +SET 2613581.60 1574186.74 +SET 2613608.55 2259254.55 +SET 261372.54 181230.66 +SET 261397.76 85729.28 +SET 261402.05 175131.11 +SET 26142.66 19389.84 +SET 2614272.24 1965936.48 +SET 2614456.00 1574713.40 +SET 261454.27 181287.33 +SET 2615.36 1813.44 +SET 261507.04 85765.12 +SET 261522.12 167012.16 +SET 2615296.11 2260713.31 +SET 261544.40 175226.48 +SET 2615608.78 1966941.56 +SET 261571.80 226107.80 +SET 2615718.00 2261078.00 +SET 2616139.89 2261442.69 +SET 261616.32 85800.96 +SET 261617.73 181400.67 +SET 2616277.05 1967444.10 +SET 261662.00 163405.50 +SET 2616642.00 1576030.05 +SET 2616945.32 1967946.64 +SET 26170.65 19410.60 +SET 261747.94 154490.07 +SET 261781.65 175385.43 +SET 2617827.45 2262901.45 +SET 261786.42 211033.92 +SET 261827.28 167207.04 +SET 261829.10 175417.22 +SET 261856.10 149081.03 +SET 261876.55 175449.01 +SET 26189.31 19424.44 +SET 2618950.13 1969454.26 +SET 2619093.12 2263995.52 +SET 2619166.62 2111389.12 +SET 261917.28 163564.92 +SET 26192.40 17548.08 +SET 2619265.20 1577610.03 +SET 2619618.40 1969956.80 +SET 261979.86 167304.48 +SET 2619817.83 2111914.08 +SET 2619936.90 2264724.90 +SET 2620139.60 1578136.69 +SET 262026.38 181684.02 +SET 2620286.67 1970459.34 +SET 262053.44 85944.32 +SET 262056.06 154671.93 +SET 2620576.80 1578400.02 +SET 262066.35 175576.17 +SET 2620780.68 2265454.28 +SET 262108.11 181740.69 +SET 2621202.57 2265818.97 +SET 2621451.20 1578926.68 +SET 2621624.46 2266183.66 +SET 2621771.46 2113488.96 +SET 2621888.40 1579190.01 +SET 2622291.48 1971966.96 +SET 2622422.67 2114013.92 +SET 26226.63 19452.12 +SET 262267.50 149315.25 +SET 262272.00 86016.00 +SET 2622890.13 2267277.73 +SET 2623.20 1579.98 +SET 2623073.88 2114538.88 +SET 26232.00 15799.80 +SET 262320.00 157998.00 +SET 2623312.02 2267642.42 +SET 26235.33 18191.07 +SET 26235.96 19459.04 +SET 262351.05 175766.91 +SET 262353.30 181910.70 +SET 26239.85 17579.87 +SET 262398.50 175798.70 +SET 2624155.80 2268371.80 +SET 262427.84 163883.76 +SET 26243.76 16759.68 +SET 2624511.60 1580769.99 +SET 2624577.69 2268736.49 +SET 262493.40 175862.28 +SET 2624948.80 1581033.32 +SET 2624964.56 1973977.12 +SET 2624999.58 2269101.18 +SET 262540.85 175894.07 +SET 2625421.47 2269465.87 +SET 2625823.20 1581559.98 +SET 2625843.36 2269830.56 +SET 262588.30 175925.86 +SET 262590.18 167694.24 +SET 2626697.60 1582086.64 +SET 262678.90 149549.47 +SET 262683.12 164043.18 +SET 2626969.37 1975484.74 +SET 2627109.03 2270924.63 +SET 26273.28 19486.72 +SET 262742.76 167791.68 +SET 262761.95 182194.05 +SET 2627632.35 2118213.60 +SET 2627637.64 1975987.28 +SET 262778.10 176053.02 +SET 2627952.81 2271654.01 +SET 262818.40 86195.20 +SET 26282.61 19493.64 +SET 262826.36 155126.58 +SET 262843.68 182250.72 +SET 2628446.40 1583139.96 +SET 26287.30 17611.66 +SET 2628796.59 2272383.39 +SET 262884.60 149666.58 +SET 26291.94 19500.56 +SET 262920.45 176148.39 +SET 2629218.48 2272748.08 +SET 262925.41 182307.39 +SET 262927.68 86231.04 +SET 26293.84 16420.26 +SET 2629320.80 1583666.62 +SET 262980.42 155217.51 +SET 2630237.19 2120313.44 +SET 2630484.15 2273842.15 +SET 2630632.40 1584456.61 +SET 263088.87 182420.73 +SET 263090.30 149783.69 +SET 2630978.99 1978499.98 +SET 26310.60 19514.40 +SET 263134.48 155308.44 +SET 263157.70 176307.34 +SET 26317.06 18247.74 +SET 26319.93 19521.32 +SET 263194.40 158524.66 +SET 2631944.00 1585246.60 +SET 2632171.71 2275300.91 +SET 2632190.82 2121888.32 +SET 2632315.53 1979505.06 +SET 263255.52 86338.56 +SET 263347.50 176434.50 +SET 2633493.24 2122938.24 +SET 263364.80 86374.40 +SET 2633692.80 1586299.92 +SET 263394.95 176466.29 +SET 2634130.00 1586563.25 +SET 2634144.45 2123463.20 +SET 2634320.34 1981012.68 +SET 26344.26 15549.03 +SET 263442.40 176498.08 +SET 263442.60 155490.30 +SET 263489.85 176529.87 +SET 263497.52 182704.08 +SET 2635441.60 1587353.24 +SET 2635546.83 2278218.43 +SET 26357.25 19549.00 +SET 2636098.08 2125038.08 +SET 263631.60 158787.99 +SET 2636316.00 1587879.90 +SET 263632.20 176625.24 +SET 2636325.15 1982520.30 +SET 263658.24 168376.32 +SET 2636753.20 1588143.23 +SET 263681.25 227931.25 +SET 263704.24 164680.86 +SET 2637400.50 2126088.00 +SET 26375.91 19562.84 +SET 263750.72 155672.16 +SET 263774.55 176720.61 +SET 263801.92 86517.76 +SET 2638051.71 2126612.96 +SET 2638064.80 1588933.22 +SET 263810.82 168473.76 +SET 26382.20 17675.24 +SET 263822.00 176752.40 +SET 26385.24 19569.76 +SET 2638500.06 2280771.26 +SET 2638502.00 1589196.55 +SET 263869.45 176784.19 +SET 2638702.92 2127137.92 +SET 2638939.20 1589459.88 +SET 2638998.23 1984530.46 +SET 263904.78 155763.09 +SET 263916.90 176815.98 +SET 2639343.84 2281500.64 +SET 2639376.40 1589723.21 +SET 26394.57 19576.68 +SET 263964.35 176847.77 +SET 2639765.73 2281865.33 +SET 2639813.60 1589986.54 +SET 263987.90 183044.10 +SET 2640005.34 2128187.84 +SET 2640187.62 2282230.02 +SET 264020.48 86589.44 +SET 2640688.00 1590513.20 +SET 264106.70 176943.14 +SET 2641125.20 1590776.53 +SET 264115.98 168668.64 +SET 264118.80 150369.24 +SET 264154.15 176974.93 +SET 2641875.18 2283688.78 +SET 264249.05 177038.51 +SET 2642610.18 2130287.68 +SET 2642874.00 1591829.85 +SET 2643007.85 1987545.70 +SET 26431.89 19604.36 +SET 264314.82 183270.78 +SET 264324.50 150486.35 +SET 2643311.20 1592093.18 +SET 264343.95 177102.09 +SET 264366.96 156035.88 +SET 2643912.60 2131337.60 +SET 264396.55 183327.45 +SET 2644406.52 2285876.92 +SET 26445.76 8673.28 +SET 2644828.41 2286241.61 +SET 264486.30 177197.46 +SET 2645250.30 2286606.30 +SET 264530.20 150603.46 +SET 2645497.20 1593409.83 +SET 264560.01 183440.79 +SET 2645672.19 2286970.99 +SET 264573.72 168960.96 +SET 26459.88 19625.12 +SET 2646094.08 2287335.68 +SET 264628.65 177292.83 +SET 264634.92 199005.84 +SET 2646349.20 1990058.40 +SET 2646371.60 1593936.49 +SET 264641.74 183497.46 +SET 2646937.86 2288065.06 +SET 264723.47 183554.13 +SET 264723.55 177356.41 +SET 264725.36 165318.54 +SET 264771.00 177388.20 +SET 2647819.86 2134487.36 +SET 2648120.40 1594989.81 +SET 2648471.07 2135012.32 +SET 2648625.42 2289523.82 +SET 264865.90 177451.78 +SET 26487.87 19645.88 +SET 264886.93 183667.47 +SET 264894.72 86876.16 +SET 2648994.80 1595516.47 +SET 2649022.28 1992068.56 +SET 2649047.31 2289888.51 +SET 264943.20 159577.98 +SET 2649432.00 1595779.80 +SET 264946.92 229025.32 +SET 2649469.20 2290253.20 +SET 264968.66 183724.14 +SET 2649690.55 1992571.10 +SET 2649773.49 2136062.24 +SET 2649869.20 1596043.13 +SET 2649891.09 2290617.89 +SET 265004.00 86912.00 +SET 265008.25 177547.15 +SET 2650306.40 1596306.46 +SET 265031.46 169253.28 +SET 2650358.82 1993073.64 +SET 265042.47 213658.72 +SET 265055.70 177578.94 +SET 2650743.60 1596569.79 +SET 2651027.09 1993576.18 +SET 265103.15 177610.73 +SET 265113.28 86947.84 +SET 2651156.76 2291711.96 +SET 2651180.80 1596833.12 +SET 265132.12 183837.48 +SET 265150.60 177642.52 +SET 2651578.65 2292076.65 +SET 2651618.00 1597096.45 +SET 2651695.36 1994078.72 +SET 265198.05 177674.31 +SET 2652055.20 1597359.78 +SET 2652422.43 2292806.03 +SET 265291.32 156581.46 +SET 265295.58 183950.82 +SET 2653031.90 1995083.80 +SET 26534.52 19680.48 +SET 26535.30 15107.19 +SET 265353.00 151071.90 +SET 265368.81 229390.01 +SET 2653688.10 2293900.10 +SET 26543.85 19687.40 +SET 265441.12 87055.36 +SET 265445.38 156672.39 +SET 2654531.88 2294629.48 +SET 2654678.40 1598939.76 +SET 26548.92 16954.56 +SET 265482.75 177865.05 +SET 26549.12 16579.68 +SET 265491.20 165796.80 +SET 2655036.71 1996591.42 +SET 26555.04 8709.12 +SET 265550.40 87091.20 +SET 2655634.38 2140786.88 +SET 2655704.98 1997093.96 +SET 2655990.00 1599729.75 +SET 26562.25 18417.75 +SET 26562.51 19701.24 +SET 2656864.40 1600256.41 +SET 2656936.80 2141836.80 +SET 2657.20 1780.24 +SET 2657041.52 1998099.04 +SET 2657063.22 2296817.62 +SET 26571.84 19708.16 +SET 2657588.01 2142361.76 +SET 265764.40 151306.12 +SET 2657738.80 1600783.07 +SET 26579.07 22975.47 +SET 2657907.00 2297547.00 +SET 26581.17 19715.08 +SET 265817.60 160104.64 +SET 2658239.22 2142886.72 +SET 2658613.20 1601309.73 +SET 265862.35 178119.37 +SET 265867.69 184347.51 +SET 2658750.78 2298276.38 +SET 265878.24 87198.72 +SET 2659.05 1972.20 +SET 2659046.33 1999606.66 +SET 265909.80 178151.16 +SET 2659172.67 2298641.07 +SET 265957.25 178182.95 +SET 2659594.56 2299005.76 +SET 265987.52 87234.56 +SET 26599.83 19728.92 +SET 2659924.80 1602099.72 +SET 2660016.45 2299370.45 +SET 2660192.85 2144461.60 +SET 2660362.00 1602363.05 +SET 2660382.87 2000611.74 +SET 266061.62 157036.11 +SET 2660799.20 1602626.38 +SET 2660844.06 2144986.56 +SET 266099.60 178278.32 +SET 2661282.12 2300464.52 +SET 266147.05 178310.11 +SET 2661495.27 2145511.52 +SET 2661673.60 1603153.04 +SET 266194.50 178341.90 +SET 266194.61 184574.19 +SET 266212.59 230119.39 +SET 266241.95 178373.69 +SET 266252.10 170032.80 +SET 26627.82 19749.68 +SET 266276.34 184630.86 +SET 266289.40 178405.48 +SET 2662969.68 2301923.28 +SET 2663055.95 2002621.90 +SET 266336.85 178437.27 +SET 266344.89 214708.64 +SET 2663448.90 2147086.40 +SET 266358.07 184687.53 +SET 266381.50 151657.45 +SET 2663813.46 2302652.66 +SET 266384.30 178469.06 +SET 2663859.60 1604469.69 +SET 2664100.11 2147611.36 +SET 266431.75 178500.85 +SET 266439.80 184744.20 +SET 2664392.49 2003626.98 +SET 2664734.00 1604996.35 +SET 266479.20 178532.64 +SET 2665079.13 2303746.73 +SET 266523.80 157308.90 +SET 266526.65 178564.43 +SET 266587.20 151774.56 +SET 2665922.91 2304476.11 +SET 2666053.74 2149186.24 +SET 266634.48 230484.08 +SET 266643.20 87449.60 +SET 26666.90 17865.98 +SET 2666704.95 2149711.20 +SET 2666920.00 1606313.00 +SET 2667065.57 2005637.14 +SET 266709.84 170325.12 +SET 266716.45 178691.59 +SET 26674.47 19784.28 +SET 266752.48 87485.44 +SET 266763.90 178723.38 +SET 2667733.84 2006139.68 +SET 2667794.40 1606839.66 +SET 266792.90 151891.67 +SET 266858.80 178786.96 +SET 2668668.80 1607366.32 +SET 2668876.14 2307028.94 +SET 2669298.03 2307393.63 +SET 266930.18 185084.22 +SET 2669309.79 2151811.04 +SET 2669543.20 1607892.98 +SET 2669719.92 2307758.32 +SET 266985.98 157581.69 +SET 266996.10 215233.60 +SET 2669961.00 2152336.00 +SET 266998.60 152008.78 +SET 2669980.40 1608156.31 +SET 26701.50 17052.00 +SET 2670141.81 2308123.01 +SET 267015.00 170520.00 +SET 267096.05 178945.91 +SET 2671075.19 2008652.38 +SET 2671263.42 2153385.92 +SET 267167.58 170617.44 +SET 2671729.20 1609209.63 +SET 267175.37 185254.23 +SET 2671914.63 2153910.88 +SET 267204.30 152125.89 +SET 26721.12 19818.88 +SET 2672411.73 2009657.46 +SET 26725.71 18531.09 +SET 267257.10 185310.90 +SET 267278.16 166912.74 +SET 2673.08 2010.16 +SET 26730.45 19825.80 +SET 2673080.00 2010160.00 +SET 267320.16 170714.88 +SET 2673478.00 1610262.95 +SET 2673516.93 2311040.53 +SET 267380.75 179136.65 +SET 26739.78 19832.72 +SET 2673938.82 2311405.22 +SET 2674.10 1522.43 +SET 26741.00 15224.30 +SET 2674352.40 1610789.61 +SET 267448.16 157854.48 +SET 2674519.47 2156010.72 +SET 267478.26 231213.46 +SET 2675204.49 2312499.29 +SET 26758.44 19846.56 +SET 267602.22 157945.41 +SET 2676048.27 2313228.67 +SET 26761.80 17929.56 +SET 2676421.35 2012672.70 +SET 2676470.16 2313593.36 +SET 2676538.40 1612106.26 +SET 267665.45 179327.39 +SET 2676892.05 2313958.05 +SET 2676975.60 1612369.59 +SET 2677089.62 2013175.24 +SET 2677124.31 2158110.56 +SET 26773.60 8780.80 +SET 267747.48 185650.92 +SET 26777.10 19860.40 +SET 2678157.72 2315052.12 +SET 267821.40 152477.22 +SET 267829.21 185707.59 +SET 2678426.16 2014180.32 +SET 2678579.61 2315416.81 +SET 2679001.50 2315781.50 +SET 267902.70 179486.34 +SET 2679077.94 2159685.44 +SET 2679094.43 2014682.86 +SET 26795.76 19874.24 +SET 267954.56 87879.68 +SET 2679598.80 1613949.57 +SET 267992.67 185820.93 +SET 2680380.36 2160735.36 +SET 26804.40 16739.10 +SET 268044.00 167391.00 +SET 26806.44 15821.82 +SET 268064.40 158218.20 +SET 2680689.06 2317240.26 +SET 268083.06 171202.08 +SET 26809.25 17961.35 +SET 2681031.57 2161260.32 +SET 2681532.84 2317969.64 +SET 2681682.78 2161785.28 +SET 268173.12 87951.36 +SET 2681767.51 2016693.02 +SET 268187.40 179677.08 +SET 268235.64 171299.52 +SET 268237.86 185990.94 +SET 2682376.62 2318699.02 +SET 2682435.78 2017195.56 +SET 268322.04 231942.84 +SET 268329.75 179772.45 +SET 2683636.41 2163360.16 +SET 2683772.32 2018200.64 +SET 268388.22 171396.96 +SET 268391.68 88023.04 +SET 2683970.80 1616582.87 +SET 268401.32 186104.28 +SET 2684064.18 2320157.78 +SET 26842.41 19908.84 +SET 268440.80 161684.62 +SET 2684408.00 1616846.20 +SET 2684440.59 2018703.18 +SET 268472.10 179867.82 +SET 2684845.20 1617109.53 +SET 26851.74 19915.76 +SET 2685108.86 2019205.72 +SET 268526.58 158490.99 +SET 268540.80 171494.40 +SET 268567.00 179931.40 +SET 2685719.60 1617636.19 +SET 2685777.13 2019708.26 +SET 26861.07 19922.68 +SET 2686241.25 2165460.00 +SET 268644.20 152945.66 +SET 2686594.00 1618162.85 +SET 268693.38 171591.84 +SET 2687.04 1992.96 +SET 26870.40 19929.60 +SET 2687031.20 1618426.18 +SET 268743.93 232307.53 +SET 2687905.60 1618952.84 +SET 268809.97 186387.63 +SET 2688194.88 2167034.88 +SET 26882.88 8816.64 +SET 2688283.08 2323804.68 +SET 2688342.80 1619216.17 +SET 268845.96 171689.28 +SET 2688450.21 2021718.42 +SET 26889.06 19943.44 +SET 26889.17 18644.43 +SET 2689118.48 2022220.96 +SET 268946.60 180185.72 +SET 268949.73 216808.48 +SET 26898.39 19950.36 +SET 268988.76 158763.78 +SET 2690091.60 1620269.49 +SET 2690148.51 2168609.76 +SET 26904.15 18024.93 +SET 269047.36 88238.08 +SET 269055.60 153179.88 +SET 26907.72 19957.28 +SET 2691123.29 2023728.58 +SET 269156.64 88273.92 +SET 2691658.20 2326722.20 +SET 2691791.56 2024231.12 +SET 2692277.60 1621586.14 +SET 2692501.98 2327451.58 +SET 26926.38 19971.12 +SET 269261.30 153296.99 +SET 269265.92 88309.76 +SET 2692753.35 2170709.60 +SET 269278.75 180408.25 +SET 2692923.87 2327816.27 +SET 269296.88 158945.64 +SET 269303.70 171981.60 +SET 2693152.00 1622112.80 +SET 2693796.37 2025738.74 +SET 2694055.77 2171759.52 +SET 2694189.54 2328910.34 +SET 269421.10 180503.62 +SET 2694463.60 1622902.79 +SET 26945.04 19984.96 +SET 2694611.43 2329275.03 +SET 269463.81 186840.99 +SET 2695033.32 2329639.72 +SET 26951.60 18056.72 +SET 2695132.91 2026743.82 +SET 2695358.19 2172809.44 +SET 26954.37 19991.88 +SET 2695775.20 1623692.78 +SET 2695801.18 2027246.36 +SET 26960.50 15912.75 +SET 269600.94 217333.44 +SET 2696009.40 2173334.40 +SET 269610.90 180630.78 +SET 2696212.40 1623956.11 +SET 2696649.60 1624219.44 +SET 2696660.61 2173859.36 +SET 269672.70 153531.21 +SET 2697142.77 2331463.17 +SET 2697311.82 2174384.32 +SET 2697524.00 1624746.10 +SET 2697564.66 2331827.86 +SET 269759.06 159218.43 +SET 269761.44 172273.92 +SET 2698408.44 2332557.24 +SET 269848.15 180789.73 +SET 269872.46 187124.34 +SET 2698830.33 2332921.93 +SET 26991.69 20019.56 +SET 269913.12 159309.36 +SET 26992.16 8852.48 +SET 269921.60 88524.80 +SET 2699265.45 2175959.20 +SET 269943.05 180853.31 +SET 2699674.11 2333651.31 +SET 2699710.00 1626062.75 +SET 269981.08 203026.16 +SET 2699916.66 2176484.16 +SET 27.99 20.76 +SET 270.57 200.68 +SET 270009.60 233401.60 +SET 2700096.00 2334016.00 +SET 270035.92 187237.68 +SET 270037.95 180916.89 +SET 2700479.07 2030764.14 +SET 2700567.87 2177009.12 +SET 270066.60 172468.80 +SET 270085.40 180948.68 +SET 270086.24 168666.36 +SET 2700939.78 2334745.38 +SET 27010.35 20033.40 +SET 2701219.08 2177534.08 +SET 2701361.67 2335110.07 +SET 27019.68 20040.32 +SET 2702333.20 1627642.73 +SET 270252.15 217858.40 +SET 2702521.50 2178584.00 +SET 2702770.40 1627906.06 +SET 270289.80 153882.54 +SET 27029.01 20047.24 +SET 2703172.71 2179108.96 +SET 270322.65 181107.63 +SET 2703644.80 1628432.72 +SET 270375.30 159582.15 +SET 27038.34 20054.16 +SET 2703820.42 2033276.84 +SET 2703823.92 2179633.92 +SET 2703893.01 2337298.21 +SET 2704.65 1812.03 +SET 2704488.69 2033779.38 +SET 2704519.20 1628959.38 +SET 270465.00 181203.00 +SET 27047.67 20061.08 +SET 270495.50 153999.65 +SET 2705156.96 2034281.92 +SET 2705393.60 1629486.04 +SET 2705830.80 1629749.37 +SET 270596.80 168985.20 +SET 270608.03 187634.37 +SET 270654.80 181330.16 +SET 2706705.20 1630276.03 +SET 270676.92 172858.56 +SET 270683.42 159764.01 +SET 2706846.24 2339851.04 +SET 270686.56 88775.68 +SET 270701.20 154116.76 +SET 270702.25 181361.95 +SET 27075.66 20081.84 +SET 2708111.91 2340945.11 +SET 270837.48 159854.94 +SET 2708382.39 2183308.64 +SET 2708498.31 2036794.62 +SET 2708891.20 1631592.68 +SET 270892.05 181489.11 +SET 2708955.69 2341674.49 +SET 270903.36 218383.36 +SET 27093.95 18152.09 +SET 2709377.58 2342039.18 +SET 2709684.81 2184358.56 +SET 2709765.60 1632119.34 +SET 2709799.47 2342403.87 +SET 2709834.85 2037799.70 +SET 270991.54 159945.87 +SET 2710643.25 2343133.25 +SET 2710987.23 2185408.48 +SET 271107.36 169304.04 +SET 2711077.20 1632909.33 +SET 271129.30 181648.06 +SET 271145.60 160036.80 +SET 2711487.03 2343862.63 +SET 2711638.44 2185933.44 +SET 2711908.92 2344227.32 +SET 2711951.60 1633435.99 +SET 2712330.81 2344592.01 +SET 2712388.80 1633699.32 +SET 271271.65 181743.43 +SET 2712940.86 2186983.36 +SET 271317.62 204031.24 +SET 2713174.59 2345321.39 +SET 271319.10 181775.22 +SET 271343.60 188144.40 +SET 2713596.48 2345686.08 +SET 271362.64 169463.46 +SET 2713700.40 1634489.31 +SET 2713844.47 2040814.94 +SET 2714018.37 2346050.77 +SET 271425.33 188201.07 +SET 2714440.26 2346415.46 +SET 271451.52 89026.56 +SET 2714512.74 2041317.48 +SET 271453.72 160218.66 +SET 2714574.80 1635015.97 +SET 27150.30 20137.20 +SET 271501.20 163527.93 +SET 2715181.01 2041820.02 +SET 271524.00 154585.20 +SET 2715449.20 1635542.63 +SET 271554.57 218908.32 +SET 271556.35 181934.17 +SET 2715849.28 2042322.56 +SET 271588.79 188314.41 +SET 271603.80 181965.96 +SET 271607.78 160309.59 +SET 271651.25 181997.75 +SET 2716517.55 2042825.10 +SET 2716549.71 2348238.91 +SET 271670.08 89098.24 +SET 271670.52 188371.08 +SET 2716848.12 2190133.12 +SET 271697.16 234860.36 +SET 2716971.60 2348603.60 +SET 271698.70 182029.54 +SET 2717198.00 1636595.95 +SET 2717499.33 2190658.08 +SET 271752.25 188427.75 +SET 271761.84 160400.52 +SET 271779.36 89134.08 +SET 2717815.38 2349332.98 +SET 2717854.09 2043830.18 +SET 271793.60 182093.12 +SET 2718237.27 2349697.67 +SET 271833.98 188484.42 +SET 271888.64 89169.92 +SET 2718946.80 1637649.27 +SET 2719081.05 2350427.05 +SET 271915.90 160491.45 +SET 2719190.63 2044835.26 +SET 271935.40 154819.42 +SET 271935.95 182188.49 +SET 2719502.94 2350791.74 +SET 2719924.83 2351156.43 +SET 2720258.40 1638439.26 +SET 272050.14 173735.52 +SET 2720527.17 2045840.34 +SET 27210.72 8924.16 +SET 272107.20 89241.60 +SET 2721132.80 1638965.92 +SET 2721195.44 2046342.88 +SET 272125.75 182315.65 +SET 272173.20 182347.44 +SET 2722034.28 2352979.88 +SET 272205.78 219433.28 +SET 272216.48 89277.44 +SET 2722531.98 2047347.96 +SET 2723299.95 2354073.95 +SET 2723318.80 1640282.57 +SET 272355.30 173930.40 +SET 27236.30 18247.46 +SET 2724011.43 2195907.68 +SET 272435.04 89349.12 +SET 2724536.79 2048855.58 +SET 272487.82 188937.78 +SET 272507.88 174027.84 +SET 27252.93 20213.32 +SET 2725313.85 2196957.60 +SET 2725409.40 2355897.40 +SET 272552.80 182601.76 +SET 272569.55 188994.45 +SET 2726253.18 2356626.78 +SET 2726379.20 1642125.88 +SET 272653.60 89420.80 +SET 272654.16 205036.32 +SET 2726541.60 2050363.20 +SET 2726616.27 2198007.52 +SET 27268.62 16094.61 +SET 2726816.40 1642389.21 +SET 272686.20 160946.10 +SET 2727096.96 2357356.16 +SET 27271.59 20227.16 +SET 2727267.48 2198532.48 +SET 2727518.85 2357720.85 +SET 2727690.80 1642915.87 +SET 272790.05 182760.71 +SET 2727918.69 2199057.44 +SET 272812.80 164317.92 +SET 2728128.00 1643179.20 +SET 27283.75 18279.25 +SET 272840.26 161037.03 +SET 2728546.41 2051870.82 +SET 2728569.90 2199582.40 +SET 2729002.40 1643705.86 +SET 2729214.68 2052373.36 +SET 2729221.11 2200107.36 +SET 2729439.60 1643969.19 +SET 272965.62 174320.16 +SET 272978.20 189277.80 +SET 272979.85 182887.87 +SET 2730050.19 2359908.99 +SET 273074.75 182951.45 +SET 27308.91 20254.84 +SET 273090.72 89564.16 +SET 27311.82 17441.76 +SET 273118.20 174417.60 +SET 2731188.40 1645022.51 +SET 2731219.49 2053880.98 +SET 273149.60 170579.40 +SET 2731625.60 1645285.84 +SET 27318.24 20261.76 +SET 2731825.95 2202207.20 +SET 273200.00 89600.00 +SET 2732062.80 1645549.17 +SET 273217.10 183046.82 +SET 273223.39 189447.81 +SET 2732477.16 2202732.16 +SET 2732556.03 2054886.06 +SET 2732581.53 2362097.13 +SET 273309.28 89635.84 +SET 273312.00 183110.40 +SET 273359.45 183142.19 +SET 27336.90 20275.60 +SET 273375.30 155639.19 +SET 2733779.58 2203782.08 +SET 273384.72 236319.12 +SET 273404.88 170738.82 +SET 273406.90 183173.98 +SET 273418.56 89671.68 +SET 2734269.09 2363555.89 +SET 2734560.84 2056393.68 +SET 2734686.00 1647129.15 +SET 2734690.98 2363920.58 +SET 27350.82 22048.32 +SET 2735229.11 2056896.22 +SET 27355.56 20289.44 +SET 273550.31 189674.49 +SET 2735534.76 2364649.96 +SET 2735560.40 1647655.81 +SET 27358.10 15575.63 +SET 273581.00 155756.30 +SET 2735997.60 1647919.14 +SET 273644.15 183332.93 +SET 273660.16 170898.24 +SET 2737035.63 2206406.88 +SET 2737309.20 1648709.13 +SET 273739.05 183396.51 +SET 2737686.84 2206931.84 +SET 273786.50 183428.30 +SET 273786.70 155873.41 +SET 27379.55 18984.45 +SET 273795.50 189844.50 +SET 2738183.60 1649235.79 +SET 273833.95 183460.09 +SET 2738338.05 2207456.80 +SET 2738487.99 2367202.79 +SET 273855.68 89815.04 +SET 2738620.80 1649499.12 +SET 273881.10 174904.80 +SET 27392.88 20317.12 +SET 273928.85 183523.67 +SET 2739495.20 1650025.78 +SET 273958.96 189957.84 +SET 273964.96 89850.88 +SET 2739640.47 2208506.72 +SET 2739753.66 2368296.86 +SET 2739907.00 2060414.00 +SET 273992.40 155990.52 +SET 2739932.40 1650289.11 +SET 274023.75 183587.25 +SET 2740369.60 1650552.44 +SET 2740575.27 2060916.54 +SET 274072.74 161764.47 +SET 274074.24 89886.72 +SET 2740806.80 1650815.77 +SET 2741019.33 2369390.93 +SET 27411.54 20330.96 +SET 2741441.22 2369755.62 +SET 2742118.40 1651605.76 +SET 27422.68 16185.54 +SET 2742245.31 2210606.56 +SET 274261.00 183746.20 +SET 274292.80 89958.40 +SET 27430.20 20344.80 +SET 274338.84 175197.12 +SET 2743430.00 1652395.75 +SET 2743547.73 2211656.48 +SET 27439.53 20351.72 +SET 2743916.62 2063429.24 +SET 274402.08 89994.24 +SET 274403.35 183841.57 +SET 2744304.40 1652922.41 +SET 2744816.34 2372673.14 +SET 274498.25 183905.15 +SET 2745178.80 1653449.07 +SET 274561.60 165371.24 +SET 2745616.00 1653712.40 +SET 2745660.12 2373402.52 +SET 2745921.43 2064936.86 +SET 2746053.20 1653975.73 +SET 274612.80 190411.20 +SET 2746152.57 2213756.32 +SET 27464.40 17539.20 +SET 2746503.90 2374131.90 +SET 27467.52 20372.48 +SET 274681.28 171535.92 +SET 274688.05 184032.31 +SET 2747347.68 2374861.28 +SET 274776.26 190524.54 +SET 274782.95 184095.89 +SET 2747926.24 2066444.48 +SET 274815.20 156458.96 +SET 274830.40 184127.68 +SET 274843.04 162219.12 +SET 2748594.51 2066947.02 +SET 27486.18 20386.32 +SET 2748613.35 2375955.35 +SET 2749113.60 1655819.04 +SET 274925.30 184191.26 +SET 2749262.78 2067449.56 +SET 274939.72 190637.88 +SET 2749408.62 2216381.12 +SET 2749988.00 1656345.70 +SET 275021.45 190694.55 +SET 2750862.40 1656872.36 +SET 275162.55 184350.21 +SET 2751988.47 2378872.87 +SET 2752174.00 1657662.35 +SET 275226.60 156693.18 +SET 27523.50 20414.00 +SET 275254.32 175781.76 +SET 2752604.13 2069962.26 +SET 2752611.20 1657925.68 +SET 2752664.67 2219005.92 +SET 2752832.25 2379602.25 +SET 27532.83 20420.92 +SET 275327.24 207046.48 +SET 2753315.88 2219530.88 +SET 2753485.60 1658452.34 +SET 27538.56 9031.68 +SET 275385.60 90316.80 +SET 2753922.80 1658715.67 +SET 2753940.67 2070967.34 +SET 275399.80 184509.16 +SET 2754097.92 2380696.32 +SET 27542.16 20427.84 +SET 275436.00 165897.90 +SET 275459.28 162582.84 +SET 2754608.94 2071469.88 +SET 2754618.30 2220580.80 +SET 2754797.20 1659242.33 +SET 275494.17 238142.57 +SET 2754941.70 2381425.70 +SET 275511.83 191034.57 +SET 275559.48 175976.64 +SET 2755785.48 2382155.08 +SET 27560.82 20441.68 +SET 2756108.80 1660032.32 +SET 275613.34 162673.77 +SET 275638.00 156927.40 +SET 2756546.00 1660295.65 +SET 2756571.93 2222155.68 +SET 2756629.26 2382884.46 +SET 275675.29 191147.91 +SET 27568.45 18469.99 +SET 275684.50 184699.90 +SET 2757051.15 2383249.15 +SET 2757223.14 2222680.64 +SET 275757.02 191204.58 +SET 27576.74 16276.47 +SET 2757894.93 2383978.53 +SET 275826.85 184795.27 +SET 2758294.80 1661348.97 +SET 275873.20 166161.23 +SET 2758738.71 2384707.91 +SET 2759176.77 2224255.52 +SET 275920.48 191317.92 +SET 275921.46 162855.63 +SET 2759286.83 2074987.66 +SET 275957.68 172333.02 +SET 2759827.98 2224780.48 +SET 276017.22 176268.96 +SET 2760480.80 1662665.62 +SET 276049.40 157161.62 +SET 27607.47 20476.28 +SET 276075.52 162946.56 +SET 2760848.16 2386531.36 +SET 276111.55 184986.01 +SET 2761270.05 2386896.05 +SET 2761355.20 1663192.28 +SET 27616.80 20483.20 +SET 27616.98 17636.64 +SET 276165.67 191487.93 +SET 276169.80 176366.40 +SET 2761691.94 2387260.74 +SET 2761781.61 2226355.36 +SET 276212.96 172492.44 +SET 2762229.60 1663718.94 +SET 276229.58 163037.49 +SET 2762432.82 2226880.32 +SET 276247.40 191544.60 +SET 276253.90 185081.38 +SET 2762535.72 2387990.12 +SET 2762957.61 2388354.81 +SET 276301.35 185113.17 +SET 276310.40 166424.56 +SET 2763296.45 2078002.90 +SET 276337.95 238871.95 +SET 276348.80 185144.96 +SET 27635.46 20497.04 +SET 2763541.20 1664508.93 +SET 2763735.24 2227930.24 +SET 2764415.60 1665035.59 +SET 276443.70 185208.54 +SET 276460.80 157395.84 +SET 276468.24 172651.86 +SET 27647.84 9067.52 +SET 276474.96 176561.28 +SET 276478.40 90675.20 +SET 2764852.80 1665298.92 +SET 276491.15 185240.33 +SET 276492.59 191714.61 +SET 276538.60 185272.12 +SET 2765688.87 2229505.12 +SET 276574.32 191771.28 +SET 276587.68 90711.04 +SET 2765969.53 2080013.06 +SET 27663.35 18533.57 +SET 27663.45 20517.80 +SET 2766340.08 2230030.08 +SET 276656.05 191827.95 +SET 2766601.60 1666352.24 +SET 276666.50 157512.95 +SET 276680.95 185367.49 +SET 276696.96 90746.88 +SET 2766991.29 2230555.04 +SET 2767038.80 1666615.57 +SET 2767176.51 2392001.71 +SET 276728.40 185399.28 +SET 2767598.40 2392366.40 +SET 2767642.50 2231080.00 +SET 276806.24 90782.72 +SET 27682.11 20531.64 +SET 276823.30 185462.86 +SET 2768442.18 2393095.78 +SET 276870.75 185494.65 +SET 2768944.92 2232129.92 +SET 276901.24 191997.96 +SET 276915.52 90818.56 +SET 2769285.96 2393825.16 +SET 2769596.13 2232654.88 +SET 2769707.85 2394189.85 +SET 276978.80 172970.70 +SET 276999.88 163492.14 +SET 27700.77 20545.48 +SET 277013.10 185590.02 +SET 2770647.42 2083530.84 +SET 277077.90 157747.17 +SET 2770973.52 2395283.92 +SET 27710.10 20552.40 +SET 277134.08 90890.24 +SET 2771395.41 2395648.61 +SET 2771410.80 1669248.87 +SET 277155.45 185685.39 +SET 2771817.30 2396013.30 +SET 27719.43 20559.32 +SET 277228.16 192224.64 +SET 277234.08 173130.12 +SET 277250.35 185748.97 +SET 2772652.23 2085038.46 +SET 2773082.97 2397107.37 +SET 277309.89 192281.31 +SET 2773159.60 1670302.19 +SET 2773596.80 1670565.52 +SET 277390.44 177145.92 +SET 277392.70 185844.34 +SET 2773988.77 2086043.54 +SET 2774034.00 1670828.85 +SET 277440.15 185876.13 +SET 2774471.20 1671092.18 +SET 277462.06 163764.93 +SET 2774657.04 2086546.08 +SET 27747.42 20580.08 +SET 2774770.53 2398566.13 +SET 277487.60 185907.92 +SET 277489.30 157981.39 +SET 277489.36 173289.54 +SET 2774908.40 1671355.51 +SET 2775325.31 2087048.62 +SET 2775345.60 1671618.84 +SET 277535.05 185939.71 +SET 27757.12 9103.36 +SET 277571.20 91033.60 +SET 27758.25 18597.15 +SET 277603.62 239966.02 +SET 2776220.00 1672145.50 +SET 277629.95 186003.29 +SET 2776661.85 2088053.70 +SET 277677.40 186035.08 +SET 2776879.98 2400389.58 +SET 27769.50 15809.85 +SET 277695.60 177340.80 +SET 2777094.40 1672672.16 +SET 2777301.87 2400754.27 +SET 2777410.65 2238954.40 +SET 277744.64 173448.96 +SET 2777531.60 1672935.49 +SET 277772.30 186098.66 +SET 2777723.76 2401118.96 +SET 277800.27 192621.33 +SET 277819.75 186130.45 +SET 2778666.66 2089561.32 +SET 277899.04 91141.12 +SET 277914.65 186194.03 +SET 27794.07 20614.68 +SET 2779717.60 1674252.14 +SET 277999.92 173608.38 +SET 278000.32 209056.64 +SET 2780592.00 1674778.80 +SET 278066.67 224157.92 +SET 2780676.99 2403671.79 +SET 278078.30 164128.65 +SET 278127.19 192848.01 +SET 2781317.91 2242104.16 +SET 2781466.40 1675305.46 +SET 2781520.77 2404401.17 +SET 2782008.01 2092074.02 +SET 278226.88 91248.64 +SET 278246.80 186416.56 +SET 278255.20 173767.80 +SET 2782620.33 2243154.08 +SET 2782676.28 2092576.56 +SET 278312.10 158449.83 +SET 2783271.54 2243679.04 +SET 278336.16 91284.48 +SET 278341.70 186480.14 +SET 2783630.22 2406224.62 +SET 278436.60 186543.72 +SET 278454.11 193074.69 +SET 278496.40 167741.21 +SET 2784964.00 1677412.10 +SET 278510.48 173927.22 +SET 278517.80 158566.94 +SET 278531.50 186607.30 +SET 278540.48 164401.44 +SET 278554.72 91356.16 +SET 278578.95 186639.09 +SET 27859.38 20663.12 +SET 278611.08 177925.44 +SET 2786161.56 2408412.76 +SET 278626.40 186670.88 +SET 2786275.60 1678202.09 +SET 278664.00 91392.00 +SET 278668.59 209559.18 +SET 2786685.90 2095591.80 +SET 278673.85 186702.67 +SET 27868.71 20670.04 +SET 2787178.80 2246828.80 +SET 278721.30 186734.46 +SET 2787427.23 2409506.83 +SET 278763.66 178022.88 +SET 278765.76 174086.64 +SET 278768.75 186766.25 +SET 278781.03 193301.37 +SET 2787830.01 2247353.76 +SET 2787849.12 2409871.52 +SET 2788271.01 2410236.21 +SET 278863.65 186829.83 +SET 2788690.71 2097099.42 +SET 2788898.80 1679782.07 +SET 278911.10 186861.62 +SET 278933.60 168004.54 +SET 2789336.00 1680045.40 +SET 278944.49 193414.71 +SET 278958.55 186893.41 +SET 2789773.20 1680308.73 +SET 2789958.57 2411694.97 +SET 279021.04 174246.06 +SET 2790434.85 2249453.60 +SET 2790695.52 2098607.04 +SET 279100.90 186988.78 +SET 2791084.80 1681098.72 +SET 2791363.79 2099109.58 +SET 2791646.13 2413153.73 +SET 279195.80 187052.36 +SET 2792032.06 2099612.12 +SET 2792068.02 2413518.42 +SET 27922.14 17831.52 +SET 2792388.48 2251028.48 +SET 27924.69 20711.56 +SET 2792489.91 2413883.11 +SET 279271.41 193641.39 +SET 2792911.80 2414247.80 +SET 279319.68 91607.04 +SET 279336.86 210061.72 +SET 27934.02 20718.48 +SET 2793690.90 2252078.40 +SET 2793708.00 1682678.70 +SET 2794145.20 1682942.03 +SET 2794177.47 2415341.87 +SET 279433.05 187211.31 +SET 279434.87 193754.73 +SET 2794342.11 2252603.36 +SET 2794582.40 1683205.36 +SET 2795019.60 1683468.69 +SET 2795021.25 2416071.25 +SET 279516.60 193811.40 +SET 279526.56 178510.08 +SET 2795373.41 2102124.82 +SET 279538.24 91678.72 +SET 2795443.14 2416435.94 +SET 2795456.80 1683732.02 +SET 2795865.03 2416800.63 +SET 279598.33 193868.07 +SET 2796041.68 2102627.36 +SET 279618.90 165037.95 +SET 27962.01 20739.24 +SET 279647.52 91714.56 +SET 279670.30 187370.26 +SET 2796709.95 2103129.90 +SET 279679.14 178607.52 +SET 279680.06 193924.74 +SET 2796946.95 2254703.20 +SET 2797378.22 2103632.44 +SET 279752.00 159269.60 +SET 2797552.59 2418259.39 +SET 279756.80 91750.40 +SET 2797598.16 2255228.16 +SET 279765.20 187433.84 +SET 279772.96 165128.88 +SET 27980.67 20753.08 +SET 2798046.49 2104134.98 +SET 279831.72 178704.96 +SET 2798396.37 2418988.77 +SET 279843.52 194038.08 +SET 2798818.26 2419353.46 +SET 2798900.58 2256278.08 +SET 27990.00 20760.00 +SET 279925.25 194094.75 +SET 2799391.60 1686101.99 +SET 2799828.80 1686365.32 +SET 280002.45 187592.79 +SET 280005.13 210564.26 +SET 280006.98 194151.42 +SET 2800083.93 2420447.53 +SET 2800266.00 1686628.65 +SET 280042.16 174883.74 +SET 2800505.82 2420812.22 +SET 2800854.21 2257852.96 +SET 280088.71 194208.09 +SET 280134.96 242154.16 +SET 2801387.84 2106647.68 +SET 2801505.42 2258377.92 +SET 2801577.60 1687418.64 +SET 280163.40 159503.82 +SET 28017.99 20780.76 +SET 280170.44 194264.76 +SET 280193.92 91893.76 +SET 2802014.80 1687681.97 +SET 280235.14 165401.67 +SET 280245.20 168794.53 +SET 28027.32 20787.68 +SET 280287.15 187783.53 +SET 280334.60 187815.32 +SET 2803459.05 2259952.80 +SET 28036.65 20794.60 +SET 2803763.60 1688735.29 +SET 28038.92 16549.26 +SET 2803880.94 2423729.74 +SET 280389.20 165492.60 +SET 2804060.92 2108657.84 +SET 2804110.26 2260477.76 +SET 280415.63 194434.77 +SET 28042.95 18787.89 +SET 28045.98 20801.52 +SET 280543.26 165583.53 +SET 28055.31 20808.44 +SET 2805512.40 1689788.61 +SET 2805568.50 2425188.50 +SET 280571.85 187974.27 +SET 2805949.60 1690051.94 +SET 280631.04 92037.12 +SET 28067.34 21106.68 +SET 280714.20 188069.64 +SET 2807256.06 2426647.26 +SET 28073.97 20822.28 +SET 280742.55 194661.45 +SET 280761.65 188101.43 +SET 2807698.40 1691105.26 +SET 2808.08 1753.62 +SET 2808070.54 2111673.08 +SET 280849.60 92108.80 +SET 2808572.80 1691631.92 +SET 2808943.62 2428106.02 +SET 280906.01 194774.79 +SET 2809407.08 2112678.16 +SET 2809447.20 1692158.58 +SET 280951.45 188228.59 +SET 280958.88 92144.64 +SET 280986.20 159972.26 +SET 2809884.40 1692421.91 +SET 281005.44 165856.32 +SET 28101.96 20843.04 +SET 281052.36 179484.48 +SET 2810622.36 2265727.36 +SET 281069.47 194888.13 +SET 2810743.62 2113683.24 +SET 2810758.80 1692948.57 +SET 2811053.07 2429929.47 +SET 2811474.96 2430294.16 +SET 281151.20 194944.80 +SET 2811633.20 1693475.23 +SET 2811896.85 2430658.85 +SET 2811924.78 2266777.28 +SET 2812080.16 2114688.32 +SET 2812318.74 2431023.54 +SET 281236.15 188419.33 +SET 2812575.99 2267302.24 +SET 2812748.43 2115190.86 +SET 281286.72 92252.16 +SET 2812944.80 1694265.22 +SET 281314.66 195058.14 +SET 2813382.00 1694528.55 +SET 28137.85 18851.47 +SET 28139.28 20870.72 +SET 281396.00 92288.00 +SET 281397.60 160206.48 +SET 2814006.30 2432482.30 +SET 2814084.97 2116195.94 +SET 2814256.40 1695055.21 +SET 2814529.62 2268877.12 +SET 281478.12 195171.48 +SET 28148.61 20877.64 +SET 281520.85 188610.07 +SET 2815271.97 2433576.37 +SET 2815568.00 1695845.20 +SET 2815693.86 2433941.06 +SET 281573.84 175840.26 +SET 2815832.04 2269927.04 +SET 2816005.20 1696108.53 +SET 281603.30 160323.59 +SET 281614.56 92359.68 +SET 281615.75 188673.65 +SET 281621.68 166220.04 +SET 2816483.25 2270452.00 +SET 281662.68 179874.24 +SET 281663.20 188705.44 +SET 2816879.60 1696635.19 +SET 281723.31 195341.49 +SET 2817316.80 1696898.52 +SET 2817381.42 2435399.82 +SET 2817426.32 2118708.64 +SET 281775.74 166310.97 +SET 2817754.00 1697161.85 +SET 281805.04 195398.16 +SET 281805.55 188800.81 +SET 281815.26 179971.68 +SET 2818191.20 1697425.18 +SET 281833.12 92431.36 +SET 28185.30 18883.26 +SET 281853.00 188832.60 +SET 2818647.09 2436493.89 +SET 281886.77 195454.83 +SET 2819065.60 1697951.84 +SET 2819068.98 2436858.58 +SET 2819088.09 2272551.84 +SET 28192.98 16640.19 +SET 2819431.13 2120216.26 +SET 281947.90 188896.18 +SET 28196.85 19551.15 +SET 281967.84 180069.12 +SET 281968.50 195511.50 +SET 281973.93 227307.68 +SET 281995.35 188927.97 +SET 282014.70 160557.81 +SET 2820814.40 1699005.16 +SET 2821251.60 1699268.49 +SET 282131.96 195624.84 +SET 282160.96 92538.88 +SET 2821600.32 2439046.72 +SET 282185.15 189055.13 +SET 2822104.21 2122226.42 +SET 2822126.00 1699795.15 +SET 282213.69 195681.51 +SET 2822344.14 2275176.64 +SET 2822444.10 2439776.10 +SET 282273.00 180264.00 +SET 282280.05 189118.71 +SET 2822865.99 2440140.79 +SET 282295.42 195738.18 +SET 28232.75 18915.05 +SET 2823646.56 2276226.56 +SET 282374.95 189182.29 +SET 282379.52 92610.56 +SET 282431.20 170111.18 +SET 2824312.00 1701111.80 +SET 2824553.55 2441599.55 +SET 282458.88 195851.52 +SET 2824749.20 1701375.13 +SET 2824948.98 2277276.48 +SET 282517.30 189277.66 +SET 2825186.40 1701638.46 +SET 2825445.56 2124739.12 +SET 282546.04 166765.62 +SET 2825600.19 2277801.44 +SET 2825623.60 1701901.79 +SET 2826113.83 2125241.66 +SET 282625.14 227832.64 +SET 2826251.40 2278326.40 +SET 2826663.00 2443423.00 +SET 282678.21 212574.42 +SET 282707.36 92718.08 +SET 2827084.89 2443787.69 +SET 2827506.78 2444152.38 +SET 28278.58 19607.82 +SET 282802.00 189468.40 +SET 2828205.03 2279901.28 +SET 2828246.80 1703481.77 +SET 282854.16 166947.48 +SET 282867.53 196134.87 +SET 282883.32 180653.76 +SET 2829121.20 1704008.43 +SET 2829194.34 2445611.14 +SET 2829455.18 2127754.36 +SET 282991.80 189595.56 +SET 283008.22 167038.41 +SET 2830123.45 2128256.90 +SET 28303.52 9282.56 +SET 28307.22 20995.28 +SET 2830791.72 2128759.44 +SET 2830809.87 2282001.12 +SET 283086.70 189659.14 +SET 2830870.00 1705061.75 +SET 2831307.20 1705325.08 +SET 2831459.99 2129261.98 +SET 2831461.08 2282526.08 +SET 2831725.68 2447799.28 +SET 2832112.29 2283051.04 +SET 283229.05 189754.51 +SET 28327.65 18978.63 +SET 283276.18 196418.22 +SET 283276.50 189786.30 +SET 2832796.53 2130267.06 +SET 2833056.00 1706378.40 +SET 283341.06 180946.08 +SET 2833413.24 2449258.04 +SET 2833414.71 2284100.96 +SET 283346.48 213076.96 +SET 2833464.80 2130769.60 +SET 28335.21 21016.04 +SET 28336.08 17695.62 +SET 283371.40 189849.88 +SET 283418.85 189881.67 +SET 2834257.02 2449987.42 +SET 283439.64 196531.56 +SET 28344.54 21022.96 +SET 283454.60 161377.58 +SET 283466.30 189913.46 +SET 2834678.91 2450352.11 +SET 283510.08 245071.68 +SET 2835100.80 2450716.80 +SET 283521.37 196588.23 +SET 2835469.61 2132277.22 +SET 2835522.69 2451081.49 +SET 283561.20 189977.04 +SET 2835679.20 1707958.38 +SET 283581.60 93004.80 +SET 2836.32 2103.68 +SET 2836116.40 1708221.71 +SET 2836366.47 2451810.87 +SET 283646.22 181140.96 +SET 2836553.60 1708485.04 +SET 283660.30 161494.69 +SET 2836670.76 2286725.76 +SET 2836788.36 2452175.56 +SET 283684.83 196701.57 +SET 2837428.00 1709011.70 +SET 2837474.42 2133784.84 +SET 28375.10 19010.42 +SET 2837632.14 2452904.94 +SET 283798.45 190135.99 +SET 283800.16 93076.48 +SET 28381.86 21050.64 +SET 283848.29 196814.91 +SET 283871.36 177275.04 +SET 2838739.60 1709801.69 +SET 283893.35 190199.57 +SET 283909.44 93112.32 +SET 2839176.80 1710065.02 +SET 283927.56 228882.56 +SET 2839275.60 2288825.60 +SET 2839319.70 2454363.70 +SET 283940.80 190231.36 +SET 283951.38 181335.84 +SET 2839614.00 1710328.35 +SET 284.70 190.74 +SET 2840051.20 1710591.68 +SET 2840147.50 2135795.00 +SET 284035.70 190294.94 +SET 2840578.02 2289875.52 +SET 284083.15 190326.73 +SET 284093.48 196984.92 +SET 2841.28 931.84 +SET 2841007.26 2455822.46 +SET 284103.96 181433.28 +SET 28412.80 9318.40 +SET 2841229.23 2290400.48 +SET 2841362.80 1711381.67 +SET 2841484.04 2136800.08 +SET 28418.00 17116.45 +SET 28419.18 21078.32 +SET 2842152.31 2137302.62 +SET 284225.50 190422.10 +SET 284237.28 93219.84 +SET 2842531.65 2291450.40 +SET 284272.95 190453.89 +SET 2842820.58 2137805.16 +SET 2843834.07 2292500.32 +SET 28442.04 19721.16 +SET 2844382.38 2458739.98 +SET 2844485.28 2293025.28 +SET 2844804.27 2459104.67 +SET 2844860.40 1713488.31 +SET 284502.13 197268.27 +SET 2845136.49 2293550.24 +SET 2845297.60 1713751.64 +SET 284557.65 190644.63 +SET 284565.12 93327.36 +SET 2846069.94 2460198.74 +SET 2846161.93 2140317.86 +SET 284637.20 177753.30 +SET 2846609.20 1714541.63 +SET 2846913.72 2460928.12 +SET 28470.00 19074.00 +SET 2847046.40 1714804.96 +SET 2847090.12 2295125.12 +SET 284775.75 246165.75 +SET 2847757.50 2461657.50 +SET 284794.90 190803.58 +SET 2848166.74 2141825.48 +SET 2848179.39 2462022.19 +SET 2848358.00 1715594.95 +SET 2848392.54 2296175.04 +SET 284842.35 190835.37 +SET 284856.94 168129.57 +SET 2848795.20 1715858.28 +SET 28493.82 21133.68 +SET 2849503.28 2142830.56 +SET 284984.70 190930.74 +SET 284992.51 197608.29 +SET 2850106.80 1716648.27 +SET 285011.00 168220.50 +SET 2850288.84 2463845.64 +SET 285054.40 171691.16 +SET 2850981.20 1717174.93 +SET 28512.48 21147.52 +SET 285155.97 197721.63 +SET 285165.06 168311.43 +SET 28517.45 19105.79 +SET 28522.08 9354.24 +SET 285229.98 229932.48 +SET 2852292.80 1717964.92 +SET 28523.77 19777.83 +SET 2852398.29 2465669.09 +SET 2852730.00 1718228.25 +SET 2852951.01 2299849.76 +SET 285305.90 162431.57 +SET 28531.14 21161.36 +SET 285316.85 191153.27 +SET 2853167.20 1718491.58 +SET 2853242.07 2466398.47 +SET 2853604.40 1718754.91 +SET 28540.47 21168.28 +SET 285401.16 197891.64 +SET 2854041.60 1719018.24 +SET 285411.75 191216.85 +SET 285439.36 93614.08 +SET 2854478.80 1719281.57 +SET 285459.20 191248.64 +SET 285511.60 162548.68 +SET 2855353.20 1719808.23 +SET 2855517.71 2147353.42 +SET 2855555.85 2301949.60 +SET 28559.13 21182.12 +SET 285601.55 191344.01 +SET 2856617.19 2469315.99 +SET 2857039.08 2469680.68 +SET 285717.30 162665.79 +SET 2857522.52 2148861.04 +SET 2857539.20 1721124.88 +SET 28577.79 21195.96 +SET 285781.30 168675.15 +SET 2857882.86 2470410.06 +SET 285791.35 191471.17 +SET 285838.80 191502.96 +SET 28587.12 21202.88 +SET 2858726.64 2471139.44 +SET 285876.48 93757.44 +SET 2858850.80 1721914.87 +SET 2858859.06 2149866.12 +SET 285913.60 178550.40 +SET 285923.00 162782.90 +SET 2859570.42 2471868.82 +SET 28596.45 21209.80 +SET 285973.27 198288.33 +SET 285981.15 191598.33 +SET 2859992.31 2472233.51 +SET 2860.55 1983.45 +SET 2860195.60 2150871.20 +SET 286028.60 191630.12 +SET 28605.50 19834.50 +SET 28605.78 21216.72 +SET 286055.00 198345.00 +SET 2860599.60 1722968.19 +SET 286089.42 168857.01 +SET 28612.35 19169.37 +SET 286123.50 191693.70 +SET 2861257.98 2473327.58 +SET 286128.70 162900.01 +SET 286136.73 198401.67 +SET 2861679.87 2473692.27 +SET 2861911.20 1723758.18 +SET 2862067.95 2307199.20 +SET 2862348.40 1724021.51 +SET 286240.08 182797.44 +SET 286243.48 168947.94 +SET 2862719.16 2307724.16 +SET 2862785.60 1724284.84 +SET 2862868.68 2152881.36 +SET 2862945.54 2474786.34 +SET 28631.36 9390.08 +SET 28633.77 21237.48 +SET 286334.40 163017.12 +SET 2863536.95 2153383.90 +SET 286381.92 198571.68 +SET 286397.54 169038.87 +SET 2864.31 2124.44 +SET 286408.20 191884.44 +SET 2864205.22 2153886.44 +SET 2864211.21 2475880.41 +SET 286422.88 93936.64 +SET 286463.31 247624.51 +SET 286503.10 191948.02 +SET 286545.24 182992.32 +SET 286545.38 198685.02 +SET 2865476.88 2476974.48 +SET 286551.60 169129.80 +SET 2865541.76 2154891.52 +SET 2865898.77 2477339.17 +SET 2866720.40 1726654.81 +SET 2866742.55 2478068.55 +SET 286679.44 179028.66 +SET 286687.83 215589.66 +SET 28671.09 21265.16 +SET 2867157.60 1726918.14 +SET 2867164.44 2478433.24 +SET 286740.35 192106.97 +SET 286750.72 94044.16 +SET 2867546.57 2156399.14 +SET 286787.80 192138.76 +SET 286790.57 198855.03 +SET 2867928.84 2311923.84 +SET 2868008.22 2479162.62 +SET 286803.20 172744.48 +SET 2868430.11 2479527.31 +SET 286859.72 169311.66 +SET 28687.23 19891.17 +SET 28688.52 24798.92 +SET 286882.70 192202.34 +SET 28689.75 21279.00 +SET 2868906.40 1727971.46 +SET 286934.72 179188.08 +SET 286954.03 198968.37 +SET 2869780.80 1728498.12 +SET 28699.08 21285.92 +SET 287013.78 169402.59 +SET 2870219.65 2158409.30 +SET 2870533.68 2314023.68 +SET 2870655.20 1729024.78 +SET 28707.25 19232.95 +SET 287072.50 192329.50 +SET 287078.56 94151.68 +SET 28708.41 21292.84 +SET 287117.49 199081.71 +SET 2871184.89 2314548.64 +SET 2871529.60 1729551.44 +SET 2871556.19 2159414.38 +SET 287157.20 163485.56 +SET 287183.61 231507.36 +SET 2871836.10 2315073.60 +SET 2871966.80 1729814.77 +SET 2872227.12 2482809.52 +SET 2872649.01 2483174.21 +SET 287280.95 199195.05 +SET 2872841.20 1730341.43 +SET 287297.12 94223.36 +SET 2873138.52 2316123.52 +SET 2873278.40 1730604.76 +SET 2873492.79 2483903.59 +SET 2873561.00 2160922.00 +SET 287362.68 199251.72 +SET 2873789.73 2316648.48 +SET 28740.64 9425.92 +SET 287404.65 192552.03 +SET 287406.40 94259.20 +SET 2874152.80 1731131.42 +SET 2874336.57 2484632.97 +SET 2874440.94 2317173.44 +SET 28745.73 21320.52 +SET 2874590.00 1731394.75 +SET 287460.72 183576.96 +SET 287475.96 169675.38 +SET 287499.55 192615.61 +SET 2875027.20 1731658.08 +SET 2875092.15 2317698.40 +SET 287515.68 94295.04 +SET 28754.70 19264.74 +SET 28755.06 21327.44 +SET 287594.45 192679.19 +SET 287607.87 199421.73 +SET 2876234.08 2162932.16 +SET 2876338.80 1732448.07 +SET 287641.90 192710.98 +SET 2876446.02 2486456.42 +SET 28768.96 19947.84 +SET 2876867.91 2486821.11 +SET 2876902.35 2163434.70 +SET 2877045.78 2319273.28 +SET 2877213.20 1732974.73 +SET 287734.24 94366.72 +SET 287765.88 183771.84 +SET 2877696.99 2319798.24 +SET 287771.33 199535.07 +SET 287774.30 163836.89 +SET 287784.08 169857.24 +SET 2878087.60 1733501.39 +SET 2878238.89 2164439.78 +SET 287879.15 192869.93 +SET 287918.46 183869.28 +SET 28792.38 21355.12 +SET 287934.79 199648.41 +SET 287952.80 94438.40 +SET 287955.84 179825.76 +SET 2879650.62 2321373.12 +SET 287974.05 192933.51 +SET 28801.71 21362.04 +SET 28802.15 19296.53 +SET 2880243.03 2489738.63 +SET 2880273.60 1734818.04 +SET 288062.08 94474.24 +SET 2880664.92 2490103.32 +SET 288068.95 192997.09 +SET 2880710.80 1735081.37 +SET 28809.22 17003.91 +SET 288114.80 173534.47 +SET 2881148.00 1735344.70 +SET 2881930.59 2491197.39 +SET 28820.37 21375.88 +SET 2882022.40 1735871.36 +SET 288211.12 179985.18 +SET 2882255.46 2323472.96 +SET 2882459.60 1736134.69 +SET 2882774.37 2491926.77 +SET 288280.64 94545.92 +SET 288306.20 193156.04 +SET 2883334.00 1736661.35 +SET 288343.44 199931.76 +SET 2883771.20 1736924.68 +SET 288391.40 164188.22 +SET 288401.10 193219.62 +SET 2884208.40 1737188.01 +SET 2884209.09 2325047.84 +SET 288425.17 199988.43 +SET 2884461.93 2493385.53 +SET 28846.64 18014.46 +SET 2884645.60 1737451.34 +SET 2884860.30 2325572.80 +SET 2884883.82 2493750.22 +SET 2884921.59 2169465.18 +SET 28850.69 20004.51 +SET 288543.45 193314.99 +SET 28855.20 17379.78 +SET 2885511.51 2326097.76 +SET 288552.00 173797.80 +SET 288554.38 170311.89 +SET 2885589.86 2169967.72 +SET 28857.69 21403.56 +SET 288590.90 193346.78 +SET 288597.10 164305.33 +SET 288608.48 94653.44 +SET 2886258.13 2170470.26 +SET 2886394.40 1738504.66 +SET 288681.36 184356.48 +SET 288721.68 180304.02 +SET 288733.25 193442.15 +SET 2887415.16 2495938.36 +SET 2887706.00 1739294.65 +SET 2887837.05 2496303.05 +SET 2888143.20 1739557.98 +SET 2888262.94 2171977.88 +SET 288827.04 94725.12 +SET 288833.94 184453.92 +SET 28885.68 21424.32 +SET 2888680.83 2497032.43 +SET 288875.60 193537.52 +SET 2888767.56 2328722.56 +SET 288936.32 94760.96 +SET 2889418.77 2329247.52 +SET 2889454.80 1740347.97 +SET 2889524.61 2497761.81 +SET 28897.05 19360.11 +SET 288986.52 184551.36 +SET 288989.20 174061.13 +SET 2889892.00 1740611.30 +SET 2890069.98 2329772.48 +SET 289016.56 170584.68 +SET 2890267.75 2173485.50 +SET 2890329.20 1740874.63 +SET 2890368.39 2498491.19 +SET 28904.34 21438.16 +SET 289045.60 94796.80 +SET 2890790.28 2498855.88 +SET 289112.85 193696.47 +SET 28913.67 21445.08 +SET 289160.74 200498.46 +SET 2891604.29 2174490.58 +SET 2892055.95 2499949.95 +SET 289207.75 193760.05 +SET 289232.24 180622.86 +SET 289255.20 193791.84 +SET 2892674.82 2331872.32 +SET 2892899.73 2500679.33 +SET 2892940.83 2175495.66 +SET 289302.65 193823.63 +SET 289324.20 200611.80 +SET 2893326.03 2332397.28 +SET 2893743.51 2501408.71 +SET 2893977.24 2332922.24 +SET 289405.93 200668.47 +SET 289444.26 184843.68 +SET 289478.74 170857.47 +SET 289487.52 180782.28 +SET 289539.90 193982.58 +SET 289569.39 200781.81 +SET 2895852.96 2503232.16 +SET 289587.35 194014.37 +SET 28959.20 9497.60 +SET 289596.84 184941.12 +SET 28960.32 21479.68 +SET 289632.80 170948.40 +SET 2896450.00 1744561.25 +SET 289651.12 200838.48 +SET 2896696.74 2503961.54 +SET 28969.65 21486.60 +SET 2897118.63 2504326.23 +SET 289749.42 185038.56 +SET 2897540.52 2504690.92 +SET 2897618.72 2179013.44 +SET 2897761.60 1745351.24 +SET 289786.86 171039.33 +SET 2897884.50 2336072.00 +SET 289814.58 200951.82 +SET 289824.60 194173.32 +SET 289831.30 165007.99 +SET 2898384.30 2505420.30 +SET 2898535.71 2336596.96 +SET 289863.60 174587.79 +SET 2898636.00 1745877.90 +SET 289872.05 194205.11 +SET 28988.31 21500.44 +SET 289896.31 201008.49 +SET 28990.20 18513.60 +SET 289902.00 185136.00 +SET 28991.95 19423.69 +SET 2899186.92 2337121.92 +SET 289919.50 194236.90 +SET 2899228.08 2506149.68 +SET 289998.08 181101.12 +SET 2900384.80 1746931.22 +SET 29006.97 21514.28 +SET 290094.98 171221.19 +SET 2900960.07 2181526.14 +SET 2901.63 2152.12 +SET 290109.30 194364.06 +SET 2901337.53 2507973.13 +SET 290156.75 194395.85 +SET 29016.30 21521.20 +SET 2901696.40 1747721.21 +SET 2902133.60 1747984.54 +SET 2902442.97 2339746.72 +SET 290247.68 95191.04 +SET 290249.04 171312.12 +SET 29025.63 21528.12 +SET 290251.65 194459.43 +SET 2902603.20 2509067.20 +SET 2903094.18 2340271.68 +SET 2903446.98 2509796.58 +SET 290359.74 185428.32 +SET 2903868.87 2510161.27 +SET 2903882.40 1749037.86 +SET 2904290.76 2510525.96 +SET 290439.66 234132.16 +SET 290441.45 194586.59 +SET 2904756.80 1749564.52 +SET 290488.90 194618.38 +SET 2904969.69 2184541.38 +SET 290508.64 181419.96 +SET 29053.62 21548.88 +SET 290557.16 171493.98 +SET 2905637.96 2185043.92 +SET 290575.52 95298.56 +SET 290583.80 194681.96 +SET 2906350.23 2342896.48 +SET 2906400.21 2512349.41 +SET 2906505.60 1750617.84 +SET 290654.10 165476.43 +SET 290678.70 194745.54 +SET 29068.48 9533.44 +SET 290684.80 95334.40 +SET 290697.45 218604.90 +SET 2906974.50 2186049.00 +SET 29072.28 21562.72 +SET 2907243.99 2513078.79 +SET 2907380.00 1751144.50 +SET 290763.92 181579.38 +SET 290773.60 194809.12 +SET 2908087.77 2513808.17 +SET 2908509.66 2514172.86 +SET 290859.80 165593.54 +SET 29086.85 19487.27 +SET 290877.07 201688.53 +SET 2908931.55 2514537.55 +SET 2908979.31 2187556.62 +SET 290915.95 194904.49 +SET 2909353.44 2514902.24 +SET 290958.80 201745.20 +SET 290970.06 185818.08 +SET 2909775.33 2515266.93 +SET 291010.85 194968.07 +SET 2910257.49 2346046.24 +SET 291040.53 201801.87 +SET 2910440.40 1752987.81 +SET 29109.60 21590.40 +SET 2910984.12 2189064.24 +SET 29110.41 25163.61 +SET 291121.92 95477.76 +SET 2911462.89 2516725.69 +SET 291203.99 201915.21 +SET 2912306.67 2517455.07 +SET 291271.20 165827.76 +SET 291275.22 186012.96 +SET 2913150.45 2518184.45 +SET 29134.30 19519.06 +SET 2913500.80 1754831.12 +SET 291365.72 219107.44 +SET 2913657.20 2191074.40 +SET 2914164.75 2349196.00 +SET 2914375.20 1755357.78 +SET 2914416.12 2519278.52 +SET 291449.18 202085.22 +SET 29146.92 21618.08 +SET 291481.52 172039.56 +SET 291485.35 195285.97 +SET 2914993.74 2192079.48 +SET 2915259.90 2520007.90 +SET 291529.76 182057.64 +SET 291559.04 95621.12 +SET 291580.25 195349.55 +SET 291612.40 175641.11 +SET 2916124.00 1756411.10 +SET 291627.70 195381.34 +SET 2916330.28 2193084.56 +SET 291668.32 95656.96 +SET 2916998.40 1756937.76 +SET 291722.60 195444.92 +SET 291732.96 186305.28 +SET 2917369.35 2521831.35 +SET 291742.08 235182.08 +SET 2917420.80 2351820.80 +SET 291785.04 182217.06 +SET 2917872.80 1757464.42 +SET 2918213.13 2522560.73 +SET 2918310.00 1757727.75 +SET 2918335.09 2194592.18 +SET 29184.24 21645.76 +SET 291857.83 202368.57 +SET 2918723.22 2352870.72 +SET 2918747.20 1757991.08 +SET 291886.88 95728.64 +SET 291888.30 166179.09 +SET 2919056.91 2523290.11 +SET 291943.70 172312.35 +SET 291947.88 252365.48 +SET 2919478.80 2523654.80 +SET 291959.85 195603.87 +SET 2919671.63 2195597.26 +SET 291996.16 95764.48 +SET 2920.29 2165.96 +SET 2920025.64 2353920.64 +SET 292007.30 195635.66 +SET 292033.99 219609.98 +SET 2920339.90 2196099.80 +SET 292040.32 182376.48 +SET 2920496.00 1759044.40 +SET 292097.76 172403.28 +SET 2921008.17 2196602.34 +SET 292102.20 195699.24 +SET 292105.44 95800.32 +SET 29212.23 21666.52 +SET 292149.65 195731.03 +SET 2921807.60 1759834.39 +SET 2922244.80 1760097.72 +SET 2922432.03 2526207.63 +SET 2922630.48 2356020.48 +SET 292266.48 202651.92 +SET 29229.20 19582.64 +SET 292295.60 182535.90 +SET 292324.00 95872.00 +SET 292339.45 195858.19 +SET 292343.28 186695.04 +SET 292369.77 252730.17 +SET 292386.90 195889.98 +SET 2924119.59 2527666.39 +SET 292433.28 95907.84 +SET 292434.35 195921.77 +SET 2924584.11 2357595.36 +SET 292481.80 195953.56 +SET 292486.80 176167.77 +SET 2924868.00 1761677.70 +SET 2924963.37 2528395.77 +SET 292529.25 195985.35 +SET 2925385.26 2528760.46 +SET 292550.88 182695.32 +SET 292559.94 172676.07 +SET 2925686.06 2200120.12 +SET 29258.88 21701.12 +SET 2925807.15 2529125.15 +SET 2925886.53 2358645.28 +SET 292593.40 202878.60 +SET 292624.15 196048.93 +SET 2926616.80 1762731.02 +SET 2926650.93 2529854.53 +SET 29268.21 21708.04 +SET 2927.14 1727.67 +SET 292702.26 220112.52 +SET 2927022.60 2201125.20 +SET 2927054.00 1762994.35 +SET 29271.40 17276.70 +SET 2927188.95 2359695.20 +SET 292719.05 196112.51 +SET 2927491.20 1763257.68 +SET 292756.86 202991.94 +SET 29276.65 19614.43 +SET 29277.54 21714.96 +SET 2927840.16 2360220.16 +SET 292791.66 253094.86 +SET 292801.02 186987.36 +SET 29286.87 21721.88 +SET 292861.40 196207.88 +SET 292868.06 172857.93 +SET 29287.04 9605.12 +SET 292870.40 96051.20 +SET 2929.62 2172.88 +SET 2929027.41 2202632.82 +SET 2929142.58 2361270.08 +SET 292953.60 187084.80 +SET 29296.20 21728.80 +SET 2929604.16 2532407.36 +SET 2929677.20 1764574.33 +SET 2929695.68 2203135.36 +SET 293002.05 203161.95 +SET 293003.75 196303.25 +SET 2930114.40 1764837.66 +SET 2930363.95 2203637.90 +SET 29304.45 23623.20 +SET 2930445.00 2362320.00 +SET 293083.78 203218.62 +SET 2930869.83 2533501.43 +SET 293146.10 196398.62 +SET 293176.18 173039.79 +SET 2931863.20 1765890.98 +SET 2932300.40 1766154.31 +SET 29324.10 19646.22 +SET 293288.45 196493.99 +SET 293307.52 96194.56 +SET 2933174.80 1766680.97 +SET 293328.20 166998.86 +SET 293330.24 173130.72 +SET 293335.90 196525.78 +SET 293361.20 176694.43 +SET 293370.53 220615.06 +SET 2933701.05 2364944.80 +SET 293410.70 203445.30 +SET 293411.34 187377.12 +SET 293416.80 96230.40 +SET 2934244.95 2536418.95 +SET 293430.80 196589.36 +SET 2934352.26 2365469.76 +SET 2934486.40 1767470.96 +SET 2934666.84 2536783.64 +SET 293478.25 196621.15 +SET 293484.30 173221.65 +SET 293492.43 203501.97 +SET 2935088.73 2537148.33 +SET 293525.70 196652.94 +SET 2935360.80 1767997.62 +SET 2935510.62 2537513.02 +SET 293563.92 187474.56 +SET 2935710.11 2207658.22 +SET 293572.00 183333.00 +SET 293573.15 196684.73 +SET 2935798.00 1768260.95 +SET 2935932.51 2537877.71 +SET 29361.51 21777.24 +SET 293620.60 196716.52 +SET 2936235.20 1768524.28 +SET 293635.44 253824.24 +SET 2936378.38 2208160.76 +SET 293655.89 203615.31 +SET 2936957.10 2367569.60 +SET 2937198.18 2538971.78 +SET 293737.62 203671.98 +SET 2937608.31 2368094.56 +SET 293798.40 176957.76 +SET 29380.17 21791.08 +SET 2938041.96 2539701.16 +SET 2938383.19 2209668.38 +SET 2938463.85 2540065.85 +SET 293853.92 96373.76 +SET 293869.08 187669.44 +SET 2938858.40 1770104.26 +SET 2939729.52 2541159.92 +SET 2939732.80 1770630.92 +SET 29398.83 21804.92 +SET 293982.81 203841.99 +SET 294000.20 196970.84 +SET 2940151.41 2541524.61 +SET 294038.80 221117.60 +SET 2940388.00 2211176.00 +SET 294047.65 197002.63 +SET 2940573.30 2541889.30 +SET 2940607.20 1771157.58 +SET 2940995.19 2542253.99 +SET 2941.90 1970.98 +SET 2941056.27 2211678.54 +SET 2941417.08 2542618.68 +SET 2941481.60 1771684.24 +SET 2941724.54 2212181.08 +SET 294174.24 187864.32 +SET 294181.76 96481.28 +SET 2941838.97 2542983.37 +SET 294190.00 197098.00 +SET 294228.00 204012.00 +SET 294235.60 177221.09 +SET 2942356.00 1772210.90 +SET 294237.45 197129.79 +SET 2942392.81 2212683.62 +SET 2942682.75 2543712.75 +SET 2942793.20 1772474.23 +SET 294332.35 197193.37 +SET 294356.70 167584.41 +SET 29436.15 21832.60 +SET 2943667.60 1773000.89 +SET 294379.80 197225.16 +SET 294391.46 204125.34 +SET 2944120.41 2373344.16 +SET 294427.25 197256.95 +SET 2944370.31 2545171.51 +SET 2944397.62 2214191.24 +SET 29447.94 18805.92 +SET 294479.22 254553.62 +SET 2945065.89 2214693.78 +SET 2945214.09 2545900.89 +SET 29454.81 21846.44 +SET 2945416.40 1774054.21 +SET 2945422.83 2374394.08 +SET 294569.60 197352.32 +SET 2945734.16 2215196.32 +SET 2945853.60 1774317.54 +SET 294593.12 183970.68 +SET 294617.05 197384.11 +SET 294618.88 96624.64 +SET 2946290.80 1774580.87 +SET 294636.65 204295.35 +SET 2946402.43 2215698.86 +SET 29466.45 19741.59 +SET 2946728.00 1774844.20 +SET 294707.07 221620.14 +SET 2947070.70 2216201.40 +SET 294716.78 173949.09 +SET 2947165.20 1775107.53 +SET 294718.38 204352.02 +SET 2947376.46 2375968.96 +SET 294759.40 197479.48 +SET 2947602.40 1775370.86 +SET 2947738.97 2216703.94 +SET 2948027.67 2376493.92 +SET 2948039.60 1775634.19 +SET 2948476.80 1775897.52 +SET 294848.40 184130.10 +SET 294854.30 197543.06 +SET 2948589.21 2548818.41 +SET 2948678.88 2377018.88 +SET 2948914.00 1776160.85 +SET 2949075.51 2217709.02 +SET 294937.14 188351.52 +SET 2949432.99 2549547.79 +SET 2949743.78 2218211.56 +SET 2949788.40 1776687.51 +SET 294996.65 197638.43 +SET 294998.13 237806.88 +SET 2949981.30 2378068.80 +SET 2950.56 967.68 +SET 2950225.60 1776950.84 +SET 295024.90 174130.95 +SET 295044.10 197670.22 +SET 295045.30 204578.70 +SET 2950662.80 1777214.17 +SET 295089.72 188448.96 +SET 29510.79 21887.96 +SET 2951080.32 2219216.64 +SET 295110.00 177747.75 +SET 2951283.72 2379118.72 +SET 2951537.20 1777740.83 +SET 295165.28 96803.84 +SET 295178.96 174221.88 +SET 29520.12 21894.88 +SET 295208.76 204692.04 +SET 295242.30 188546.40 +SET 2952848.80 1778530.82 +SET 295290.49 204748.71 +SET 2953085.13 2220724.26 +SET 29532.30 25528.30 +SET 295323.00 255283.00 +SET 2953230.00 2552830.00 +SET 295372.22 204805.38 +SET 295375.34 222122.68 +SET 295376.25 197892.75 +SET 2954073.78 2553559.38 +SET 295423.70 197924.54 +SET 295453.95 204862.05 +SET 2954597.60 1779584.14 +SET 295471.15 197956.33 +SET 29548.11 21915.64 +SET 295487.08 174403.74 +SET 2955190.98 2382268.48 +SET 2955339.45 2554653.45 +SET 295535.68 204918.72 +SET 295547.46 188741.28 +SET 29557.44 21922.56 +SET 2955909.20 1780374.13 +SET 295602.40 96947.20 +SET 295613.50 198051.70 +SET 2956183.23 2555382.83 +SET 295641.14 174494.67 +SET 295649.34 238331.84 +SET 29566.77 21929.48 +SET 295699.14 205032.06 +SET 2957.61 2193.64 +SET 2957027.01 2556112.21 +SET 2957144.61 2383843.36 +SET 295744.89 255647.69 +SET 2957448.90 2556476.90 +SET 295755.85 198147.07 +SET 2957658.00 1781427.45 +SET 295795.20 174585.60 +SET 295796.60 168404.18 +SET 2958095.20 1781690.78 +SET 29585.43 21943.32 +SET 295850.75 198210.65 +SET 29586.26 20514.54 +SET 2958714.57 2557570.97 +SET 2958969.60 1782217.44 +SET 2959098.24 2385418.24 +SET 29594.76 21950.24 +SET 2959767.83 2225749.66 +SET 2959844.00 1782744.10 +SET 295993.10 198306.02 +SET 296005.20 189033.60 +SET 296026.06 205258.74 +SET 296039.52 97090.56 +SET 296043.61 222625.22 +SET 2960436.10 2226252.20 +SET 2960718.40 1783270.76 +SET 296103.32 174767.46 +SET 2961051.87 2386993.12 +SET 296107.79 205315.41 +SET 296124.80 184927.20 +SET 296135.45 198401.39 +SET 29614.88 9712.64 +SET 296157.78 189131.04 +SET 296166.78 256012.38 +SET 2961703.08 2387518.08 +SET 2961772.64 2227257.28 +SET 2962030.00 1784060.75 +SET 296208.00 168638.40 +SET 2962089.69 2560488.49 +SET 29622.75 21971.00 +SET 296230.35 198464.97 +SET 2962354.29 2388043.04 +SET 2962467.20 1784324.08 +SET 296300.55 238856.80 +SET 2963005.50 2388568.00 +SET 2963341.60 1784850.74 +SET 2963656.71 2389092.96 +SET 296367.36 97198.08 +SET 2963777.25 2561947.25 +SET 2963777.45 2228764.90 +SET 2963778.80 1785114.07 +SET 2964199.14 2562311.94 +SET 2964307.92 2389617.92 +SET 2964445.72 2229267.44 +SET 296462.94 189325.92 +SET 2964621.03 2562676.63 +SET 2964959.13 2390142.88 +SET 2965042.92 2563041.32 +SET 296515.05 198655.71 +SET 2965464.81 2563406.01 +SET 2965527.60 1786167.39 +SET 296565.50 175040.25 +SET 296598.17 205655.43 +SET 29660.07 21998.68 +SET 296609.95 198719.29 +SET 296615.52 189423.36 +SET 296619.40 168872.62 +SET 2966402.00 1786694.05 +SET 29667.99 20571.21 +SET 296695.20 97305.60 +SET 2967118.80 2231277.60 +SET 2967276.40 1787220.71 +SET 296752.30 198814.66 +SET 296768.10 189520.80 +SET 29678.73 22012.52 +SET 2968150.80 1787747.37 +SET 2968455.34 2232282.68 +SET 2968588.00 1788010.70 +SET 296873.62 175222.11 +SET 2968866.39 2393292.64 +SET 2969123.61 2232785.22 +SET 296920.68 189618.24 +SET 2969261.82 2566688.22 +SET 296951.76 239381.76 +SET 296989.55 198973.61 +SET 2969899.60 1788800.69 +SET 2970105.60 2567417.60 +SET 2970168.81 2394342.56 +SET 2970460.15 2233790.30 +SET 2970820.02 2394867.52 +SET 297084.45 199037.19 +SET 2971128.42 2234292.84 +SET 2971211.20 1789590.68 +SET 297132.32 97448.96 +SET 2971371.27 2568511.67 +SET 297145.92 185564.88 +SET 29716.05 22040.20 +SET 2971793.16 2568876.36 +SET 2971796.69 2234795.38 +SET 297181.74 175403.97 +SET 2972215.05 2569241.05 +SET 297225.84 189813.12 +SET 297226.80 199132.56 +SET 29725.38 22047.12 +SET 297252.01 206108.79 +SET 2972636.94 2569605.74 +SET 29729.60 17906.44 +SET 297321.70 199196.14 +SET 297333.74 206165.46 +SET 2973397.20 1790907.33 +SET 29734.71 22054.04 +SET 2973480.72 2570335.12 +SET 297350.88 97520.64 +SET 297369.15 199227.93 +SET 297415.47 206222.13 +SET 29744.04 22060.96 +SET 2974469.77 2236805.54 +SET 297464.05 199291.51 +SET 2974708.80 1791697.32 +SET 297489.86 175585.83 +SET 29751.15 19932.33 +SET 297511.50 199323.30 +SET 2975146.00 1791960.65 +SET 2975168.28 2571793.88 +SET 297531.00 190008.00 +SET 2975378.49 2398542.24 +SET 297569.44 97592.32 +SET 297578.93 206335.47 +SET 2975806.31 2237810.62 +SET 2976012.06 2572523.26 +SET 2976020.40 1792487.31 +SET 2976029.70 2399067.20 +SET 297606.40 199386.88 +SET 297643.92 175676.76 +SET 297678.72 97628.16 +SET 2976894.80 1793013.97 +SET 2977332.12 2400117.12 +SET 297742.39 206448.81 +SET 297797.98 175767.69 +SET 29781.36 22088.64 +SET 297843.65 199545.83 +SET 297854.34 257471.14 +SET 2978965.29 2575076.09 +SET 29790.69 22095.56 +SET 297905.85 206562.15 +SET 2979147.66 2240323.32 +SET 29798.60 19964.12 +SET 2979815.93 2240825.86 +SET 297986.00 199641.20 +SET 297988.74 190300.32 +SET 298006.56 97735.68 +SET 298033.45 199672.99 +SET 298069.31 206675.49 +SET 29809.35 22109.40 +SET 2981074.74 2576899.54 +SET 2981152.47 2241830.94 +SET 2981704.00 1795910.60 +SET 298175.80 199768.36 +SET 29818.68 22116.32 +SET 2981820.74 2242333.48 +SET 2981890.59 2403791.84 +SET 2981918.52 2577628.92 +SET 298225.12 97807.36 +SET 2982340.41 2577993.61 +SET 298260.16 176040.48 +SET 298265.00 169809.50 +SET 298270.70 199831.94 +SET 298276.23 257835.83 +SET 2983184.19 2578722.99 +SET 2983193.01 2404841.76 +SET 29833.44 9784.32 +SET 298334.40 97843.20 +SET 2983606.08 2579087.68 +SET 2983825.55 2243841.10 +SET 2983890.00 1797227.25 +SET 298413.05 199927.31 +SET 298414.22 176131.41 +SET 298446.48 190592.64 +SET 2984495.43 2405891.68 +SET 298460.50 199959.10 +SET 2984871.75 2580181.75 +SET 2985146.64 2406416.64 +SET 2985201.60 1798017.24 +SET 2985293.64 2580546.44 +SET 298555.40 200022.68 +SET 2985638.80 1798280.57 +SET 2985797.85 2406941.60 +SET 298607.60 179854.39 +SET 2986449.06 2407466.56 +SET 298650.30 200086.26 +SET 298662.24 97950.72 +SET 29867.76 18652.14 +SET 298676.40 170043.72 +SET 2986950.40 1799070.56 +SET 298698.12 258200.52 +SET 2987100.27 2407991.52 +SET 2987387.60 1799333.89 +SET 29874.66 22157.84 +SET 2987403.09 2582369.89 +SET 2987751.48 2408516.48 +SET 2987824.98 2582734.58 +SET 298792.65 200181.63 +SET 298804.88 207185.52 +SET 29883.99 22164.76 +SET 298840.10 200213.42 +SET 2988402.69 2409041.44 +SET 2988503.44 2247358.88 +SET 29887.64 17640.42 +SET 298887.55 200245.21 +SET 2989.35 2002.77 +SET 298904.22 190884.96 +SET 2989090.65 2583828.65 +SET 2989512.54 2584193.34 +SET 298990.08 98058.24 +SET 2990010.80 1800913.87 +SET 299029.90 200340.58 +SET 2990356.32 2584922.72 +SET 2991007.53 2411141.28 +SET 2991176.52 2249369.04 +SET 299120.01 258565.21 +SET 2991200.10 2585652.10 +SET 29913.18 20741.22 +SET 299131.80 207412.20 +SET 2991658.74 2411666.24 +SET 2991759.60 1801967.19 +SET 299208.64 98129.92 +SET 2992309.95 2412191.20 +SET 299293.50 170395.05 +SET 2992961.16 2412716.16 +SET 2993071.20 1802757.18 +SET 299317.92 98165.76 +SET 2993181.33 2250876.66 +SET 299338.58 176676.99 +SET 2993508.40 1803020.51 +SET 299361.96 191177.28 +SET 299384.96 225137.92 +SET 2993849.60 2251379.20 +SET 29940.95 20059.49 +SET 299409.50 200594.90 +SET 29942.72 9820.16 +SET 2994517.87 2251881.74 +SET 29949.30 22213.20 +SET 299504.40 200658.48 +SET 299514.54 191274.72 +SET 2995257.20 1804073.83 +SET 299540.45 207695.55 +SET 2995566.00 2414816.00 +SET 2995694.40 1804337.16 +SET 2995840.89 2589663.69 +SET 299622.18 207752.22 +SET 299646.75 200753.85 +SET 2996568.80 1804863.82 +SET 2996684.67 2590393.07 +SET 299694.20 200785.64 +SET 2997006.00 1805127.15 +SET 2997519.63 2416390.88 +SET 299755.04 98309.12 +SET 29977.29 22233.96 +SET 2997859.22 2254394.44 +SET 2997880.40 1805653.81 +SET 299789.10 200849.22 +SET 2997950.34 2591487.14 +SET 299800.76 176949.78 +SET 2998527.49 2254896.98 +SET 299884.00 200912.80 +SET 299931.45 200944.59 +SET 2999637.90 2592945.90 +SET 299972.28 191567.04 +SET 299973.60 98380.80 +SET 299978.90 200976.38 +SET 3000124.47 2418490.72 +SET 300026.35 201008.17 +SET 30005.28 22254.72 +SET 3000503.60 1807233.79 +SET 300053.23 225640.46 +SET 3000903.57 2594039.97 +SET 3000940.80 1807497.12 +SET 300194.29 208148.91 +SET 300209.28 187477.92 +SET 3002169.24 2595134.04 +SET 30023.94 22268.56 +SET 3002689.60 1808550.44 +SET 300277.44 191761.92 +SET 3003126.80 1808813.77 +SET 30032.20 17098.06 +SET 30033.27 22275.48 +SET 300356.40 180907.71 +SET 300357.75 208262.25 +SET 300385.68 259659.28 +SET 3003856.80 2596592.80 +SET 3003873.65 2258917.30 +SET 30041.70 17731.35 +SET 30042.60 22282.40 +SET 3004278.69 2596957.49 +SET 300430.02 191859.36 +SET 3004438.40 1809603.76 +SET 300453.40 201294.28 +SET 3004541.92 2259419.84 +SET 3004682.94 2422165.44 +SET 3004700.58 2597322.18 +SET 300500.85 201326.07 +SET 3005122.47 2597686.87 +SET 3005210.19 2259922.38 +SET 300527.70 171097.71 +SET 3005312.80 1810130.42 +SET 3005544.36 2598051.56 +SET 300571.06 177404.43 +SET 300582.60 191956.80 +SET 300602.94 208432.26 +SET 30061.26 22296.24 +SET 3006388.14 2598780.94 +SET 3006546.73 2260927.46 +SET 3006624.40 1810920.41 +SET 30070.59 22303.16 +SET 30072.15 22614.30 +SET 3007287.78 2424265.28 +SET 300735.18 192054.24 +SET 300738.10 201485.02 +SET 3007498.80 1811447.07 +SET 3007653.81 2599875.01 +SET 300766.40 208545.60 +SET 300785.55 201516.81 +SET 300793.60 181171.04 +SET 3007936.00 1811710.40 +SET 3007938.99 2424790.24 +SET 30083.30 20154.86 +SET 300833.00 201548.60 +SET 300847.84 98667.52 +SET 300859.02 242531.52 +SET 300879.18 177586.29 +SET 3009219.81 2262937.62 +SET 3009341.37 2601333.77 +SET 300957.12 98703.36 +SET 3009684.80 1812763.72 +SET 300975.12 187956.18 +SET 300975.35 201643.97 +SET 3009888.08 2263440.16 +SET 301022.80 201675.76 +SET 301040.34 192249.12 +SET 3010543.83 2426890.08 +SET 301066.40 98739.20 +SET 301117.70 201739.34 +SET 3011195.04 2427415.04 +SET 3011224.62 2264445.24 +SET 3011450.82 2603157.22 +SET 30117.24 22337.76 +SET 3011846.25 2427940.00 +SET 301229.46 260388.66 +SET 30123.04 18811.56 +SET 30126.57 22344.68 +SET 30130.75 20186.65 +SET 301307.50 201866.50 +SET 3013148.67 2428989.92 +SET 3013182.40 1814870.36 +SET 301350.50 171566.15 +SET 301354.95 201898.29 +SET 3013619.60 1815133.69 +SET 301389.77 226645.54 +SET 3013897.70 2266455.40 +SET 3013982.16 2605345.36 +SET 301402.40 201930.08 +SET 3014451.09 2430039.84 +SET 301501.97 209055.63 +SET 301503.52 98882.56 +SET 3015247.83 2606439.43 +SET 30158.37 20911.23 +SET 3015805.60 1816450.34 +SET 301583.70 209112.30 +SET 30161.28 9891.84 +SET 3016513.50 2607533.50 +SET 3016570.78 2268465.56 +SET 301665.43 209168.97 +SET 3016680.00 1816977.00 +SET 3017055.93 2432139.68 +SET 301734.55 202152.61 +SET 3017357.28 2608262.88 +SET 3017779.17 2608627.57 +SET 30178.20 20218.44 +SET 3017991.60 1817766.99 +SET 301803.54 178131.87 +SET 30182.55 22386.20 +SET 301829.45 202216.19 +SET 3018622.95 2609356.95 +SET 301876.90 202247.98 +SET 3019009.56 2433714.56 +SET 3019243.86 2270475.72 +SET 3019303.20 1818556.98 +SET 301957.60 178222.80 +SET 3019660.77 2434239.52 +SET 301967.60 171917.48 +SET 3019740.40 1818820.31 +SET 301992.35 209395.65 +SET 30201.21 22400.04 +SET 3020310.51 2610815.71 +SET 302058.04 227148.08 +SET 302074.08 209452.32 +SET 30210.54 22406.96 +SET 302114.15 202406.93 +SET 3021248.67 2271983.34 +SET 3021489.20 1819873.63 +SET 30219.87 22413.88 +SET 3021926.40 1820136.96 +SET 3021998.07 2612274.47 +SET 3022419.96 2612639.16 +SET 302260.98 193028.64 +SET 30229.20 22420.80 +SET 3023568.03 2437389.28 +SET 3023675.20 1821190.28 +SET 30237.90 17215.17 +SET 302377.76 99169.28 +SET 3023921.75 2273993.50 +SET 3024.01 2096.79 +SET 3024107.52 2614097.92 +SET 3024112.40 1821453.61 +SET 302413.56 193126.08 +SET 302419.78 178495.59 +SET 3024529.41 2614462.61 +SET 3024590.02 2274496.04 +SET 302506.80 188912.70 +SET 302542.40 182224.36 +SET 302564.46 209792.34 +SET 3025795.08 2615556.68 +SET 3025861.20 1822506.93 +SET 3025926.56 2275501.12 +SET 302596.32 99240.96 +SET 3026172.87 2439489.12 +SET 3026216.97 2615921.37 +SET 3026298.40 1822770.26 +SET 302636.10 202756.62 +SET 3026594.83 2276003.66 +SET 3026638.86 2616286.06 +SET 302683.55 202788.41 +SET 3027060.75 2616650.75 +SET 302727.92 209905.68 +SET 3027482.64 2617015.44 +SET 302778.45 202851.99 +SET 302790.40 172385.92 +SET 3027904.53 2617380.13 +SET 302812.65 244106.40 +SET 3028126.50 2441064.00 +SET 3028326.42 2617744.82 +SET 3028484.40 1824086.91 +SET 302871.30 193418.40 +SET 302881.96 178768.38 +SET 302917.02 261847.42 +SET 3029170.20 2618474.20 +SET 302920.80 202947.36 +SET 3029267.91 2278013.82 +SET 3029358.80 1824613.57 +SET 3029428.92 2442113.92 +SET 302979.60 182487.69 +SET 3029796.00 1824876.90 +SET 3030013.98 2619203.58 +SET 3030435.87 2619568.27 +SET 303054.84 210132.36 +SET 3030670.40 1825403.56 +SET 3031279.65 2620297.65 +SET 3031544.80 1825930.22 +SET 3031701.54 2620662.34 +SET 303176.46 193613.28 +SET 303190.08 178950.24 +SET 3031982.00 1826193.55 +SET 303201.80 172620.14 +SET 303205.50 203138.10 +SET 3032545.32 2621391.72 +SET 3032609.26 2280526.52 +SET 3032684.97 2444738.72 +SET 303272.64 189390.96 +SET 30331.83 22496.92 +SET 3033277.53 2281029.06 +SET 303329.04 193710.72 +SET 303338.91 262212.11 +SET 303347.85 203233.47 +SET 3033730.80 1827246.87 +SET 303394.58 228153.16 +SET 303395.30 203265.26 +SET 303407.50 172737.25 +SET 303416.80 182751.02 +SET 3034614.07 2282034.14 +SET 303463.49 210415.71 +SET 3034654.77 2623215.17 +SET 30349.82 17913.21 +SET 30350.49 22510.76 +SET 3035042.40 1828036.86 +SET 3035076.66 2623579.86 +SET 3035282.34 2282536.68 +SET 303537.65 203360.63 +SET 3035479.60 1828300.19 +SET 303585.10 203392.42 +SET 3035916.80 1828563.52 +SET 3035920.44 2624309.24 +SET 3035941.02 2447363.52 +SET 303626.95 210529.05 +SET 30363.42 19390.56 +SET 303634.20 193905.60 +SET 3036592.23 2447888.48 +SET 3036764.22 2625038.62 +SET 3036791.20 1829090.18 +SET 303680.00 203456.00 +SET 303689.12 99599.36 +SET 303727.45 203487.79 +SET 3037287.15 2284044.30 +SET 3037665.60 1829616.84 +SET 30379.84 9963.52 +SET 303798.40 99635.20 +SET 3038029.89 2626132.69 +SET 303806.32 179313.96 +SET 3038102.80 1829880.17 +SET 303822.35 203551.37 +SET 3038623.69 2285049.38 +SET 303869.80 203583.16 +SET 303917.25 203614.95 +SET 303953.87 210755.73 +SET 3039717.45 2627591.45 +SET 3039848.28 2450513.28 +SET 3039851.60 1830933.49 +SET 304012.15 203678.53 +SET 304024.60 173088.58 +SET 304038.48 189869.22 +SET 3040561.23 2628320.83 +SET 30406.47 22552.28 +SET 3040628.50 2286557.00 +SET 304091.94 194197.92 +SET 3041.58 2255.92 +SET 304107.05 203742.11 +SET 304115.07 245156.32 +SET 304117.33 210869.07 +SET 3041405.01 2629050.21 +SET 304154.50 203773.90 +SET 3041600.40 1831986.81 +SET 3041826.90 2629414.90 +SET 3041965.04 2287562.08 +SET 304230.30 173205.69 +SET 3042474.80 1832513.47 +SET 30425.13 22566.12 +SET 3042670.68 2630144.28 +SET 304268.50 179586.75 +SET 3042912.00 1832776.80 +SET 304293.76 190028.64 +SET 304296.85 203869.27 +SET 3043301.58 2288567.16 +SET 304344.80 99814.40 +SET 304362.52 211039.08 +SET 3043755.54 2453663.04 +SET 3043786.40 1833303.46 +SET 3043936.35 2631238.35 +SET 304397.10 194392.80 +SET 3044223.60 1833566.79 +SET 30443.60 17332.28 +SET 3044358.24 2631603.04 +SET 3044638.12 2289572.24 +SET 3044780.13 2631967.73 +SET 3045057.96 2454712.96 +SET 30453.12 22586.88 +SET 3045535.20 1834356.78 +SET 3045623.91 2632697.11 +SET 3045709.17 2455237.92 +SET 304581.55 204060.01 +SET 3045972.40 1834620.11 +SET 3046045.80 2633061.80 +SET 304607.71 211209.09 +SET 304629.00 204091.80 +SET 3046409.60 1834883.44 +SET 304641.70 173439.91 +SET 3046467.69 2633426.49 +SET 3046846.80 1835146.77 +SET 3047284.00 1835410.10 +SET 304730.68 179859.54 +SET 304731.12 229158.24 +SET 304771.35 204187.17 +SET 3047721.20 1835673.43 +SET 304781.92 99957.76 +SET 304804.32 190347.48 +SET 30485.29 21137.91 +SET 304852.90 211379.10 +SET 3048577.14 2635249.94 +SET 30489.12 9999.36 +SET 3048999.03 2635614.63 +SET 30490.44 22614.56 +SET 3049032.80 1836463.42 +SET 3049470.00 1836726.75 +SET 3049616.43 2458387.68 +SET 3049907.20 1836990.08 +SET 305.16 194.88 +SET 305000.48 100029.44 +SET 305007.42 194782.56 +SET 305016.36 211492.44 +SET 30503.88 18004.14 +SET 3050344.40 1837253.41 +SET 305038.80 180041.40 +SET 305056.05 204377.91 +SET 305098.09 211549.11 +SET 3051.60 1948.80 +SET 30516.00 19488.00 +SET 305160.00 194880.00 +SET 305165.60 183804.34 +SET 30518.43 22635.32 +SET 3051989.09 2295100.18 +SET 3052093.20 1838306.73 +SET 3052221.27 2460487.52 +SET 305258.80 173791.24 +SET 30527.76 22642.24 +SET 3052796.04 2638896.84 +SET 305293.30 204536.86 +SET 305312.58 194977.44 +SET 305314.88 190666.32 +SET 3053325.63 2296105.26 +SET 305346.92 180223.26 +SET 3053639.82 2639626.22 +SET 30537.09 22649.16 +SET 305388.20 204600.44 +SET 3054061.71 2639990.91 +SET 305417.49 246206.24 +SET 305464.50 173908.35 +SET 305465.16 195074.88 +SET 3054716.40 1839886.71 +SET 3054826.11 2462587.36 +SET 305483.10 204664.02 +SET 3054905.49 2640720.29 +SET 305506.74 211832.46 +SET 3055153.60 1840150.04 +SET 3055330.44 2297612.88 +SET 305546.88 100208.64 +SET 3055477.32 2463112.32 +SET 30557.80 20472.76 +SET 3055749.27 2641449.67 +SET 305588.47 211889.13 +SET 305602.80 184067.67 +SET 305617.74 195172.32 +SET 305625.45 204759.39 +SET 305656.16 100244.48 +SET 3056593.05 2642179.05 +SET 30567.02 21194.58 +SET 3056779.74 2464162.24 +SET 3057014.94 2642543.74 +SET 30574.41 22676.84 +SET 305751.93 212002.47 +SET 305767.80 204854.76 +SET 3057776.80 1841730.02 +SET 3058003.52 2299623.04 +SET 3058082.16 2465212.16 +SET 3058214.00 1841993.35 +SET 30583.74 22683.76 +SET 305862.70 204918.34 +SET 3058702.50 2644002.50 +SET 3058733.37 2465737.12 +SET 305874.72 100316.16 +SET 3059088.40 1842520.01 +SET 305910.15 204950.13 +SET 30593.07 22690.68 +SET 3059525.60 1842783.34 +SET 305957.60 204981.92 +SET 3059968.17 2645096.57 +SET 3060.24 2269.76 +SET 3060008.33 2301130.66 +SET 3060035.79 2466787.04 +SET 30602.40 22697.60 +SET 3060390.06 2645461.26 +SET 30604.00 18433.10 +SET 306040.00 184331.00 +SET 30605.25 20504.55 +SET 306052.50 205045.50 +SET 30606.87 24673.12 +SET 3060676.60 2301633.20 +SET 3060687.00 2467312.00 +SET 306075.48 195464.64 +SET 306080.72 191144.58 +SET 306081.60 174259.68 +SET 30611.73 22704.52 +SET 3061233.84 2646190.64 +SET 3061344.87 2302135.74 +SET 306147.40 205109.08 +SET 3061989.42 2468361.92 +SET 306202.56 100423.68 +SET 3062499.51 2647284.71 +SET 3062586.00 1844626.65 +SET 3062640.63 2468886.88 +SET 3062681.41 2303140.82 +SET 306271.28 180768.84 +SET 3062921.40 2647649.40 +SET 306311.84 100459.52 +SET 30633.60 19130.40 +SET 306336.00 191304.00 +SET 3063765.18 2648378.78 +SET 306380.64 195659.52 +SET 30639.72 22725.28 +SET 3063943.05 2469936.80 +SET 306405.77 212455.83 +SET 3064187.07 2648743.47 +SET 306421.12 100495.36 +SET 3064334.80 1845679.97 +SET 3064772.00 1845943.30 +SET 30648.75 21251.25 +SET 306487.50 212512.50 +SET 30649.05 22732.20 +SET 306493.00 174493.90 +SET 30652.70 20536.34 +SET 3065209.20 1846206.63 +SET 306527.00 205363.40 +SET 3065452.74 2649837.54 +SET 306569.23 212569.17 +SET 30657.94 18095.07 +SET 306621.90 205426.98 +SET 306639.68 100567.04 +SET 306650.96 212625.84 +SET 3066520.80 1846996.62 +SET 3066547.89 2472036.64 +SET 306669.35 205458.77 +SET 3066958.00 1847259.95 +SET 306748.96 100602.88 +SET 3067562.19 2651660.99 +SET 3067832.40 1847786.61 +SET 306814.42 212739.18 +SET 3068405.97 2652390.37 +SET 3068501.52 2473611.52 +SET 306858.24 100638.72 +SET 306887.52 181132.56 +SET 3069.57 2276.68 +SET 306906.60 205617.72 +SET 30695.70 22766.80 +SET 3069581.20 1848839.93 +SET 306990.96 196049.28 +SET 3070018.40 1849103.26 +SET 30705.03 22773.72 +SET 307059.61 212909.19 +SET 30707.68 10071.04 +SET 3070700.65 2309171.30 +SET 307110.10 174845.23 +SET 3071106.36 2475711.36 +SET 307135.92 265494.32 +SET 3071368.92 2309673.84 +SET 30714.36 22780.64 +SET 307143.85 205776.67 +SET 3071767.20 1850156.58 +SET 3072037.19 2310176.38 +SET 3072202.98 2655672.58 +SET 307223.07 213022.53 +SET 307238.75 205840.25 +SET 3072641.60 1850683.24 +SET 3072705.46 2310678.92 +SET 307295.36 100782.08 +SET 307315.80 174962.34 +SET 307351.60 185120.99 +SET 307371.12 247781.12 +SET 3073711.20 2477811.20 +SET 307386.53 213135.87 +SET 3073953.20 1851473.23 +SET 30740.42 23116.84 +SET 307404.20 231168.40 +SET 3074390.40 1851736.56 +SET 3074710.27 2312186.54 +SET 3074827.60 1851999.89 +SET 307523.45 206030.99 +SET 3075264.80 1852263.22 +SET 3075378.54 2312689.08 +SET 307557.81 265859.01 +SET 3075578.10 2658590.10 +SET 30761.01 22815.24 +SET 3076139.20 1852789.88 +SET 307631.72 213305.88 +SET 3076316.04 2479911.04 +SET 3076421.88 2659319.48 +SET 307657.82 181587.21 +SET 3076715.08 2313694.16 +SET 3076967.25 2480436.00 +SET 307713.25 206158.15 +SET 307713.45 213362.55 +SET 3077383.35 2314196.70 +SET 307753.86 196536.48 +SET 3077687.55 2660413.55 +SET 307795.18 213419.22 +SET 3078051.62 2314699.24 +SET 307808.15 206221.73 +SET 307811.88 181678.14 +SET 307876.91 213475.89 +SET 3078920.88 2482010.88 +SET 3078953.22 2661507.62 +SET 3079375.11 2661872.31 +SET 30795.05 20631.71 +SET 307950.50 206317.10 +SET 307951.04 100997.12 +SET 307958.64 213532.56 +SET 3079636.80 1854896.52 +SET 307979.70 266223.70 +SET 3079797.00 2662237.00 +SET 30798.33 22842.92 +SET 308.12 181.86 +SET 308059.02 196731.36 +SET 3080724.70 2316709.40 +SET 3080874.51 2483585.76 +SET 308092.85 206412.47 +SET 3080948.40 1855686.51 +SET 3081062.67 2663331.07 +SET 308138.60 175430.78 +SET 3081525.72 2484110.72 +SET 3081822.80 1856213.17 +SET 3081906.45 2664060.45 +SET 3082260.00 1856476.50 +SET 30826.32 22863.68 +SET 308285.56 213759.24 +SET 3083172.12 2665154.52 +SET 3083479.35 2485685.60 +SET 308364.18 196926.24 +SET 308377.55 206603.21 +SET 308378.24 192579.36 +SET 308388.16 101140.48 +SET 3084008.80 1857529.82 +SET 308401.59 266588.39 +SET 30842.50 20663.50 +SET 308425.00 206635.00 +SET 3084446.00 1857793.15 +SET 3084781.77 2486735.52 +SET 3085.50 1756.65 +SET 3085281.57 2666977.97 +SET 3085320.40 1858319.81 +SET 30854.31 22884.44 +SET 3085703.46 2667342.66 +SET 3085757.60 1858583.14 +SET 308582.18 182132.79 +SET 308606.72 101212.16 +SET 3086084.19 2487785.44 +SET 308612.48 213985.92 +SET 3086194.80 1858846.47 +SET 308633.52 192738.78 +SET 3086547.24 2668072.04 +SET 308662.25 206793.95 +SET 3086735.40 2488310.40 +SET 3086969.13 2668436.73 +SET 308716.00 101248.00 +SET 30872.97 22898.28 +SET 3087407.40 2321734.80 +SET 3087506.40 1859636.46 +SET 308755.70 175782.11 +SET 308775.94 214099.26 +SET 3087812.91 2669166.11 +SET 30882.30 22905.20 +SET 308823.48 266953.08 +SET 3088380.80 1860163.12 +SET 308857.67 214155.93 +SET 3088656.69 2669895.49 +SET 3088743.94 2322739.88 +SET 308888.80 192898.20 +SET 3089078.58 2670260.18 +SET 3089255.20 1860689.78 +SET 308934.56 101319.68 +SET 3089340.24 2490410.24 +SET 3089500.47 2670624.87 +SET 308961.40 175899.22 +SET 308974.50 197316.00 +SET 3089922.36 2670989.56 +SET 308994.40 207016.48 +SET 309021.13 214269.27 +SET 3090642.66 2491460.16 +SET 30910.29 22925.96 +SET 3091004.00 1861743.10 +SET 3091188.03 2672083.63 +SET 309127.08 197413.44 +SET 3091441.20 1862006.43 +SET 309167.10 176016.33 +SET 309184.59 214382.61 +SET 3092085.29 2325252.58 +SET 309231.65 207175.43 +SET 3092596.29 2493035.04 +SET 30926.24 10142.72 +SET 3092753.56 2325755.12 +SET 309279.66 197510.88 +SET 309326.55 207239.01 +SET 309348.05 214495.95 +SET 309352.48 182587.44 +SET 3093627.20 1863323.08 +SET 3093719.37 2674271.77 +SET 309372.80 176133.44 +SET 309374.00 207270.80 +SET 30938.28 22946.72 +SET 309399.36 193217.04 +SET 3094090.10 2326760.20 +SET 3094501.60 1863849.74 +SET 3094549.92 2494609.92 +SET 3094758.37 2327262.74 +SET 3095828.82 2676095.22 +SET 3096094.91 2328267.82 +SET 309611.25 207429.75 +SET 309654.64 193376.46 +SET 30966.27 22967.48 +SET 3096672.60 2676824.60 +SET 3097094.49 2677189.29 +SET 3097516.38 2677553.98 +SET 309756.70 214779.30 +SET 3097805.97 2497234.72 +SET 309784.20 176367.66 +SET 3097999.20 1865956.38 +SET 3098099.72 2329775.44 +SET 3098360.16 2678283.36 +SET 309838.43 214835.97 +SET 3098457.18 2497759.68 +SET 309889.98 197900.64 +SET 309909.92 193535.88 +SET 309920.16 214892.64 +SET 309943.40 207652.28 +SET 3099625.83 2679377.43 +SET 309975.96 249880.96 +SET 309989.90 176484.77 +SET 310001.89 214949.31 +SET 3100410.81 2499334.56 +SET 3100622.40 1867536.36 +SET 310089.15 268047.15 +SET 31012.92 23002.08 +SET 310136.64 101713.92 +SET 3101441.07 2332288.14 +SET 3101496.80 1868063.02 +SET 310165.20 193695.30 +SET 310180.65 207811.23 +SET 3101934.00 1868326.35 +SET 310195.60 176601.88 +SET 3102109.34 2332790.68 +SET 310275.55 207874.81 +SET 310276.84 183133.02 +SET 3102808.40 1868853.01 +SET 3103015.65 2501434.40 +SET 310347.72 198192.96 +SET 3103666.86 2501959.36 +SET 310370.45 207938.39 +SET 31040.91 23022.84 +SET 310401.30 176718.99 +SET 31041.20 18696.43 +SET 310412.00 186964.30 +SET 310420.48 193854.72 +SET 310430.90 183223.95 +SET 310464.48 101821.44 +SET 310465.35 208001.97 +SET 3104994.40 1870169.66 +SET 3105.74 2153.46 +SET 310511.04 268411.84 +SET 3105450.69 2335303.38 +SET 310573.76 101857.28 +SET 310574.00 215346.00 +SET 3105954.18 2684847.78 +SET 310627.17 250405.92 +SET 3106271.70 2504059.20 +SET 310655.15 208129.13 +SET 310675.76 194014.14 +SET 3106787.23 2336308.46 +SET 310683.04 101893.12 +SET 310737.46 215459.34 +SET 310750.05 208192.71 +SET 3107617.60 1871749.64 +SET 31079.75 20822.45 +SET 3108054.80 1872012.97 +SET 3108063.63 2686671.23 +SET 310812.70 176953.21 +SET 3108225.33 2505634.08 +SET 3108485.52 2687035.92 +SET 3108907.41 2687400.61 +SET 310901.60 101964.80 +SET 310931.04 194173.56 +SET 3109329.30 2687765.30 +SET 3109366.40 1872802.96 +SET 31096.89 23064.36 +SET 3109803.60 1873066.29 +SET 310982.65 215629.35 +SET 3110178.96 2507208.96 +SET 311018.40 177070.32 +SET 311047.14 183587.67 +SET 31106.22 23071.28 +SET 3110830.17 2507733.92 +SET 311110.62 198680.16 +SET 311129.65 208447.03 +SET 3111481.38 2508258.88 +SET 31115.55 23078.20 +SET 311177.10 208478.82 +SET 3111989.60 1874382.94 +SET 311201.20 183678.60 +SET 311224.55 208510.61 +SET 311227.84 215799.36 +SET 31126.32 19877.76 +SET 31127.20 20854.24 +SET 3112704.42 2690682.82 +SET 311272.00 208542.40 +SET 311286.40 187490.96 +SET 3112864.00 1874909.60 +SET 311309.57 215856.03 +SET 3113126.31 2691047.51 +SET 311319.45 208574.19 +SET 3113301.20 1875172.93 +SET 3113548.20 2691412.20 +SET 3113738.40 1875436.26 +SET 31139.13 21591.27 +SET 3113970.09 2691776.89 +SET 3114086.22 2510358.72 +SET 311413.82 234183.64 +SET 3114138.20 2341836.40 +SET 311414.35 208637.77 +SET 311415.78 198875.04 +SET 3114175.60 1875699.59 +SET 3114391.98 2692141.58 +SET 3114806.47 2342338.94 +SET 3114813.87 2692506.27 +SET 311509.32 183860.46 +SET 31152.87 23105.88 +SET 3115235.76 2692870.96 +SET 3115388.64 2511408.64 +SET 3115474.74 2342841.48 +SET 311557.28 102179.84 +SET 311568.36 198972.48 +SET 3115924.40 1876752.91 +SET 3116.22 2311.28 +SET 3116079.54 2693600.34 +SET 31162.20 23112.80 +SET 311635.50 177421.65 +SET 3116501.43 2693965.03 +SET 311663.38 183951.39 +SET 3116691.06 2512458.56 +SET 311718.22 216139.38 +SET 311720.94 199069.92 +SET 3117345.21 2694694.41 +SET 31174.65 20886.03 +SET 3117673.20 1877806.23 +SET 3118110.40 1878069.56 +SET 311817.44 184042.32 +SET 3118188.99 2695423.79 +SET 311841.20 177538.76 +SET 3118547.60 1878332.89 +SET 3118610.88 2695788.48 +SET 311885.12 102287.36 +SET 31190.19 23133.56 +SET 311929.59 251455.84 +SET 311952.16 194811.24 +SET 3120598.32 2515608.32 +SET 3120733.60 1879649.54 +SET 312078.65 209082.83 +SET 31208.85 23147.40 +SET 312082.09 234686.18 +SET 3120820.90 2346861.80 +SET 312103.68 102359.04 +SET 3121142.22 2697976.62 +SET 3121170.80 1879912.87 +SET 3121249.53 2516133.28 +SET 312126.10 209114.62 +SET 3121608.00 1880176.20 +SET 312173.55 209146.41 +SET 312178.68 199362.24 +SET 3121900.74 2516658.24 +SET 3121986.00 2698706.00 +SET 31220.86 21647.94 +SET 312207.44 194970.66 +SET 312208.60 216479.40 +SET 3122157.44 2347866.88 +SET 31222.10 20917.82 +SET 312252.60 177772.98 +SET 312268.45 209209.99 +SET 3122825.71 2348369.42 +SET 3122919.60 1880966.19 +SET 312315.90 209241.78 +SET 3123356.80 1881229.52 +SET 31236.84 23168.16 +SET 3123794.00 1881492.85 +SET 3124162.25 2349374.50 +SET 3124231.20 1881756.18 +SET 3124505.58 2518758.08 +SET 312453.79 216649.41 +SET 31246.17 23175.08 +SET 312462.72 195130.08 +SET 3124668.40 1882019.51 +SET 3124939.23 2701258.83 +SET 3125.55 2318.20 +SET 312540.80 102502.40 +SET 31258.08 25198.08 +SET 312587.74 184496.97 +SET 3126167.06 2350882.12 +SET 3126417.20 1883072.83 +SET 312648.05 209464.31 +SET 3127048.68 2703082.28 +SET 31274.16 23195.84 +SET 31274.18 18458.79 +SET 312741.80 184587.90 +SET 312742.95 209527.89 +SET 312750.36 235188.72 +SET 3128166.00 1884126.15 +SET 3128412.84 2521907.84 +SET 312862.44 216932.76 +SET 312869.70 178124.31 +SET 3129158.13 2704905.73 +SET 312932.75 209655.05 +SET 312941.58 199849.44 +SET 312973.28 195448.92 +SET 312977.92 102645.76 +SET 313027.65 209718.63 +SET 3130366.47 2523482.72 +SET 313075.10 209750.42 +SET 313122.55 209782.21 +SET 3131668.89 2524532.64 +SET 313170.00 209814.00 +SET 313189.36 217159.44 +SET 313196.48 102717.44 +SET 313217.45 209845.79 +SET 3132181.49 2355404.98 +SET 313228.56 195608.34 +SET 3132320.10 2525057.60 +SET 313246.74 200044.32 +SET 3132533.25 2707823.25 +SET 3132538.00 1886759.45 +SET 313264.90 209877.58 +SET 313271.09 217216.11 +SET 3133622.52 2526107.52 +SET 31339.47 23244.28 +SET 313399.32 200141.76 +SET 3134642.70 2709646.70 +SET 31348.80 23251.20 +SET 3134924.94 2527157.44 +SET 3135064.59 2710011.39 +SET 313516.28 217386.12 +SET 313549.60 210068.32 +SET 313551.90 200239.20 +SET 31358.13 23258.12 +SET 3135908.37 2710740.77 +SET 313597.05 210100.11 +SET 3136035.60 1888866.09 +SET 3136227.36 2528207.36 +SET 313633.60 102860.80 +SET 31367.46 23265.04 +SET 3136752.15 2711470.15 +SET 313679.74 217499.46 +SET 3136859.38 2358922.76 +SET 3136910.00 1889392.75 +SET 313692.50 178592.75 +SET 313704.48 200336.64 +SET 3137174.04 2711834.84 +SET 313739.12 195927.18 +SET 3137529.78 2529257.28 +SET 31376.79 23271.96 +SET 3137784.40 1889919.41 +SET 313786.85 210227.27 +SET 3138221.60 1890182.74 +SET 313843.20 217612.80 +SET 3138439.71 2712928.91 +SET 313852.16 102932.48 +SET 3138658.80 1890446.07 +SET 313881.75 210290.85 +SET 313883.22 253030.72 +SET 3138861.60 2713293.60 +SET 313898.20 178709.86 +SET 313924.93 217669.47 +SET 3139483.41 2530832.16 +SET 3139532.46 2360932.92 +SET 3139705.38 2714022.98 +SET 313974.28 185315.34 +SET 3139970.40 1891236.06 +SET 314006.66 217726.14 +SET 3140127.27 2714387.67 +SET 3140407.60 1891499.39 +SET 3140785.83 2531882.08 +SET 314086.90 236193.80 +SET 3141282.00 1892026.05 +SET 3141537.27 2362440.54 +SET 3141814.83 2715846.43 +SET 314213.90 210513.38 +SET 3142236.72 2716211.12 +SET 31423.44 23306.56 +SET 314249.68 196246.02 +SET 3142739.46 2533456.96 +SET 3142873.81 2363445.62 +SET 31432.77 23313.48 +SET 314333.58 217952.82 +SET 3143390.67 2533981.92 +SET 314356.25 210608.75 +SET 3143905.20 1893606.03 +SET 314398.56 103111.68 +SET 314403.70 210640.54 +SET 314415.31 218009.49 +SET 314467.38 200823.84 +SET 3144779.60 1894132.69 +SET 3144878.62 2364953.24 +SET 314504.96 196405.44 +SET 314507.84 103147.52 +SET 31451.43 23327.32 +SET 3145189.95 2718763.95 +SET 3145611.84 2719128.64 +SET 31459.35 21076.77 +SET 314590.52 185679.06 +SET 31460.76 23334.24 +SET 314617.12 103183.36 +SET 3146215.16 2365958.32 +SET 314660.50 218179.50 +SET 3146646.72 2536606.72 +SET 3146877.51 2720222.71 +SET 3146883.43 2366460.86 +SET 31472.10 17917.83 +SET 3147297.93 2537131.68 +SET 314742.23 218236.17 +SET 314755.17 236696.34 +SET 314760.24 196564.86 +SET 314772.54 201018.72 +SET 3147721.29 2720952.09 +SET 31478.40 18959.76 +SET 314784.00 189597.60 +SET 3148143.18 2721316.78 +SET 3148219.97 2367465.94 +SET 3148277.20 1896239.33 +SET 31488.75 23355.00 +SET 314905.69 218349.51 +SET 314925.12 201116.16 +SET 314944.96 103290.88 +SET 3149902.77 2539231.52 +SET 3150026.00 1897292.65 +SET 3150224.78 2368973.56 +SET 315054.24 103326.72 +SET 3150553.98 2539756.48 +SET 31506.80 21108.56 +SET 315068.00 211085.60 +SET 3150893.05 2369476.10 +SET 3150900.40 1897819.31 +SET 315115.45 211117.39 +SET 315132.40 179412.52 +SET 3151518.30 2724234.30 +SET 31516.74 23375.76 +SET 3151856.40 2540806.40 +SET 3151940.19 2724598.99 +SET 315210.35 211180.97 +SET 315230.28 201311.04 +SET 3152507.61 2541331.36 +SET 315257.80 211212.76 +SET 3153.54 2338.96 +SET 315305.25 211244.55 +SET 3153086.40 1899135.96 +SET 315314.34 218632.86 +SET 31535.40 23389.60 +SET 315352.70 211276.34 +SET 3153523.60 1899399.29 +SET 3153566.13 2371486.26 +SET 315360.82 186133.71 +SET 315382.08 103434.24 +SET 3153960.80 1899662.62 +SET 3154049.64 2726422.44 +SET 3154398.00 1899925.95 +SET 3154902.67 2372491.34 +SET 315495.05 211371.71 +SET 315514.88 186224.64 +SET 315526.08 197043.12 +SET 3155315.31 2727516.51 +SET 315535.44 201505.92 +SET 31554.06 23403.44 +SET 315542.50 211403.50 +SET 315543.80 179646.74 +SET 3155570.94 2372993.88 +SET 315559.53 218802.87 +SET 315573.72 272788.12 +SET 3155737.20 2727881.20 +SET 315589.95 211435.29 +SET 315600.64 103505.92 +SET 3156146.80 1900979.27 +SET 31563.39 23410.36 +SET 315641.26 218859.54 +SET 315658.40 190124.26 +SET 3156584.00 1901242.60 +SET 3156907.48 2373998.96 +SET 3157002.87 2728975.27 +SET 3157066.08 2545006.08 +SET 315709.92 103541.76 +SET 315732.30 211530.66 +SET 3157458.40 1901769.26 +SET 315749.50 179763.85 +SET 3157717.29 2545531.04 +SET 315779.75 211562.45 +SET 315804.72 218972.88 +SET 31582.05 23424.20 +SET 3158268.54 2730069.34 +SET 315836.85 254605.60 +SET 3158368.50 2546056.00 +SET 31584.06 20170.08 +SET 315840.60 201700.80 +SET 315874.65 211626.03 +SET 3158770.00 1902559.25 +SET 315886.45 219029.55 +SET 31591.38 23431.12 +SET 3159112.32 2730798.72 +SET 3159207.20 1902822.58 +SET 3159534.21 2731163.41 +SET 3159644.40 1903085.91 +SET 3159670.92 2547105.92 +SET 315995.61 273152.81 +SET 3159956.10 2731528.10 +SET 3160248.83 2376511.66 +SET 316037.76 103649.28 +SET 3160518.80 1903612.57 +SET 3160917.10 2377014.20 +SET 316095.60 190387.59 +SET 316111.90 211784.98 +SET 3161393.20 1904139.23 +SET 3161585.37 2377516.74 +SET 316159.35 211816.77 +SET 3161830.40 1904402.56 +SET 316213.37 219256.23 +SET 3162253.64 2378019.28 +SET 316254.25 211880.35 +SET 31628.70 23458.80 +SET 31629.51 21931.29 +SET 3162909.33 2734080.93 +SET 3162921.91 2378521.82 +SET 316301.70 211912.14 +SET 3163142.00 1905192.55 +SET 3163578.18 2550255.68 +SET 3164016.40 1905719.21 +SET 31641.75 27351.75 +SET 316417.50 273517.50 +SET 3164229.39 2550780.64 +SET 316450.92 202090.56 +SET 3164596.89 2735539.69 +SET 31647.36 23472.64 +SET 316474.88 103792.64 +SET 316488.06 255130.56 +SET 3164926.72 2380029.44 +SET 3165018.78 2735904.38 +SET 316538.95 212071.09 +SET 3165440.67 2736269.07 +SET 316547.20 197680.80 +SET 3165765.20 1906772.53 +SET 316584.16 103828.48 +SET 316593.30 186861.15 +SET 3166183.02 2552355.52 +SET 3166263.26 2381034.52 +SET 3166639.60 1907299.19 +SET 3166706.34 2737363.14 +SET 316681.30 212166.46 +SET 3166931.53 2381537.06 +SET 3167076.80 1907562.52 +SET 3167128.23 2737727.83 +SET 3167514.00 1907825.85 +SET 316759.98 238203.96 +SET 316778.00 180349.40 +SET 316785.48 219652.92 +SET 316802.72 103900.16 +SET 3168136.65 2553930.40 +SET 316823.65 212261.83 +SET 3168268.07 2382542.14 +SET 3168388.40 1908352.51 +SET 316839.39 273882.19 +SET 3168393.90 2738821.90 +SET 316871.10 212293.62 +SET 3168787.86 2554455.36 +SET 3168815.79 2739186.59 +SET 3168825.60 1908615.84 +SET 3169237.68 2739551.28 +SET 3169439.07 2554980.32 +SET 316948.94 219766.26 +SET 3169700.00 1909142.50 +SET 3170090.28 2555505.28 +SET 317013.45 212388.99 +SET 317030.67 219822.93 +SET 317057.76 197999.64 +SET 3170574.40 1909669.16 +SET 317060.90 212420.78 +SET 3170741.49 2556030.24 +SET 3171011.60 1909932.49 +SET 317112.40 219879.60 +SET 31712.67 23521.08 +SET 317139.27 255655.52 +SET 3171609.42 2385054.84 +SET 317203.25 212516.15 +SET 317213.82 202577.76 +SET 3172190.91 2742104.11 +SET 31722.00 23528.00 +SET 317239.84 104043.52 +SET 317275.86 219992.94 +SET 317298.15 212579.73 +SET 31731.33 23534.92 +SET 317313.04 198159.06 +SET 317345.60 212611.52 +SET 3173456.58 2743198.18 +SET 317349.12 104079.36 +SET 31736.64 20267.52 +SET 3173878.47 2743562.87 +SET 317393.05 212643.31 +SET 3173997.54 2558655.04 +SET 317407.20 191177.58 +SET 3174072.00 1911775.80 +SET 317428.25 238706.50 +SET 317439.32 220106.28 +SET 3174509.20 1912039.13 +SET 317458.40 104115.20 +SET 3174722.25 2744292.25 +SET 3174950.77 2387567.54 +SET 3175144.14 2744656.94 +SET 317518.98 202772.64 +SET 3175299.96 2559704.96 +SET 3175383.60 1912565.79 +SET 317567.68 104151.04 +SET 3175820.80 1912829.12 +SET 31759.32 23555.68 +SET 3175951.17 2560229.92 +SET 3175987.92 2745386.32 +SET 3176287.31 2388572.62 +SET 3176695.20 1913355.78 +SET 317676.96 104186.88 +SET 317677.75 212834.05 +SET 317684.51 220276.29 +SET 317725.20 212865.84 +SET 3177253.59 2746480.39 +SET 317766.24 220332.96 +SET 317772.65 212897.63 +SET 3178006.80 1914145.77 +SET 317820.10 212929.42 +SET 317823.60 198477.90 +SET 317825.78 187588.59 +SET 317844.40 191440.91 +SET 3178444.00 1914409.10 +SET 3178519.26 2747574.46 +SET 317867.55 212961.21 +SET 31787.31 23576.44 +SET 31791.50 21299.30 +SET 317915.00 212993.00 +SET 31796.64 23583.36 +SET 3179755.60 1915199.09 +SET 317976.72 203064.96 +SET 318009.90 213056.58 +SET 318012.20 181052.06 +SET 3180192.80 1915462.42 +SET 31805.97 23590.28 +SET 3180630.00 1915725.75 +SET 318078.88 198637.32 +SET 318093.16 220559.64 +SET 318096.52 239209.04 +SET 318104.80 213120.16 +SET 3181067.20 1915989.08 +SET 318129.30 203162.40 +SET 3181472.49 2750127.29 +SET 3181633.47 2392592.94 +SET 318174.89 220616.31 +SET 3181941.60 1916515.74 +SET 318217.90 181169.17 +SET 3182316.27 2750856.67 +SET 3182378.80 1916779.07 +SET 31824.63 23604.12 +SET 318247.15 213215.53 +SET 318281.88 203259.84 +SET 318287.96 187861.38 +SET 318294.60 213247.32 +SET 318332.64 104401.92 +SET 318338.35 220729.65 +SET 3183638.28 2394100.56 +SET 318389.50 213310.90 +SET 3184127.60 1917832.39 +SET 318434.46 203357.28 +SET 318441.69 256705.44 +SET 318441.92 104437.76 +SET 3184425.72 2752680.12 +SET 3184564.80 1918095.72 +SET 3185068.11 2567579.36 +SET 318531.85 213406.27 +SET 3185643.09 2395608.18 +SET 3185691.39 2753774.19 +SET 318579.30 213438.06 +SET 318583.54 220899.66 +SET 318587.04 203454.72 +SET 3185876.40 1918885.71 +SET 31861.95 23631.80 +SET 3186113.28 2754138.88 +SET 318626.75 213469.85 +SET 3186313.60 1919149.04 +SET 318660.48 104509.44 +SET 3186750.80 1919412.37 +SET 3186957.06 2754868.26 +SET 3186979.63 2396613.26 +SET 3187021.74 2569154.24 +SET 318721.65 213533.43 +SET 318747.00 221013.00 +SET 31880.61 23645.64 +SET 3188316.17 2397618.34 +SET 318835.00 181520.50 +SET 318879.04 104581.12 +SET 318892.20 203649.60 +SET 3188984.44 2398120.88 +SET 318904.20 188225.10 +SET 3189066.51 2756691.71 +SET 318910.46 221126.34 +SET 3189488.40 2757056.40 +SET 3189626.58 2571254.08 +SET 3189811.20 1921255.68 +SET 318988.32 104616.96 +SET 318992.19 221183.01 +SET 3190.86 2366.64 +SET 3190320.98 2399125.96 +SET 319040.70 181637.61 +SET 31908.60 23666.40 +SET 319092.90 257230.40 +SET 319097.60 104652.80 +SET 3190989.25 2399628.50 +SET 319100.00 199275.00 +SET 319101.25 213787.75 +SET 319155.65 221296.35 +SET 3191560.00 1922309.00 +SET 3191580.21 2572828.96 +SET 3191597.85 2758879.85 +SET 319206.88 104688.64 +SET 3192231.42 2573353.92 +SET 3192325.79 2400633.58 +SET 3192434.40 1922835.66 +SET 31927.26 23680.24 +SET 3192863.52 2759973.92 +SET 3192994.06 2401136.12 +SET 3193285.41 2760338.61 +SET 3193308.80 1923362.32 +SET 31936.59 23687.16 +SET 3193707.30 2760703.30 +SET 319400.84 221466.36 +SET 3194330.60 2402141.20 +SET 3194551.08 2761432.68 +SET 319482.57 221523.03 +SET 319502.52 204039.36 +SET 319520.44 188588.82 +SET 319534.72 104796.16 +SET 3195394.86 2762162.06 +SET 31956.43 22157.97 +SET 3195667.14 2403146.28 +SET 3195932.00 1924942.30 +SET 3196369.20 1925205.63 +SET 31964.58 23707.92 +SET 319644.00 104832.00 +SET 319655.10 204136.80 +SET 319670.65 214169.23 +SET 3197243.60 1925732.29 +SET 319727.76 221693.04 +SET 319753.28 104867.84 +SET 3197671.95 2404653.90 +SET 3197680.80 1925995.62 +SET 319807.68 204234.24 +SET 3198092.31 2578078.56 +SET 319828.56 188770.68 +SET 3198340.22 2405156.44 +SET 3198555.20 1926522.28 +SET 319863.50 182106.05 +SET 3198769.98 2765079.58 +SET 3199394.73 2579128.48 +SET 319960.26 204331.68 +SET 319982.62 188861.61 +SET 3200.19 2373.56 +SET 3200045.94 2579653.44 +SET 320030.40 192757.56 +SET 3200304.00 1927575.60 +SET 3200879.43 2766903.03 +SET 320097.70 214455.34 +SET 320101.33 240716.66 +SET 320112.84 204429.12 +SET 3201615.60 1928365.59 +SET 3201681.57 2407669.14 +SET 32019.04 10501.12 +SET 3202052.80 1928628.92 +SET 320218.14 222033.06 +SET 3202349.84 2408171.68 +SET 3202490.00 1928892.25 +SET 3202566.99 2768361.79 +SET 320265.42 204526.56 +SET 320274.90 182340.27 +SET 32029.89 23756.36 +SET 320299.68 105047.04 +SET 320299.87 222089.73 +SET 320334.95 214614.29 +SET 3203686.38 2409176.76 +SET 3203801.60 1929682.24 +SET 3203832.66 2769455.86 +SET 3203953.20 2582803.20 +SET 320408.96 105082.88 +SET 3204254.55 2769820.55 +SET 320444.80 189134.40 +SET 3204604.41 2583328.16 +SET 320463.33 222203.07 +SET 3204676.00 1930208.90 +SET 3204676.44 2770185.24 +SET 32048.55 23770.20 +SET 320480.60 182457.38 +SET 3205113.20 1930472.23 +SET 320524.75 214741.45 +SET 320545.06 222259.74 +SET 3205520.22 2770914.62 +SET 3205550.40 1930735.56 +SET 32057.88 23777.12 +SET 320570.58 204721.44 +SET 320598.86 189225.33 +SET 3205987.60 1930998.89 +SET 320619.65 214805.03 +SET 320626.79 222316.41 +SET 320627.52 105154.56 +SET 3206359.46 2411186.92 +SET 320636.40 277164.40 +SET 3206424.80 1931262.22 +SET 320667.10 214836.82 +SET 32067.21 23784.04 +SET 320686.30 182574.49 +SET 3206862.00 1931525.55 +SET 320708.52 222373.08 +SET 320736.80 105190.40 +SET 320752.92 189316.26 +SET 32076.54 23790.96 +SET 32076.96 24121.92 +SET 3207629.67 2772738.07 +SET 320790.25 222429.75 +SET 3208173.60 1932315.54 +SET 3208364.27 2412694.54 +SET 320846.08 105226.24 +SET 32085.87 23797.88 +SET 3209.52 2380.48 +SET 3209048.00 1932842.20 +SET 3209162.88 2587002.88 +SET 3209485.20 1933105.53 +SET 32095.20 23804.80 +SET 320955.36 105262.08 +SET 3209739.12 2774561.52 +SET 3209814.09 2587527.84 +SET 3209922.40 1933368.86 +SET 3210161.01 2774926.21 +SET 3210369.08 2414202.16 +SET 321046.53 258805.28 +SET 321046.70 215091.14 +SET 321064.64 105297.92 +SET 3210796.80 1933895.52 +SET 3211234.00 1934158.85 +SET 3211705.62 2415207.24 +SET 321189.05 215186.51 +SET 321236.50 215218.30 +SET 3212418.93 2589627.68 +SET 321303.40 182925.82 +SET 32132.52 23832.48 +SET 321331.40 215281.88 +SET 321333.48 205208.64 +SET 3213536.13 2777843.73 +SET 321369.16 189679.98 +SET 321397.52 200709.78 +SET 321426.30 215345.46 +SET 3214294.40 1936002.16 +SET 3214372.56 2591202.56 +SET 3214378.70 2417217.40 +SET 3214379.91 2778573.11 +SET 321480.18 277893.78 +SET 3215023.77 2591727.52 +SET 3215046.97 2417719.94 +SET 321521.20 215409.04 +SET 321523.22 189770.91 +SET 321568.65 215440.83 +SET 3216067.47 2780031.87 +SET 321611.04 105477.12 +SET 321638.64 205403.52 +SET 3216383.51 2418725.02 +SET 3216480.40 1937318.81 +SET 32165.28 20086.92 +SET 321663.55 215504.41 +SET 3216911.25 2780761.25 +SET 3216977.40 2593302.40 +SET 3217051.78 2419227.56 +SET 32171.10 21553.62 +SET 321711.00 215536.20 +SET 321714.80 183160.04 +SET 321720.32 105512.96 +SET 3217333.14 2781125.94 +SET 3217720.05 2419730.10 +SET 3217755.03 2781490.63 +SET 321779.20 193810.88 +SET 3218176.92 2781855.32 +SET 321829.60 105548.80 +SET 32188.50 23874.00 +SET 321900.80 215663.36 +SET 321902.07 278258.47 +SET 3219056.59 2420735.18 +SET 321938.88 105584.64 +SET 32194.38 20559.84 +SET 3219442.59 2782949.39 +SET 321948.25 215695.15 +SET 3219540.80 1939162.12 +SET 32197.83 23880.92 +SET 321985.40 190043.70 +SET 3219864.48 2783314.08 +SET 321995.70 215726.94 +SET 32201.62 22327.98 +SET 3220233.45 2595927.20 +SET 3220393.13 2421740.26 +SET 3220415.20 1939688.78 +SET 322048.16 105620.48 +SET 3220884.66 2596452.16 +SET 3221061.40 2422242.80 +SET 3221130.15 2784408.15 +SET 322126.20 183394.26 +SET 322139.46 190134.63 +SET 3221552.04 2784772.84 +SET 32216.49 23894.76 +SET 322163.36 201188.04 +SET 32218.55 21585.41 +SET 322185.50 215854.10 +SET 3222164.00 1940742.10 +SET 3222395.82 2785502.22 +SET 322248.96 205793.28 +SET 32225.82 23901.68 +SET 322261.39 223449.81 +SET 322266.72 105692.16 +SET 322280.40 215917.68 +SET 3223239.60 2786231.60 +SET 322327.85 215949.47 +SET 322343.12 223506.48 +SET 322348.95 259855.20 +SET 3223661.49 2786596.29 +SET 3224083.38 2786960.98 +SET 322418.64 201347.46 +SET 3224350.00 1942058.75 +SET 32244.48 23915.52 +SET 322470.20 216044.84 +SET 3224787.20 1942322.08 +SET 3224791.92 2599601.92 +SET 3224927.16 2787690.36 +SET 322506.58 223619.82 +SET 322517.65 216076.63 +SET 322554.12 205988.16 +SET 322565.10 216108.42 +SET 3225661.60 1942848.74 +SET 3226.60 2161.72 +SET 322601.64 190407.42 +SET 322612.55 216140.21 +SET 3226192.83 2788784.43 +SET 3226407.56 2426263.12 +SET 322660.00 216172.00 +SET 3226614.72 2789149.12 +SET 322673.92 201506.88 +SET 3226745.55 2601176.80 +SET 3226973.20 1943638.73 +SET 322706.70 206085.60 +SET 3227396.76 2601701.76 +SET 322743.30 183745.59 +SET 3227458.50 2789878.50 +SET 322755.70 190498.35 +SET 3227744.10 2427268.20 +SET 3228.18 2394.32 +SET 322813.12 105871.36 +SET 32283.35 22384.65 +SET 3228302.28 2790607.88 +SET 322849.80 216299.16 +SET 3228699.18 2602751.68 +SET 3228724.17 2790972.57 +SET 3229146.06 2791337.26 +SET 3229159.20 1944955.38 +SET 322922.40 105907.20 +SET 3229350.39 2603276.64 +SET 322949.00 183862.70 +SET 3229748.91 2428775.82 +SET 323000.16 260380.16 +SET 323011.86 206280.48 +SET 323031.68 105943.04 +SET 3230833.62 2792796.02 +SET 323090.80 194600.87 +SET 3230908.00 1946008.70 +SET 3231304.02 2604851.52 +SET 3231345.20 1946272.03 +SET 323140.96 105978.88 +SET 3231677.40 2793525.40 +SET 3231782.40 1946535.36 +SET 3231955.23 2605376.48 +SET 323217.88 190771.14 +SET 3232219.60 1946798.69 +SET 3232421.99 2430785.98 +SET 323250.24 106014.72 +SET 323276.85 216585.27 +SET 32328.45 23977.80 +SET 3232943.07 2794619.47 +SET 3233090.26 2431288.52 +SET 323324.30 216617.06 +SET 3233531.20 1947588.68 +SET 323371.94 190862.07 +SET 3233908.86 2606951.36 +SET 323405.61 224243.19 +SET 3234208.74 2795713.54 +SET 323439.76 201985.14 +SET 3234560.07 2607476.32 +SET 3234630.63 2796078.23 +SET 323466.65 216712.43 +SET 32347.11 23991.64 +SET 323514.10 216744.22 +SET 32352.80 19486.42 +SET 3235211.28 2608001.28 +SET 323561.55 216776.01 +SET 3235717.20 1948905.33 +SET 3235763.34 2433298.68 +SET 323578.08 106122.24 +SET 32360.90 21680.78 +SET 3236154.40 1949168.66 +SET 323622.18 206670.24 +SET 3236318.19 2797536.99 +SET 3236431.61 2433801.22 +SET 323656.45 216839.59 +SET 323687.36 106158.08 +SET 3237161.97 2798266.37 +SET 323732.53 224469.87 +SET 323771.80 184331.14 +SET 3237816.12 2610101.12 +SET 323798.80 216934.96 +SET 3238005.75 2798995.75 +SET 323834.12 191134.86 +SET 3238340.40 1950485.31 +SET 32384.43 24019.32 +SET 3238427.64 2799360.44 +SET 323846.25 216966.75 +SET 3238777.60 1950748.64 +SET 3238849.53 2799725.13 +SET 323895.99 224583.21 +SET 323905.92 106229.76 +SET 3239214.80 1951011.97 +SET 323941.15 217030.33 +SET 323988.60 217062.12 +SET 3240089.20 1951538.63 +SET 3240115.20 2800819.20 +SET 324015.20 106265.60 +SET 32403.09 24033.16 +SET 324059.45 224696.55 +SET 3241109.50 2437319.00 +SET 3241380.87 2801913.27 +SET 324178.40 217189.28 +SET 3241802.76 2802277.96 +SET 324205.60 202463.40 +SET 324222.91 224809.89 +SET 3242224.65 2802642.65 +SET 324232.50 207060.00 +SET 324233.76 106337.28 +SET 3242446.04 2438324.08 +SET 3242646.54 2803007.34 +SET 324273.30 217252.86 +SET 324302.58 261430.08 +SET 3243025.80 2614300.80 +SET 32431.08 24053.92 +SET 3243149.60 1953381.94 +SET 324343.04 106373.12 +SET 3243586.80 1953645.27 +SET 324368.20 217316.44 +SET 32440.41 24060.84 +SET 3244328.22 2615350.72 +SET 324433.41 280446.61 +SET 3244334.10 2804466.10 +SET 3244450.85 2439831.70 +SET 324452.32 106408.96 +SET 32446.81 22497.99 +SET 324463.10 217380.02 +SET 324468.10 224979.90 +SET 324510.55 217411.81 +SET 324558.00 217443.60 +SET 3246.84 2408.16 +SET 324605.45 217475.39 +SET 3246281.85 2616925.60 +SET 324631.56 225093.24 +SET 3246455.66 2441339.32 +SET 3246647.20 1955488.58 +SET 324670.88 106480.64 +SET 3246865.44 2806654.24 +SET 324690.24 207352.32 +SET 324700.35 217538.97 +SET 3247084.40 1955751.91 +SET 3247123.93 2441841.86 +SET 324713.29 225149.91 +SET 3247521.60 1956015.24 +SET 3247584.27 2617975.52 +SET 32477.73 24088.52 +SET 3247709.22 2807383.62 +SET 324780.16 106516.48 +SET 324795.02 225206.58 +SET 3248131.11 2807748.31 +SET 3248460.47 2442846.94 +SET 324855.30 280811.30 +SET 3248553.00 2808113.00 +SET 324889.44 106552.32 +SET 324890.15 217666.13 +SET 324958.48 225319.92 +SET 324995.40 207547.20 +SET 32500.60 18503.38 +SET 3250240.56 2809571.76 +SET 32503.25 21776.15 +SET 325032.50 217761.50 +SET 325040.21 225376.59 +SET 3250582.00 1957858.55 +SET 32506.66 19186.23 +SET 3250662.45 2809936.45 +SET 3250840.32 2620600.32 +SET 3251019.20 1958121.88 +SET 3251084.34 2810301.14 +SET 3251133.55 2444857.10 +SET 325121.94 225433.26 +SET 3251456.40 1958385.21 +SET 325147.98 207644.64 +SET 325203.67 225489.93 +SET 325222.30 217888.66 +SET 32524.38 24123.12 +SET 325269.75 217920.45 +SET 3252768.00 1959175.20 +SET 325277.19 281175.99 +SET 3252771.90 2811759.90 +SET 32528.54 22554.66 +SET 325364.65 217984.03 +SET 3253642.40 1959701.86 +SET 325367.13 225603.27 +SET 325374.72 192044.16 +SET 3254037.57 2812853.97 +SET 3254079.60 1959965.19 +SET 325412.10 218015.82 +SET 32543.04 24136.96 +SET 325447.49 244736.98 +SET 3254474.90 2447369.80 +SET 3254516.80 1960228.52 +SET 325453.14 207839.52 +SET 3254881.35 2813583.35 +SET 3254954.00 1960491.85 +SET 32550.70 21807.94 +SET 325507.00 218079.40 +SET 3255143.17 2447872.34 +SET 32552.37 24143.88 +SET 3255391.20 1960755.18 +SET 3255398.79 2624275.04 +SET 3255828.40 1961018.51 +SET 32560.50 26248.00 +SET 325601.90 218142.98 +SET 325605.00 262480.00 +SET 32561.70 24150.80 +SET 3256147.02 2814677.42 +SET 3256265.60 1961281.84 +SET 325649.35 218174.77 +SET 32565.44 10680.32 +SET 325682.84 192226.02 +SET 3257140.00 1961808.50 +SET 32580.36 24164.64 +SET 3258003.63 2626374.88 +SET 325836.90 192316.95 +SET 3258451.60 1962598.49 +SET 3258484.52 2450385.04 +SET 325857.51 225943.29 +SET 3258654.84 2626899.84 +SET 3258678.36 2816865.56 +SET 32589.69 24171.56 +SET 3259306.05 2627424.80 +SET 3259522.14 2817594.94 +SET 3259763.20 1963388.48 +SET 325981.50 218397.30 +SET 325982.24 106910.72 +SET 3259821.06 2451390.12 +SET 32599.02 24178.48 +SET 3259944.03 2817959.63 +SET 3259957.26 2627949.76 +SET 326.92 226.68 +SET 326028.95 218429.09 +SET 326034.50 185619.35 +SET 3260608.47 2628474.72 +SET 326063.46 208229.28 +SET 32610.27 22611.33 +SET 326102.70 226113.30 +SET 326115.76 245239.52 +SET 3261209.70 2819053.70 +SET 326145.02 192498.81 +SET 3261512.00 1964441.80 +SET 3261631.59 2819418.39 +SET 3261910.89 2629524.64 +SET 3261949.20 1964705.13 +SET 326200.80 106982.40 +SET 3262897.26 2820512.46 +SET 326299.08 192589.74 +SET 326310.08 107018.24 +SET 3263260.80 1965495.12 +SET 3263319.15 2820877.15 +SET 326347.89 226283.31 +SET 326368.62 208424.16 +SET 3263741.04 2821241.84 +SET 3263864.52 2631099.52 +SET 326408.55 218683.41 +SET 3264135.20 1966021.78 +SET 326445.90 185853.57 +SET 3264498.95 2454907.90 +SET 3264515.73 2631624.48 +SET 326453.14 192680.67 +SET 326456.00 218715.20 +SET 3264584.82 2821971.22 +SET 3265.50 2422.00 +SET 3265006.71 2822335.91 +SET 326511.35 226396.65 +SET 32652.12 20852.16 +SET 32655.00 24220.00 +SET 326550.90 218778.78 +SET 326645.80 218842.36 +SET 326651.60 185970.68 +SET 3266694.27 2823794.67 +SET 326674.81 226509.99 +SET 3267116.16 2824159.36 +SET 3267172.03 2456918.06 +SET 32675.84 20405.76 +SET 326758.40 204057.60 +SET 326761.26 192862.53 +SET 3267632.80 1968128.42 +SET 326784.03 245742.06 +SET 32682.99 24240.76 +SET 3268381.83 2825253.43 +SET 3268507.20 1968655.08 +SET 326856.48 107197.44 +SET 326857.30 186087.79 +SET 3269.20 2266.80 +SET 3269074.20 2635299.20 +SET 326915.32 192953.46 +SET 3269225.61 2825982.81 +SET 32693.05 21903.31 +SET 3269381.60 1969181.74 +SET 3269647.50 2826347.50 +SET 326965.76 107233.28 +SET 326978.94 208813.92 +SET 3269818.80 1969445.07 +SET 327.84 107.52 +SET 327001.73 226736.67 +SET 3270256.00 1969708.40 +SET 3270376.62 2636349.12 +SET 32706.30 18620.49 +SET 3270693.20 1969971.73 +SET 327072.85 219128.47 +SET 327083.46 226793.34 +SET 3270913.17 2827441.57 +SET 3271027.83 2636874.08 +SET 3271567.60 1970498.39 +SET 327165.19 226850.01 +SET 327167.75 219192.05 +SET 327184.32 107304.96 +SET 3272330.25 2637924.00 +SET 3272442.00 1971025.05 +SET 3272518.19 2460938.38 +SET 327262.65 219255.63 +SET 327284.10 209008.80 +SET 3272879.20 1971288.38 +SET 32729.64 24275.36 +SET 3272981.46 2638448.96 +SET 3273022.62 2829265.02 +SET 327310.10 219287.42 +SET 3273186.46 2461440.92 +SET 327328.65 226963.35 +SET 327357.55 219319.21 +SET 3273753.60 1971815.04 +SET 3273854.73 2461943.46 +SET 327386.64 282999.44 +SET 3273866.40 2829994.40 +SET 3274.83 2428.92 +SET 327410.38 227020.02 +SET 3274283.88 2639498.88 +SET 3274288.29 2830359.09 +SET 327436.68 209106.24 +SET 32745.23 24624.46 +SET 327452.45 219382.79 +SET 327462.80 197234.17 +SET 3274710.18 2830723.78 +SET 327474.40 186439.12 +SET 3274935.09 2640023.84 +SET 327524.24 204535.86 +SET 327547.35 219446.37 +SET 327558.63 264054.88 +SET 32757.63 24296.12 +SET 3275859.54 2463451.08 +SET 327589.26 209203.68 +SET 3275939.60 1973131.69 +SET 3276376.80 1973395.02 +SET 327642.25 219509.95 +SET 3276819.63 2832547.23 +SET 3277196.08 2464456.16 +SET 3277251.20 1973921.68 +SET 327737.15 219573.53 +SET 327737.30 227246.70 +SET 3277688.40 1974185.01 +SET 327779.52 204695.28 +SET 3277864.35 2464958.70 +SET 327808.53 283364.13 +SET 3278085.30 2833641.30 +SET 3278125.60 1974448.34 +SET 327839.68 193499.04 +SET 32787.95 21966.89 +SET 3278842.35 2643173.60 +SET 327885.80 186673.34 +SET 3278929.08 2834370.68 +SET 327926.95 219700.69 +SET 3279350.97 2834735.37 +SET 32794.95 24323.80 +SET 3279437.20 1975238.33 +SET 3279772.86 2835100.06 +SET 3279874.40 1975501.66 +SET 3280144.77 2644223.52 +SET 328034.80 204854.70 +SET 32804.28 24330.72 +SET 32804.70 20949.60 +SET 3280616.64 2835829.44 +SET 328064.22 227473.38 +SET 328069.30 219796.06 +SET 328116.75 219827.85 +SET 3281186.00 1976291.65 +SET 3281205.70 2467471.40 +SET 32813.61 24337.64 +SET 3281460.42 2836558.82 +SET 328147.80 193680.90 +SET 328164.20 219859.64 +SET 3281882.31 2836923.51 +SET 3282060.40 1976818.31 +SET 3282098.40 2645798.40 +SET 328230.42 283728.82 +SET 3282304.20 2837288.20 +SET 3282726.09 2837652.89 +SET 328277.12 107663.36 +SET 328290.08 205014.12 +SET 3282934.80 1977344.97 +SET 328301.86 193771.83 +SET 328306.55 219955.01 +SET 328309.41 227643.39 +SET 32832.27 24351.48 +SET 3283210.51 2468979.02 +SET 328337.20 197760.83 +SET 3283372.00 1977608.30 +SET 3283400.82 2646848.32 +SET 328354.00 219986.80 +SET 3283569.87 2838382.27 +SET 328386.40 107699.20 +SET 3284.16 2435.84 +SET 3284052.03 2647373.28 +SET 32841.60 24358.40 +SET 328448.90 220050.38 +SET 3284703.24 2647898.24 +SET 328504.74 209788.32 +SET 3285120.80 1978661.62 +SET 3285257.43 2839841.03 +SET 32855.46 22781.34 +SET 3285558.00 1978924.95 +SET 328591.25 220145.75 +SET 3285995.20 1979188.28 +SET 3286005.66 2648948.16 +SET 328604.96 107770.88 +SET 3286551.86 2471491.72 +SET 3286656.87 2649473.12 +SET 328686.15 220209.33 +SET 3286944.99 2841299.79 +SET 328718.06 227926.74 +SET 32878.92 24386.08 +SET 32888.25 24393.00 +SET 3289054.44 2843123.24 +SET 328914.30 187258.89 +SET 328918.10 194135.55 +SET 328932.80 107878.40 +SET 328962.48 210080.64 +SET 328963.25 228096.75 +SET 329072.16 194226.48 +SET 329074.20 284458.20 +SET 3291.20 1873.76 +SET 329115.06 210178.08 +SET 3291215.34 2653147.84 +SET 3291229.75 2475009.50 +SET 329151.36 107950.08 +SET 32916.24 24413.76 +SET 329160.65 220527.23 +SET 3291866.55 2653672.80 +SET 3292007.67 2845676.07 +SET 329211.60 198287.49 +SET 3292517.76 2654197.76 +SET 329255.55 220590.81 +SET 3292566.29 2476014.58 +SET 3293.49 2442.76 +SET 329303.00 220622.60 +SET 329311.20 205651.80 +SET 329325.70 187493.11 +SET 3293427.60 1983664.89 +SET 329380.28 194408.34 +SET 3293864.80 1983928.22 +SET 3294302.00 1984191.55 +SET 3294571.10 2477522.20 +SET 329479.20 108057.60 +SET 3295239.37 2478024.74 +SET 32957.28 21047.04 +SET 329572.80 210470.40 +SET 329587.70 220813.34 +SET 3295907.64 2478527.28 +SET 3296575.91 2479029.82 +SET 3296648.46 2849687.66 +SET 32968.84 19459.02 +SET 329682.60 220876.92 +SET 329730.05 220908.71 +SET 329737.10 187727.33 +SET 329777.50 220940.50 +SET 3297799.60 1986298.19 +SET 3297912.45 2480034.90 +SET 329824.95 220972.29 +SET 3298378.65 2658922.40 +SET 3298580.72 2480537.44 +SET 329872.40 221004.08 +SET 32990.88 24469.12 +SET 3299111.20 1987088.18 +SET 329919.85 221035.87 +SET 3299601.69 2852240.49 +SET 330014.75 221099.45 +SET 330025.74 228833.46 +SET 3300332.28 2660497.28 +SET 330077.04 206130.06 +SET 330086.00 198814.15 +SET 330125.38 248254.76 +SET 3301289.25 2853699.25 +SET 330134.88 108272.64 +SET 330148.50 187961.55 +SET 33018.92 22894.68 +SET 330189.20 228946.80 +SET 3302608.80 1989194.82 +SET 33028.20 24496.80 +SET 3302976.81 2855158.01 +SET 3303258.61 2484055.22 +SET 330332.32 206289.48 +SET 3303398.70 2855522.70 +SET 330346.90 221321.98 +SET 3303920.40 1989984.81 +SET 3303926.88 2484557.76 +SET 330394.35 221353.77 +SET 3304239.54 2663647.04 +SET 3304242.48 2856252.08 +SET 330434.39 229116.81 +SET 330441.80 221385.56 +SET 3304664.37 2856616.77 +SET 330489.25 221417.35 +SET 3304890.75 2664172.00 +SET 3305086.26 2856981.46 +SET 330516.12 229173.48 +SET 3305232.00 1990774.80 +SET 330536.70 221449.14 +SET 330559.90 188195.77 +SET 33056.19 24517.56 +SET 330572.00 108416.00 +SET 330597.85 229230.15 +SET 3306351.93 2858075.53 +SET 3306543.60 1991564.79 +SET 330679.05 221544.51 +SET 330681.28 108451.84 +SET 3306844.38 2665746.88 +SET 3306980.80 1991828.12 +SET 3307195.71 2858804.91 +SET 33072.65 22157.63 +SET 330726.50 221576.30 +SET 3307617.60 2859169.60 +SET 330765.60 188312.88 +SET 3307855.20 1992354.78 +SET 3308039.49 2859534.29 +SET 330821.40 221639.88 +SET 330843.04 229400.16 +SET 3308729.60 1992881.44 +SET 3308798.01 2667321.76 +SET 330916.30 221703.46 +SET 3309166.80 1993144.77 +SET 330924.77 229456.83 +SET 3309273.04 2488578.08 +SET 33093.51 24545.24 +SET 3309449.22 2667846.72 +SET 330946.02 211347.36 +SET 3309604.00 1993408.10 +SET 330963.75 221735.25 +SET 3309941.31 2489080.62 +SET 331006.50 229513.50 +SET 3310100.43 2668371.68 +SET 3310570.83 2861722.43 +SET 3310609.58 2489583.16 +SET 331088.23 229570.17 +SET 331098.16 206767.74 +SET 33111.84 10859.52 +SET 3311352.80 1994461.42 +SET 3311402.85 2669421.60 +SET 3311414.61 2862451.81 +SET 331169.96 229626.84 +SET 331177.00 188547.10 +SET 3311790.00 1994724.75 +SET 331183.65 286281.65 +SET 3311836.50 2862816.50 +SET 3311946.12 2490588.24 +SET 33122.90 19549.95 +SET 3312258.39 2863181.19 +SET 331229.00 195499.50 +SET 331248.45 221925.99 +SET 331295.90 221957.78 +SET 3313101.60 1995514.74 +SET 331336.96 108666.88 +SET 331343.35 221989.57 +SET 331353.44 206927.16 +SET 3313538.80 1995778.07 +SET 331382.70 188664.21 +SET 331383.06 195590.43 +SET 3313945.95 2864639.95 +SET 331397.60 199604.14 +SET 3313976.00 1996041.40 +SET 3314007.69 2671521.44 +SET 3314413.20 1996304.73 +SET 331461.92 249259.84 +SET 3314789.73 2865369.33 +SET 331496.88 229853.52 +SET 3315211.62 2865734.02 +SET 3315287.47 2493100.94 +SET 331533.15 222116.73 +SET 331537.12 195681.36 +SET 331555.52 108738.56 +SET 331556.34 211737.12 +SET 331628.05 222180.31 +SET 331660.34 229966.86 +SET 331675.50 222212.10 +SET 331691.18 195772.29 +SET 3317036.40 1997884.71 +SET 331708.92 211834.56 +SET 331722.95 222243.89 +SET 3317263.74 2674146.24 +SET 331774.08 108810.24 +SET 3317914.95 2674671.20 +SET 3317960.55 2495111.10 +SET 3318164.85 2868286.85 +SET 331834.80 199867.47 +SET 3318586.74 2868651.54 +SET 33186.40 20724.60 +SET 331864.00 207246.00 +SET 3319222.40 1999201.36 +SET 331960.20 222402.84 +SET 3319852.41 2869745.61 +SET 3319868.58 2676246.08 +SET 331987.26 230193.54 +SET 331999.30 195954.15 +SET 3320274.30 2870110.30 +SET 332101.92 108917.76 +SET 332102.55 222498.21 +SET 33211.71 26772.96 +SET 332117.10 267729.60 +SET 332119.28 207405.42 +SET 3321301.90 2497623.80 +SET 33214.80 24635.20 +SET 332153.36 196045.08 +SET 332166.66 212126.88 +SET 332205.50 189132.65 +SET 33221.12 10895.36 +SET 332211.20 108953.60 +SET 3322383.75 2871933.75 +SET 33227.20 20013.08 +SET 332272.00 200130.80 +SET 3322720.00 2001308.00 +SET 3322805.64 2872298.44 +SET 332319.24 212224.32 +SET 3323227.53 2872663.13 +SET 332339.80 222657.16 +SET 3323649.42 2873027.82 +SET 3323775.84 2679395.84 +SET 33242.79 24655.96 +SET 3324468.80 2002361.32 +SET 3324493.20 2873757.20 +SET 3324643.25 2500136.50 +SET 3324915.09 2874121.89 +SET 33252.12 24662.88 +SET 332539.04 109061.12 +SET 332559.37 230590.23 +SET 3325758.87 2874851.27 +SET 332577.05 222816.11 +SET 3325979.79 2501141.58 +SET 3326217.60 2003414.64 +SET 332624.50 222847.90 +SET 332629.84 207724.26 +SET 33264.11 23064.69 +SET 3326648.06 2501644.12 +SET 332671.95 222879.69 +SET 332709.20 200394.13 +SET 332719.40 222911.48 +SET 332722.83 230703.57 +SET 33276.96 19640.88 +SET 332768.31 268254.56 +SET 3327984.60 2502649.20 +SET 332822.60 189483.98 +SET 3328403.60 2004731.29 +SET 3328652.87 2503151.74 +SET 332871.21 287740.41 +SET 3328712.10 2877404.10 +SET 332885.12 207883.68 +SET 3329133.99 2877768.79 +SET 3329278.00 2005257.95 +SET 3329321.14 2503654.28 +SET 3330.81 2470.44 +SET 3330152.40 2005784.61 +SET 3330399.66 2878862.86 +SET 333049.75 230930.25 +SET 333077.72 196590.66 +SET 33308.10 24704.40 +SET 333085.44 109240.32 +SET 33309.90 22316.58 +SET 333099.00 223165.80 +SET 3331026.80 2006311.27 +SET 333140.40 208043.10 +SET 333146.40 200657.46 +SET 3331665.33 2879956.93 +SET 3331901.20 2006837.93 +SET 3332087.22 2880321.62 +SET 3332241.57 2686220.32 +SET 33323.40 18971.82 +SET 333231.78 196681.59 +SET 333234.72 212808.96 +SET 33329.31 28810.51 +SET 3333543.99 2687270.24 +SET 333376.67 231156.93 +SET 333383.70 223356.54 +SET 333387.30 212906.40 +SET 3334087.20 2008154.58 +SET 3334196.67 2882145.07 +SET 333431.15 223388.33 +SET 3334524.40 2008417.91 +SET 333458.40 231213.60 +SET 3334667.30 2507674.60 +SET 3334846.41 2688320.16 +SET 3335040.45 2882874.45 +SET 333526.05 223451.91 +SET 3335335.57 2508177.14 +SET 3335398.80 2008944.57 +SET 333583.60 200920.79 +SET 333620.95 223515.49 +SET 333621.86 231326.94 +SET 3336306.12 2883968.52 +SET 33364.08 24745.92 +SET 333645.40 189952.42 +SET 333650.96 208361.94 +SET 333668.40 223547.28 +SET 3337147.60 2009997.89 +SET 33373.41 24752.84 +SET 333741.12 109455.36 +SET 3337451.25 2690420.00 +SET 3337993.68 2885427.28 +SET 3338022.00 2010524.55 +SET 333810.75 223642.65 +SET 3338415.57 2885791.97 +SET 333845.04 213198.72 +SET 333867.05 231496.95 +SET 3338896.40 2011051.21 +SET 333906.24 208521.36 +SET 3339259.35 2886521.35 +SET 333948.78 231553.62 +SET 333953.10 223738.02 +SET 333959.68 109527.04 +SET 3339681.24 2886886.04 +SET 3339770.80 2011577.87 +SET 3340056.09 2692519.84 +SET 3340208.00 2011841.20 +SET 334056.80 190186.64 +SET 334068.96 109562.88 +SET 3340681.73 2512197.46 +SET 334095.45 223833.39 +SET 3341.35 2512.70 +SET 3341082.40 2012367.86 +SET 334112.24 231666.96 +SET 33413.50 25127.00 +SET 334135.00 251270.00 +SET 3341350.00 2512700.00 +SET 3341368.80 2888344.80 +SET 334150.20 213393.60 +SET 3341519.60 2012631.19 +SET 334178.24 109598.72 +SET 3341790.69 2888709.49 +SET 33420.06 24787.44 +SET 3342009.72 2694094.72 +SET 3342018.27 2513202.54 +SET 3342212.58 2889074.18 +SET 3342831.20 2013421.18 +SET 33429.39 24794.36 +SET 3343056.36 2889803.56 +SET 33431.02 19731.81 +SET 334332.70 223992.34 +SET 3343478.25 2890168.25 +SET 33439.68 10967.04 +SET 3344023.08 2514710.16 +SET 33441.68 20884.02 +SET 3344322.03 2890897.63 +SET 334455.36 213588.48 +SET 334458.00 201447.45 +SET 334464.26 197409.03 +SET 334468.20 190420.86 +SET 334506.08 109706.24 +SET 3345165.81 2891627.01 +SET 334520.89 231950.31 +SET 3345454.40 2015001.16 +SET 3345587.70 2891991.70 +SET 3345891.60 2015264.49 +SET 3345916.98 2697244.48 +SET 334602.62 232006.98 +SET 334607.94 213685.92 +SET 334617.40 224183.08 +SET 334618.32 197499.96 +SET 3346328.80 2015527.82 +SET 3346431.48 2892721.08 +SET 334672.08 208999.62 +SET 3346766.00 2015791.15 +SET 3347203.20 2016054.48 +SET 3347219.40 2698294.40 +SET 334759.75 224278.45 +SET 3347640.40 2016317.81 +SET 3347697.15 2893815.15 +SET 334772.38 197590.89 +SET 3347870.61 2698819.36 +SET 3348077.60 2016581.14 +SET 334833.92 109813.76 +SET 334847.81 232176.99 +SET 3348514.80 2016844.47 +SET 3348540.93 2894544.53 +SET 3348952.00 2017107.80 +SET 334913.10 213880.80 +SET 3349173.03 2699869.28 +SET 334927.36 209159.04 +SET 3349369.24 2518730.48 +SET 3349389.20 2017371.13 +SET 334943.20 109849.60 +SET 334949.55 224405.61 +SET 3349806.60 2895638.60 +SET 3349826.40 2017634.46 +SET 334997.00 224437.40 +SET 3350228.49 2896003.29 +SET 33504.03 24849.72 +SET 3350475.45 2700919.20 +SET 335065.68 213978.24 +SET 3350705.78 2519735.56 +SET 335085.30 190772.19 +SET 335091.90 224500.98 +SET 335161.76 109921.28 +SET 3351916.05 2897462.05 +SET 3352042.32 2520740.64 +SET 33522.69 24863.56 +SET 335234.25 224596.35 +SET 3352886.80 2019477.77 +SET 3353324.00 2019741.10 +SET 3353603.61 2898920.81 +SET 335373.15 270354.40 +SET 3353761.20 2020004.43 +SET 335380.32 109992.96 +SET 3354047.13 2522248.26 +SET 335437.92 209477.88 +SET 3354382.71 2704068.96 +SET 3354447.39 2899650.19 +SET 3354715.40 2522750.80 +SET 335489.60 110028.80 +SET 3355291.17 2900379.57 +SET 3355510.00 2021057.75 +SET 3355685.13 2705118.88 +SET 335598.88 110064.64 +SET 335613.85 224850.67 +SET 3356384.40 2021584.41 +SET 335661.30 224882.46 +SET 33567.60 21436.80 +SET 3356720.21 2524258.42 +SET 335702.40 191123.52 +SET 335769.60 202237.44 +SET 33578.67 24905.08 +SET 3358056.75 2525263.50 +SET 3358133.20 2022637.73 +SET 335817.44 110136.32 +SET 335828.57 232857.03 +SET 335828.58 214465.44 +SET 3358289.97 2707218.72 +SET 3358666.29 2903297.09 +SET 3358725.02 2525766.04 +SET 3358941.18 2707743.68 +SET 335898.55 225041.41 +SET 3359007.60 2023164.39 +SET 335908.10 191240.63 +SET 3359088.18 2903661.78 +SET 3359393.29 2526268.58 +SET 3359444.80 2023427.72 +SET 335948.48 209796.72 +SET 33597.33 24918.92 +SET 3359882.00 2023691.05 +SET 335992.03 232970.37 +SET 3360061.56 2526771.12 +SET 336024.36 270879.36 +SET 3360353.85 2904755.85 +SET 336036.00 110208.00 +SET 336040.90 225136.78 +SET 3360756.40 2024217.71 +SET 336088.35 225168.57 +SET 3360894.81 2709318.56 +SET 336139.81 252777.62 +SET 336145.28 110243.84 +SET 336155.49 233083.71 +SET 336158.92 198409.26 +SET 3361619.52 2905849.92 +SET 3362041.41 2906214.61 +SET 336206.80 202500.77 +SET 336237.22 233140.38 +SET 3362463.30 2906579.30 +SET 33625.32 24939.68 +SET 336254.56 110279.68 +SET 3362848.44 2710893.44 +SET 3362885.19 2906943.99 +SET 3362942.40 2025534.36 +SET 336318.95 233197.05 +SET 3363379.60 2025797.69 +SET 33634.65 24946.60 +SET 3363402.91 2529283.82 +SET 3363816.80 2026061.02 +SET 3364572.75 2908402.75 +SET 336459.04 210115.56 +SET 336467.04 198591.12 +SET 336482.41 233310.39 +SET 3365128.40 2026851.01 +SET 33653.31 24960.44 +SET 3365407.72 2530791.44 +SET 3365565.60 2027114.34 +SET 336562.85 225486.47 +SET 336591.48 214952.64 +SET 3366002.80 2027377.67 +SET 336644.00 202764.10 +SET 336657.75 225550.05 +SET 336668.22 291022.62 +SET 3366744.26 2531796.52 +SET 336675.57 271404.32 +SET 3366877.20 2027904.33 +SET 33671.97 24974.28 +SET 336714.32 210274.98 +SET 336730.90 191709.07 +SET 3367412.53 2532299.06 +SET 336752.65 225613.63 +SET 3368058.12 2715093.12 +SET 3368188.80 2028694.32 +SET 336847.55 225677.21 +SET 3368709.33 2715618.08 +SET 3368791.65 2912049.65 +SET 336895.00 225709.00 +SET 33690.63 24988.12 +SET 3369063.20 2029220.98 +SET 336929.22 198863.91 +SET 336936.60 191826.18 +SET 3369360.54 2716143.04 +SET 3369500.40 2029484.31 +SET 33696.96 21043.44 +SET 33699.96 24995.04 +SET 3369937.60 2029747.64 +SET 337019.52 110530.56 +SET 337037.35 225804.37 +SET 3370479.21 2913508.41 +SET 337054.52 233707.08 +SET 337081.20 203027.43 +SET 337083.28 198954.84 +SET 33709.29 25001.96 +SET 3371314.17 2717717.92 +SET 337136.25 233763.75 +SET 3371686.40 2030800.96 +SET 3371744.88 2914602.48 +SET 33718.62 25008.88 +SET 33720.18 21534.24 +SET 337201.80 215342.40 +SET 3372090.42 2535816.84 +SET 3372560.80 2031327.62 +SET 3372758.69 2536319.38 +SET 3373010.55 2915696.55 +SET 337322.05 225995.11 +SET 33734.80 19206.04 +SET 3373426.96 2536821.92 +SET 3373435.20 2031854.28 +SET 337348.00 192060.40 +SET 337354.38 215439.84 +SET 337381.44 233933.76 +SET 337391.40 199136.70 +SET 3374309.60 2032380.94 +SET 337456.64 110673.92 +SET 337476.35 253782.70 +SET 33751.20 29175.20 +SET 3375120.00 2917520.00 +SET 337518.40 203290.76 +SET 33754.49 23404.71 +SET 33755.94 25036.56 +SET 3375621.20 2033170.93 +SET 337626.63 234103.77 +SET 3376495.60 2033697.59 +SET 337675.20 110745.60 +SET 337708.36 234160.44 +SET 337735.44 210912.66 +SET 3377370.00 2034224.25 +SET 3377436.58 2539837.16 +SET 337812.12 215732.16 +SET 337844.00 226344.80 +SET 3378477.48 2723492.48 +SET 337871.82 234273.78 +SET 3378773.12 2540842.24 +SET 3378917.01 2920802.21 +SET 3379118.80 2035277.57 +SET 3379128.69 2724017.44 +SET 3379338.90 2921166.90 +SET 3379556.00 2035540.90 +SET 337964.70 215829.60 +SET 3379760.79 2921531.59 +SET 33802.59 25071.16 +SET 338035.28 234387.12 +SET 3380867.60 2036330.89 +SET 338112.32 110888.96 +SET 338117.01 234443.79 +SET 338117.28 215927.04 +SET 338128.70 226535.54 +SET 338144.62 254285.24 +SET 338161.70 199591.35 +SET 338170.80 192528.84 +SET 3381733.53 2726117.28 +SET 338176.15 226567.33 +SET 3381870.24 2923355.04 +SET 338198.74 234500.46 +SET 33821.25 25085.00 +SET 338223.60 226599.12 +SET 3382292.13 2923719.73 +SET 3382384.74 2726642.24 +SET 3382782.74 2543857.48 +SET 3383053.60 2037647.54 +SET 33831.85 22666.27 +SET 338330.88 110960.64 +SET 33836.22 23461.38 +SET 338362.20 234613.80 +SET 338365.95 226694.49 +SET 33839.91 25098.84 +SET 338392.80 203817.42 +SET 3383928.00 2038174.20 +SET 338422.44 216121.92 +SET 3384365.20 2038437.53 +SET 3384401.58 2925543.18 +SET 338460.85 226758.07 +SET 338469.82 199773.21 +SET 3384787.55 2545365.10 +SET 3384989.58 2728742.08 +SET 338508.30 226789.86 +SET 3385239.60 2038964.19 +SET 338555.75 226821.65 +SET 3385640.79 2729267.04 +SET 3385667.25 2926637.25 +SET 338575.02 216219.36 +SET 338603.20 226853.44 +SET 338607.39 234783.81 +SET 3386124.09 2546370.18 +SET 338650.65 226885.23 +SET 33867.90 25119.60 +SET 338689.12 234840.48 +SET 3386932.92 2927731.32 +SET 3386988.40 2040017.51 +SET 33872.76 21631.68 +SET 3387354.81 2928096.01 +SET 33876.80 11110.40 +SET 338768.00 111104.00 +SET 3387776.70 2928460.70 +SET 338812.89 254787.78 +SET 3388128.90 2547877.80 +SET 3388198.59 2928825.39 +SET 338830.00 204080.75 +SET 338840.45 227012.39 +SET 338852.58 234953.82 +SET 33886.56 25133.44 +SET 3388737.20 2041070.83 +SET 338877.28 111139.84 +SET 338887.90 227044.18 +SET 3388896.84 2731891.84 +SET 3389042.37 2929554.77 +SET 33893.20 20004.60 +SET 3389465.44 2548882.88 +SET 33895.89 25140.36 +SET 338982.80 227107.76 +SET 338993.60 192997.28 +SET 339016.04 235067.16 +SET 3390199.26 2732941.76 +SET 339032.76 216511.68 +SET 33905.22 25147.28 +SET 3390801.98 2549887.96 +SET 3390850.47 2733466.72 +SET 3390923.20 2042387.48 +SET 339095.84 111211.52 +SET 3391470.25 2550390.50 +SET 3391501.68 2733991.68 +SET 339172.60 227234.92 +SET 339179.50 235180.50 +SET 339185.34 216609.12 +SET 339199.56 293210.76 +SET 3391995.60 2932107.60 +SET 339205.12 111247.36 +SET 3392138.52 2550893.04 +SET 339280.41 273504.16 +SET 3393109.20 2043704.13 +SET 3393261.27 2933201.67 +SET 339342.96 235293.84 +SET 3393546.40 2043967.46 +SET 3393683.16 2933566.36 +SET 339394.18 200318.79 +SET 3393983.60 2044230.79 +SET 3394143.33 2552400.66 +SET 33942.54 25174.96 +SET 339424.69 235350.51 +SET 3394858.00 2044757.45 +SET 339490.50 216804.00 +SET 33951.87 25181.88 +SET 339532.96 111354.88 +SET 3395370.72 2935025.12 +SET 3395408.94 2737141.44 +SET 339548.24 200409.72 +SET 3395792.61 2935389.81 +SET 339610.70 193348.61 +SET 339621.45 293575.45 +SET 3396214.50 2935754.50 +SET 339647.10 227552.82 +SET 3396711.36 2738191.36 +SET 3397362.57 2738716.32 +SET 33974.20 22761.64 +SET 339742.00 227616.40 +SET 3397484.68 2554913.36 +SET 3397902.06 2937213.26 +SET 339816.40 193465.72 +SET 339836.90 227679.98 +SET 339856.36 200591.58 +SET 3398745.84 2937942.64 +SET 3398821.22 2555918.44 +SET 339915.07 235690.53 +SET 3399230.00 2047390.75 +SET 339931.62 274029.12 +SET 339931.80 227743.56 +SET 3399589.62 2938672.02 +SET 339970.08 111498.24 +SET 33998.52 25216.48 +SET 3399967.41 2740816.16 +SET 3400011.51 2939036.71 +SET 3400157.76 2556923.52 +SET 340022.10 193582.83 +SET 340026.70 227807.14 +SET 3400541.60 2048180.74 +SET 340074.15 227838.93 +SET 340078.53 235803.87 +SET 3400855.29 2939766.09 +SET 3400978.80 2048444.07 +SET 340121.60 227870.72 +SET 340141.60 204870.74 +SET 340169.05 227902.51 +SET 340188.64 111569.92 +SET 3401921.04 2742391.04 +SET 3402120.96 2940860.16 +SET 340216.50 227934.30 +SET 340241.99 235917.21 +SET 34025.34 21729.12 +SET 340253.40 217291.20 +SET 3402542.85 2941224.85 +SET 3402830.84 2558933.68 +SET 3402964.74 2941589.54 +SET 340311.40 227997.88 +SET 3403164.80 2049760.72 +SET 3403223.46 2743440.96 +SET 3403386.63 2941954.23 +SET 3403874.67 2743965.92 +SET 340405.45 236030.55 +SET 340405.98 217388.64 +SET 340406.30 228061.46 +SET 340433.50 193817.05 +SET 34045.17 25251.08 +SET 340465.23 294304.83 +SET 3404652.30 2943048.30 +SET 340501.20 228125.04 +SET 3405074.19 2943412.99 +SET 340516.48 111677.44 +SET 3405177.09 2745015.84 +SET 340578.80 205134.07 +SET 3405788.00 2051340.70 +SET 340596.10 228188.62 +SET 3406172.19 2561446.38 +SET 3406225.20 2051604.03 +SET 340625.76 111713.28 +SET 340639.20 193934.16 +SET 3406840.46 2561948.92 +SET 340711.14 217583.52 +SET 3407130.72 2746590.72 +SET 34073.16 25271.84 +SET 340732.37 236257.23 +SET 340738.45 228283.99 +SET 3407536.80 2052394.02 +SET 3407605.53 2945601.13 +SET 3407781.93 2747115.68 +SET 340785.90 228315.78 +SET 3407974.00 2052657.35 +SET 3408027.42 2945965.82 +SET 34081.77 25629.54 +SET 3408433.14 2747640.64 +SET 340887.12 294669.52 +SET 3409084.35 2748165.60 +SET 340928.25 228411.15 +SET 3409285.60 2053447.34 +SET 340934.78 201228.09 +SET 3409735.56 2748690.56 +SET 34101.60 20539.74 +SET 3410136.87 2947789.27 +SET 341016.00 205397.40 +SET 3410181.81 2564461.62 +SET 341023.15 228474.73 +SET 3410386.77 2749215.52 +SET 3410850.08 2564964.16 +SET 3410980.65 2948518.65 +SET 3411037.98 2749740.48 +SET 341118.05 228538.31 +SET 341141.02 236540.58 +SET 34116.55 22857.01 +SET 3412186.62 2565969.24 +SET 3412246.32 2949612.72 +SET 3412346.00 2055290.65 +SET 341242.90 201409.95 +SET 341256.30 194285.49 +SET 341260.40 228633.68 +SET 3412668.21 2949977.41 +SET 3412783.20 2055553.98 +SET 341281.44 111928.32 +SET 34129.14 25313.36 +SET 341304.48 236653.92 +SET 341309.36 213144.54 +SET 3413090.10 2950342.10 +SET 341321.46 217973.28 +SET 3413220.40 2055817.31 +SET 341355.30 228697.26 +SET 3413657.60 2056080.64 +SET 3413933.88 2951071.48 +SET 3414191.43 2567476.86 +SET 341450.20 228760.84 +SET 3414532.00 2056607.30 +SET 34147.80 25327.20 +SET 341485.97 256797.94 +SET 3414969.20 2056870.63 +SET 3415199.55 2952165.55 +SET 341545.10 228824.42 +SET 3415596.45 2753415.20 +SET 34157.13 25334.12 +SET 3416.40 2288.88 +SET 3416247.66 2753940.16 +SET 34164.00 22888.80 +SET 341640.00 228888.00 +SET 3416465.22 2953259.62 +SET 341667.70 194519.71 +SET 3416864.51 2569487.02 +SET 3416887.11 2953624.31 +SET 341718.56 112071.68 +SET 34173.09 29539.89 +SET 341730.90 295398.90 +SET 3417592.40 2058450.61 +SET 34177.92 21826.56 +SET 341779.20 218265.60 +SET 341782.35 228983.37 +SET 3418152.78 2954718.38 +SET 3418466.80 2058977.27 +SET 34185.12 25354.88 +SET 341876.59 237050.61 +SET 341890.40 205924.06 +SET 3418996.56 2955447.76 +SET 341924.70 229078.74 +SET 3419341.20 2059503.93 +SET 3419537.59 2571497.18 +SET 341958.32 237107.28 +SET 3419840.34 2956177.14 +SET 34201.32 20186.46 +SET 342013.20 201864.60 +SET 3420205.86 2571999.72 +SET 34207.52 21362.28 +SET 342075.20 213622.80 +SET 3420806.13 2757614.88 +SET 3420874.13 2572502.26 +SET 3421090.00 2060557.25 +SET 3421106.01 2957271.21 +SET 342155.68 112215.04 +SET 342209.40 229269.48 +SET 3422108.55 2758664.80 +SET 3422210.67 2573507.34 +SET 3422401.60 2061347.24 +SET 342264.96 112250.88 +SET 342284.80 194871.04 +SET 3423215.46 2959094.66 +SET 342327.60 206187.39 +SET 3423637.35 2959459.35 +SET 342389.52 218655.36 +SET 3424150.40 2062400.56 +SET 3424215.48 2575014.96 +SET 34244.87 23744.73 +SET 342448.70 237447.30 +SET 3424481.13 2960188.73 +SET 3424713.39 2760764.64 +SET 3425024.80 2062927.22 +SET 342536.46 276128.96 +SET 3425364.60 2761289.60 +SET 342542.10 218752.80 +SET 3425552.02 2576020.04 +SET 342574.68 296128.28 +SET 34258.90 22952.38 +SET 342589.00 229523.80 +SET 3425899.20 2063453.88 +SET 342592.80 112358.40 +SET 342612.16 237560.64 +SET 342629.44 202228.32 +SET 342636.45 229555.59 +SET 3426667.02 2762339.52 +SET 3426773.60 2063980.54 +SET 342683.90 229587.38 +SET 3426888.56 2577025.12 +SET 34269.09 25417.16 +SET 342693.89 237617.31 +SET 342696.20 195105.26 +SET 3427318.23 2762864.48 +SET 3427434.36 2962741.56 +SET 3427556.83 2577527.66 +SET 342775.62 237673.98 +SET 342778.80 229650.96 +SET 3427969.44 2763389.44 +SET 342811.36 112430.08 +SET 3428225.10 2578030.20 +SET 3428278.14 2963470.94 +SET 3428522.40 2065033.86 +SET 34287.75 25431.00 +SET 3428700.03 2963835.63 +SET 342873.70 229714.54 +SET 3428893.37 2578532.74 +SET 3428959.60 2065297.19 +SET 342921.15 229746.33 +SET 3429271.86 2764439.36 +SET 342939.08 237787.32 +SET 3429396.80 2065560.52 +SET 3429834.00 2065823.85 +SET 342999.84 219045.12 +SET 3430271.20 2066087.18 +SET 34306.41 25444.84 +SET 343063.50 229841.70 +SET 3430809.48 2965659.08 +SET 343091.62 202501.11 +SET 343107.60 195339.48 +SET 3431225.49 2766014.24 +SET 3431231.37 2966023.77 +SET 343158.40 229905.28 +SET 343184.27 237957.33 +SET 3431876.70 2766539.20 +SET 3432.66 2380.14 +SET 3432234.72 2581045.44 +SET 34325.07 25458.68 +SET 34326.60 23801.40 +SET 3432918.93 2967482.53 +SET 34330.50 21924.00 +SET 343300.75 230000.65 +SET 343305.00 219240.00 +SET 3433340.82 2967847.22 +SET 343351.60 214419.90 +SET 343357.76 112609.28 +SET 3433768.80 2068193.82 +SET 343395.65 230064.23 +SET 343399.74 202682.97 +SET 3434206.00 2068457.15 +SET 34343.73 25472.52 +SET 343490.78 258305.56 +SET 3434907.80 2583055.60 +SET 3435028.38 2969305.98 +SET 3435080.40 2068983.81 +SET 34353.06 25479.44 +SET 3435872.16 2970035.36 +SET 34362.39 25486.36 +SET 3436244.34 2584060.68 +SET 343680.35 230254.97 +SET 3436912.61 2584563.22 +SET 343707.86 202864.83 +SET 343724.70 195690.81 +SET 3437266.40 2070300.46 +SET 3437559.72 2971494.12 +SET 343762.74 219532.32 +SET 3437703.60 2070563.79 +SET 343794.88 112752.64 +SET 3437981.61 2971858.81 +SET 3438140.80 2070827.12 +SET 343822.70 230350.34 +SET 3438249.15 2585568.30 +SET 343838.88 277178.88 +SET 3438403.50 2972223.50 +SET 3438578.00 2071090.45 +SET 343861.92 202955.76 +SET 343870.15 230382.13 +SET 343904.16 112788.48 +SET 343915.32 219629.76 +SET 343919.84 238467.36 +SET 3439452.40 2071617.11 +SET 3439669.17 2973317.57 +SET 3439889.60 2071880.44 +SET 3440091.06 2973682.26 +SET 344013.44 112824.32 +SET 3440253.96 2587075.92 +SET 3440512.95 2974046.95 +SET 344059.95 230509.29 +SET 344076.40 207240.71 +SET 3440764.00 2072407.10 +SET 3440922.23 2587578.46 +SET 3440934.84 2974411.64 +SET 344107.40 230541.08 +SET 3441356.73 2974776.33 +SET 344136.10 195925.03 +SET 3441638.40 2072933.76 +SET 34418.37 25527.88 +SET 3442.77 2553.48 +SET 344202.30 230604.66 +SET 344220.48 219824.64 +SET 3442258.77 2588583.54 +SET 34423.20 11289.60 +SET 344232.00 112896.00 +SET 344249.75 230636.45 +SET 344262.24 297587.04 +SET 3443044.29 2976235.09 +SET 344324.10 203228.55 +SET 344328.49 238750.71 +SET 344341.28 112931.84 +SET 344341.80 196042.14 +SET 3443466.18 2976599.78 +SET 3443598.48 2775988.48 +SET 34437.03 25541.72 +SET 3443824.40 2074250.41 +SET 3443888.07 2976964.47 +SET 3444261.60 2074513.74 +SET 3444263.58 2590091.16 +SET 3444309.96 2977329.16 +SET 344450.56 112967.68 +SET 34446.36 25548.64 +SET 3444698.80 2074777.07 +SET 344490.09 277703.84 +SET 3444900.90 2777038.40 +SET 344491.95 238864.05 +SET 3444931.85 2590593.70 +SET 3445153.74 2978058.54 +SET 344525.64 220019.52 +SET 344547.50 196159.25 +SET 3445552.11 2777563.36 +SET 344559.84 113003.52 +SET 3445600.12 2591096.24 +SET 34462.80 21521.70 +SET 3446203.32 2778088.32 +SET 3446419.41 2979152.61 +SET 344655.41 238977.39 +SET 344678.22 220116.96 +SET 3446841.30 2979517.30 +SET 3446854.53 2778613.28 +SET 3446936.66 2592101.32 +SET 344724.25 230954.35 +SET 3447505.74 2779138.24 +SET 3447604.93 2592603.86 +SET 344771.70 230986.14 +SET 344778.40 113075.20 +SET 344786.28 203501.34 +SET 344819.15 231017.93 +SET 3448196.40 2076883.71 +SET 344830.80 220214.40 +SET 344866.60 231049.72 +SET 3448941.47 2593608.94 +SET 34490.06 23914.74 +SET 34493.01 25583.24 +SET 344950.80 207767.37 +SET 344958.90 196393.47 +SET 345.21 256.04 +SET 3450110.58 2781238.08 +SET 345056.40 231176.88 +SET 3450638.31 2982799.51 +SET 3450761.79 2781763.04 +SET 34509.44 20368.32 +SET 3450946.28 2595116.56 +SET 345106.02 298316.42 +SET 345106.24 113182.72 +SET 3451060.20 2983164.20 +SET 345138.56 215535.84 +SET 34514.13 27822.88 +SET 345145.79 239317.41 +SET 3451694.00 2078990.35 +SET 3451903.98 2983893.58 +SET 345198.75 231272.25 +SET 3452064.21 2782812.96 +SET 345215.52 113218.56 +SET 345227.52 239374.08 +SET 3452282.82 2596121.64 +SET 345246.20 231304.04 +SET 3452568.40 2079517.01 +SET 3453005.60 2079780.34 +SET 345309.25 239430.75 +SET 345324.80 113254.40 +SET 3453619.36 2597126.72 +SET 34538.80 20803.07 +SET 34539.66 25617.84 +SET 345390.98 239487.42 +SET 345436.00 231431.20 +SET 3454435.32 2986081.72 +SET 345472.71 239544.09 +SET 34548.99 25624.76 +SET 3454857.21 2986446.41 +SET 345527.91 298681.11 +SET 3455320.26 2785437.76 +SET 345554.44 239600.76 +SET 345556.58 203955.99 +SET 3455628.80 2081360.32 +SET 3455700.99 2987175.79 +SET 345576.00 196744.80 +SET 34558.32 25631.68 +SET 3455971.47 2785962.72 +SET 345636.17 239657.43 +SET 3456503.20 2081886.98 +SET 34567.65 25638.60 +SET 3456960.71 2599639.42 +SET 3457273.89 2787012.64 +SET 3457377.60 2082413.64 +SET 3457388.55 2988634.55 +SET 3457628.98 2600141.96 +SET 345799.63 239770.77 +SET 345815.60 231685.52 +SET 345825.20 208294.03 +SET 3458297.25 2600644.50 +SET 34586.31 25652.44 +SET 3458689.20 2083203.63 +SET 3458965.52 2601147.04 +SET 345898.86 220896.48 +SET 3459076.11 2990093.31 +SET 34591.05 23174.91 +SET 345910.50 231749.10 +SET 3459498.00 2990458.00 +SET 345957.95 231780.89 +SET 345963.09 239884.11 +SET 3459633.79 2601649.58 +SET 345980.48 113469.44 +SET 3459878.73 2789112.48 +SET 346005.40 231812.68 +SET 3460302.06 2602152.12 +SET 3460438.00 2084256.95 +SET 34614.30 25673.20 +SET 346147.75 231908.05 +SET 346163.86 260315.72 +SET 3461638.60 2603157.20 +SET 3461749.60 2085046.94 +SET 3461832.36 2790687.36 +SET 346193.10 197096.13 +SET 346199.04 113541.12 +SET 3462186.80 2085310.27 +SET 346262.40 208557.36 +SET 346290.10 232003.42 +SET 3463.85 2320.67 +SET 3463061.20 2085836.93 +SET 346308.32 113576.96 +SET 346371.74 240167.46 +SET 346417.60 113612.80 +SET 346453.47 240224.13 +SET 3464810.00 2086890.25 +SET 3465404.46 2995563.66 +SET 3465739.62 2793837.12 +SET 346574.80 232194.16 +SET 3465826.35 2995928.35 +SET 3466248.24 2996293.04 +SET 3466316.49 2606674.98 +SET 3466558.80 2087943.57 +SET 346661.76 221383.68 +SET 3466670.13 2996657.73 +SET 3467042.04 2794887.04 +SET 346717.15 232289.53 +SET 346745.44 113720.32 +SET 3467653.03 2607680.06 +SET 346780.39 240450.81 +SET 346789.06 204683.43 +SET 34679.61 25721.64 +SET 346793.58 299775.18 +SET 3467935.80 2997751.80 +SET 346810.20 197447.46 +SET 346832.13 260818.26 +SET 3468344.46 2795936.96 +SET 34685.95 23238.49 +SET 346862.12 240507.48 +SET 34688.94 25728.56 +SET 3469182.00 2089523.55 +SET 3469201.47 2998845.87 +SET 346954.40 232448.48 +SET 3469619.20 2089786.88 +SET 346964.00 113792.00 +SET 3469646.88 2796986.88 +SET 346966.92 221578.56 +SET 3470298.09 2797511.84 +SET 3470326.11 2609690.22 +SET 3471310.92 3000669.32 +SET 347144.20 232575.64 +SET 3471662.65 2610695.30 +SET 347180.80 216811.20 +SET 347189.04 240734.16 +SET 3472154.70 3001398.70 +SET 347239.10 232639.22 +SET 34726.26 25756.24 +SET 347270.77 240790.83 +SET 347272.08 221773.44 +SET 347286.55 232671.01 +SET 347291.84 113899.52 +SET 3472998.48 3002128.08 +SET 3473116.80 2091893.52 +SET 3473420.37 3002492.77 +SET 3473554.00 2092156.85 +SET 3473667.46 2612202.92 +SET 347424.66 221870.88 +SET 3474264.15 3003222.15 +SET 347436.08 216970.62 +SET 3474856.56 2801186.56 +SET 3474865.60 2092946.84 +SET 34750.04 26132.08 +SET 347500.40 261320.80 +SET 3475004.00 2613208.00 +SET 3475302.80 2093210.17 +SET 3475507.77 2801711.52 +SET 347559.36 205138.08 +SET 347574.00 209347.35 +SET 3476158.98 2802236.48 +SET 34763.30 19791.59 +SET 34763.58 25783.92 +SET 347633.00 197915.90 +SET 347637.36 300504.56 +SET 3476373.60 3005045.60 +SET 347666.15 232925.33 +SET 3476795.49 3005410.29 +SET 3476810.19 2802761.44 +SET 3477008.81 2614715.62 +SET 3477051.60 2094263.49 +SET 347713.60 232957.12 +SET 34772.91 25790.84 +SET 347729.82 222065.76 +SET 3477461.40 2803286.40 +SET 347761.15 241130.85 +SET 3478061.16 3006504.36 +SET 347808.50 233020.70 +SET 34782.24 25797.76 +SET 347855.95 233052.49 +SET 347867.48 205319.94 +SET 34788.24 22216.32 +SET 3478800.40 2095316.81 +SET 347882.40 222163.20 +SET 3478904.94 3007233.74 +SET 3479013.62 2616223.24 +SET 3479237.60 2095580.14 +SET 3479326.83 3007598.43 +SET 347946.64 217289.46 +SET 347947.52 114114.56 +SET 347950.85 233116.07 +SET 3479674.80 2095843.47 +SET 3480.09 2581.16 +SET 34800.90 25811.60 +SET 3480112.00 2096106.80 +SET 348034.98 222260.64 +SET 348044.40 198150.12 +SET 348045.75 233179.65 +SET 3480549.20 2096370.13 +SET 348056.80 114150.40 +SET 3480592.50 3008692.50 +SET 3480986.40 2096633.46 +SET 34810.23 25818.52 +SET 3481368.66 2806436.16 +SET 348166.08 114186.24 +SET 348175.60 205501.80 +SET 348201.92 217448.88 +SET 3482298.00 2097423.45 +SET 3482701.95 3010515.95 +SET 3482735.20 2097686.78 +SET 3483123.84 3010880.64 +SET 348333.26 241527.54 +SET 3483545.73 3011245.33 +SET 348384.64 114257.92 +SET 3484046.80 2098476.77 +SET 348448.40 209874.01 +SET 3484484.00 2098740.10 +SET 348455.80 198384.34 +SET 3484811.40 3012339.40 +SET 348483.72 205683.66 +SET 348492.72 222552.96 +SET 348520.25 233497.55 +SET 3485233.29 3012704.09 +SET 348578.45 241697.55 +SET 348603.20 114329.60 +SET 348637.78 205774.59 +SET 348661.50 198501.45 +SET 348662.60 233592.92 +SET 3486920.85 3014162.85 +SET 348710.05 233624.71 +SET 3487107.20 2100320.08 +SET 3487229.55 2811160.80 +SET 348797.88 222747.84 +SET 3488186.52 3015256.92 +SET 348823.64 241867.56 +SET 3488369.40 2623258.80 +SET 348852.40 233720.08 +SET 348899.85 233751.87 +SET 348903.03 301598.63 +SET 34894.20 25880.80 +SET 348945.90 205956.45 +SET 348967.76 217927.14 +SET 348994.75 233815.45 +SET 3490167.60 2102163.39 +SET 349040.32 114472.96 +SET 349048.56 281378.56 +SET 349099.96 206047.38 +SET 3491042.00 2102690.05 +SET 3491042.48 2625268.96 +SET 3491136.81 2814310.56 +SET 3491139.75 3017809.75 +SET 34912.86 25894.64 +SET 349137.10 233910.82 +SET 349149.60 114508.80 +SET 3491788.02 2814835.52 +SET 34923.20 23397.44 +SET 349232.00 233974.40 +SET 3492353.60 2103480.04 +SET 3492379.02 2626274.04 +SET 349258.88 114544.64 +SET 349278.60 198852.78 +SET 3492790.80 2103743.37 +SET 3493047.29 2626776.58 +SET 34931.52 25908.48 +SET 349314.02 242207.58 +SET 349326.90 234037.98 +SET 349368.16 114580.48 +SET 349408.08 206229.24 +SET 3494392.86 2816935.36 +SET 349477.44 114616.32 +SET 34950.18 25922.32 +SET 349559.21 242377.59 +SET 3495720.37 2628786.74 +SET 349586.72 114652.16 +SET 349611.60 234228.72 +SET 3496202.43 3022186.03 +SET 349640.94 242434.26 +SET 3496624.32 3022550.72 +SET 34968.84 25936.16 +SET 349690.00 199087.00 +SET 3497.60 2106.64 +SET 34971.62 20641.11 +SET 34973.36 21840.54 +SET 3497468.10 3023280.10 +SET 3497725.18 2630294.36 +SET 3498037.20 2106903.33 +SET 349804.40 242547.60 +SET 3498300.12 2820085.12 +SET 3498474.40 2107166.66 +SET 349865.94 223429.92 +SET 34987.50 25950.00 +SET 349870.26 206502.03 +SET 3499155.66 3024738.86 +SET 3499602.54 2821135.04 +SET 3499999.44 3025468.24 +SET 350023.84 114795.52 +SET 350038.65 234514.83 +SET 3500398.26 2632304.52 +SET 350049.59 242717.61 +SET 3501097.60 2108746.64 +SET 35016.87 30269.27 +SET 35018.10 23461.02 +SET 350197.20 210927.33 +SET 3502108.89 3027291.69 +SET 350213.05 242830.95 +SET 35024.82 25977.68 +SET 350244.16 218724.24 +SET 3502846.40 2109799.96 +SET 3502952.67 3028021.07 +SET 350307.10 199438.33 +SET 3503071.34 2634314.68 +SET 350323.35 234705.57 +SET 3503374.56 3028385.76 +SET 3503739.61 2634817.22 +SET 350376.51 242944.29 +SET 3504158.00 2110589.95 +SET 3504812.22 2825334.72 +SET 350499.44 218883.66 +SET 3505906.80 2111643.27 +SET 3506114.64 2826384.64 +SET 350634.40 211190.66 +SET 3506749.68 3031303.28 +SET 3506781.20 2112169.93 +SET 350703.43 243170.97 +SET 3507218.40 2112433.26 +SET 350750.40 234991.68 +SET 3507655.60 2112696.59 +SET 350781.42 224014.56 +SET 350788.80 115046.40 +SET 350841.75 263833.50 +SET 3508859.13 3033126.73 +SET 350898.08 115082.24 +SET 3509085.77 2638837.54 +SET 350924.20 199789.66 +SET 35093.40 22411.20 +SET 350940.20 235118.84 +SET 350948.68 207138.54 +SET 3509754.04 2639340.08 +SET 3510021.90 2829534.40 +SET 351010.00 219202.50 +SET 3510422.31 2639842.62 +SET 351071.60 211453.99 +SET 3510716.00 2114539.90 +SET 3511.30 2352.46 +SET 351102.74 207229.47 +SET 3511390.47 3035314.87 +SET 3511590.40 2115066.56 +SET 351177.45 235277.79 +SET 35118.12 26046.88 +SET 3512027.60 2115329.89 +SET 3512656.14 3036408.94 +SET 35127.45 26053.80 +SET 3512902.00 2115856.55 +SET 351319.80 235373.16 +SET 3513339.20 2116119.88 +SET 351335.60 200023.88 +SET 351357.27 243624.33 +SET 351367.25 235404.95 +SET 3513776.40 2116383.21 +SET 3514.39 2436.81 +SET 35143.90 24368.10 +SET 351434.37 303786.77 +SET 3514343.70 3037867.70 +SET 351439.00 243681.00 +SET 351444.48 115261.44 +SET 35146.11 26067.64 +SET 351462.15 235468.53 +SET 3515100.20 2643360.40 +SET 3515187.48 3038597.08 +SET 351520.56 219521.34 +SET 35155.44 26074.56 +SET 3515525.20 2117436.53 +SET 351553.76 115297.28 +SET 351557.05 235532.11 +SET 351564.92 207502.26 +SET 3515768.47 2643862.94 +SET 35160.45 23556.39 +SET 3516031.26 3039326.46 +SET 3516399.60 2117963.19 +SET 35164.77 26081.48 +SET 351653.40 283478.40 +SET 3516875.04 3040055.84 +SET 351699.40 235627.48 +SET 3517105.01 2644868.02 +SET 351718.98 207593.19 +SET 3517296.93 3040420.53 +SET 35174.70 20025.81 +SET 351747.00 200258.10 +SET 3517711.20 2118753.18 +SET 3517718.82 3040785.22 +SET 351772.32 115368.96 +SET 351775.84 219680.76 +SET 351794.30 235691.06 +SET 3518148.40 2119016.51 +SET 351847.65 243964.35 +SET 3518487.63 2836358.88 +SET 351849.48 224696.64 +SET 3518585.60 2119279.84 +SET 351881.60 115404.80 +SET 3518984.49 3041879.29 +SET 3519109.82 2646375.64 +SET 35192.76 26102.24 +SET 351929.38 244021.02 +SET 351936.65 235786.43 +SET 3519406.38 3042243.98 +SET 3519460.00 2119806.50 +SET 3519897.20 2120069.83 +SET 35202.09 26109.16 +SET 352027.10 207775.05 +SET 3520441.26 2837933.76 +SET 3520446.36 2647380.72 +SET 3520672.05 3043338.05 +SET 35207.90 23588.18 +SET 3520771.60 2120596.49 +SET 352079.00 235881.80 +SET 3521092.47 2838458.72 +SET 35211.42 26116.08 +SET 352158.40 200492.32 +SET 352174.57 244191.03 +SET 352178.29 264838.58 +SET 3521782.90 2648385.80 +SET 35220.75 26123.00 +SET 3522083.20 2121386.48 +SET 35225.63 24424.77 +SET 352278.15 304516.15 +SET 3523046.10 2840033.60 +SET 3523203.39 3045526.19 +SET 352338.03 244304.37 +SET 3523625.28 3045890.88 +SET 352383.20 212243.98 +SET 352411.15 236104.33 +SET 352458.60 236136.12 +SET 3524890.95 3046984.95 +SET 3525580.80 2123493.12 +SET 352569.80 200726.54 +SET 352600.95 236231.49 +SET 3526953.36 2843183.36 +SET 352700.04 304880.84 +SET 3527129.06 2652406.12 +SET 3527329.60 2124546.44 +SET 352746.68 244587.72 +SET 352775.50 200843.65 +SET 35279.74 20822.97 +SET 352790.75 236358.65 +SET 352797.40 208229.70 +SET 352820.40 212507.31 +SET 35286.06 26171.44 +SET 3528641.20 2125336.43 +SET 3528906.99 2844758.24 +SET 3529078.40 2125599.76 +SET 3529109.85 3050631.85 +SET 3529133.87 2653913.74 +SET 352917.54 225378.72 +SET 35295.39 26178.36 +SET 3529515.60 2125863.09 +SET 3529558.20 2845283.20 +SET 35297.44 11576.32 +SET 3529952.80 2126126.42 +SET 353028.00 236517.60 +SET 3530390.00 2126389.75 +SET 353052.24 220477.86 +SET 35307.36 24481.44 +SET 353070.12 225476.16 +SET 3530827.20 2126653.08 +SET 3530860.62 2846333.12 +SET 353105.52 208411.56 +SET 3531219.30 3052455.30 +SET 353122.90 236581.18 +SET 3531264.40 2126916.41 +SET 35314.05 26192.20 +SET 3531641.19 3052819.99 +SET 353170.35 236612.97 +SET 3531701.60 2127179.74 +SET 353192.96 115834.88 +SET 3532063.08 3053184.68 +SET 3532138.80 2127443.07 +SET 353222.70 225573.60 +SET 3532475.22 2656426.44 +SET 3532576.00 2127706.40 +SET 353265.25 236676.55 +SET 3532906.86 3053914.06 +SET 353302.24 115870.72 +SET 353307.52 220637.28 +SET 353312.70 236708.34 +SET 353318.79 244984.41 +SET 3533328.75 3054278.75 +SET 3533465.46 2848432.96 +SET 3533750.64 3054643.44 +SET 3533887.60 2128496.39 +SET 353400.52 245041.08 +SET 3534116.67 2848957.92 +SET 3534172.53 3055008.13 +SET 3534324.80 2128759.72 +SET 3534762.00 2129023.05 +SET 353527.86 225768.48 +SET 3535419.09 2850007.84 +SET 353543.82 305610.22 +SET 3535438.20 3056102.20 +SET 353549.95 236867.29 +SET 353562.80 220796.70 +SET 3535860.09 3056466.89 +SET 353598.30 201312.09 +SET 353630.08 115978.24 +SET 353645.71 245211.09 +SET 3536484.84 2659441.68 +SET 3536703.87 3057196.27 +SET 353680.44 225865.92 +SET 3536948.00 2130339.70 +SET 353721.76 208775.28 +SET 3537372.72 2851582.72 +SET 3537385.20 2130603.03 +SET 353739.36 116014.08 +SET 353739.75 236994.45 +SET 3537821.38 2660446.76 +SET 353818.08 220956.12 +SET 3538259.60 2131129.69 +SET 353834.65 237058.03 +SET 3538391.43 3058655.03 +SET 3538696.80 2131393.02 +SET 353875.82 208866.21 +SET 35388.69 26247.56 +SET 353882.10 237089.82 +SET 35389.09 24538.11 +SET 3539134.00 2131656.35 +SET 3539235.21 3059384.41 +SET 353957.92 116085.76 +SET 3539657.10 3059749.10 +SET 35397.70 23715.34 +SET 35398.56 22606.08 +SET 354009.70 201546.31 +SET 354024.45 237185.19 +SET 3541162.73 2662959.46 +SET 3541320.00 2132973.00 +SET 354136.09 245551.11 +SET 35416.68 26268.32 +SET 354183.94 209048.07 +SET 3541831.00 2663462.00 +SET 354214.25 237312.35 +SET 354215.40 201663.42 +SET 3542194.40 2133499.66 +SET 35426.01 26275.24 +SET 3542610.33 3062301.93 +SET 3542631.60 2133762.99 +SET 354285.76 116193.28 +SET 354290.76 226255.68 +SET 3543454.11 3063031.31 +SET 3543506.00 2134289.65 +SET 35438.76 30633.96 +SET 3543876.00 3063396.00 +SET 3543943.20 2134552.98 +SET 3544380.40 2134816.31 +SET 35444.67 26289.08 +SET 3544504.08 2665472.16 +SET 354451.50 237471.30 +SET 354498.95 237503.09 +SET 3545172.35 2665974.70 +SET 3545254.80 2135342.97 +SET 354583.92 221434.38 +SET 3545838.45 2858407.20 +SET 3546129.20 2135869.63 +SET 35463.33 26302.92 +SET 354646.12 209320.86 +SET 3546489.66 2858932.16 +SET 3546508.89 2666979.78 +SET 3546566.40 2136132.96 +SET 354688.75 237630.25 +SET 35470.82 24594.78 +SET 3547003.60 2136396.29 +SET 3547177.16 2667482.32 +SET 354736.20 237662.04 +SET 3547440.80 2136659.62 +SET 354748.50 226548.00 +SET 3547792.08 2859982.08 +SET 354783.65 237693.83 +SET 3547878.00 2136922.95 +SET 3548513.70 2668487.40 +SET 3548516.79 3067407.59 +SET 354871.66 246061.14 +SET 3548938.68 3067772.28 +SET 354901.08 226645.44 +SET 35492.60 23778.92 +SET 354941.44 116408.32 +SET 354973.45 237820.99 +SET 3549745.71 2861556.96 +SET 3549850.24 2669492.48 +SET 355038.20 202131.86 +SET 355050.72 116444.16 +SET 3550518.51 2669995.02 +SET 355068.35 237884.57 +SET 355108.30 209593.65 +SET 355116.85 246231.15 +SET 3551186.78 2670497.56 +SET 3551470.02 3069960.42 +SET 3552250.00 2139556.25 +SET 3552523.32 2671502.64 +SET 355258.15 238011.73 +SET 3552735.69 3071054.49 +SET 355280.31 246344.49 +SET 3553001.76 2864181.76 +SET 355305.60 238043.52 +SET 3553124.40 2140082.91 +SET 3553157.58 3071419.18 +SET 3553191.59 2672005.18 +SET 3553579.47 3071783.87 +SET 355358.82 226937.76 +SET 355378.56 116551.68 +SET 3554.73 2636.52 +SET 35540.05 23810.71 +SET 355416.42 209775.51 +SET 3554423.25 3072513.25 +SET 3554436.00 2140872.90 +SET 355447.95 238138.89 +SET 35547.30 26365.20 +SET 3555196.40 2673512.80 +SET 35552.55 24651.45 +SET 3555267.03 3073242.63 +SET 355570.48 209866.44 +SET 3555747.60 2141662.89 +SET 355590.30 238234.26 +SET 355607.23 246571.17 +SET 35565.96 26379.04 +SET 3556532.70 3074336.70 +SET 3556532.94 2674517.88 +SET 3556622.00 2142189.55 +SET 355663.98 227132.64 +SET 355685.20 238297.84 +SET 355688.96 246627.84 +SET 3557059.20 2142452.88 +SET 355732.65 238329.63 +SET 3557798.37 3075430.77 +SET 355780.10 238361.42 +SET 3557933.60 2142979.54 +SET 3558.75 2384.25 +SET 3558220.26 3075795.46 +SET 355827.55 238393.21 +SET 35584.62 26392.88 +SET 355852.42 246741.18 +SET 3558537.75 2676025.50 +SET 355861.00 202600.30 +SET 3558862.65 2868906.40 +SET 3559064.04 3076524.84 +SET 355924.96 116730.88 +SET 35593.95 26399.80 +SET 3559485.93 3076889.53 +SET 3559513.86 2869431.36 +SET 355969.14 227327.52 +SET 356015.88 246854.52 +SET 3560165.07 2869956.32 +SET 356032.66 210139.23 +SET 356034.24 116766.72 +SET 356064.80 238552.16 +SET 356066.70 202717.41 +SET 3561173.49 3078348.29 +SET 35612.61 26413.64 +SET 3561210.83 2678035.66 +SET 3561595.38 3078712.98 +SET 356207.15 238647.53 +SET 356211.87 287153.12 +SET 3562305.60 2145612.84 +SET 35625.28 11683.84 +SET 356254.60 238679.32 +SET 356261.07 247024.53 +SET 3562769.91 2872056.16 +SET 356340.78 210321.09 +SET 356370.88 222550.32 +SET 3563883.91 2680045.82 +SET 35640.60 26434.40 +SET 3564072.33 2873106.08 +SET 3564548.61 3081265.81 +SET 356471.36 116910.08 +SET 3564723.54 2873631.04 +SET 356494.84 210412.02 +SET 356497.05 308163.05 +SET 3564970.50 3081630.50 +SET 356580.64 116945.92 +SET 3565888.72 2681553.44 +SET 3566240.40 2147982.81 +SET 356626.16 222709.74 +SET 3566556.99 2682055.98 +SET 3566658.06 3083089.26 +SET 3566677.60 2148246.14 +SET 3567225.26 2682558.52 +SET 3567328.38 2875730.88 +SET 356755.20 214877.28 +SET 3568345.62 3084548.02 +SET 3568863.60 2149562.79 +SET 356889.50 203185.85 +SET 356908.48 117053.44 +SET 356918.90 239124.38 +SET 3569738.00 2150089.45 +SET 3569898.34 2684568.68 +SET 357017.76 117089.28 +SET 35703.72 22800.96 +SET 3570566.61 2685071.22 +SET 3570584.43 2878355.68 +SET 3570612.40 2150616.11 +SET 357078.37 247591.23 +SET 3570876.96 3086736.16 +SET 357095.20 203302.96 +SET 3571049.60 2150879.44 +SET 357108.70 239251.54 +SET 357111.08 210775.74 +SET 3571298.85 3087100.85 +SET 357136.72 223028.58 +SET 35715.24 26489.76 +SET 357192.40 215140.61 +SET 3571924.00 2151406.10 +SET 3572142.63 3087830.23 +SET 357236.32 117160.96 +SET 357241.83 247704.57 +SET 3572798.40 2151932.76 +SET 357298.50 239378.70 +SET 3572986.41 3088559.61 +SET 357300.90 203420.07 +SET 3573235.60 2152196.09 +SET 3573239.69 2687081.38 +SET 357342.36 228204.48 +SET 35739.20 22318.80 +SET 3573907.96 2687583.92 +SET 35741.92 21095.76 +SET 357419.20 210957.60 +SET 3574252.08 3089653.68 +SET 357440.85 239474.07 +SET 3574491.69 2881505.44 +SET 3574673.97 3090018.37 +SET 357494.94 228301.92 +SET 357506.60 203537.18 +SET 357514.29 288203.04 +SET 35752.56 26517.44 +SET 357524.45 268858.90 +SET 357564.16 117268.48 +SET 357568.75 247931.25 +SET 357573.26 211048.53 +SET 3575794.11 2882555.36 +SET 357583.20 239569.44 +SET 3575939.64 3091112.44 +SET 35761.89 26524.36 +SET 3576783.42 3091841.82 +SET 3577096.53 2883605.28 +SET 35771.22 26531.28 +SET 357712.30 203654.29 +SET 3577170.40 2154566.06 +SET 3577249.31 2690096.62 +SET 357725.55 239664.81 +SET 357762.72 309257.12 +SET 3577747.74 2884130.24 +SET 357800.10 228496.80 +SET 357820.45 239728.39 +SET 3578470.98 3093300.58 +SET 3578919.20 2155619.38 +SET 357895.67 248157.93 +SET 357902.56 223506.84 +SET 357918.00 203771.40 +SET 3579314.76 3094029.96 +SET 3579356.40 2155882.71 +SET 357952.68 228594.24 +SET 357962.80 239823.76 +SET 3579736.65 3094394.65 +SET 358035.44 211321.32 +SET 3580352.58 2886230.08 +SET 358066.80 215667.27 +SET 35808.54 26558.96 +SET 3581002.32 3095488.72 +SET 358105.15 239919.13 +SET 358105.26 228691.68 +SET 358123.70 203888.51 +SET 35817.87 26565.88 +SET 358184.61 309621.81 +SET 358189.50 211412.25 +SET 3582306.21 2887804.96 +SET 3582416.80 2157726.02 +SET 3582854.00 2157989.35 +SET 3582957.42 2888329.92 +SET 3583291.20 2158252.68 +SET 3583608.63 2888854.88 +SET 358410.42 228886.56 +SET 358438.40 117555.20 +SET 3584799.33 3098770.93 +SET 35850.40 21593.06 +SET 3585040.00 2159306.00 +SET 358532.20 240205.24 +SET 358535.10 204122.73 +SET 3585477.20 2159569.33 +SET 358563.00 228984.00 +SET 3586065.00 3099865.00 +SET 35864.52 26600.48 +SET 3586788.80 2160359.32 +SET 3586864.68 2891479.68 +SET 358715.58 229081.44 +SET 35872.20 24033.24 +SET 3587226.00 2160622.65 +SET 35873.85 26607.40 +SET 358740.80 204239.84 +SET 3587515.89 2892004.64 +SET 358769.45 240364.19 +SET 3587752.56 3101323.76 +SET 35879.47 24878.13 +SET 358794.70 248781.30 +SET 358805.74 211775.97 +SET 358816.71 289252.96 +SET 3588174.45 3101688.45 +SET 35883.18 26614.32 +SET 3588537.60 2161412.64 +SET 3588596.34 3102053.14 +SET 358864.35 240427.77 +SET 3589278.17 2699142.34 +SET 3589469.52 2893579.52 +SET 359020.74 229276.32 +SET 359039.89 248951.31 +SET 3590614.71 2700147.42 +SET 359094.08 117770.24 +SET 3591423.15 2895154.40 +SET 3591598.00 2163255.95 +SET 359178.96 224303.94 +SET 35919.65 24065.03 +SET 3592815.24 3105700.04 +SET 3592909.60 2164045.94 +SET 359291.40 240713.88 +SET 3593237.13 3106064.73 +SET 359338.85 240745.67 +SET 3593784.00 2164572.60 +SET 3594027.99 2897254.24 +SET 359421.92 117877.76 +SET 3594221.20 2164835.93 +SET 359434.24 224463.36 +SET 359450.28 310715.88 +SET 3594624.33 2703162.66 +SET 3594658.40 2165099.26 +SET 359478.48 229568.64 +SET 35948.49 26662.76 +SET 3595095.60 2165362.59 +SET 359528.65 240872.83 +SET 359529.26 270366.52 +SET 3595292.60 2703665.20 +SET 359563.60 204708.28 +SET 35957.82 26669.68 +SET 359576.04 212230.62 +SET 3595768.47 3108252.87 +SET 359612.00 249348.00 +SET 3596612.25 3108982.25 +SET 3596629.14 2704670.28 +SET 35967.10 24096.82 +SET 35967.15 26676.60 +SET 3597034.14 3109346.94 +SET 3597281.60 2166679.24 +SET 3597284.04 2899879.04 +SET 359783.64 229763.52 +SET 3597877.92 3110076.32 +SET 3597965.68 2705675.36 +SET 3598156.00 2167205.90 +SET 3598586.46 2900928.96 +SET 3598593.20 2167469.23 +SET 359884.16 212412.48 +SET 3599030.40 2167732.56 +SET 35995.14 26697.36 +SET 359955.70 241158.94 +SET 3599888.88 2901978.88 +SET 360003.15 241190.73 +SET 3600342.00 2168522.55 +SET 360038.22 212503.41 +SET 360050.60 241222.52 +SET 36008.88 22995.84 +SET 360102.38 249688.02 +SET 360119.13 290302.88 +SET 36014.55 24128.61 +SET 360145.50 241286.10 +SET 3601842.51 2903553.76 +SET 360197.53 270869.06 +SET 360200.08 224941.62 +SET 3602090.80 2169575.87 +SET 3602096.82 3113723.22 +SET 3602518.71 3114087.91 +SET 360252.80 216983.92 +SET 3602643.57 2709193.14 +SET 360265.84 249801.36 +SET 360287.85 241381.47 +SET 360294.06 311445.26 +SET 3602965.20 2170102.53 +SET 3603144.93 2904603.68 +SET 36032.46 26725.04 +SET 360335.30 241413.26 +SET 3603402.40 2170365.86 +SET 360386.40 205176.72 +SET 360430.20 241476.84 +SET 360477.65 241508.63 +SET 3605050.05 3116276.05 +SET 3605098.56 2906178.56 +SET 3605316.65 2711203.30 +SET 3605471.94 3116640.74 +SET 3605893.83 3117005.43 +SET 360592.10 205293.83 +SET 3605984.92 2711705.84 +SET 3606.24 1182.72 +SET 36060.45 26745.80 +SET 3606025.60 2171945.84 +SET 360620.00 241604.00 +SET 3606315.72 3117370.12 +SET 3606400.98 2907228.48 +SET 360654.46 212867.13 +SET 360674.49 250084.71 +SET 360710.64 225260.46 +SET 360715.95 311809.95 +SET 360733.28 118307.84 +SET 3607337.20 2172735.83 +SET 360756.22 250141.38 +SET 360762.35 241699.37 +SET 3607703.40 2908278.40 +SET 3608003.28 3118828.88 +SET 3608354.61 2908803.36 +SET 360837.95 250198.05 +SET 360857.25 241762.95 +SET 36086.58 27137.16 +SET 360904.70 241794.74 +SET 3609086.00 2173789.15 +SET 360965.92 225419.88 +SET 3609657.03 2909853.28 +SET 3609690.84 3120287.64 +SET 36097.77 26773.48 +SET 360999.60 241858.32 +SET 3609994.54 2714721.08 +SET 361001.41 250311.39 +SET 361004.28 230543.04 +SET 3610112.73 3120652.33 +SET 3610662.81 2715223.62 +SET 36107.10 26780.40 +SET 361083.14 250368.06 +SET 3610834.80 2174842.47 +SET 361094.50 241921.90 +SET 3610956.51 3121381.71 +SET 3610959.45 2910903.20 +SET 3611272.00 2175105.80 +SET 361137.84 312174.64 +SET 3611378.40 3121746.40 +SET 361141.95 241953.69 +SET 361156.86 230640.48 +SET 361164.87 250424.73 +SET 361189.40 241985.48 +SET 3612146.40 2175632.46 +SET 3612261.87 2911953.12 +SET 36124.66 25048.14 +SET 3612583.60 2175895.79 +SET 3612644.07 3122840.47 +SET 361270.70 213230.85 +SET 361284.30 242049.06 +SET 3613458.00 2176422.45 +SET 3613487.85 3123569.85 +SET 361379.20 242112.64 +SET 3613895.20 2176685.78 +SET 361410.06 250594.74 +SET 361414.90 205762.27 +SET 3614215.50 2913528.00 +SET 361426.65 242144.43 +SET 3614331.63 3124299.23 +SET 3614672.43 2718238.86 +SET 3614866.71 2914052.96 +SET 361491.79 250651.41 +SET 361498.24 118558.72 +SET 3615340.70 2718741.40 +SET 361559.73 312539.33 +SET 361573.52 250708.08 +SET 3616081.20 2178002.43 +SET 361614.60 230932.80 +SET 361616.45 242271.59 +SET 36163.08 26821.92 +SET 3616518.40 2178265.76 +SET 3616955.60 2178529.09 +SET 361732.88 213503.64 +SET 361736.98 250821.42 +SET 3617471.55 2916152.80 +SET 3618013.78 2720751.56 +SET 361826.30 205996.49 +SET 3618682.05 2721254.10 +SET 361886.94 213594.57 +SET 361900.44 250934.76 +SET 36191.07 26842.68 +SET 3619394.31 3128675.51 +SET 3619425.18 2917727.68 +SET 361948.60 242494.12 +SET 361987.04 226057.56 +SET 3620018.59 2722259.18 +SET 3620238.09 3129404.89 +SET 36204.35 24255.77 +SET 36206.39 25104.81 +SET 3620659.98 3129769.58 +SET 362072.76 291877.76 +SET 3620890.40 2180899.06 +SET 362090.95 242589.49 +SET 3621378.81 2919302.56 +SET 362153.92 118773.76 +SET 3622023.40 2723766.80 +SET 362233.30 242684.86 +SET 362237.70 206230.71 +SET 362242.32 226216.98 +SET 362280.75 242716.65 +SET 362349.12 213867.36 +SET 36237.72 26877.28 +SET 3623950.80 2182742.37 +SET 362443.40 206347.82 +SET 3624456.99 3133051.79 +SET 362470.55 242843.81 +SET 362472.55 251331.45 +SET 3624878.88 3133416.48 +SET 362503.18 213958.29 +SET 36251.80 24287.56 +SET 362518.00 242875.60 +SET 3625300.77 3133781.17 +SET 3625364.75 2726279.50 +SET 362554.28 251388.12 +SET 362565.45 242907.39 +SET 362591.04 118917.12 +SET 3625937.28 2922977.28 +SET 362612.90 242939.18 +SET 362636.01 251444.79 +SET 36265.71 26898.04 +SET 3626566.44 3134875.24 +SET 3626588.49 2923502.24 +SET 3626701.29 2727284.58 +SET 3627011.20 2184585.68 +SET 362723.97 292402.72 +SET 3627410.22 3135604.62 +SET 362755.25 243034.55 +SET 36280.96 11898.88 +SET 362802.70 243066.34 +SET 36282.54 31363.34 +SET 3628254.00 3136334.00 +SET 36284.37 26911.88 +SET 3628542.12 2925077.12 +SET 362881.20 251614.80 +SET 3629.37 2691.88 +SET 3629097.78 3137063.38 +SET 362918.88 119024.64 +SET 3629197.20 2185902.33 +SET 3629519.67 3137428.07 +SET 362965.36 214231.08 +SET 3629844.54 2926127.04 +SET 36299.25 24319.35 +SET 3630042.64 2729797.28 +SET 3630071.60 2186428.99 +SET 363008.16 226695.24 +SET 363044.66 251728.14 +SET 3630508.80 2186692.32 +SET 3630946.00 2186955.65 +SET 3631146.96 2927176.96 +SET 36312.36 26932.64 +SET 363126.39 251784.81 +SET 363134.85 243288.87 +SET 363140.40 231907.20 +SET 363182.30 243320.66 +SET 3632047.45 2731304.90 +SET 363208.12 251841.48 +SET 36321.69 26939.56 +SET 363229.75 243352.45 +SET 3632472.90 3139980.90 +SET 363263.44 226854.66 +SET 363273.48 214412.94 +SET 3633100.59 2928751.84 +SET 363313.20 218827.23 +SET 363324.65 243416.03 +SET 3633316.68 3140710.28 +SET 3633569.20 2188535.63 +SET 363371.58 251954.82 +SET 36340.35 26953.40 +SET 363419.55 243479.61 +SET 3634443.60 2189062.29 +SET 363445.56 232102.08 +SET 363453.31 252011.49 +SET 3634582.35 3141804.35 +SET 36346.70 24351.14 +SET 363465.28 119203.84 +SET 3634720.53 2733315.06 +SET 3635054.22 2930326.72 +SET 363514.45 243543.19 +SET 363535.04 252068.16 +SET 3635426.13 3142533.73 +SET 3635705.43 2930851.68 +SET 3635755.20 2189852.28 +SET 363581.60 214594.80 +SET 36359.01 26967.24 +SET 3636269.91 3143263.11 +SET 3636356.64 2931376.64 +SET 3636629.60 2190378.94 +SET 36368.34 26974.16 +SET 3637007.85 2931901.60 +SET 3637066.80 2190642.27 +SET 3637113.69 3143992.49 +SET 3637393.61 2735325.22 +SET 363750.72 232296.96 +SET 3637957.47 3144721.87 +SET 3638061.88 2735827.76 +SET 3638310.27 2932951.52 +SET 3638379.36 3145086.56 +SET 363846.60 243765.72 +SET 363883.30 207167.59 +SET 363889.72 214776.66 +SET 363894.05 243797.51 +SET 3638961.48 2933476.48 +SET 3639252.80 2191958.92 +SET 36394.15 24382.93 +SET 364036.40 243892.88 +SET 364043.78 214867.59 +SET 3640734.96 2737837.92 +SET 364089.00 207284.70 +SET 3640915.11 2935051.36 +SET 364131.30 243956.46 +SET 3641332.59 3147639.39 +SET 3641754.48 3148004.08 +SET 364178.75 243988.25 +SET 364187.60 219353.89 +SET 364207.15 273884.30 +SET 364208.46 232589.28 +SET 36424.32 27015.68 +SET 3642598.26 3148733.46 +SET 364270.61 252578.19 +SET 364273.65 244051.83 +SET 364284.56 227492.34 +SET 364321.10 244083.62 +SET 3643408.04 2739848.08 +SET 3643442.04 3149462.84 +SET 364368.55 244115.41 +SET 3644076.31 2740350.62 +SET 3644285.82 3150192.22 +SET 364434.07 252691.53 +SET 3644822.37 2938201.12 +SET 36451.58 25274.82 +SET 364513.62 232784.16 +SET 364515.80 252748.20 +SET 364539.84 227651.76 +SET 3645551.49 3151286.29 +SET 3645810.80 2195908.87 +SET 364597.53 252804.87 +SET 3646081.12 2741858.24 +SET 36461.64 27043.36 +SET 3646248.00 2196172.20 +SET 364653.25 244306.15 +SET 364666.20 232881.60 +SET 3646776.00 2939776.00 +SET 3646817.16 3152380.36 +SET 364706.10 207636.03 +SET 3647427.21 2940300.96 +SET 364748.15 244369.73 +SET 3647559.60 2196962.19 +SET 364760.99 252918.21 +SET 364795.12 227811.18 +SET 364795.60 244401.52 +SET 3647996.80 2197225.52 +SET 3648082.83 3153474.43 +SET 3648085.93 2743365.86 +SET 364814.08 215322.24 +SET 364843.05 244433.31 +SET 3648434.00 2197488.85 +SET 364885.92 119669.76 +SET 3648871.20 2197752.18 +SET 364890.50 244465.10 +SET 3648926.61 3154203.81 +SET 364924.45 253031.55 +SET 3649422.47 2744370.94 +SET 364968.14 215413.17 +SET 364971.36 233076.48 +SET 3649745.60 2198278.84 +SET 36498.96 27071.04 +SET 3650032.05 2942400.80 +SET 365006.18 253088.22 +SET 3650192.28 3155297.88 +SET 365032.85 244560.47 +SET 3650683.26 2942925.76 +SET 365080.30 244592.26 +SET 365087.91 253144.89 +SET 3651036.06 3156027.26 +SET 365104.48 119741.44 +SET 365127.75 244624.05 +SET 3651334.47 2943450.72 +SET 365169.64 253201.56 +SET 365175.20 244655.84 +SET 3651931.60 2199595.49 +SET 3651985.68 2943975.68 +SET 3652301.73 3157121.33 +SET 365251.37 253258.23 +SET 36526.95 27091.80 +SET 3653.65 2447.83 +SET 365317.55 244751.21 +SET 365328.81 294502.56 +SET 36533.31 25331.49 +SET 365333.10 253314.90 +SET 3653567.40 3158215.40 +SET 3653680.40 2200648.81 +SET 3654117.60 2200912.14 +SET 365429.10 233368.80 +SET 365432.32 119848.96 +SET 3654554.80 2201175.47 +SET 365459.90 244846.58 +SET 3654590.52 2946075.52 +SET 3654833.07 3159309.47 +SET 3654992.00 2201438.80 +SET 365507.35 244878.37 +SET 3655254.96 3159674.16 +SET 36554.94 27112.56 +SET 365541.60 119884.80 +SET 365554.80 244910.16 +SET 3655676.85 3160038.85 +SET 365581.68 233466.24 +SET 3655866.40 2201965.46 +SET 3655892.94 2947125.44 +SET 3656098.74 3160403.54 +SET 3656105.17 2749396.34 +SET 3656303.60 2202228.79 +SET 36564.27 27119.48 +SET 365660.02 253541.58 +SET 3657.36 2712.64 +SET 3657195.36 2948175.36 +SET 3657364.41 3161497.61 +SET 365760.16 119956.48 +SET 3658052.40 2203282.11 +SET 365886.84 233661.12 +SET 3659148.99 2949750.24 +SET 365936.40 220407.21 +SET 3659364.00 2204072.10 +SET 365940.30 208338.69 +SET 365986.94 253768.26 +SET 3660114.79 2752411.58 +SET 3660675.60 2204862.09 +SET 3661102.62 2951325.12 +SET 3661112.80 2205125.42 +SET 3661161.42 3164779.82 +SET 36614.60 20845.58 +SET 3661451.33 2753416.66 +SET 366150.40 253881.60 +SET 3661583.31 3165144.51 +SET 36620.25 27161.00 +SET 3662005.20 3165509.20 +SET 3662427.09 3165873.89 +SET 3662787.87 2754421.74 +SET 3662861.60 2206178.74 +SET 36629.58 27167.92 +SET 366306.56 120135.68 +SET 3663270.87 3166603.27 +SET 366344.58 233953.44 +SET 3663456.14 2754924.28 +SET 366351.70 208572.91 +SET 366361.45 245450.59 +SET 366395.59 254051.61 +SET 3664124.41 2755426.82 +SET 366415.84 120171.52 +SET 3664173.20 2206968.73 +SET 3664536.54 3167697.34 +SET 366456.35 245514.17 +SET 3664792.68 2755929.36 +SET 3665047.60 2207495.39 +SET 366508.74 216322.47 +SET 366525.12 120207.36 +SET 3665380.32 3168426.72 +SET 36657.57 27188.68 +SET 366582.08 228927.12 +SET 3666.69 2719.56 +SET 3666129.22 2756934.44 +SET 3666312.30 2955524.80 +SET 36666.90 27195.60 +SET 366662.80 216413.40 +SET 3666796.40 2208548.71 +SET 366693.60 245673.12 +SET 366741.05 245704.91 +SET 3667465.76 2757939.52 +SET 3667489.77 3170250.17 +SET 36676.23 27202.52 +SET 36678.85 24573.67 +SET 366788.50 245736.70 +SET 3668108.00 2209338.70 +SET 3668265.93 2957099.68 +SET 3668545.20 2209602.03 +SET 3668755.44 3171344.24 +SET 366880.23 275894.46 +SET 3668802.30 2758944.60 +SET 366885.97 254391.63 +SET 366970.92 216595.26 +SET 3669856.80 2210392.02 +SET 3670021.11 3172438.31 +SET 3670219.56 2958674.56 +SET 367025.75 245895.65 +SET 36704.22 27223.28 +SET 36704.43 31728.03 +SET 367049.43 254504.97 +SET 367071.52 120386.56 +SET 3670731.20 2210918.68 +SET 367107.48 234440.64 +SET 367120.65 245959.23 +SET 3671521.98 2959724.48 +SET 3671605.60 2211445.34 +SET 367168.10 245991.02 +SET 3671708.67 3173897.07 +SET 36718.08 12042.24 +SET 3672042.80 2211708.67 +SET 367212.89 254618.31 +SET 3672130.56 3174261.76 +SET 3672143.65 2761457.30 +SET 36722.88 27237.12 +SET 367248.00 221197.20 +SET 36726.30 24605.46 +SET 367290.08 120458.24 +SET 3672974.34 3174991.14 +SET 367310.45 246086.39 +SET 36732.21 27244.04 +SET 3673354.40 2212498.66 +SET 3673396.23 3175355.83 +SET 367347.92 229405.38 +SET 367399.36 120494.08 +SET 3674126.82 2961824.32 +SET 3674240.01 3176085.21 +SET 367452.80 246181.76 +SET 3674661.90 3176449.90 +SET 3674666.00 2213288.65 +SET 3674778.03 2962349.28 +SET 3674816.73 2763467.46 +SET 367500.25 246213.55 +SET 367508.64 120529.92 +SET 36754.85 27639.70 +SET 367547.70 246245.34 +SET 3675485.00 2763970.00 +SET 3675505.68 3177179.28 +SET 367585.90 209275.57 +SET 3675927.57 3177543.97 +SET 3676.02 2726.48 +SET 367603.20 229564.80 +SET 367617.92 120565.76 +SET 367621.54 254901.66 +SET 3676414.80 2214341.97 +SET 367642.60 246308.92 +SET 367685.20 221460.53 +SET 3676852.00 2214605.30 +SET 36769.53 27271.72 +SET 3677.85 2550.15 +SET 367703.27 254958.33 +SET 36773.75 24637.25 +SET 3677489.81 2765477.62 +SET 3677615.13 3179002.73 +SET 3677726.40 2215131.96 +SET 3678163.60 2215395.29 +SET 367858.48 229724.22 +SET 3678600.80 2215658.62 +SET 367870.38 234927.84 +SET 367879.85 246467.87 +SET 3678826.35 2766482.70 +SET 367888.08 318009.68 +SET 3679038.00 2215921.95 +SET 367927.30 246499.66 +SET 367933.65 296602.40 +SET 367948.46 255128.34 +SET 367997.30 209509.79 +SET 3679987.71 2966548.96 +SET 3680146.47 3181190.87 +SET 368022.20 246563.24 +SET 3680349.60 2216711.94 +SET 3680568.36 3181555.56 +SET 36806.85 27299.40 +SET 368069.65 246595.03 +SET 3680831.16 2767990.32 +SET 368113.76 229883.64 +SET 368117.10 246626.82 +SET 36820.34 21732.27 +SET 3682098.40 2217765.26 +SET 368212.00 246690.40 +SET 368216.77 276899.54 +SET 3682255.92 3183014.32 +SET 36825.51 27313.24 +SET 3682535.60 2218028.59 +SET 3682592.55 2968648.80 +SET 3682677.81 3183379.01 +SET 368309.97 318374.37 +SET 3683243.76 2969173.76 +SET 36834.84 27320.16 +SET 3683410.00 2218555.25 +SET 3683521.59 3184108.39 +SET 368357.46 217413.63 +SET 3683894.97 2969698.72 +SET 368401.80 246817.56 +SET 36844.17 27327.08 +SET 3684546.18 2970223.68 +SET 3684721.60 2219345.24 +SET 3685.35 2733.40 +SET 368511.52 217504.56 +SET 3685158.80 2219608.57 +SET 368520.57 255525.03 +SET 3685209.15 3185567.15 +SET 3685596.00 2219871.90 +SET 368591.60 246944.72 +SET 36860.23 25558.17 +SET 368601.44 120888.32 +SET 368602.30 255581.70 +SET 3686052.93 3186296.53 +SET 368614.40 209861.12 +SET 36862.83 27340.92 +SET 368624.32 230202.48 +SET 3686470.40 2220398.56 +SET 36868.65 24700.83 +SET 3686845.59 2772513.18 +SET 3686907.60 2220661.89 +SET 368733.95 247040.09 +SET 3687344.80 2220925.22 +SET 3687513.86 2773015.72 +SET 3687740.49 3187755.29 +SET 3687802.23 2972848.48 +SET 3688162.38 3188119.98 +SET 368819.64 217686.42 +SET 368820.00 120960.00 +SET 368879.60 230361.90 +SET 3689006.16 3188849.36 +SET 368929.28 120995.84 +SET 368938.44 235609.92 +SET 3689518.67 2774523.34 +SET 368971.20 247199.04 +SET 368973.70 217777.35 +SET 3690186.94 2775025.88 +SET 369025.80 210095.34 +SET 369038.56 121031.68 +SET 3690842.40 2223031.86 +SET 36909.48 27375.52 +SET 369092.68 255921.72 +SET 3691058.28 2975473.28 +SET 3691115.61 3190672.81 +SET 369113.55 247294.41 +SET 3691279.60 2223295.19 +SET 3691709.49 2975998.24 +SET 3691716.80 2223558.52 +SET 369174.41 255978.39 +SET 369231.50 210212.45 +SET 3692360.70 2976523.20 +SET 369243.60 235804.80 +SET 369255.90 247389.78 +SET 369256.14 256035.06 +SET 369257.12 121103.36 +SET 3692591.20 2224085.18 +SET 3692803.17 3192131.57 +SET 369281.82 217959.21 +SET 369303.35 247421.57 +SET 369337.87 256091.73 +SET 369350.80 247453.36 +SET 369366.40 121139.20 +SET 36937.47 27396.28 +SET 369390.16 230680.74 +SET 3693902.80 2224875.17 +SET 369435.88 218050.14 +SET 369445.70 247516.94 +SET 3694864.83 2778543.66 +SET 3694912.62 3193955.02 +SET 3694965.54 2978623.04 +SET 3695214.40 2225665.16 +SET 369553.31 277904.62 +SET 3695533.10 2779046.20 +SET 36956.13 27410.12 +SET 3695616.75 2979148.00 +SET 369575.64 319468.44 +SET 369588.05 247612.31 +SET 369589.94 218141.07 +SET 3696178.29 3195049.09 +SET 36963.55 24764.41 +SET 36965.46 27417.04 +SET 3696600.18 3195413.78 +SET 369664.79 256318.41 +SET 3696869.64 2780051.28 +SET 3697.44 2182.32 +SET 3697022.07 3195778.47 +SET 36974.79 27423.96 +SET 3697400.40 2226981.81 +SET 369777.85 247739.47 +SET 3698221.59 2981247.84 +SET 369828.25 256431.75 +SET 3698709.63 3197237.23 +SET 3698712.00 2227771.80 +SET 369872.75 247803.05 +SET 3698874.45 2781558.90 +SET 369909.98 256488.42 +SET 3699524.01 2982297.76 +SET 3699586.40 2228298.46 +SET 369997.53 319833.13 +SET 3699975.30 3198331.30 +SET 3700460.80 2228825.12 +SET 370052.12 218413.86 +SET 370073.44 256601.76 +SET 3700826.43 2983347.68 +SET 3700879.26 2783066.52 +SET 37011.00 24796.20 +SET 370131.36 121390.08 +SET 37015.60 23115.90 +SET 370156.00 231159.00 +SET 370206.18 218504.79 +SET 3702084.75 3200154.75 +SET 3702128.85 2984397.60 +SET 3702215.80 2784071.60 +SET 370236.90 256715.10 +SET 3702506.64 3200519.44 +SET 37026.00 21079.80 +SET 3702646.80 2230141.77 +SET 3702780.06 2984922.56 +SET 3702884.07 2784574.14 +SET 3702928.53 3200884.13 +SET 370299.80 248089.16 +SET 37030.77 27465.48 +SET 370308.40 223040.51 +SET 370311.66 236486.88 +SET 3703350.42 3201248.82 +SET 3703431.27 2985447.52 +SET 370347.25 248120.95 +SET 3703521.20 2230668.43 +SET 3703552.34 2785076.68 +SET 370360.24 218595.72 +SET 370394.70 248152.74 +SET 3703958.40 2230931.76 +SET 3704220.61 2785579.22 +SET 3704395.60 2231195.09 +SET 370442.15 248184.53 +SET 37045.92 12149.76 +SET 370459.20 121497.60 +SET 370464.24 236584.32 +SET 370465.70 210915.11 +SET 370482.09 256885.11 +SET 3704832.80 2231458.42 +SET 3704888.88 2786081.76 +SET 3705037.98 3202707.58 +SET 370514.30 218686.65 +SET 370537.05 248248.11 +SET 3705459.87 3203072.27 +SET 37058.76 27486.24 +SET 3705881.76 3203436.96 +SET 3706036.11 2987547.36 +SET 3706144.40 2232248.41 +SET 3706225.42 2787086.84 +SET 370645.55 256998.45 +SET 370666.56 231477.84 +SET 3706687.32 2988072.32 +SET 370679.40 248343.48 +SET 3707147.43 3204531.03 +SET 3707456.00 2233038.40 +SET 3707569.32 3204895.72 +SET 37076.94 23677.92 +SET 370787.04 121605.12 +SET 3707893.20 2233301.73 +SET 370809.01 257111.79 +SET 370841.31 320562.51 +SET 3708413.10 3205625.10 +SET 3708640.95 2989647.20 +SET 370877.10 211149.33 +SET 370890.74 257168.46 +SET 3709204.80 2234091.72 +SET 3709292.16 2990172.16 +SET 37096.08 27513.92 +SET 370964.10 248534.22 +SET 370972.47 257225.13 +SET 3710235.04 2790102.08 +SET 37105.90 24859.78 +SET 3710522.55 3207448.55 +SET 371059.00 248597.80 +SET 371074.56 236974.08 +SET 371114.88 121712.64 +SET 3711390.80 2235408.37 +SET 371153.90 248661.38 +SET 37118.97 29922.72 +SET 371189.70 299227.20 +SET 3711897.00 2992272.00 +SET 371201.35 248693.17 +SET 371217.66 257395.14 +SET 3712265.20 2235935.03 +SET 371248.80 248724.96 +SET 37126.32 32092.72 +SET 3712632.00 3209272.00 +SET 3712702.40 2236198.36 +SET 37128.46 21914.13 +SET 371288.50 211383.55 +SET 3713053.89 3209636.69 +SET 3713139.60 2236461.69 +SET 3713199.42 2993321.92 +SET 371343.70 248788.54 +SET 371379.72 237168.96 +SET 3713850.63 2993846.88 +SET 3714014.00 2236988.35 +SET 371432.40 231956.10 +SET 371438.60 248852.12 +SET 3714451.20 2237251.68 +SET 3714501.84 2994371.84 +SET 371462.85 257565.15 +SET 3714741.45 3211095.45 +SET 371486.05 248883.91 +SET 3714888.40 2237515.01 +SET 371532.30 237266.40 +SET 371544.58 257621.82 +SET 3715762.80 2238041.67 +SET 371580.95 248947.49 +SET 3716007.12 3212189.52 +SET 371626.31 257678.49 +SET 371628.40 248979.28 +SET 371675.85 249011.07 +SET 371684.88 237363.84 +SET 371687.68 232115.52 +SET 3716917.74 2795127.48 +SET 371699.90 211617.77 +SET 371708.04 257735.16 +SET 371723.30 249042.86 +SET 371746.78 219414.09 +SET 3717511.60 2239094.99 +SET 3717694.68 3213648.28 +SET 371770.56 121927.68 +SET 371789.77 257791.83 +SET 3718116.57 3214012.97 +SET 3718409.10 2997521.60 +SET 371871.50 257848.50 +SET 3718922.55 2796635.10 +SET 371900.84 219505.02 +SET 371905.60 211734.88 +SET 3719260.40 2240148.31 +SET 3719382.24 3215107.04 +SET 371942.96 232274.94 +SET 3719711.52 2998571.52 +SET 37198.71 27590.04 +SET 3719804.13 3215471.73 +SET 371990.04 237558.72 +SET 37200.80 24923.36 +SET 372008.00 249233.60 +SET 3720134.80 2240674.97 +SET 3720226.02 3215836.42 +SET 372054.90 219595.95 +SET 372057.20 224093.83 +SET 3720647.91 3216201.11 +SET 3721009.20 2241201.63 +SET 3721013.94 2999621.44 +SET 372106.98 321656.58 +SET 372142.62 237656.16 +SET 372150.35 249328.97 +SET 372198.42 258075.18 +SET 3722.67 2761.08 +SET 3722758.00 2242254.95 +SET 3722932.17 2799650.34 +SET 3723195.20 2242518.28 +SET 372361.88 258188.52 +SET 3723618.78 3001721.28 +SET 372387.60 249487.92 +SET 3724023.03 3219118.63 +SET 3724069.60 2243044.94 +SET 3724268.71 2800655.42 +SET 372447.78 237851.04 +SET 372453.52 232593.78 +SET 37248.25 24955.15 +SET 3724866.81 3219848.01 +SET 372528.87 322021.27 +SET 3725288.70 3220212.70 +SET 37254.69 27631.56 +SET 3725605.25 2801660.50 +SET 372600.36 237948.48 +SET 372624.85 249646.87 +SET 3726692.80 2244624.92 +SET 372672.30 249678.66 +SET 372688.80 258415.20 +SET 3726941.79 2802665.58 +SET 372719.75 249710.45 +SET 37273.35 27645.40 +SET 3727398.15 3222036.15 +SET 3727526.04 3004871.04 +SET 3727567.20 2245151.58 +SET 372767.20 249742.24 +SET 3727820.04 3222400.84 +SET 3728241.93 3222765.53 +SET 3728278.33 2803670.66 +SET 372852.26 258528.54 +SET 372862.10 249805.82 +SET 3728663.82 3223130.22 +SET 3728946.60 2804173.20 +SET 372931.60 224620.49 +SET 3729479.67 3006445.92 +SET 37295.70 24986.94 +SET 372957.00 249869.40 +SET 372964.08 232912.62 +SET 372979.26 220141.53 +SET 373004.45 249901.19 +SET 37301.34 27666.16 +SET 3730190.40 2246731.56 +SET 3730283.14 2805178.28 +SET 3730351.38 3224588.98 +SET 3730627.60 2246994.89 +SET 3730782.09 3007495.84 +SET 373139.80 212437.54 +SET 373146.80 249996.56 +SET 3731939.20 2247784.88 +SET 373194.25 250028.35 +SET 3732.00 2768.00 +SET 373210.68 238338.24 +SET 373219.36 233072.04 +SET 3732376.40 2248048.21 +SET 3732735.72 3009070.72 +SET 3732813.60 2248311.54 +SET 3732882.72 3226777.12 +SET 37329.33 27686.92 +SET 3732956.22 2807188.44 +SET 373300.48 122429.44 +SET 373345.50 212554.65 +SET 3733624.49 2807690.98 +SET 373363.26 238435.68 +SET 3733688.00 2248838.20 +SET 373372.65 322750.65 +SET 373409.76 122465.28 +SET 3734148.39 3227871.19 +SET 373424.37 258925.23 +SET 3734292.76 2808193.52 +SET 37343.15 25018.73 +SET 3734689.35 3010645.60 +SET 373474.64 233231.46 +SET 3735414.06 3228965.26 +SET 373551.20 212671.76 +SET 3735874.00 2250154.85 +SET 373595.50 220505.25 +SET 3735991.77 3011695.52 +SET 373621.30 250314.46 +SET 3736311.20 2250418.18 +SET 37366.65 27714.60 +SET 373716.20 250378.04 +SET 373729.92 233390.88 +SET 37373.76 12257.28 +SET 373749.56 220596.18 +SET 37375.98 27721.52 +SET 373751.29 259151.91 +SET 373763.65 250409.83 +SET 373794.54 323115.34 +SET 3737945.40 3231153.40 +SET 3738060.00 2251471.50 +SET 3738367.29 3231518.09 +SET 373846.88 122608.64 +SET 37385.31 27728.44 +SET 373858.55 250473.41 +SET 373914.75 259265.25 +SET 3739211.07 3232247.47 +SET 3739632.96 3232612.16 +SET 373973.58 238825.44 +SET 3739808.80 2252524.82 +SET 373996.48 259321.92 +SET 374000.90 250568.78 +SET 3740054.85 3232976.85 +SET 3740246.00 2252788.15 +SET 37403.97 27742.28 +SET 374065.44 122680.32 +SET 374078.21 259378.59 +SET 3740898.63 3233706.23 +SET 374095.80 250632.36 +SET 3741.33 2774.92 +SET 3741320.52 3234070.92 +SET 374143.25 250664.15 +SET 3741557.60 2253578.14 +SET 374168.30 213023.09 +SET 374174.72 122716.16 +SET 374211.74 220868.97 +SET 3742164.30 3234800.30 +SET 3742312.00 2814224.00 +SET 374238.15 250727.73 +SET 374240.48 233709.72 +SET 374243.20 225410.48 +SET 3742432.00 2254104.80 +SET 3742503.87 3016945.12 +SET 374285.60 250759.52 +SET 3742869.20 2254368.13 +SET 3742980.27 2814726.54 +SET 3743008.08 3235529.68 +SET 374323.40 259548.60 +SET 374333.05 250791.31 +SET 3743429.97 3235894.37 +SET 37437.40 21314.02 +SET 374374.00 213140.20 +SET 3743851.86 3236259.06 +SET 374393.28 122787.84 +SET 374405.13 259605.27 +SET 37441.29 27769.96 +SET 3744273.75 3236623.75 +SET 3744695.64 3236988.44 +SET 374486.86 259661.94 +SET 374495.76 233869.14 +SET 374502.56 122823.68 +SET 3745117.53 3237353.13 +SET 3745539.42 3237717.82 +SET 374568.59 259718.61 +SET 374579.70 213257.31 +SET 3745961.31 3238082.51 +SET 374617.75 250982.05 +SET 374638.32 323844.72 +SET 3746383.20 3238447.20 +SET 3746804.00 2256738.10 +SET 37469.28 27790.72 +SET 374712.65 251045.63 +SET 3747226.98 3239176.58 +SET 3747648.87 3239541.27 +SET 3747658.16 2818244.32 +SET 374807.55 251109.21 +SET 374813.78 259888.62 +SET 3748326.43 2818746.86 +SET 3748492.65 3240270.65 +SET 374855.00 251141.00 +SET 3748552.80 2257791.42 +SET 374889.06 239410.08 +SET 374899.47 281924.94 +SET 3749015.97 3022194.72 +SET 3750.66 2781.84 +SET 3750318.39 3023244.64 +SET 375041.64 239507.52 +SET 375058.97 260058.63 +SET 3750738.80 2259108.07 +SET 3750969.60 3023769.60 +SET 3751023.99 3242458.79 +SET 375117.60 225937.14 +SET 3751176.00 2259371.40 +SET 375136.10 221414.55 +SET 375158.24 123038.72 +SET 3751867.77 3243188.17 +SET 3752272.02 3024819.52 +SET 3752487.60 2260161.39 +SET 37525.26 27832.24 +SET 37526.16 23434.74 +SET 375267.52 123074.56 +SET 3752711.55 3243917.55 +SET 375282.05 251427.11 +SET 3752923.23 3025344.48 +SET 375329.50 251458.90 +SET 3753362.00 2260688.05 +SET 37534.59 27839.16 +SET 375346.80 239702.40 +SET 3753977.22 3245011.62 +SET 3754236.40 2261214.71 +SET 375424.40 251522.48 +SET 375482.10 324574.10 +SET 3754821.00 3245741.00 +SET 375486.08 123146.24 +SET 3754876.86 3026919.36 +SET 3755528.07 3027444.32 +SET 375554.80 226200.47 +SET 375567.74 282427.48 +SET 3755677.40 2824274.80 +SET 375595.36 123182.08 +SET 375608.20 213842.86 +SET 3756086.67 3246835.07 +SET 3756179.28 3027969.28 +SET 37562.58 27859.92 +SET 375631.08 260455.32 +SET 3756345.67 2824777.34 +SET 3756422.40 2262531.36 +SET 3756859.60 2262794.69 +SET 3756930.45 3247564.45 +SET 375709.10 251713.22 +SET 3757296.80 2263058.02 +SET 3757734.00 2263321.35 +SET 3757774.23 3248293.83 +SET 375804.54 239994.72 +SET 3758196.12 3248658.52 +SET 375851.45 251808.59 +SET 375876.27 260625.33 +SET 3759.58 2606.82 +SET 3759018.75 2826787.50 +SET 375903.99 324938.79 +SET 3759039.90 3249387.90 +SET 3759045.60 2264111.34 +SET 37592.32 12328.96 +SET 3759482.80 2264374.67 +SET 375957.12 240092.16 +SET 3759687.02 2827290.04 +SET 3759883.68 3250117.28 +SET 37599.20 22646.38 +SET 375993.80 251903.96 +SET 3760086.54 3031119.04 +SET 376019.60 214077.08 +SET 376039.73 260738.67 +SET 376041.25 251935.75 +SET 3760794.40 2265164.66 +SET 376088.70 251967.54 +SET 376109.70 240189.60 +SET 376121.46 260795.34 +SET 3761231.60 2265427.99 +SET 376136.15 251999.33 +SET 376141.76 123361.28 +SET 3761691.83 2828797.66 +SET 37618.56 27901.44 +SET 376203.19 260852.01 +SET 3762040.17 3032693.92 +SET 376225.30 214194.19 +SET 3762543.20 2266217.98 +SET 376262.28 240287.04 +SET 376278.50 252094.70 +SET 3763258.80 3253034.80 +SET 3763342.59 3033743.84 +SET 376368.58 222141.99 +SET 37637.22 27915.28 +SET 376373.40 252158.28 +SET 3763854.80 2267007.97 +SET 37643.10 21431.13 +SET 376431.00 214311.30 +SET 376448.38 261022.02 +SET 37646.55 27922.20 +SET 376468.30 252221.86 +SET 3764946.36 3254493.56 +SET 376522.64 222232.92 +SET 376563.20 252285.44 +SET 376567.44 240481.92 +SET 3765790.14 3255222.94 +SET 3766212.03 3255587.63 +SET 3766478.00 2268587.95 +SET 37665.21 27936.04 +SET 3766598.64 3036368.64 +SET 3767055.81 3256317.01 +SET 3767477.70 3256681.70 +SET 376753.00 252412.60 +SET 3767706.26 2833320.52 +SET 3767789.60 2269377.94 +SET 3767899.59 3257046.39 +SET 3767901.06 3037418.56 +SET 3768226.80 2269641.27 +SET 3768374.53 2833823.06 +SET 37687.26 24067.68 +SET 3768743.37 3257775.77 +SET 3769.32 2795.68 +SET 376904.28 283432.56 +SET 3769042.80 2834325.60 +SET 3769101.20 2270167.93 +SET 37693.20 27956.80 +SET 376938.76 261362.04 +SET 3769538.40 2270431.26 +SET 3769854.69 3038993.44 +SET 376990.25 252571.55 +SET 3769975.60 2270694.59 +SET 377016.00 123648.00 +SET 377020.49 261418.71 +SET 377037.70 252603.34 +SET 377050.59 303951.84 +SET 3770505.90 3039518.40 +SET 377085.15 252635.13 +SET 3771047.61 2835833.22 +SET 3771157.11 3040043.36 +SET 377125.28 123683.84 +SET 377138.88 222596.64 +SET 3771724.40 2271747.91 +SET 3772118.49 3260693.29 +SET 3772161.60 2272011.24 +SET 377227.50 252730.50 +SET 377253.80 214779.74 +SET 377265.68 261588.72 +SET 377292.94 222687.57 +SET 3773052.42 2837340.84 +SET 3773110.74 3041618.24 +SET 377330.34 240969.12 +SET 377347.41 261645.39 +SET 3773806.05 3262152.05 +SET 377417.30 252857.66 +SET 3774388.96 2838345.92 +SET 37744.70 22277.85 +SET 377459.50 214896.85 +SET 3774784.80 2273591.22 +SET 37749.18 27998.32 +SET 3775071.72 3263246.12 +SET 377510.87 261758.73 +SET 377512.20 252921.24 +SET 3775493.61 3263610.81 +SET 377559.12 235782.18 +SET 3775659.20 2274117.88 +SET 3775715.58 3043718.08 +SET 37759.26 26181.54 +SET 377591.55 326397.55 +SET 3776096.40 2274381.21 +SET 3776337.39 3264340.19 +SET 3776533.60 2274644.54 +SET 37767.84 28012.16 +SET 3776759.28 3264704.88 +SET 37770.20 25304.84 +SET 377701.80 304476.80 +SET 3777018.00 3044768.00 +SET 3777062.04 2840356.08 +SET 377749.45 253080.19 +SET 3777669.21 3045292.96 +SET 3777730.31 2840858.62 +SET 377796.90 253111.98 +SET 3778.65 2802.60 +SET 37781.44 23594.16 +SET 377837.79 261985.41 +SET 377844.35 253143.77 +SET 37786.50 28026.00 +SET 3778868.73 3266528.33 +SET 377890.24 123934.72 +SET 3779066.85 2841863.70 +SET 377909.18 223051.29 +SET 377919.52 262042.08 +SET 377939.25 253207.35 +SET 3779594.00 2276487.85 +SET 3779735.12 2842366.24 +SET 377986.70 253239.14 +SET 378013.44 326762.24 +SET 3780274.05 3047392.80 +SET 3780403.39 2842868.78 +SET 3780556.29 3267987.09 +SET 378063.24 223142.22 +SET 378076.60 215248.18 +SET 3781071.66 2843371.32 +SET 378176.50 253366.30 +SET 378178.00 227780.45 +SET 3782217.20 2278067.83 +SET 37823.82 28053.68 +SET 3782408.20 2844376.40 +SET 378246.44 262268.76 +SET 3782654.40 2278331.16 +SET 3782665.74 3269810.54 +SET 3783087.63 3270175.23 +SET 3783091.60 2278594.49 +SET 378328.17 262325.43 +SET 37833.15 28060.60 +SET 3783530.10 3050017.60 +SET 378366.30 253493.46 +SET 3783966.00 2279121.15 +SET 37842.48 28067.52 +SET 378435.33 327126.93 +SET 3784353.30 3271269.30 +SET 378436.64 124113.92 +SET 378461.20 253557.04 +SET 3784775.19 3271633.99 +SET 378491.63 262438.77 +SET 3785081.28 2846386.56 +SET 378545.92 124149.76 +SET 378580.24 236419.86 +SET 3786040.86 3272728.06 +SET 378615.20 228043.78 +SET 378651.00 253684.20 +SET 378655.09 262552.11 +SET 378655.20 124185.60 +SET 378698.45 253715.99 +SET 3787026.40 2280964.46 +SET 378745.90 253747.78 +SET 3787754.36 2848396.72 +SET 378818.55 262665.45 +SET 378833.54 223596.87 +SET 378840.80 253811.36 +SET 3788572.20 3274916.20 +SET 3788739.78 3054217.28 +SET 3788775.20 2282017.78 +SET 378888.25 253843.15 +SET 3788994.09 3275280.89 +SET 378909.09 284940.18 +SET 378983.15 253906.73 +SET 3789837.87 3276010.27 +SET 3790042.20 3055267.20 +SET 3790427.44 2850406.88 +SET 3790524.00 2283071.10 +SET 3790693.41 3055792.16 +SET 379078.05 253970.31 +SET 379092.32 124328.96 +SET 3791095.71 2850909.42 +SET 3791398.40 2283597.76 +SET 379145.47 262892.13 +SET 3791763.98 2851411.96 +SET 379201.60 124364.80 +SET 37926.45 28129.80 +SET 3792791.10 3278563.10 +SET 379295.72 223869.66 +SET 379310.80 215950.84 +SET 3793100.52 2852417.04 +SET 3793147.20 2284651.08 +SET 379315.30 254129.26 +SET 3793212.99 3278927.79 +SET 379346.08 236898.12 +SET 3793584.40 2284914.41 +SET 3793949.46 3058416.96 +SET 379410.20 254192.84 +SET 3794600.67 3058941.92 +SET 379472.39 263118.81 +SET 379489.60 228570.44 +SET 3794896.00 2285704.40 +SET 3794900.55 3280386.55 +SET 379516.50 216067.95 +SET 3795251.88 3059466.88 +SET 379552.55 254288.21 +SET 3795770.40 2286231.06 +SET 3796.00 2543.20 +SET 379619.04 242430.72 +SET 37963.77 28157.48 +SET 379635.85 263232.15 +SET 379638.72 124508.16 +SET 379647.45 254351.79 +SET 3796644.80 2286757.72 +SET 379694.90 254383.58 +SET 3797110.14 2855432.28 +SET 379722.20 216185.06 +SET 379757.90 224142.45 +SET 3797856.72 3061566.72 +SET 3797956.40 2287547.71 +SET 37982.43 28171.32 +SET 379837.25 254478.95 +SET 379857.28 124579.84 +SET 379884.70 254510.74 +SET 3799159.14 3062616.64 +SET 37992.42 24262.56 +SET 379926.80 228833.77 +SET 3799705.20 2288601.03 +SET 3799963.23 3284762.83 +SET 3800142.40 2288864.36 +SET 380027.05 254606.11 +SET 380075.84 124651.52 +SET 380076.78 242723.04 +SET 3800807.01 3285492.21 +SET 38010.42 28192.08 +SET 380111.92 237376.38 +SET 380121.95 254669.69 +SET 380122.89 328585.69 +SET 3801454.00 2289654.35 +SET 3801650.79 3286221.59 +SET 380229.36 242820.48 +SET 3802415.19 3065241.44 +SET 3802765.60 2290444.34 +SET 380289.69 263685.51 +SET 38029.08 28205.92 +SET 380294.40 124723.20 +SET 380311.75 254796.85 +SET 380339.30 216536.39 +SET 38036.40 22909.71 +SET 38036.72 23753.58 +SET 380371.42 263742.18 +SET 3803717.61 3066291.36 +SET 380374.14 224506.17 +SET 3803760.24 3288045.04 +SET 3803792.84 2860457.68 +SET 380403.68 124759.04 +SET 380454.10 254892.22 +SET 38047.74 28219.76 +SET 380501.55 254924.01 +SET 3805020.03 3067341.28 +SET 380528.20 224597.10 +SET 3805388.80 2292024.32 +SET 3805447.80 3289503.80 +SET 380549.00 254955.80 +SET 3805671.24 3067866.24 +SET 3805869.69 3289868.49 +SET 380616.61 263912.19 +SET 380622.24 124830.72 +SET 3806291.58 3290233.18 +SET 38066.40 28233.60 +SET 380691.35 255051.17 +SET 380698.34 263968.86 +SET 3807134.19 2862970.38 +SET 3807137.60 2293077.64 +SET 380731.52 124866.56 +SET 38075.73 28240.52 +SET 3807557.25 3291327.25 +SET 380780.07 264025.53 +SET 3807979.14 3291691.94 +SET 380833.70 255146.54 +SET 3808449.20 2293867.63 +SET 38086.18 26408.22 +SET 380877.76 237854.64 +SET 3808927.29 3070491.04 +SET 3809139.00 2864478.00 +SET 380956.40 216887.72 +SET 3809666.70 3293150.70 +SET 380976.05 255241.91 +SET 3809760.80 2294657.62 +SET 3809807.27 2864980.54 +SET 380992.26 243307.68 +SET 381025.26 264195.54 +SET 381059.36 124974.08 +SET 3810880.92 3072065.92 +SET 3810932.37 3294244.77 +SET 3811143.81 2865985.62 +SET 381118.40 255337.28 +SET 38113.05 28268.20 +SET 381144.44 224960.82 +SET 3811532.13 3072590.88 +SET 381162.10 217004.83 +SET 3811946.80 2295974.27 +SET 381213.30 255400.86 +SET 3812183.34 3073115.84 +SET 381260.75 255432.65 +SET 381270.45 264365.55 +SET 381277.92 125045.76 +SET 3812821.20 2296500.93 +SET 3812834.55 3073640.80 +SET 3813463.71 3296432.91 +SET 3813485.76 3074165.76 +SET 381355.65 255496.23 +SET 3813816.89 2867995.78 +SET 3813885.60 3296797.60 +SET 3814.50 2436.00 +SET 3814307.49 3297162.29 +SET 38145.00 24360.00 +SET 381450.55 255559.81 +SET 3814788.18 3075215.68 +SET 38149.80 25559.16 +SET 3815.97 2830.28 +SET 38150.37 28295.88 +SET 381545.45 255623.39 +SET 3815573.16 3298256.36 +SET 3815821.70 2869503.40 +SET 3815881.60 2298344.24 +SET 38159.70 28302.80 +SET 381597.37 264592.23 +SET 3815995.05 3298621.05 +SET 3816318.80 2298607.57 +SET 381640.35 255686.97 +SET 38167.91 26464.89 +SET 3816756.00 2298870.90 +SET 381679.10 264648.90 +SET 3816838.83 3299350.43 +SET 3817193.20 2299134.23 +SET 381735.25 255750.55 +SET 3817393.02 3077315.52 +SET 381755.16 243794.88 +SET 381760.68 225324.54 +SET 381760.83 264705.57 +SET 3818044.23 3077840.48 +SET 381810.45 330044.45 +SET 381877.60 255845.92 +SET 381898.88 238492.32 +SET 3819163.05 2872016.10 +SET 381924.29 264818.91 +SET 381925.05 255877.71 +SET 3819346.65 3078890.40 +SET 3819370.17 3301538.57 +SET 3819379.20 2300450.88 +SET 38197.02 28330.48 +SET 38197.25 25590.95 +SET 3819792.06 3301903.26 +SET 3819831.32 2872518.64 +SET 3820213.95 3302267.95 +SET 3820253.60 2300977.54 +SET 382042.88 125296.64 +SET 38206.35 28337.40 +SET 38206.88 22550.64 +SET 3820635.84 3302632.64 +SET 3820649.07 3079940.32 +SET 382068.80 225506.40 +SET 3821057.73 3302997.33 +SET 382112.80 230150.42 +SET 3821167.86 2873523.72 +SET 3821479.62 3303362.02 +SET 38215.68 28344.32 +SET 382190.60 217590.38 +SET 3821901.51 3303726.71 +SET 3821951.49 3080990.24 +SET 3822002.40 2302030.86 +SET 382209.75 256068.45 +SET 3822504.40 2874528.80 +SET 382251.21 265045.59 +SET 382257.20 256100.24 +SET 382260.27 308151.52 +SET 3822602.70 3081515.20 +SET 3822745.29 3304456.09 +SET 382304.65 256132.03 +SET 3823172.67 2875031.34 +SET 382365.48 244184.64 +SET 3823840.94 2875533.88 +SET 3823905.12 3082565.12 +SET 382396.30 217707.49 +SET 38243.67 28365.08 +SET 3824432.85 3305914.85 +SET 382480.00 125440.00 +SET 3824854.74 3306279.54 +SET 38249.64 26521.56 +SET 382494.45 256259.19 +SET 3825.30 2837.20 +SET 3825062.80 2303874.17 +SET 382518.06 244282.08 +SET 3825207.54 3083615.04 +SET 3825276.63 3306644.23 +SET 382602.00 217824.60 +SET 38262.33 28378.92 +SET 382636.80 256354.56 +SET 3826374.40 2304664.16 +SET 3826542.30 3307738.30 +SET 3826964.19 3308102.99 +SET 38271.66 28385.84 +SET 3827182.29 2878046.58 +SET 382741.59 265385.61 +SET 38280.99 28392.76 +SET 382807.70 217941.71 +SET 382823.22 244476.96 +SET 382823.32 265442.28 +SET 3828518.83 2879051.66 +SET 3829.20 2391.30 +SET 38290.32 28399.68 +SET 382911.48 308676.48 +SET 382917.12 125583.36 +SET 382920.00 239130.00 +SET 382921.50 256545.30 +SET 3829495.53 3310291.13 +SET 383026.40 125619.20 +SET 38308.98 28413.52 +SET 3831068.43 3088339.68 +SET 383147.22 226142.91 +SET 383150.24 265668.96 +SET 383158.75 256704.25 +SET 3831620.80 2307824.12 +SET 3831860.18 2881564.36 +SET 3832058.00 2308087.45 +SET 383206.20 256736.04 +SET 383219.10 218175.93 +SET 383231.97 265725.63 +SET 3832448.76 3312843.96 +SET 3832495.20 2308350.78 +SET 383253.65 256767.83 +SET 3833022.06 3089914.56 +SET 383313.70 265782.30 +SET 3833196.72 2882569.44 +SET 3833369.60 2308877.44 +SET 383348.55 256831.41 +SET 3833806.80 2309140.77 +SET 3833864.99 2883071.98 +SET 383395.43 265838.97 +SET 3834.63 2844.12 +SET 3834136.32 3314302.72 +SET 383430.56 239448.84 +SET 383433.54 244866.72 +SET 383463.52 125762.56 +SET 3834681.20 2309667.43 +SET 383477.16 265895.64 +SET 3835401.99 3315396.79 +SET 38357.28 12579.84 +SET 383586.98 288457.96 +SET 3835869.80 2884579.60 +SET 3835992.80 2310457.42 +SET 383609.40 226415.70 +SET 383633.25 257022.15 +SET 3836430.00 2310720.75 +SET 3836667.66 3316490.86 +SET 383685.84 239608.26 +SET 3837089.55 3316855.55 +SET 383722.35 266065.65 +SET 3837304.40 2311247.41 +SET 383738.70 245061.60 +SET 3837580.53 3093589.28 +SET 383763.46 226506.63 +SET 3837741.60 2311510.74 +SET 3837933.33 3317584.93 +SET 383804.08 266122.32 +SET 3838355.22 3317949.62 +SET 383861.60 231203.74 +SET 383870.50 257181.10 +SET 3838777.11 3318314.31 +SET 383900.64 125905.92 +SET 3839053.20 2312300.73 +SET 38391.99 33186.79 +SET 383919.90 331867.90 +SET 3839199.00 3318679.00 +SET 38392.95 28475.80 +SET 383941.12 239767.68 +SET 3839534.16 3095164.16 +SET 383965.40 257244.68 +SET 3840042.78 3319408.38 +SET 384012.85 257276.47 +SET 38402.28 28482.72 +SET 3840547.69 2888097.38 +SET 384071.58 226688.49 +SET 3840802.00 2313354.05 +SET 384107.75 257340.05 +SET 38411.61 28489.64 +SET 3841215.96 2888599.92 +SET 384131.00 266349.00 +SET 3841676.40 2313880.71 +SET 384196.44 245353.92 +SET 38420.94 28496.56 +SET 3842113.60 2314144.04 +SET 384213.90 309726.40 +SET 3842139.00 3097264.00 +SET 384225.64 226779.42 +SET 384250.10 257435.42 +SET 3842552.50 2889605.00 +SET 3842790.21 3097788.96 +SET 384294.46 266462.34 +SET 3843.45 2574.99 +SET 384337.76 126049.28 +SET 384341.79 332232.59 +SET 3843417.90 3322325.90 +SET 384345.00 257499.00 +SET 384349.02 245451.36 +SET 384376.19 266519.01 +SET 3843862.40 2315197.36 +SET 384451.68 240086.52 +SET 38448.93 28517.32 +SET 384487.35 257594.37 +SET 3845105.46 3323784.66 +SET 3845225.58 2891615.16 +SET 384533.76 226961.28 +SET 3845395.05 3099888.80 +SET 384582.25 257657.95 +SET 3846046.26 3100413.76 +SET 3846485.60 2316777.34 +SET 384654.18 245646.24 +SET 384659.00 218995.70 +SET 384677.15 257721.53 +SET 3846793.02 3325243.42 +SET 384687.82 227052.21 +SET 384706.96 240245.94 +SET 3847230.39 2893122.78 +SET 38476.92 28538.08 +SET 384774.88 126192.64 +SET 384784.84 266802.36 +SET 3847898.66 2893625.32 +SET 3847999.89 3101988.64 +SET 384806.76 245743.68 +SET 38481.95 25781.69 +SET 38486.25 28545.00 +SET 384865.11 310251.36 +SET 384866.95 257848.69 +SET 3848671.60 2318093.99 +SET 3849108.80 2318357.32 +SET 3849324.36 3327431.56 +SET 384959.34 245841.12 +SET 384961.85 257912.27 +SET 3849903.47 2895132.94 +SET 384995.94 227234.07 +SET 3849983.20 2318883.98 +SET 3850168.14 3328160.94 +SET 38504.91 28558.84 +SET 3850571.74 2895635.48 +SET 3851011.92 3328890.32 +SET 385111.92 245938.56 +SET 3851433.81 3329255.01 +SET 385150.00 227325.00 +SET 385151.65 258039.43 +SET 385185.57 332961.97 +SET 385193.49 267085.71 +SET 385199.10 258071.22 +SET 385212.00 126336.00 +SET 385217.52 240564.78 +SET 385264.50 246036.00 +SET 3852699.48 3330349.08 +SET 3853.29 2857.96 +SET 385304.06 227415.93 +SET 3853209.57 3106188.32 +SET 3853244.82 2897645.64 +SET 385356.95 267199.05 +SET 385388.90 258198.38 +SET 3853913.09 2898148.18 +SET 385430.56 126407.68 +SET 3854355.20 2321517.28 +SET 3854387.04 3331807.84 +SET 3854511.99 3107238.24 +SET 3854581.36 2898650.72 +SET 385483.80 258261.96 +SET 3855163.20 3107763.20 +SET 3855229.60 2322043.94 +SET 3855230.82 3332537.22 +SET 3855652.71 3332901.91 +SET 3855666.80 2322307.27 +SET 385569.66 246230.88 +SET 38560.89 28600.36 +SET 385610.40 232257.06 +SET 3856541.20 2322833.93 +SET 3856586.17 2900158.34 +SET 385673.60 258389.12 +SET 385687.50 219581.25 +SET 385722.24 246328.32 +SET 3857340.27 3334360.67 +SET 3857415.60 2323360.59 +SET 385758.40 126515.20 +SET 38576.56 26748.24 +SET 3857762.16 3334725.36 +SET 3857852.80 2323623.92 +SET 385847.33 267539.07 +SET 385867.68 126551.04 +SET 385874.82 246425.76 +SET 38588.88 28621.12 +SET 385893.20 219698.36 +SET 385910.85 258548.07 +SET 385920.30 227779.65 +SET 3859449.72 3336184.12 +SET 3859601.60 2324677.24 +SET 3859721.67 3111437.92 +SET 385976.96 126586.88 +SET 38598.21 28628.04 +SET 386005.75 258611.65 +SET 386027.40 246523.20 +SET 386029.35 333691.35 +SET 3860293.50 3336913.50 +SET 3860476.00 2325203.90 +SET 3860913.20 2325467.23 +SET 386092.52 267709.08 +SET 386100.65 258675.23 +SET 3861024.09 3112487.84 +SET 3861350.40 2325730.56 +SET 3861559.17 3338007.57 +SET 38616.87 28641.88 +SET 3861675.30 3113012.80 +SET 3861981.06 3338372.26 +SET 3862326.51 3113537.76 +SET 3862402.95 3338736.95 +SET 386255.98 267822.42 +SET 386260.06 290468.12 +SET 3862600.60 2904681.20 +SET 3862824.84 3339101.64 +SET 386304.60 219932.58 +SET 386304.80 126694.40 +SET 3863099.20 2326783.88 +SET 3863268.87 2905183.74 +SET 3863536.40 2327047.21 +SET 3863668.62 3339831.02 +SET 386385.35 258865.97 +SET 3863937.14 2905686.28 +SET 3863973.60 2327310.54 +SET 386419.44 267935.76 +SET 386451.24 334056.04 +SET 3864848.00 2327837.20 +SET 386536.54 228143.37 +SET 3865582.56 3116162.56 +SET 3865778.07 3341654.47 +SET 386582.90 268049.10 +SET 386622.60 259024.92 +SET 38663.52 28676.48 +SET 386664.63 268105.77 +SET 386670.05 259056.71 +SET 3866884.98 3117212.48 +SET 386690.60 228234.30 +SET 386716.00 220166.80 +SET 3867278.49 2908198.98 +SET 3867465.63 3343113.23 +SET 3867536.19 3117737.44 +SET 386764.95 259120.29 +SET 3867887.52 3343477.92 +SET 386790.30 247010.40 +SET 3867908.40 2329680.51 +SET 38682.18 28690.32 +SET 386844.66 228325.23 +SET 386859.85 259183.87 +SET 3868615.03 2909204.06 +SET 38691.51 28697.24 +SET 386922.00 233047.05 +SET 3869283.30 2909706.60 +SET 3869489.82 3119312.32 +SET 386960.48 126909.44 +SET 386991.55 268332.45 +SET 3869951.57 2910209.14 +SET 3869996.97 3345301.37 +SET 3870094.40 2330997.16 +SET 3870792.24 3120362.24 +SET 387095.46 247205.28 +SET 387097.10 259342.82 +SET 3871262.64 3346395.44 +SET 387144.55 259374.61 +SET 387155.01 268445.79 +SET 387179.04 126981.12 +SET 38719.20 25940.64 +SET 3871956.38 2911716.76 +SET 3872106.42 3347124.82 +SET 387239.45 259438.19 +SET 387248.04 247302.72 +SET 387286.90 259469.98 +SET 3873154.80 2332840.47 +SET 387359.20 233310.38 +SET 3873592.00 2333103.80 +SET 3873793.98 3348583.58 +SET 38738.16 28731.84 +SET 387400.62 247400.16 +SET 3874048.29 3122987.04 +SET 3874215.87 3348948.27 +SET 387429.25 259565.35 +SET 3874637.76 3349312.96 +SET 387469.95 312351.20 +SET 3874699.50 3123512.00 +SET 387476.70 259597.14 +SET 387481.93 268672.47 +SET 387524.15 259628.93 +SET 3875481.54 3350042.34 +SET 38755.32 24749.76 +SET 387553.20 247497.60 +SET 38756.82 28745.68 +SET 3875903.43 3350407.03 +SET 387614.96 228779.88 +SET 387616.16 127124.48 +SET 387645.39 268785.81 +SET 3876634.27 2915234.54 +SET 387666.50 259724.30 +SET 3877089.60 2335210.44 +SET 387713.95 259756.09 +SET 387716.91 335150.11 +SET 387725.44 127160.32 +SET 387727.12 268842.48 +SET 3877304.34 3125611.84 +SET 38775.48 28759.52 +SET 387769.02 228870.81 +SET 387770.32 242158.98 +SET 387796.40 233573.71 +SET 3877970.81 2916239.62 +SET 3878012.88 3352230.48 +SET 387808.85 268899.15 +SET 387834.72 127196.16 +SET 3878838.40 2336263.76 +SET 3878856.66 3352959.86 +SET 387923.08 228961.74 +SET 3879278.55 3353324.55 +SET 38794.14 28773.36 +SET 3879700.44 3353689.24 +SET 387972.31 269012.49 +SET 3879975.62 2917747.24 +SET 387998.65 259946.83 +SET 3880122.33 3354053.93 +SET 388054.04 269069.16 +SET 3880544.22 3354418.62 +SET 3880560.39 3128236.64 +SET 3880643.89 2918249.78 +SET 3880966.11 3354783.31 +SET 3881024.40 2337580.41 +SET 38813.88 33551.48 +SET 3881312.16 2918752.32 +SET 3881461.60 2337843.74 +SET 388233.60 233837.04 +SET 3882514.02 3129811.52 +SET 388264.87 291975.74 +SET 3882653.67 3356242.07 +SET 388271.84 127339.52 +SET 3882773.20 2338633.73 +SET 388280.88 242477.82 +SET 388283.35 260137.57 +SET 388330.80 260169.36 +SET 3883497.45 3356971.45 +SET 3883647.60 2339160.39 +SET 388378.25 260201.15 +SET 3883919.34 3357336.14 +SET 3883985.24 2920762.48 +SET 3884084.80 2339423.72 +SET 388425.70 260232.94 +SET 388473.15 260264.73 +SET 3884959.20 2339950.38 +SET 3885185.01 3358430.21 +SET 388520.60 260296.52 +SET 3885321.78 2921767.56 +SET 3885606.90 3358794.90 +SET 388567.30 221220.79 +SET 388615.50 260360.10 +SET 388621.26 248179.68 +SET 3886270.80 2340740.37 +SET 3886421.28 3132961.28 +SET 3886450.68 3359524.28 +SET 3886658.32 2922772.64 +SET 3886708.00 2341003.70 +SET 3886872.57 3359888.97 +SET 388693.38 229416.39 +SET 3887072.49 3133486.24 +SET 388708.96 127482.88 +SET 3887145.20 2341267.03 +SET 3887326.59 2923275.18 +SET 3887582.40 2341530.36 +SET 38877.30 22133.79 +SET 38878.11 28835.64 +SET 3888138.24 3360983.04 +SET 3888663.13 2924280.26 +SET 3888982.02 3361712.42 +SET 3889026.12 3135061.12 +SET 388926.42 248374.56 +SET 3889331.40 2924782.80 +SET 3889677.33 3135586.08 +SET 3889768.40 2342847.01 +SET 388978.70 221455.01 +SET 3889999.67 2925285.34 +SET 3890205.60 2343110.34 +SET 3890328.54 3136111.04 +SET 389034.80 269749.20 +SET 389036.80 127590.40 +SET 389042.55 260646.21 +SET 3890669.58 3363171.18 +SET 38907.90 24847.20 +SET 38909.00 26067.80 +SET 389090.00 260678.00 +SET 389108.00 234363.70 +SET 3891091.47 3363535.87 +SET 389155.56 229689.18 +SET 3891630.96 3137160.96 +SET 389184.40 221572.12 +SET 3892004.48 2926792.96 +SET 389255.36 127662.08 +SET 3892672.75 2927295.50 +SET 3892779.03 3364994.63 +SET 389279.80 260805.16 +SET 389279.99 269919.21 +SET 389302.00 243115.50 +SET 389309.62 229780.11 +SET 3893266.00 2344953.65 +SET 389327.25 260836.95 +SET 3893341.02 2927798.04 +SET 38934.09 28877.16 +SET 389361.72 269975.88 +SET 3893622.81 3365724.01 +SET 389364.64 127697.92 +SET 389374.70 260868.74 +SET 3894009.29 2928300.58 +SET 389404.47 336608.87 +SET 3894140.40 2345480.31 +SET 389423.58 313926.08 +SET 3894466.59 3366453.39 +SET 3894677.56 2928803.12 +SET 389473.92 127733.76 +SET 3895014.80 2346006.97 +SET 389517.05 260964.11 +SET 389525.18 270089.22 +SET 389545.20 234627.03 +SET 3895732.26 3367547.46 +SET 389583.20 127769.60 +SET 3895889.20 2346533.63 +SET 3896014.10 2929808.20 +SET 389617.74 229961.97 +SET 3896189.43 3140835.68 +SET 38962.08 28897.92 +SET 389659.40 261059.48 +SET 3896763.60 2347060.29 +SET 3896997.93 3368641.53 +SET 3897200.80 2347323.62 +SET 3897350.64 2930813.28 +SET 3897638.00 2347586.95 +SET 389771.80 230052.90 +SET 389801.50 221923.45 +SET 389801.75 261154.85 +SET 389812.56 243434.34 +SET 389841.90 248959.20 +SET 389852.10 270315.90 +SET 3898687.18 2931818.36 +SET 3898949.60 2348376.94 +SET 38990.07 28918.68 +SET 389911.04 127877.12 +SET 389982.40 234890.36 +SET 3900261.20 2349166.93 +SET 3900747.90 3144510.40 +SET 3900794.94 3371923.74 +SET 39008.73 28932.52 +SET 390129.60 127948.80 +SET 390133.90 261377.38 +SET 3901360.26 2933828.52 +SET 390181.35 261409.17 +SET 3902028.53 2934331.06 +SET 390228.80 261440.96 +SET 390248.25 337338.25 +SET 3902482.50 3373382.50 +SET 390269.68 293483.36 +SET 39027.39 28946.36 +SET 3902701.53 3146085.28 +SET 390276.25 261472.75 +SET 3902904.39 3373747.19 +SET 3903326.28 3374111.88 +SET 3903365.07 2935336.14 +SET 39036.72 28953.28 +SET 3904170.06 3374841.26 +SET 390418.60 261568.12 +SET 390419.60 235153.69 +SET 390424.21 270712.59 +SET 3905306.37 3148185.12 +SET 3905369.88 2936843.76 +SET 3905435.73 3375935.33 +SET 3905857.62 3376300.02 +SET 390587.67 270825.93 +SET 3905944.80 2352590.22 +SET 3906038.15 2937346.30 +SET 390604.80 249446.40 +SET 3906279.51 3376664.71 +SET 390655.85 261727.07 +SET 3906608.79 3149235.04 +SET 390669.40 270882.60 +SET 390676.00 128128.00 +SET 3907.26 3149.76 +SET 3907256.40 2353380.21 +SET 390726.00 314976.00 +SET 3907260.00 3149760.00 +SET 39074.04 28980.96 +SET 390751.13 270939.27 +SET 3907545.18 3377758.78 +SET 390757.38 249543.84 +SET 390785.28 128163.84 +SET 390798.20 261822.44 +SET 3908042.96 2938853.92 +SET 390830.00 222509.00 +SET 390832.86 270995.94 +SET 390833.68 244072.02 +SET 3908388.96 3378488.16 +SET 3908562.42 3150809.92 +SET 3908568.00 2354170.20 +SET 3908810.85 3378852.85 +SET 3909.27 2899.48 +SET 3909005.20 2354433.53 +SET 3909232.74 3379217.54 +SET 3909379.50 2939859.00 +SET 390940.55 261917.81 +SET 3909442.40 2354696.86 +SET 3909654.63 3379582.23 +SET 39098.80 26194.96 +SET 3909879.60 2354960.19 +SET 391003.84 128235.52 +SET 3910516.05 3152384.80 +SET 391092.03 338067.63 +SET 3910920.30 3380676.30 +SET 39111.36 29008.64 +SET 3911191.20 2355750.18 +SET 391130.35 262044.97 +SET 3911342.19 3381040.99 +SET 391158.34 230871.27 +SET 391159.78 271222.62 +SET 3912065.60 2356276.84 +SET 39122.24 12830.72 +SET 3912502.80 2356540.17 +SET 391294.00 235680.35 +SET 39131.24 23096.22 +SET 391320.15 262172.13 +SET 391323.24 271335.96 +SET 3913389.12 2942874.24 +SET 391367.60 262203.92 +SET 391377.21 315500.96 +SET 391404.97 271392.63 +SET 3914295.42 3383593.82 +SET 3914423.31 3155534.56 +SET 391447.10 222860.33 +SET 391466.46 231053.13 +SET 3914688.80 2357856.82 +SET 3914725.66 2943879.32 +SET 3915126.00 2358120.15 +SET 3915139.20 3384323.20 +SET 391557.40 262331.08 +SET 391568.43 271505.97 +SET 391604.85 262362.87 +SET 3916376.94 3157109.44 +SET 391652.80 222977.44 +SET 39167.34 29050.16 +SET 391672.86 250128.48 +SET 3916730.47 2945386.94 +SET 3916826.76 3385781.96 +SET 391699.75 262426.45 +SET 3917248.65 3386146.65 +SET 391731.89 271619.31 +SET 3917398.74 2945889.48 +SET 391747.20 262458.24 +SET 39176.67 29057.08 +SET 3917670.54 3386511.34 +SET 391774.58 231234.99 +SET 391825.44 250225.92 +SET 3918330.57 3158684.32 +SET 391854.80 244709.70 +SET 3918623.60 2360226.79 +SET 391878.08 128522.24 +SET 391889.55 262553.61 +SET 391895.35 271732.65 +SET 3919358.10 3387970.10 +SET 39195.33 29070.92 +SET 391977.08 271789.32 +SET 391978.02 250323.36 +SET 391984.45 262617.19 +SET 391987.36 128558.08 +SET 3920284.20 3160259.20 +SET 39204.66 29077.84 +SET 392058.81 271845.99 +SET 392079.35 262680.77 +SET 3920809.60 2361543.44 +SET 392096.64 128593.92 +SET 3921246.80 2361806.77 +SET 39213.06 25042.08 +SET 39213.99 29084.76 +SET 392140.54 271902.66 +SET 3921408.36 2948904.72 +SET 3922076.63 2949407.26 +SET 392221.70 262776.14 +SET 392222.27 271959.33 +SET 392236.76 231507.78 +SET 392269.15 262807.93 +SET 392274.49 294990.98 +SET 3922889.04 3162359.04 +SET 3922995.60 2362860.09 +SET 392304.00 272016.00 +SET 3923432.80 2363123.42 +SET 39235.77 33916.17 +SET 3923577.00 3391617.00 +SET 392364.05 262871.51 +SET 392390.82 231598.71 +SET 39241.15 26290.33 +SET 392424.48 128701.44 +SET 392435.76 250615.68 +SET 3924420.78 3392346.38 +SET 392458.95 262935.09 +SET 39251.31 29112.44 +SET 3925493.88 3164458.88 +SET 3925618.80 2364440.07 +SET 392601.30 263030.46 +SET 392605.60 236470.34 +SET 3926056.00 2364703.40 +SET 392620.64 245187.96 +SET 392630.92 272242.68 +SET 392648.75 263062.25 +SET 3926493.20 2364966.73 +SET 3926530.23 3394169.83 +SET 392679.63 316550.88 +SET 3926796.30 3165508.80 +SET 392696.20 263094.04 +SET 3927374.01 3394899.21 +SET 392740.92 250810.56 +SET 392752.32 128808.96 +SET 3927795.90 3395263.90 +SET 392791.10 263157.62 +SET 3928098.72 3166558.72 +SET 3928217.79 3395628.59 +SET 392853.00 231871.50 +SET 392861.60 128844.80 +SET 3928679.20 2366283.38 +SET 3928749.93 3167083.68 +SET 392887.00 223680.10 +SET 3929401.14 3167608.64 +SET 392942.76 295493.52 +SET 392980.90 263284.78 +SET 3929990.80 2367073.37 +SET 393007.06 231962.43 +SET 3930095.87 2955437.74 +SET 3930428.00 2367336.70 +SET 39307.29 29153.96 +SET 3930703.56 3168658.56 +SET 3930865.20 2367600.03 +SET 393123.25 263380.15 +SET 39313.12 24550.68 +SET 3931302.40 2367863.36 +SET 3931354.77 3169183.52 +SET 3931592.91 3398546.11 +SET 39316.62 29160.88 +SET 3932176.80 2368390.02 +SET 3932657.19 3170233.44 +SET 3933051.20 2368916.68 +SET 393315.18 232144.29 +SET 3933280.47 3400004.87 +SET 393330.84 317075.84 +SET 39335.28 29174.72 +SET 393351.24 251200.32 +SET 3933702.36 3400369.56 +SET 3933959.61 3171283.36 +SET 3934610.82 3171808.32 +SET 393469.24 232235.22 +SET 3934773.76 2958955.52 +SET 3934800.00 2369970.00 +SET 393529.95 272866.05 +SET 39353.94 29188.56 +SET 3935389.92 3401828.32 +SET 393550.30 263666.26 +SET 393611.03 295996.06 +SET 3936110.30 2959960.60 +SET 3936111.60 2370759.99 +SET 393623.37 340255.77 +SET 3936233.70 3402557.70 +SET 393641.76 245825.64 +SET 393645.20 263729.84 +SET 3936548.80 2371023.32 +SET 3936778.57 2960463.14 +SET 3936986.00 2371286.65 +SET 3937.26 2920.24 +SET 39372.60 29202.40 +SET 3937499.37 3403651.77 +SET 393775.14 273036.06 +SET 3937921.26 3404016.46 +SET 3938.35 2638.57 +SET 3938297.60 2372076.64 +SET 393845.12 129167.36 +SET 3938518.08 3174958.08 +SET 393882.45 263888.79 +SET 3939169.29 3175483.04 +SET 393917.20 237260.33 +SET 393929.90 263920.58 +SET 3939608.82 3405475.22 +SET 3939820.50 3176008.00 +SET 39400.59 29223.16 +SET 394020.33 273206.07 +SET 394024.80 263984.16 +SET 394045.26 340620.46 +SET 3940452.60 3406204.60 +SET 3940471.71 3176532.96 +SET 394072.25 264015.95 +SET 3940788.19 2963478.38 +SET 3940920.80 2373656.62 +SET 394102.06 273262.74 +SET 394119.70 264047.74 +SET 3941296.38 3406933.98 +SET 3941358.00 2373919.95 +SET 3941456.46 2963980.92 +SET 394152.32 246144.48 +SET 394172.96 129274.88 +SET 394183.79 273319.41 +SET 3942140.16 3407663.36 +SET 394239.54 232689.87 +SET 3942562.05 3408028.05 +SET 394262.05 264143.11 +SET 3942793.00 2964986.00 +SET 394282.24 129310.72 +SET 39430.95 26417.49 +SET 3943461.27 2965488.54 +SET 39437.91 29250.84 +SET 3943981.20 2375499.93 +SET 3944249.61 3409486.81 +SET 394428.98 273489.42 +SET 3944378.97 3179682.72 +SET 394467.15 340985.15 +SET 3944671.50 3409851.50 +SET 39450.08 12938.24 +SET 394510.71 273546.09 +SET 394547.66 232871.73 +SET 394592.44 273602.76 +SET 3946134.35 2967498.70 +SET 394633.26 318125.76 +SET 3946332.60 3181257.60 +SET 3946359.06 3411310.26 +SET 39465.90 29271.60 +SET 3946604.40 2377079.91 +SET 394674.17 273659.43 +SET 3946983.81 3181782.56 +SET 3947624.73 3412404.33 +SET 3947635.02 3182307.52 +SET 394828.64 129489.92 +SET 394831.45 264524.59 +SET 3948353.20 2378133.23 +SET 394877.04 252174.72 +SET 3948790.40 2378396.56 +SET 3948890.40 3413498.40 +SET 3948937.44 3183357.44 +SET 3949227.60 2378659.89 +SET 395001.09 273886.11 +SET 3950102.00 2379186.55 +SET 3950143.97 2970513.94 +SET 395047.20 129561.60 +SET 3950539.20 2379449.88 +SET 3950577.96 3414957.16 +SET 395068.70 264683.54 +SET 395082.82 273942.78 +SET 3950999.85 3415321.85 +SET 395116.15 264715.33 +SET 39512.55 29306.20 +SET 3951421.74 3415686.54 +SET 395164.55 273999.45 +SET 395182.20 252369.60 +SET 3951843.63 3416051.23 +SET 3951850.80 2380239.87 +SET 3952148.78 2972021.56 +SET 395305.95 264842.49 +SET 3953109.30 3417145.30 +SET 395328.01 274112.79 +SET 3953485.32 2973026.64 +SET 3953495.91 3187032.16 +SET 395355.40 225085.42 +SET 395409.74 274169.46 +SET 3954147.12 3187557.12 +SET 395428.72 246941.58 +SET 3954374.97 3418239.37 +SET 3954474.00 2381819.85 +SET 3954796.86 3418604.06 +SET 3954821.86 2974031.72 +SET 395487.36 252564.48 +SET 39549.87 29333.88 +SET 3955.92 2934.08 +SET 395543.20 265001.44 +SET 395573.20 274282.80 +SET 395590.65 265033.23 +SET 3956222.80 2382873.17 +SET 3956484.42 3420062.82 +SET 3956660.00 2383136.50 +SET 395702.88 129776.64 +SET 3957097.20 2383399.83 +SET 39573.30 26512.86 +SET 3957403.17 3190181.92 +SET 3958054.38 3190706.88 +SET 395812.16 129812.48 +SET 3958408.80 2384189.82 +SET 39587.19 29361.56 +SET 3958705.59 3191231.84 +SET 395900.12 274509.48 +SET 3959015.76 3422250.96 +SET 395921.44 129848.32 +SET 39593.42 23369.01 +SET 395935.68 319175.68 +SET 3959356.80 3191756.80 +SET 395939.28 247260.42 +SET 39596.52 29368.48 +SET 3959859.54 3422980.34 +SET 3960157.60 2385243.14 +SET 396017.70 265319.34 +SET 396030.72 129884.16 +SET 3960594.80 2385506.47 +SET 396065.15 265351.13 +SET 3960659.22 3192806.72 +SET 396112.60 265382.92 +SET 3961310.43 3193331.68 +SET 396140.00 129920.00 +SET 396145.31 274679.49 +SET 3961469.20 2386033.13 +SET 39615.18 29382.32 +SET 3961504.56 2979057.12 +SET 396154.71 342443.91 +SET 396160.05 265414.71 +SET 396194.56 247419.84 +SET 3961961.64 3193856.64 +SET 3961968.99 3424803.79 +SET 3962343.60 2386559.79 +SET 3962390.88 3425168.48 +SET 39624.51 29389.24 +SET 396250.26 253051.68 +SET 396284.11 298006.22 +SET 396302.40 265510.08 +SET 396308.77 274792.83 +SET 3963264.06 3194906.56 +SET 3963509.37 2980564.74 +SET 396390.50 274849.50 +SET 396396.38 233962.89 +SET 396397.30 265573.66 +SET 396402.84 253149.12 +SET 3964078.44 3426627.24 +SET 3964500.33 3426991.93 +SET 3964566.48 3195956.48 +SET 396472.23 274906.17 +SET 3964845.91 2981569.82 +SET 3964922.22 3427356.62 +SET 3964966.80 2388139.77 +SET 3965344.11 3427721.31 +SET 3965404.00 2388403.10 +SET 396586.89 319700.64 +SET 396587.10 265700.82 +SET 396589.60 225788.08 +SET 3966182.45 2982574.90 +SET 3966520.11 3197531.36 +SET 3966609.78 3428815.38 +SET 39668.64 13009.92 +SET 396682.00 265764.40 +SET 396686.40 130099.20 +SET 396705.12 247738.68 +SET 3967152.80 2389456.42 +SET 3967453.56 3429544.76 +SET 3967518.99 2983579.98 +SET 3967590.00 2389719.75 +SET 396776.90 265827.98 +SET 3967875.45 3429909.45 +SET 396795.30 225905.19 +SET 396795.68 130135.04 +SET 39680.49 29430.76 +SET 3968027.20 2389983.08 +SET 3968187.26 2984082.52 +SET 3968297.34 3430274.14 +SET 396858.56 234235.68 +SET 3968901.60 2390509.74 +SET 3969124.95 3199631.20 +SET 3969523.80 2985087.60 +SET 3969563.01 3431368.21 +SET 396960.40 247898.10 +SET 3969776.16 3200156.16 +SET 3969984.90 3431732.90 +SET 39700.10 22602.23 +SET 397012.62 234326.61 +SET 397013.16 253538.88 +SET 397014.24 130206.72 +SET 3970213.20 2391299.73 +SET 397044.34 275302.86 +SET 3970650.40 2391563.06 +SET 3970828.68 3432462.28 +SET 397126.07 275359.53 +SET 39715.65 26608.23 +SET 3971524.80 2392089.72 +SET 397156.50 266082.30 +SET 397166.68 234417.54 +SET 3971729.79 3201731.04 +SET 3971962.00 2392353.05 +SET 39720.78 27541.62 +SET 397203.95 266114.09 +SET 397206.70 226139.41 +SET 397215.68 248057.52 +SET 39723.81 32022.56 +SET 397232.80 130278.40 +SET 397238.10 320225.60 +SET 3972381.00 3202256.00 +SET 397318.32 253733.76 +SET 397320.74 234508.47 +SET 3973273.60 2393143.04 +SET 3973533.42 2988102.84 +SET 397371.26 275529.54 +SET 3974.58 2947.92 +SET 397420.38 343537.98 +SET 3974203.80 3435379.80 +SET 39745.80 29479.20 +SET 397474.80 234599.40 +SET 3974869.96 2989107.92 +SET 39755.13 29486.12 +SET 397583.55 266368.41 +SET 397616.45 275699.55 +SET 397623.48 253928.64 +SET 397628.86 234690.33 +SET 3976288.26 3205405.76 +SET 397631.00 266400.20 +SET 3976313.25 3437203.25 +SET 397669.92 130421.76 +SET 3976939.47 3205930.72 +SET 397698.18 275756.22 +SET 3977157.03 3437932.63 +SET 397725.90 266463.78 +SET 397726.24 248376.36 +SET 3977590.68 3206455.68 +SET 397773.35 266495.57 +SET 397779.20 130457.60 +SET 397782.92 234781.26 +SET 3978000.81 3438662.01 +SET 397820.80 266527.36 +SET 397823.80 226490.74 +SET 39783.12 29506.88 +SET 3978422.70 3439026.70 +SET 397928.64 254123.52 +SET 3979394.40 2396829.66 +SET 397943.37 275926.23 +SET 3979547.85 2992625.70 +SET 397981.52 248535.78 +SET 3979831.60 2397092.99 +SET 398058.05 266686.31 +SET 3980706.00 2397619.65 +SET 398081.22 254220.96 +SET 398091.04 234963.12 +SET 398107.04 130565.12 +SET 3981143.20 2397882.98 +SET 3981580.40 2398146.31 +SET 398188.56 276096.24 +SET 3982017.60 2398409.64 +SET 3982149.15 3210130.40 +SET 398216.32 130600.96 +SET 3982219.71 3442308.91 +SET 39823.68 24869.52 +SET 398247.85 266813.47 +SET 398264.16 344267.36 +SET 3982641.60 3442673.60 +SET 398288.92 299513.84 +SET 3982889.20 2995138.40 +SET 398289.20 239893.63 +SET 3982892.00 2398936.30 +SET 398325.60 130636.80 +SET 3983329.20 2399199.63 +SET 39839.10 29548.40 +SET 398390.20 266908.84 +SET 3983907.27 3443767.67 +SET 3984102.78 3211705.28 +SET 398437.65 266940.63 +SET 3984640.80 2399989.62 +SET 3984751.05 3444497.05 +SET 3984753.99 3212230.24 +SET 39848.43 29555.32 +SET 3984894.01 2996646.02 +SET 398492.08 248854.62 +SET 398532.55 267004.21 +SET 398540.52 321275.52 +SET 39857.76 29562.24 +SET 3985952.40 2400779.61 +SET 398597.21 276379.59 +SET 3986016.72 3445591.12 +SET 3986230.55 2997651.10 +SET 3986438.61 3445955.81 +SET 39867.09 29569.16 +SET 3986707.62 3213805.12 +SET 398674.90 267099.58 +SET 3986826.80 2401306.27 +SET 3986898.82 2998153.64 +SET 398707.28 235326.84 +SET 398722.35 267131.37 +SET 3987282.39 3446685.19 +SET 398760.67 276492.93 +SET 398762.72 130780.16 +SET 398769.80 267163.16 +SET 3988138.40 2402096.26 +SET 39884.24 27654.96 +SET 39885.75 29583.00 +SET 3988969.95 3448143.95 +SET 3989012.80 2402622.92 +SET 398959.60 267290.32 +SET 3989813.73 3448873.33 +SET 3989963.67 3216429.92 +SET 399002.64 249173.46 +SET 399005.86 276662.94 +SET 399015.40 235508.70 +SET 3990657.51 3449602.71 +SET 399087.59 276719.61 +SET 399101.95 267385.69 +SET 3991079.40 3449967.40 +SET 3991266.09 3217479.84 +SET 39913.74 29603.76 +SET 399149.40 267417.48 +SET 3991501.29 3450332.09 +SET 3992073.20 2404466.23 +SET 3992510.40 2404729.56 +SET 3992568.51 3218529.76 +SET 399257.92 249332.88 +SET 3992766.96 3451426.16 +SET 3993.24 2961.76 +SET 399301.86 255000.48 +SET 3993188.85 3451790.85 +SET 39932.40 29617.60 +SET 3993384.80 2405256.22 +SET 399386.65 267576.43 +SET 399414.51 276946.29 +SET 399418.40 130995.20 +SET 3994259.20 2405782.88 +SET 399434.10 267608.22 +SET 3994454.52 3452884.92 +SET 3994876.41 3453249.61 +SET 399496.24 277002.96 +SET 39951.06 29631.44 +SET 3995133.60 2406309.54 +SET 3995298.30 3453614.30 +SET 3995570.80 2406572.87 +SET 3995586.33 3004686.66 +SET 399576.45 267703.59 +SET 3995824.56 3221154.56 +SET 39960.39 29638.36 +SET 3996008.00 2406836.20 +SET 3996142.08 3454343.68 +SET 399623.90 267735.38 +SET 399631.64 235872.42 +SET 3996475.77 3221679.52 +SET 3996563.97 3454708.37 +SET 3996985.86 3455073.06 +SET 3997591.14 3006194.28 +SET 399785.70 235963.35 +SET 399823.16 277229.64 +SET 3998631.20 2408416.18 +SET 3998673.42 3456531.82 +SET 399880.80 227661.84 +SET 3998927.68 3007199.36 +SET 3999068.40 2408679.51 +SET 3999080.61 3223779.36 +SET 399939.76 236054.28 +SET 3999505.60 2408942.84 +SET 399951.72 345726.12 +SET 399956.05 267957.91 +SET 3999595.95 3007701.90 +SET 39997.71 29666.04 +SET 3999939.09 3457625.89 +SET 400023.76 249811.14 +SET 4000817.20 2409732.83 +SET 400098.40 268053.28 +SET 4001034.24 3225354.24 +SET 4001204.76 3458719.96 +SET 4001626.65 3459084.65 +SET 4001685.45 3225879.20 +SET 4002.57 2968.68 +SET 4002048.54 3459449.34 +SET 400217.34 255585.12 +SET 400231.81 277512.99 +SET 4002470.43 3459814.03 +SET 40025.70 29686.80 +SET 4002566.00 2410786.15 +SET 400279.04 249970.56 +SET 400292.20 227896.06 +SET 4002987.87 3226929.12 +SET 40035.03 29693.72 +SET 4003605.57 3010717.14 +SET 4003639.08 3227454.08 +SET 400369.92 255682.56 +SET 400383.10 268244.02 +SET 4003877.60 2411576.14 +SET 400401.92 131317.76 +SET 4004157.99 3461272.79 +SET 4004273.84 3011219.68 +SET 4004314.80 2411839.47 +SET 40047.70 27768.30 +SET 400475.20 241210.28 +SET 4004752.00 2412102.80 +SET 400478.00 268307.60 +SET 4004941.50 3228504.00 +SET 4004942.11 3011722.22 +SET 4005189.20 2412366.13 +SET 400522.50 255780.00 +SET 400556.00 236418.00 +SET 400558.73 277739.67 +SET 4005592.71 3229028.96 +SET 400572.90 268371.18 +SET 4006278.65 3012727.30 +SET 4006500.80 2413156.12 +SET 4006689.33 3463460.93 +SET 4006946.92 3013229.84 +SET 400762.70 268498.34 +SET 40078.96 25028.94 +SET 400795.50 346455.50 +SET 400810.15 268530.13 +SET 4008197.55 3231128.80 +SET 4008283.46 3014234.92 +SET 4008376.89 3464919.69 +SET 400857.60 268561.92 +SET 400885.65 277966.35 +SET 400909.30 228247.39 +SET 40091.01 29735.24 +SET 400912.40 241473.61 +SET 4009220.67 3465649.07 +SET 400948.32 131496.96 +SET 4009499.97 3232178.72 +SET 40095.25 26862.55 +SET 400962.00 301524.00 +SET 4009620.00 3015240.00 +SET 400967.38 278023.02 +SET 400999.95 268657.29 +SET 401.19 297.56 +SET 4010435.60 2415526.09 +SET 401049.11 278079.69 +SET 401057.60 131532.80 +SET 40111.50 22836.45 +SET 4011453.60 3233753.60 +SET 4011624.81 3016747.62 +SET 401166.88 131568.64 +SET 401172.24 236781.72 +SET 4011747.20 2416316.08 +SET 40119.00 29756.00 +SET 401212.57 278193.03 +SET 4012173.90 3468201.90 +SET 4012184.40 2416579.41 +SET 401237.20 268816.24 +SET 4012595.79 3468566.59 +SET 40128.33 29762.92 +SET 401300.16 250608.24 +SET 4013058.80 2417106.07 +SET 4013407.23 3235328.48 +SET 401427.00 268943.40 +SET 4014297.89 3018757.78 +SET 401457.76 278363.04 +SET 401521.90 269006.98 +SET 4015244.80 2418422.72 +SET 4015682.00 2418686.05 +SET 401569.35 269038.77 +SET 4015970.91 3471484.11 +SET 4016012.07 3237428.32 +SET 4016119.20 2418949.38 +SET 401616.80 269070.56 +SET 4016302.70 3020265.40 +SET 401634.42 237054.51 +SET 401639.28 347184.88 +SET 4016392.80 3471848.80 +SET 4016663.28 3237953.28 +SET 4016993.60 2419476.04 +SET 401702.95 278533.05 +SET 401713.28 131747.84 +SET 4017236.58 3472578.18 +SET 401732.10 228715.83 +SET 40174.98 29797.52 +SET 401743.14 256559.52 +SET 4017430.80 2419739.37 +SET 401788.48 237145.44 +SET 4018080.36 3473307.56 +SET 4018305.20 2420266.03 +SET 401866.41 278646.39 +SET 4018742.40 2420529.36 +SET 401895.72 256656.96 +SET 401931.84 131819.52 +SET 401942.54 237236.37 +SET 401948.95 269293.09 +SET 4019616.80 2421056.02 +SET 4019767.92 3474766.32 +SET 401996.40 269324.88 +SET 4020054.00 2421319.35 +SET 402029.87 278759.73 +SET 40209.66 23732.73 +SET 4020980.59 3023783.18 +SET 4021033.59 3475860.39 +SET 402111.60 278816.40 +SET 4021221.75 3241628.00 +SET 4021455.48 3476225.08 +SET 40215.04 13189.12 +SET 4021872.96 3242152.96 +SET 402233.65 269483.83 +SET 4022677.20 2422899.33 +SET 4022985.40 3025290.80 +SET 4023114.40 2423162.66 +SET 402349.20 229067.16 +SET 4023551.60 2423425.99 +SET 4023653.67 3025793.34 +SET 4023826.59 3243727.84 +SET 4023986.82 3478413.22 +SET 402404.72 237509.16 +SET 4024321.94 3026295.88 +SET 402478.24 131998.72 +SET 402483.06 347914.26 +SET 40249.62 29852.88 +SET 4024990.21 3026798.42 +SET 4025129.01 3244777.76 +SET 402518.35 269674.57 +SET 402520.25 279099.75 +SET 402554.90 229184.27 +SET 402558.78 237600.09 +SET 402565.80 269706.36 +SET 4025737.60 2424742.64 +SET 4025780.22 3245302.72 +SET 40258.95 29859.80 +SET 402587.52 132034.56 +SET 402601.98 279156.42 +SET 402613.25 269738.15 +SET 402683.71 279213.09 +SET 4026940.05 3480966.05 +SET 402696.80 132070.40 +SET 4027049.20 2425532.63 +SET 402708.15 269801.73 +SET 402712.84 237691.02 +SET 402760.60 229301.38 +SET 40277.61 29873.64 +SET 4028205.72 3482060.12 +SET 402847.17 279326.43 +SET 402850.50 269897.10 +SET 4028627.61 3482424.81 +SET 402866.90 237781.95 +SET 4028798.00 2426585.95 +SET 4028999.83 3029813.66 +SET 402904.95 348278.95 +SET 402915.36 132142.08 +SET 40292.89 27938.31 +SET 402928.90 279383.10 +SET 402945.40 269960.68 +SET 4029672.40 2427112.61 +SET 402992.85 269992.47 +SET 403087.75 270056.05 +SET 403098.40 242790.26 +SET 4030984.00 2427902.60 +SET 403116.36 257436.48 +SET 403135.20 270087.84 +SET 40314.93 29901.32 +SET 4031641.11 3250027.36 +SET 40317.20 22953.56 +SET 403174.09 279553.11 +SET 4031858.40 2428429.26 +SET 4032002.73 3485342.33 +SET 403230.10 270151.42 +SET 40324.26 29908.24 +SET 4032846.51 3486071.71 +SET 4032943.53 3251077.28 +SET 4033170.00 2429219.25 +SET 403329.08 238054.74 +SET 403337.55 279666.45 +SET 4033594.74 3251602.24 +SET 4033607.20 2429482.58 +SET 4033677.72 3033331.44 +SET 4033690.29 3486801.09 +SET 403377.70 229652.71 +SET 4034345.99 3033833.98 +SET 4034534.07 3487530.47 +SET 403461.76 132321.28 +SET 4034897.16 3252652.16 +SET 4035014.26 3034336.52 +SET 403514.80 270342.16 +SET 403535.60 243053.59 +SET 4035356.00 2430535.90 +SET 403562.25 270373.95 +SET 403574.10 257728.80 +SET 403609.70 270405.74 +SET 4036199.58 3253702.08 +SET 4036221.63 3488989.23 +SET 403657.15 270437.53 +SET 4036667.60 2431325.89 +SET 40370.91 29942.84 +SET 403726.68 257826.24 +SET 40374.62 27994.98 +SET 403748.73 349008.33 +SET 403789.10 229886.93 +SET 40380.24 29949.76 +SET 4038153.21 3255276.96 +SET 4038331.08 3490812.68 +SET 4038355.61 3036849.22 +SET 4038853.60 2432642.54 +SET 4039174.86 3491542.06 +SET 4039290.80 2432905.87 +SET 4039455.63 3256326.88 +SET 403989.30 270660.06 +SET 404008.16 132500.48 +SET 4040440.53 3492636.13 +SET 404084.20 270723.64 +SET 4041028.69 3038859.38 +SET 404117.44 132536.32 +SET 4041284.31 3493365.51 +SET 404131.65 270755.43 +SET 404154.85 280233.15 +SET 404179.10 270787.22 +SET 4042128.09 3494094.89 +SET 4042351.20 2434749.18 +SET 404253.44 238600.32 +SET 4042788.40 2435012.51 +SET 4043.36 1326.08 +SET 404318.31 280346.49 +SET 40433.70 25821.60 +SET 4043393.76 3495188.96 +SET 40436.22 29991.28 +SET 4043662.80 2435539.17 +SET 4043701.77 3040869.54 +SET 4044014.10 3260001.60 +SET 404406.20 230238.26 +SET 404416.35 270946.17 +SET 4044237.54 3495918.34 +SET 4044665.31 3260526.56 +SET 404481.77 280459.83 +SET 4044974.40 2436329.16 +SET 4045503.21 3497012.41 +SET 404558.70 271041.54 +SET 404561.56 238782.18 +SET 4045925.10 3497377.10 +SET 404606.15 271073.33 +SET 4046346.99 3497741.79 +SET 4046374.85 3042879.70 +SET 4046618.94 3262101.44 +SET 404701.05 271136.91 +SET 404715.62 238873.11 +SET 404726.96 280629.84 +SET 40474.85 27116.87 +SET 404748.50 271168.70 +SET 4047612.66 3498835.86 +SET 404773.12 132751.36 +SET 4047921.36 3263151.36 +SET 4048034.80 2438172.47 +SET 404808.69 280686.51 +SET 4048379.66 3044387.32 +SET 4048456.44 3499565.24 +SET 404890.85 271264.07 +SET 4049.22 3003.28 +SET 404947.32 258605.76 +SET 404985.75 271327.65 +SET 4049874.99 3264726.24 +SET 40501.44 35010.24 +SET 40501.53 30039.72 +SET 4050220.80 2439489.12 +SET 405023.74 239054.97 +SET 405033.20 271359.44 +SET 405053.88 280856.52 +SET 4050987.78 3501753.38 +SET 4051052.74 3046397.48 +SET 405135.61 280913.19 +SET 4051532.40 2440279.11 +SET 4051831.56 3502482.76 +SET 40520.19 30053.56 +SET 405210.24 132894.72 +SET 405217.34 280969.86 +SET 405223.00 271486.60 +SET 405270.45 271518.39 +SET 40529.52 30060.48 +SET 4053057.55 3047905.10 +SET 4053281.20 2441332.43 +SET 405331.86 239236.83 +SET 405365.35 271581.97 +SET 4053718.40 2441595.76 +SET 4053782.25 3267876.00 +SET 405405.06 258898.08 +SET 405428.80 132966.40 +SET 405460.25 271645.55 +SET 405462.53 281139.87 +SET 4055206.68 3505400.28 +SET 4055628.57 3505764.97 +SET 4055730.63 3049915.26 +SET 405639.89 305041.78 +SET 405639.98 239418.69 +SET 405647.36 133038.08 +SET 405650.05 271772.71 +SET 4056894.24 3506859.04 +SET 40569.75 27180.45 +SET 405697.50 271804.50 +SET 405703.83 327050.08 +SET 4057038.30 3270500.80 +SET 4057067.17 3050920.34 +SET 405707.72 281309.88 +SET 405721.60 244370.24 +SET 4057316.13 3507223.73 +SET 405744.95 271836.29 +SET 4057653.20 2443965.73 +SET 4057735.44 3051422.88 +SET 4057738.02 3507588.42 +SET 4058.55 3010.20 +SET 4058090.40 2444229.06 +SET 4058527.60 2444492.39 +SET 40586.28 25919.04 +SET 405862.80 259190.40 +SET 4058964.80 2444755.72 +SET 4058991.93 3272075.68 +SET 4059003.69 3508682.49 +SET 40594.83 30108.92 +SET 4059402.00 2445019.05 +SET 4059643.14 3272600.64 +SET 4060269.36 3509776.56 +SET 406034.64 281536.56 +SET 406077.10 272058.82 +SET 4061588.00 2446335.70 +SET 4061596.77 3274175.52 +SET 406167.96 259385.28 +SET 40619.81 28164.99 +SET 4062025.20 2446599.03 +SET 406219.45 272154.19 +SET 406257.50 231292.25 +SET 406266.90 272185.98 +SET 406279.83 281706.57 +SET 4062800.70 3511964.70 +SET 4062899.19 3275225.44 +SET 4063081.60 3055443.20 +SET 40632.15 30136.60 +SET 4063222.59 3512329.39 +SET 406355.04 327575.04 +SET 4064066.37 3513058.77 +SET 4064488.26 3513423.46 +SET 406463.20 231409.36 +SET 4064648.40 2448179.01 +SET 4065085.60 2448442.34 +SET 4065086.41 3056950.82 +SET 4065504.03 3277325.28 +SET 4065522.80 2448705.67 +SET 4065753.93 3514517.53 +SET 4065754.68 3057453.36 +SET 40659.60 24489.69 +SET 4066155.24 3277850.24 +SET 4066175.82 3514882.22 +SET 406625.70 259677.60 +SET 4066397.20 2449232.33 +SET 40664.65 27244.03 +SET 4066422.95 3057955.90 +SET 4066597.71 3515246.91 +SET 406668.90 231526.47 +SET 406688.48 281989.92 +SET 4067.88 3017.12 +SET 40671.84 24005.52 +SET 406718.40 240055.20 +SET 4067457.66 3278900.16 +SET 406770.21 282046.59 +SET 4068285.27 3516705.67 +SET 406836.30 272567.46 +SET 4068427.76 3059463.52 +SET 406849.44 133432.32 +SET 4068707.16 3517070.36 +SET 406872.46 240146.13 +SET 406874.60 231643.58 +SET 40688.13 30178.12 +SET 4069129.05 3517435.05 +SET 406916.32 254115.48 +SET 4069457.60 2451075.64 +SET 406958.72 133468.16 +SET 40697.46 30185.04 +SET 4069764.30 3060468.60 +SET 4069894.80 2451338.97 +SET 407026.10 272694.62 +SET 407026.52 240237.06 +SET 407033.20 245160.23 +SET 4070713.71 3281524.96 +SET 4070769.20 2451865.63 +SET 40712.10 27275.82 +SET 407121.00 272758.20 +SET 4071238.50 3519258.50 +SET 40716.12 30198.88 +SET 407171.60 254274.90 +SET 4072082.28 3519987.88 +SET 407236.02 260067.36 +SET 407260.59 282386.61 +SET 4072667.34 3283099.84 +SET 40728.60 23187.78 +SET 4072926.06 3520717.26 +SET 4072955.20 2453182.28 +SET 4073318.55 3283624.80 +SET 407334.64 240418.92 +SET 4073392.40 2453445.61 +SET 40734.78 30212.72 +SET 407342.32 282443.28 +SET 4073773.92 3063483.84 +SET 407388.60 260164.80 +SET 407395.84 133611.52 +SET 4073969.76 3284149.76 +SET 4074191.73 3521811.33 +SET 407426.88 254434.32 +SET 40744.11 30219.64 +SET 407453.15 272980.73 +SET 4074613.62 3522176.02 +SET 4074704.00 2454235.60 +SET 407488.70 240509.85 +SET 4075035.51 3522540.71 +SET 407505.12 133647.36 +SET 407541.18 260262.24 +SET 4075457.40 3522905.40 +SET 4075879.29 3523270.09 +SET 40759.55 27307.61 +SET 4076015.60 2455025.59 +SET 407614.40 133683.20 +SET 407644.70 306549.40 +SET 407657.46 328624.96 +SET 4076890.00 2455552.25 +SET 407690.40 273139.68 +SET 407697.40 232112.02 +SET 4077566.85 3524728.85 +SET 4077764.40 2456078.91 +SET 407785.30 273203.26 +SET 407832.70 282783.30 +SET 407832.75 273235.05 +SET 4078451.81 3067001.62 +SET 4078832.52 3525822.92 +SET 407903.10 232229.13 +SET 407907.60 245686.89 +SET 4079179.44 3288349.44 +SET 407927.65 273298.63 +SET 407942.24 133790.72 +SET 4079513.20 2457132.23 +SET 4079830.65 3288874.40 +SET 4079950.40 2457395.56 +SET 408.65 283.35 +SET 40800.09 30261.16 +SET 408022.55 273362.21 +SET 4080387.60 2457658.89 +SET 408070.00 273394.00 +SET 408077.89 282953.31 +SET 40809.42 30268.08 +SET 408104.94 240873.57 +SET 408108.80 232346.24 +SET 4081124.89 3069011.78 +SET 408117.45 273425.79 +SET 408151.50 260652.00 +SET 408159.62 283009.98 +SET 4081785.75 3528375.75 +SET 4082136.40 2458712.21 +SET 4082435.49 3290974.24 +SET 4082461.43 3070016.86 +SET 40825.90 24096.45 +SET 408259.00 240964.50 +SET 408259.80 273521.16 +SET 4082629.53 3529105.13 +SET 408270.08 133898.24 +SET 408307.25 273552.95 +SET 408308.67 329149.92 +SET 4083086.70 3291499.20 +SET 408323.08 283123.32 +SET 4083448.00 2459502.20 +SET 4083737.91 3292024.16 +SET 4083797.97 3071021.94 +SET 4083885.20 2459765.53 +SET 408404.81 283179.99 +SET 4084322.40 2460028.86 +SET 4084466.24 3071524.48 +SET 408448.00 255072.00 +SET 408456.66 260846.88 +SET 4084738.98 3530928.58 +SET 408486.54 283236.66 +SET 4085040.33 3293074.08 +SET 4085160.87 3531293.27 +SET 4085196.80 2460555.52 +SET 408544.50 273711.90 +SET 4085582.76 3531657.96 +SET 4085634.00 2460818.85 +SET 408591.95 273743.69 +SET 408597.92 134005.76 +SET 4086342.75 3294124.00 +SET 4086426.54 3532387.34 +SET 40865.00 28335.00 +SET 4086508.40 2461345.51 +SET 4086848.43 3532752.03 +SET 408686.85 273807.27 +SET 4086945.60 2461608.84 +SET 4086993.96 3294648.96 +SET 408703.28 255231.42 +SET 4087139.32 3073534.64 +SET 408721.18 241237.29 +SET 408725.90 232697.57 +SET 408731.73 283406.67 +SET 4087382.80 2461872.17 +SET 408761.82 261041.76 +SET 4087645.17 3295173.92 +SET 408781.75 273870.85 +SET 408782.00 246213.55 +SET 4087820.00 2462135.50 +SET 408811.41 353384.61 +SET 408829.20 273902.64 +SET 4088296.38 3295698.88 +SET 40884.06 30323.44 +SET 4088947.59 3296223.84 +SET 4089131.60 2462925.49 +SET 4089144.13 3075042.26 +SET 408924.10 273966.22 +SET 408931.60 232814.68 +SET 408958.56 255390.84 +SET 408976.92 283576.68 +SET 4089812.40 3075544.80 +SET 40901.90 27402.98 +SET 4090223.55 3535669.55 +SET 409113.90 274093.38 +SET 409140.38 283690.02 +SET 409144.32 134184.96 +SET 4091489.22 3536763.62 +SET 4091552.43 3298323.68 +SET 409161.35 274125.17 +SET 4092192.00 2464768.80 +SET 409233.30 353749.30 +SET 4092485.48 3077554.96 +SET 409256.25 274188.75 +SET 4092754.89 3537857.69 +SET 409303.70 274220.54 +SET 409343.00 233048.90 +SET 409351.15 274252.33 +SET 409362.88 134256.64 +SET 4093822.02 3078560.04 +SET 409385.57 283860.03 +SET 4093940.80 2465822.12 +SET 409398.60 274284.12 +SET 4094378.00 2466085.45 +SET 4094490.29 3079062.58 +SET 40946.73 28391.67 +SET 409469.12 255709.68 +SET 4094808.48 3300948.48 +SET 40949.37 30371.88 +SET 4095158.56 3079565.12 +SET 409540.95 274379.49 +SET 409548.70 233166.01 +SET 4095689.60 2466875.44 +SET 409581.44 134328.32 +SET 409588.40 274411.28 +SET 409611.09 330199.84 +SET 4096110.90 3301998.40 +SET 4096126.80 2467138.77 +SET 409630.76 284030.04 +SET 409649.51 308057.02 +SET 4096495.10 3080570.20 +SET 4096551.90 3541139.90 +SET 4096762.11 3302523.36 +SET 409683.30 274474.86 +SET 409690.72 134364.16 +SET 4096973.79 3541504.59 +SET 409730.75 274506.65 +SET 4097413.32 3303048.32 +SET 40977.36 30392.64 +SET 4097817.57 3542233.97 +SET 40979.96 24187.38 +SET 409799.60 241873.80 +SET 40980.00 13440.00 +SET 4098064.53 3303573.28 +SET 409825.65 274570.23 +SET 4098312.80 2468455.42 +SET 4098499.91 3082077.82 +SET 409875.95 284200.05 +SET 4099168.18 3082580.36 +SET 40996.02 30406.48 +SET 4099624.40 2469245.41 +SET 409968.00 274665.60 +SET 409979.68 256028.52 +SET 4100061.60 2469508.74 +SET 410018.56 134471.68 +SET 410062.90 274729.18 +SET 4100669.37 3305673.12 +SET 4100770.80 3544786.80 +SET 4100936.00 2470035.40 +SET 4101172.99 3084087.98 +SET 410121.14 284370.06 +SET 410127.84 134507.52 +SET 410135.04 261918.72 +SET 410157.80 274792.76 +SET 4101841.26 3084590.52 +SET 410205.25 274824.55 +SET 4102247.60 2470825.39 +SET 4102509.53 3085093.06 +SET 4102684.80 2471088.72 +SET 410284.60 284483.40 +SET 410317.78 308559.56 +SET 410366.33 284540.07 +SET 4103724.03 3547339.63 +SET 4103925.42 3308297.92 +SET 4103996.40 2471878.71 +SET 4104145.92 3547704.32 +SET 41042.67 30441.08 +SET 41044.25 27498.35 +SET 4104433.60 2472142.04 +SET 4104514.34 3086600.68 +SET 4104989.70 3548433.70 +SET 4105182.61 3087103.22 +SET 4105850.88 3087605.76 +SET 41061.33 30454.92 +SET 4106519.15 3088108.30 +SET 4106530.26 3310397.76 +SET 4106619.60 2473458.69 +SET 41070.66 30461.84 +SET 4107056.80 2473722.02 +SET 4107099.15 3550257.15 +SET 4107181.47 3310922.72 +SET 410727.20 275174.24 +SET 410745.36 262308.48 +SET 4107521.04 3550621.84 +SET 41079.99 30468.76 +SET 4107931.20 2474248.68 +SET 4107942.93 3550986.53 +SET 410822.10 275237.82 +SET 4108364.82 3551351.22 +SET 4108368.40 2474512.01 +SET 4108523.96 3089615.92 +SET 410856.71 284880.09 +SET 410869.55 275269.61 +SET 410878.02 242510.31 +SET 4108805.60 2474775.34 +SET 41089.28 13475.84 +SET 41091.70 27530.14 +SET 410913.51 331249.76 +SET 410917.00 275301.40 +SET 410938.44 284936.76 +SET 410968.00 247530.20 +SET 41098.65 30482.60 +SET 411.40 234.22 +SET 411002.08 134794.24 +SET 4110117.20 2475565.33 +SET 411032.08 242601.24 +SET 4110554.40 2475828.66 +SET 4110896.16 3553539.36 +SET 4110991.60 2476091.99 +SET 4111088.73 3314072.48 +SET 411111.36 134830.08 +SET 4111739.94 3314597.44 +SET 4111865.31 3092128.62 +SET 411194.30 234102.89 +SET 411203.10 262600.80 +SET 411249.15 275523.93 +SET 4112583.72 3554998.12 +SET 41126.64 30503.36 +SET 411329.92 134901.76 +SET 4113427.50 3555727.50 +SET 411347.09 285220.11 +SET 41135.97 30510.28 +SET 4113614.80 2477671.97 +SET 4113693.57 3316172.32 +SET 41139.15 27561.93 +SET 411405.20 247793.53 +SET 4114271.28 3556456.88 +SET 411428.82 285276.78 +SET 4114693.17 3556821.57 +SET 411510.55 285333.45 +SET 4115115.06 3557186.26 +SET 4115536.95 3557550.95 +SET 4115874.93 3095143.86 +SET 411592.28 285390.12 +SET 4116238.00 2479251.95 +SET 411628.75 275778.25 +SET 4116298.41 3318272.16 +SET 41163.96 30531.04 +SET 411648.32 242964.96 +SET 411654.32 309564.64 +SET 4116543.20 3095646.40 +SET 411657.76 135009.28 +SET 4116675.20 2479515.28 +SET 4117112.40 2479778.61 +SET 41173.29 30537.96 +SET 4117600.83 3319322.08 +SET 4117646.40 3559374.40 +SET 4117879.74 3096651.48 +SET 4117986.80 2480305.27 +SET 411811.40 234454.22 +SET 411842.40 248056.86 +SET 4118424.00 2480568.60 +SET 4118490.18 3560103.78 +SET 4118548.01 3097154.02 +SET 41186.60 27593.72 +SET 411876.32 135080.96 +SET 4118903.25 3320372.00 +SET 4119.66 2630.88 +SET 411913.45 275968.99 +SET 411919.20 285616.80 +SET 4119216.28 3097656.56 +SET 4119333.96 3560833.16 +SET 4119554.46 3320896.96 +SET 411956.44 243146.82 +SET 411960.90 276000.78 +SET 411966.00 263088.00 +SET 4119735.60 2481358.59 +SET 4119755.85 3561197.85 +SET 41198.56 13511.68 +SET 411985.60 135116.80 +SET 412008.35 276032.57 +SET 412017.10 234571.33 +SET 4120205.67 3321421.92 +SET 4120552.82 3098661.64 +SET 4120610.00 2481885.25 +SET 41210.61 30565.64 +SET 4121021.52 3562291.92 +SET 412110.50 243237.75 +SET 412118.58 263185.44 +SET 4121221.09 3099164.18 +SET 4121484.40 2482411.91 +SET 4121865.30 3563021.30 +SET 41219.94 30572.56 +SET 412215.93 332299.68 +SET 412222.80 234688.44 +SET 4122358.80 2482938.57 +SET 4122557.63 3100169.26 +SET 4122709.08 3563750.68 +SET 412279.60 248320.19 +SET 4122796.00 2483201.90 +SET 4122810.51 3323521.76 +SET 4123233.20 2483465.23 +SET 412327.85 285900.15 +SET 41234.05 27625.51 +SET 412340.50 276255.10 +SET 41238.60 30586.40 +SET 412387.95 276286.89 +SET 4123894.17 3101174.34 +SET 412409.58 285956.82 +SET 4124112.93 3324571.68 +SET 412422.72 135260.16 +SET 412423.74 263380.32 +SET 4124544.80 2484255.22 +SET 4124562.44 3101676.88 +SET 4124764.14 3325096.64 +SET 412482.85 276350.47 +SET 4125240.42 3565938.82 +SET 4125419.20 2484781.88 +SET 4125662.31 3566303.51 +SET 4126293.60 2485308.54 +SET 412634.20 234922.66 +SET 412641.28 135331.84 +SET 41266.59 30607.16 +SET 412720.10 276509.42 +SET 4127235.52 3103687.04 +SET 4127349.87 3567762.27 +SET 412750.56 135367.68 +SET 41285.25 30621.00 +SET 41288.08 24369.24 +SET 412880.80 243692.40 +SET 4128916.80 2486888.52 +SET 4129240.33 3105194.66 +SET 4129354.00 2487151.85 +SET 4129459.32 3569585.72 +SET 412957.35 276668.37 +SET 412969.12 135439.36 +SET 4129881.21 3569950.41 +SET 412990.86 310569.72 +SET 413004.80 276700.16 +SET 413030.31 357031.51 +SET 413034.86 243783.33 +SET 4130625.03 3329821.28 +SET 4131102.80 2488205.17 +SET 4131146.88 3571044.48 +SET 4131245.14 3106702.28 +SET 4131540.00 2488468.50 +SET 4131913.41 3107204.82 +SET 413194.60 276827.32 +SET 4131977.20 2488731.83 +SET 41322.57 30648.68 +SET 4132414.40 2488995.16 +SET 413242.05 276859.11 +SET 413251.30 235273.99 +SET 4132581.68 3107707.36 +SET 4132851.60 2489258.49 +SET 4133229.87 3331921.12 +SET 413336.95 276922.69 +SET 413339.22 263964.96 +SET 413342.98 243965.19 +SET 4133726.00 2489785.15 +SET 413384.40 276954.48 +SET 4133918.22 3108712.44 +SET 413406.24 135582.72 +SET 413431.85 276986.27 +SET 4134522.00 3573962.00 +SET 413479.30 277018.06 +SET 413515.52 135618.56 +SET 413518.35 333349.60 +SET 4135183.50 3333496.00 +SET 4135365.78 3574691.38 +SET 41355.38 28675.02 +SET 413553.80 286750.20 +SET 413574.20 277081.64 +SET 413591.20 249110.18 +SET 413621.65 277113.43 +SET 413624.80 135654.40 +SET 4136349.20 2491365.13 +SET 413635.53 286806.87 +SET 4136485.92 3334545.92 +SET 413651.10 244147.05 +SET 4136631.45 3575785.45 +SET 413716.55 277177.01 +SET 413717.26 286863.54 +SET 41376.40 27720.88 +SET 4137927.84 3111727.68 +SET 413843.36 135726.08 +SET 4138535.20 2492681.78 +SET 413868.40 235625.32 +SET 41387.88 30697.12 +SET 413874.09 357760.89 +SET 4138740.90 3577608.90 +SET 413906.35 277304.17 +SET 4139090.76 3336645.76 +SET 4139264.38 3112732.76 +SET 413959.22 244328.91 +SET 413962.45 287033.55 +SET 4139932.65 3113235.30 +SET 414001.25 277367.75 +SET 4140284.00 2493735.10 +SET 414048.70 277399.54 +SET 414064.16 258579.24 +SET 414074.10 235742.43 +SET 414096.15 277431.33 +SET 4141044.39 3338220.64 +SET 414113.28 244419.84 +SET 414169.56 333874.56 +SET 41417.12 13583.36 +SET 414171.20 135833.60 +SET 414191.05 277494.91 +SET 4142.52 3072.48 +SET 4142346.81 3339270.56 +SET 414238.50 277526.70 +SET 41425.20 30724.80 +SET 414280.48 135869.44 +SET 414285.95 277558.49 +SET 4142907.20 2495315.08 +SET 414295.98 358125.58 +SET 414327.40 311574.80 +SET 4143649.23 3340320.48 +SET 4143781.60 2495841.74 +SET 414421.40 244601.70 +SET 4144225.47 3582349.87 +SET 414428.30 277653.86 +SET 414452.83 287373.57 +SET 414465.60 249636.84 +SET 414485.50 235976.65 +SET 4145278.81 3117255.62 +SET 41453.19 30745.56 +SET 4145530.40 2496895.06 +SET 4145967.60 2497158.39 +SET 4146254.07 3342420.32 +SET 4146615.35 3118260.70 +SET 4146756.81 3584538.01 +SET 41471.30 27784.46 +SET 414713.00 277844.60 +SET 414717.60 136012.80 +SET 4147279.20 2497948.38 +SET 414729.52 244783.56 +SET 4147600.59 3585267.39 +SET 4147716.40 2498211.71 +SET 414807.90 277908.18 +SET 4148153.60 2498475.04 +SET 4148444.37 3585996.77 +SET 4148866.26 3586361.46 +SET 41490.51 30773.24 +SET 4149028.00 2499001.70 +SET 4149465.20 2499265.03 +SET 414950.25 278003.55 +SET 414997.70 278035.34 +SET 4150131.93 3587455.53 +SET 4150161.33 3345570.08 +SET 415024.94 287770.26 +SET 4150339.60 2499791.69 +SET 415045.15 278067.13 +SET 415045.44 136120.32 +SET 4150553.82 3587820.22 +SET 4150624.97 3121275.94 +SET 4150812.54 3346095.04 +SET 415106.67 287826.93 +SET 415139.76 358854.96 +SET 4151463.75 3346620.00 +SET 415154.72 136156.16 +SET 41518.75 27816.25 +SET 41518.84 28788.36 +SET 4151961.51 3122281.02 +SET 4152088.40 2500845.01 +SET 415234.95 278194.29 +SET 4152663.27 3589643.67 +SET 4152766.17 3347669.92 +SET 415282.40 278226.08 +SET 415308.30 236445.09 +SET 415322.76 265231.68 +SET 41534.00 25016.35 +SET 4153400.00 2501635.00 +SET 4153417.38 3348194.88 +SET 415345.76 245147.28 +SET 4153507.05 3590373.05 +SET 4153928.94 3590737.74 +SET 4153966.32 3123788.64 +SET 415424.75 278321.45 +SET 4154274.40 2502161.66 +SET 415471.98 334924.48 +SET 4154711.60 2502424.99 +SET 415472.20 278353.24 +SET 415475.34 265329.12 +SET 415499.82 245238.21 +SET 415514.00 236562.20 +SET 415515.32 288110.28 +SET 4155616.50 3592196.50 +SET 415567.10 278416.82 +SET 4156022.22 3350294.72 +SET 4156460.28 3592925.88 +SET 4156460.40 2503478.31 +SET 415653.88 245329.14 +SET 415678.78 288223.62 +SET 4156882.17 3593290.57 +SET 4156897.60 2503741.64 +SET 415701.12 136335.36 +SET 415709.45 278512.19 +SET 4157334.80 2504004.97 +SET 41574.48 30835.52 +SET 415756.90 278543.98 +SET 4157725.95 3594019.95 +SET 4157975.94 3126803.88 +SET 4158209.20 2504531.63 +SET 4158569.73 3594749.33 +SET 4158644.21 3127306.42 +SET 4159.62 2455.11 +SET 415919.68 136407.04 +SET 415925.40 236796.42 +SET 4159278.27 3352919.52 +SET 41593.14 30849.36 +SET 4159413.51 3595478.71 +SET 415962.00 245511.00 +SET 4159835.40 3595843.40 +SET 4159929.48 3353444.48 +SET 415994.15 278702.93 +SET 4159980.75 3128311.50 +SET 416005.70 288450.30 +SET 41602.47 30856.28 +SET 4160649.02 3128814.04 +SET 4160679.18 3596572.78 +SET 416106.40 259854.60 +SET 41613.65 27879.83 +SET 416136.50 278798.30 +SET 4161522.96 3597302.16 +SET 4161706.80 2506638.27 +SET 4161883.11 3355019.36 +SET 4161944.85 3597666.85 +SET 4161985.56 3129819.12 +SET 416214.40 250690.16 +SET 4162144.00 2506901.60 +SET 416250.89 288620.31 +SET 4162534.32 3355544.32 +SET 4162653.83 3130321.66 +SET 4163185.53 3356069.28 +SET 416332.21 313082.42 +SET 416332.62 288676.98 +SET 41635.68 13655.04 +SET 416361.68 260014.02 +SET 416373.75 278957.25 +SET 4163836.74 3356594.24 +SET 41639.79 30883.96 +SET 4163990.37 3131326.74 +SET 416405.43 359949.03 +SET 4164487.95 3357119.20 +SET 4164658.64 3131829.28 +SET 4164767.20 2508481.58 +SET 41649.12 30890.88 +SET 416496.08 288790.32 +SET 4165139.16 3357644.16 +SET 4165204.40 2508744.91 +SET 416542.50 237147.75 +SET 416543.40 266011.20 +SET 416575.36 136622.08 +SET 4165995.18 3132834.36 +SET 41661.10 27911.62 +SET 416616.96 260173.44 +SET 4166516.00 2509534.90 +SET 4166585.64 3601678.44 +SET 4166663.45 3133336.90 +SET 41667.78 30904.72 +SET 416684.64 136657.92 +SET 4167007.53 3602043.13 +SET 416705.90 279179.78 +SET 4167092.79 3359219.04 +SET 4167390.40 2510061.56 +SET 416741.27 288960.33 +SET 416748.20 237264.86 +SET 4167744.00 3359744.00 +SET 4167827.60 2510324.89 +SET 4167851.31 3602772.51 +SET 4168.23 2890.17 +SET 416827.32 360313.72 +SET 41686.44 30918.56 +SET 4168668.26 3134844.52 +SET 416872.24 260332.86 +SET 4169046.42 3360793.92 +SET 4169139.20 2511114.88 +SET 41695.77 30925.48 +SET 4169697.63 3361318.88 +SET 416990.60 279370.52 +SET 4169960.76 3604595.96 +SET 4170004.80 3135849.60 +SET 417038.05 279402.31 +SET 4170382.65 3604960.65 +SET 41705.10 30932.40 +SET 4170673.07 3136352.14 +SET 417068.19 289187.01 +SET 41708.55 27943.41 +SET 4171000.05 3362368.80 +SET 4171226.43 3605690.03 +SET 417153.72 266400.96 +SET 4171651.26 3362893.76 +SET 41723.76 30946.24 +SET 417231.65 289300.35 +SET 417249.21 360678.41 +SET 417306.30 266498.40 +SET 41733.09 30953.16 +SET 4173335.88 3607513.48 +SET 417348.54 246329.37 +SET 4173604.89 3364468.64 +SET 4173757.77 3607878.17 +SET 417382.80 260651.70 +SET 4173948.40 2514011.51 +SET 4174179.66 3608242.86 +SET 41742.42 30960.08 +SET 417425.61 336499.36 +SET 41744.96 13690.88 +SET 4174601.55 3608607.55 +SET 4174682.69 3139367.38 +SET 417476.84 289470.36 +SET 4175.60 2797.52 +SET 417502.60 246420.30 +SET 41751.75 30967.00 +SET 417512.55 279720.21 +SET 4175260.00 2514801.50 +SET 4175350.96 3139869.92 +SET 4175445.33 3609336.93 +SET 417558.57 289527.03 +SET 417558.88 136944.64 +SET 417560.00 279752.00 +SET 4176019.23 3140372.46 +SET 41761.08 30973.92 +SET 417611.46 266693.28 +SET 417638.08 260811.12 +SET 417654.90 279815.58 +SET 4176571.60 2515591.49 +SET 4176687.50 3140875.00 +SET 417671.10 361043.10 +SET 417749.80 279879.16 +SET 417777.44 137016.32 +SET 4177883.20 2516381.48 +SET 417810.72 246602.16 +SET 417844.70 279942.74 +SET 417885.49 289753.71 +SET 417892.15 279974.53 +SET 4179194.80 2517171.47 +SET 4179242.34 3612619.14 +SET 4179360.58 3142885.16 +SET 417964.78 246693.09 +SET 4179664.23 3612983.83 +SET 417967.22 289810.38 +SET 4180028.85 3143387.70 +SET 418034.50 280069.90 +SET 418048.95 289867.05 +SET 4180508.01 3613713.21 +SET 4180697.12 3143890.24 +SET 418081.95 280101.69 +SET 418092.99 361407.79 +SET 4181365.39 3144392.78 +SET 4181419.41 3370768.16 +SET 4181818.00 2518751.45 +SET 4182070.62 3371293.12 +SET 418212.41 289980.39 +SET 4182617.46 3615536.66 +SET 4182692.40 2519278.11 +SET 418294.14 290037.06 +SET 4183129.60 2519541.44 +SET 418323.84 137195.52 +SET 4183370.20 3145900.40 +SET 4183461.24 3616266.04 +SET 4184024.25 3372868.00 +SET 418426.96 246965.88 +SET 41845.76 29015.04 +SET 418457.60 290150.40 +SET 418461.55 280356.01 +SET 41850.90 28038.78 +SET 418514.88 361772.48 +SET 4185315.60 2520858.09 +SET 418539.33 290207.07 +SET 418542.40 137267.20 +SET 418556.45 280419.59 +SET 418599.50 238318.85 +SET 41863.71 31050.04 +SET 418659.20 261448.80 +SET 4186629.09 3374967.84 +SET 4186711.55 3148413.10 +SET 4186836.36 3619183.56 +SET 418728.03 337549.28 +SET 4187280.30 3375492.80 +SET 4187379.82 3148915.64 +SET 418746.25 280546.75 +SET 418784.52 290377.08 +SET 4188102.03 3620277.63 +SET 418832.10 267472.80 +SET 418837.60 252270.14 +SET 418866.25 290433.75 +SET 4188813.20 2522964.73 +SET 418889.14 247238.67 +SET 4189.17 3107.08 +SET 41891.70 31070.80 +SET 418914.48 261608.22 +SET 4189687.60 2523491.39 +SET 41898.35 28070.57 +SET 418984.68 267570.24 +SET 41901.03 31077.72 +SET 4190124.80 2523754.72 +SET 4190211.48 3622101.08 +SET 419029.71 290547.09 +SET 41904.32 24732.96 +SET 4190633.37 3622465.77 +SET 4190721.17 3151428.34 +SET 4191187.56 3378642.56 +SET 419137.26 267667.68 +SET 4191873.60 2524808.04 +SET 4191899.04 3623559.84 +SET 419193.17 290660.43 +SET 419198.08 137482.24 +SET 419274.90 290717.10 +SET 4192742.82 3624289.22 +SET 41929.02 31098.48 +SET 419358.66 362501.86 +SET 4193622.40 2525861.36 +SET 4193792.40 3380742.40 +SET 4194008.49 3625383.29 +SET 4194062.52 3153941.04 +SET 419422.30 238787.29 +SET 4194430.38 3625747.98 +SET 4194852.27 3626112.67 +SET 419505.38 247602.39 +SET 419505.45 281055.39 +SET 4195094.82 3381792.32 +SET 4195371.20 2526914.68 +SET 4195399.06 3154946.12 +SET 41957.01 31119.24 +SET 4195808.40 2527178.01 +SET 419600.35 281118.97 +SET 419628.00 238904.40 +SET 41963.52 13762.56 +SET 419635.20 137625.60 +SET 419647.80 281150.76 +SET 4196539.83 3627571.43 +SET 419673.56 315595.12 +SET 419680.32 262086.48 +SET 4196961.72 3627936.12 +SET 41971.20 25279.68 +SET 419712.00 252796.80 +SET 4197383.61 3628300.81 +SET 419742.70 281214.34 +SET 4197557.20 2528231.33 +SET 419765.28 291057.12 +SET 419780.55 362866.55 +SET 4198072.14 3156956.28 +SET 4198227.39 3629030.19 +SET 419847.01 291113.79 +SET 41985.00 31140.00 +SET 419853.76 137697.28 +SET 4198740.41 3157458.82 +SET 419885.05 281309.71 +SET 4198868.80 2529021.32 +SET 419900.16 268154.88 +SET 419928.74 291170.46 +SET 4199306.00 2529284.65 +SET 419963.04 137733.12 +SET 4199653.29 3385467.04 +SET 4199743.20 2529547.98 +SET 419979.95 281373.29 +SET 420010.47 291227.13 +SET 4200180.40 2529811.31 +SET 4200955.71 3386516.96 +SET 420121.62 247966.11 +SET 420122.30 281468.66 +SET 420149.20 253060.13 +SET 4201492.00 2530601.30 +SET 420173.93 291340.47 +SET 42022.32 31167.68 +SET 420290.88 137840.64 +SET 420337.39 291453.81 +SET 4203560.55 3388616.80 +SET 420359.55 281627.61 +SET 4203678.00 2531917.95 +SET 4203711.96 3633771.16 +SET 42040.98 31181.52 +SET 420407.00 281659.40 +SET 420446.16 262564.74 +SET 4204552.40 2532444.61 +SET 4204977.63 3634865.23 +SET 4204989.60 2532707.94 +SET 420501.90 281722.98 +SET 4205423.11 3162484.22 +SET 4205514.18 3390191.68 +SET 42058.38 24823.89 +SET 420624.33 363595.93 +SET 4206243.30 3635959.30 +SET 4206301.20 2533497.93 +SET 420663.06 268642.08 +SET 420664.31 291680.49 +SET 4206665.19 3636323.99 +SET 4206738.40 2533761.26 +SET 4206759.65 3163489.30 +SET 420681.66 339124.16 +SET 420691.70 281850.14 +SET 4207087.08 3636688.68 +SET 42072.80 13798.40 +SET 420739.15 281881.93 +SET 42078.30 31209.20 +SET 420786.60 281913.72 +SET 420834.05 281945.51 +SET 4208352.75 3637782.75 +SET 420837.28 138019.84 +SET 4208487.20 2534814.58 +SET 420881.50 281977.30 +SET 4208924.40 2535077.91 +SET 42090.95 29185.05 +SET 420909.50 291850.50 +SET 420928.95 282009.09 +SET 42096.96 31223.04 +SET 4209618.42 3638876.82 +SET 420976.40 282040.88 +SET 4209798.80 2535604.57 +SET 4210040.31 3639241.51 +SET 4210101.00 3166002.00 +SET 421023.60 253586.79 +SET 421023.85 282072.67 +SET 4210236.00 2535867.90 +SET 421067.90 239724.17 +SET 4210673.20 2536131.23 +SET 4210723.86 3394391.36 +SET 42112.08 26893.44 +SET 421120.80 268934.40 +SET 4211375.07 3394916.32 +SET 4211437.54 3167007.08 +SET 421165.12 138127.36 +SET 421166.20 282168.04 +SET 4211984.80 2536921.22 +SET 42121.20 26304.30 +SET 4212105.81 3167509.62 +SET 421213.65 282199.83 +SET 4212149.76 3641064.96 +SET 421236.42 292077.18 +SET 42124.95 31243.80 +SET 4212422.00 2537184.55 +SET 421261.10 282231.62 +SET 421273.38 269031.84 +SET 421273.60 239841.28 +SET 4212859.20 2537447.88 +SET 421308.55 282263.41 +SET 4213328.70 3396491.20 +SET 421354.10 248693.55 +SET 421383.68 138199.04 +SET 4213837.32 3642523.72 +SET 421403.45 282326.99 +SET 4214110.62 3169017.24 +SET 421450.90 282358.78 +SET 421460.80 253850.12 +SET 4214631.12 3397541.12 +SET 421467.28 263202.42 +SET 4215045.20 2538764.53 +SET 421508.16 248784.48 +SET 4215282.33 3398066.08 +SET 421563.34 292303.86 +SET 4216115.43 3170524.86 +SET 42162.27 31271.48 +SET 421645.07 292360.53 +SET 421662.22 248875.41 +SET 4216783.70 3171027.40 +SET 4216790.55 3645076.55 +SET 421688.15 282517.73 +SET 421711.52 138306.56 +SET 421722.56 263361.84 +SET 4217231.20 2540081.18 +SET 4217235.96 3399640.96 +SET 421726.80 292417.20 +SET 421731.12 269324.16 +SET 4217451.97 3171529.94 +SET 4217887.17 3400165.92 +SET 42180.93 31285.32 +SET 421808.53 292473.87 +SET 4218105.60 2540607.84 +SET 42182.08 13834.24 +SET 421830.50 282613.10 +SET 4218538.38 3400690.88 +SET 4218542.80 2540871.17 +SET 42189.00 36469.00 +SET 421890.00 364690.00 +SET 421890.70 240192.61 +SET 4218900.00 3646900.00 +SET 421925.40 282676.68 +SET 421971.99 292587.21 +SET 421977.84 263521.26 +SET 421984.08 340174.08 +SET 4219854.40 2541661.16 +SET 42199.59 31299.16 +SET 4220125.05 3173540.10 +SET 4220291.60 2541924.49 +SET 422036.28 269519.04 +SET 422039.36 138414.08 +SET 422053.72 292643.88 +SET 4220728.80 2542187.82 +SET 4220793.32 3174042.64 +SET 422096.40 240309.72 +SET 422124.40 249148.20 +SET 422148.64 138449.92 +SET 4221603.20 2542714.48 +SET 42218.25 31313.00 +SET 422217.18 292757.22 +SET 4222445.64 3403840.64 +SET 422257.55 282899.21 +SET 42227.58 31319.92 +SET 4222798.13 3175550.26 +SET 422298.91 292813.89 +SET 4223096.85 3404365.60 +SET 422335.20 254376.78 +SET 4223352.00 2543767.80 +SET 422341.44 269713.92 +SET 4223466.40 3176052.80 +SET 42236.91 31326.84 +SET 4223748.06 3404890.56 +SET 422432.52 249330.06 +SET 42246.24 31333.76 +SET 422494.02 269811.36 +SET 422494.80 283058.16 +SET 422507.80 240543.94 +SET 422542.25 283089.95 +SET 4225471.21 3177560.42 +SET 42255.57 31340.68 +SET 4225538.00 2545084.45 +SET 422589.70 283121.74 +SET 4226139.48 3178062.96 +SET 422637.15 283153.53 +SET 422646.60 269908.80 +SET 4227286.80 2546137.77 +SET 422740.64 249511.92 +SET 42277.95 28324.89 +SET 422779.50 283248.90 +SET 422789.29 293153.91 +SET 422826.95 283280.69 +SET 4228598.40 2546927.76 +SET 422871.02 293210.58 +SET 422921.85 283344.27 +SET 4229472.80 2547454.42 +SET 422952.75 293267.25 +SET 422998.96 264158.94 +SET 4230260.16 3410140.16 +SET 4230347.20 2547981.08 +SET 42311.55 31382.20 +SET 423111.65 283471.43 +SET 4231221.60 2548507.74 +SET 423124.90 240895.27 +SET 423155.67 365784.07 +SET 4231562.58 3411190.08 +SET 4231658.80 2548771.07 +SET 423197.94 293437.26 +SET 423202.82 249784.71 +SET 4232096.00 2549034.40 +SET 42325.40 28356.68 +SET 4232822.18 3183088.36 +SET 4232865.00 3412240.00 +SET 42330.21 31396.04 +SET 423348.90 283630.38 +SET 4233490.45 3183590.90 +SET 42336.14 29355.06 +SET 4233844.80 2550087.72 +SET 42339.54 31402.96 +SET 423409.50 270396.00 +SET 423443.13 293607.27 +SET 423443.80 283693.96 +SET 423460.00 138880.00 +SET 4234719.20 2550614.38 +SET 42348.87 31409.88 +SET 423491.25 283725.75 +SET 423509.52 264477.78 +SET 4235156.40 2550877.71 +SET 423524.86 293663.94 +SET 423538.70 283757.54 +SET 4235495.26 3185098.52 +SET 4235593.60 2551141.04 +SET 423577.56 366148.76 +SET 423606.59 293720.61 +SET 423678.56 138951.68 +SET 423681.05 283852.91 +SET 423683.18 318610.36 +SET 4236831.80 3186103.60 +SET 4236905.20 2551931.03 +SET 423714.66 270590.88 +SET 42372.85 28388.47 +SET 4237423.47 3415914.72 +SET 42376.86 31430.64 +SET 423764.80 264637.20 +SET 4238074.68 3416439.68 +SET 423823.40 283948.28 +SET 423851.78 293890.62 +SET 4238654.00 2552984.35 +SET 4238725.89 3416964.64 +SET 423897.12 139023.36 +SET 4239091.20 2553247.68 +SET 423933.51 293947.29 +SET 423947.70 241363.71 +SET 42395.52 31444.48 +SET 4239504.88 3188113.76 +SET 4239528.40 2553511.01 +SET 423965.75 284043.65 +SET 423999.45 366513.45 +SET 42400.64 13905.92 +SET 4240028.31 3418014.56 +SET 424019.82 270785.76 +SET 4240402.80 2554037.67 +SET 4240679.52 3418539.52 +SET 4240840.00 2554301.00 +SET 424115.68 139095.04 +SET 424127.18 250330.29 +SET 4241509.69 3189621.38 +SET 42417.24 27088.32 +SET 42417.87 29411.73 +SET 4241714.40 2554827.66 +SET 424172.40 270883.20 +SET 4241981.94 3419589.44 +SET 4242151.60 2555090.99 +SET 4242588.80 2555354.32 +SET 424260.43 294173.97 +SET 4242633.15 3420114.40 +SET 424275.36 264956.04 +SET 4242846.23 3190626.46 +SET 424297.90 284266.18 +SET 42432.84 31472.16 +SET 424324.98 270980.64 +SET 424351.45 319112.90 +SET 4243935.57 3421164.32 +SET 4244182.77 3191631.54 +SET 424421.34 366878.14 +SET 424443.52 139202.56 +SET 424487.70 284393.34 +SET 424505.62 294343.98 +SET 4245212.00 2556934.30 +SET 424535.15 284425.13 +SET 4245519.31 3192636.62 +SET 424582.60 284456.92 +SET 4246187.58 3193139.16 +SET 4246523.60 2557724.29 +SET 4246540.41 3423264.16 +SET 424669.08 294457.32 +SET 424677.50 284520.50 +SET 4246855.85 3193641.70 +SET 42470.16 31499.84 +SET 4247398.00 2558250.95 +SET 424772.40 284584.08 +SET 424782.72 271272.96 +SET 4247835.20 2558514.28 +SET 42479.49 31506.76 +SET 424832.54 294570.66 +SET 4248709.60 2559040.94 +SET 42488.82 31513.68 +SET 424880.64 139345.92 +SET 424914.75 284679.45 +SET 4249796.46 3425888.96 +SET 424989.92 139381.76 +SET 4250021.20 2559830.93 +SET 425057.10 284774.82 +SET 425077.73 294740.67 +SET 4250865.47 3196656.94 +SET 425087.88 271467.84 +SET 4251098.88 3426938.88 +SET 42515.20 28483.84 +SET 42516.81 31534.44 +SET 4251750.09 3427463.84 +SET 4251770.00 2560884.25 +SET 425181.90 242066.37 +SET 425199.45 284870.19 +SET 42520.56 25096.68 +SET 425208.48 139453.44 +SET 4252202.01 3197662.02 +SET 4252401.30 3427988.80 +SET 425246.90 284901.98 +SET 425265.12 367607.52 +SET 425294.35 284933.77 +SET 425317.76 139489.28 +SET 425341.80 284965.56 +SET 42535.47 31548.28 +SET 4253518.80 2561937.57 +SET 4253538.55 3198667.10 +SET 4253703.72 3429038.72 +SET 425387.60 242183.48 +SET 425393.04 271662.72 +SET 425395.60 256220.09 +SET 425404.65 294967.35 +SET 4254206.82 3199169.64 +SET 42544.80 31555.20 +SET 4255267.60 2562990.89 +SET 425536.32 139560.96 +SET 4255704.80 2563254.22 +SET 425579.05 285124.51 +SET 4256142.00 2563517.55 +SET 4256211.63 3200677.26 +SET 4256308.56 3431138.56 +SET 4256579.20 2563780.88 +SET 425667.78 251239.59 +SET 425687.01 367972.21 +SET 4256879.90 3201179.80 +SET 42569.82 27185.76 +SET 425698.20 271857.60 +SET 425721.40 285219.88 +SET 425731.57 295194.03 +SET 4257453.60 2564307.54 +SET 425754.88 139632.64 +SET 425799.00 242417.70 +SET 425813.30 295250.70 +SET 42582.12 31582.88 +SET 4258216.44 3202184.88 +SET 425864.16 139668.48 +SET 4258765.20 2565097.53 +SET 425911.20 285347.04 +SET 4259552.98 3203189.96 +SET 4259564.61 3433763.36 +SET 4259639.60 2565624.19 +SET 426004.70 242534.81 +SET 426006.10 285410.62 +SET 426053.55 285442.41 +SET 426062.32 266071.98 +SET 4260889.52 3204195.04 +SET 426129.96 251512.38 +SET 426140.22 295477.38 +SET 4261557.79 3204697.58 +SET 42619.44 31610.56 +SET 4262169.45 3435863.20 +SET 426221.95 295534.05 +SET 4262226.06 3205200.12 +SET 4262262.80 2567204.17 +SET 4263.81 3162.44 +SET 42631.76 26623.14 +SET 4263137.20 2567730.83 +SET 4263562.60 3206205.20 +SET 4263574.40 2567994.16 +SET 42638.10 31624.40 +SET 426385.41 295647.39 +SET 426385.70 285664.94 +SET 426410.56 139847.68 +SET 426416.10 242769.03 +SET 4264230.87 3206707.74 +SET 426433.15 285696.73 +SET 426438.08 251694.24 +SET 426467.14 295704.06 +SET 42647.43 31631.32 +SET 426480.60 285728.52 +SET 4264886.00 2568784.15 +SET 426519.84 139883.52 +SET 426528.05 285760.31 +SET 4265425.50 3438488.00 +SET 426548.87 295760.73 +SET 4265567.41 3207712.82 +SET 426592.14 251785.17 +SET 4266197.60 2569574.14 +SET 426630.60 295817.40 +SET 42666.09 31645.16 +SET 4266727.92 3439537.92 +SET 426712.33 295874.07 +SET 426717.85 285887.47 +SET 4267379.13 3440062.88 +SET 42674.62 25187.61 +SET 426746.20 251876.10 +SET 426765.30 285919.26 +SET 4268030.34 3440587.84 +SET 426812.75 285951.05 +SET 4268383.60 2570890.79 +SET 42684.75 31659.00 +SET 426900.26 251967.03 +SET 426918.84 272637.12 +SET 4269258.00 2571417.45 +SET 4269332.76 3441637.76 +SET 426957.52 296044.08 +SET 4269577.03 3210728.06 +SET 4269983.97 3442162.72 +SET 4270132.40 2571944.11 +SET 427024.53 321123.06 +SET 42703.41 31672.84 +SET 427033.20 243120.36 +SET 4270569.60 2572207.44 +SET 4270635.18 3442687.68 +SET 427066.24 140062.72 +SET 427071.42 272734.56 +SET 4270913.57 3211733.14 +SET 427097.45 286141.79 +SET 4271006.80 2572470.77 +SET 427120.98 296157.42 +SET 427144.40 257273.41 +SET 4271881.20 2572997.43 +SET 427193.76 344373.76 +SET 427238.90 243237.47 +SET 427239.80 286237.16 +SET 427284.44 296270.76 +SET 4273.14 3169.36 +SET 4273192.80 2573787.42 +SET 4273240.02 3444787.52 +SET 427374.57 369430.97 +SET 427382.15 286332.53 +SET 4273891.23 3445312.48 +SET 42740.73 31700.52 +SET 427447.90 296384.10 +SET 4274504.40 2574577.41 +SET 4274542.44 3445837.44 +SET 427477.05 286396.11 +SET 42752.45 28642.79 +SET 427524.50 286427.90 +SET 4275378.80 2575104.07 +SET 4275591.46 3215250.92 +SET 4275844.86 3446887.36 +SET 427594.00 267028.50 +SET 427612.64 140241.92 +SET 427619.40 286491.48 +SET 4276253.20 2575630.73 +SET 4276259.73 3215753.46 +SET 4276690.40 2575894.06 +SET 427670.56 252421.68 +SET 42768.72 31721.28 +SET 427693.09 296554.11 +SET 4277147.28 3447937.28 +SET 4277596.27 3216758.54 +SET 427761.75 286586.85 +SET 427809.20 286618.64 +SET 427824.62 252512.61 +SET 427831.20 140313.60 +SET 4278439.20 2576947.38 +SET 4278449.70 3448987.20 +SET 427856.55 296667.45 +SET 42787.38 31735.12 +SET 427904.10 286682.22 +SET 427940.48 140349.44 +SET 4279601.08 3218266.16 +SET 4279750.80 2577737.37 +SET 4279752.12 3450037.12 +SET 42799.90 28674.58 +SET 427999.00 286745.80 +SET 4280188.00 2578000.70 +SET 4280269.35 3218768.70 +SET 428046.45 286777.59 +SET 42806.04 31748.96 +SET 4280937.62 3219271.24 +SET 428101.74 296837.46 +SET 4281054.54 3451087.04 +SET 4281499.60 2578790.69 +SET 428218.35 370160.35 +SET 4282356.96 3452136.96 +SET 4282374.00 2579317.35 +SET 428265.20 296950.80 +SET 428267.40 243823.02 +SET 42828.68 25278.54 +SET 4282811.20 2579580.68 +SET 428283.70 286936.54 +SET 4283008.17 3452661.92 +SET 4283248.40 2579844.01 +SET 428331.15 286968.33 +SET 428359.84 267506.76 +SET 4283659.38 3453186.88 +SET 4283685.60 2580107.34 +SET 42837.76 14049.28 +SET 4284278.97 3221783.94 +SET 428440.86 252876.33 +SET 428444.64 273611.52 +SET 428456.00 258063.40 +SET 4284560.00 2580634.00 +SET 42847.35 28706.37 +SET 428473.10 243940.13 +SET 428486.88 140528.64 +SET 428615.12 267666.18 +SET 42862.02 31790.48 +SET 428673.85 297234.15 +SET 4286746.00 2581950.65 +SET 4286915.43 3455811.68 +SET 4286952.05 3223794.10 +SET 428705.44 140600.32 +SET 42871.35 31797.40 +SET 428755.58 297290.82 +SET 4287566.64 3456336.64 +SET 4288057.60 2582740.64 +SET 428814.72 140636.16 +SET 4288288.59 3224799.18 +SET 42887.04 26782.56 +SET 428893.20 258326.73 +SET 4288932.00 2583267.30 +SET 4288956.86 3225301.72 +SET 428902.38 273903.84 +SET 428903.04 253149.12 +SET 428919.04 297404.16 +SET 428948.00 287381.60 +SET 4289625.13 3225804.26 +SET 4289806.40 2583793.96 +SET 42899.34 31818.16 +SET 429.18 318.32 +SET 429042.90 287445.18 +SET 4290680.80 2584320.62 +SET 42908.67 31825.08 +SET 429082.50 297517.50 +SET 4290822.69 3458961.44 +SET 429090.35 287476.97 +SET 4290961.67 3226809.34 +SET 4291.80 3183.20 +SET 429137.80 287508.76 +SET 429147.39 345948.64 +SET 4291629.94 3227311.88 +SET 429251.84 140779.52 +SET 42927.33 31838.92 +SET 4292866.80 2585637.27 +SET 429327.60 287635.92 +SET 429330.40 258590.06 +SET 4293304.00 2585900.60 +SET 4293427.53 3461061.28 +SET 42936.66 31845.84 +SET 4293634.75 3228819.50 +SET 4293741.20 2586163.93 +SET 429380.96 268144.44 +SET 4294078.74 3461586.24 +SET 429409.42 297744.18 +SET 4294178.40 2586427.26 +SET 42942.25 28769.95 +SET 4294303.02 3229322.04 +SET 4294615.60 2586690.59 +SET 429469.95 287731.29 +SET 429470.40 140851.20 +SET 4294971.29 3229824.58 +SET 429572.88 297857.52 +SET 4295927.20 2587480.58 +SET 429612.30 287826.66 +SET 429636.24 268303.86 +SET 4296364.40 2587743.91 +SET 429659.75 287858.45 +SET 429665.28 274391.04 +SET 429673.34 253603.77 +SET 429707.30 244642.79 +SET 4297334.79 3464211.04 +SET 4297644.37 3231834.74 +SET 4298113.20 2588797.23 +SET 429818.07 298027.53 +SET 429827.40 253694.70 +SET 4298637.21 3465260.96 +SET 429897.00 288017.40 +SET 429905.91 371619.11 +SET 429907.52 140994.56 +SET 429913.00 244759.90 +SET 429970.44 274585.92 +SET 429981.46 253785.63 +SET 4299939.63 3466310.88 +SET 43001.97 31894.28 +SET 430016.80 141030.40 +SET 4300317.45 3233844.90 +SET 4300736.40 2590377.21 +SET 430086.80 288144.56 +SET 43011.30 31901.20 +SET 430123.02 274683.36 +SET 430144.99 298254.21 +SET 430226.72 298310.88 +SET 43027.56 27478.08 +SET 43029.96 31915.04 +SET 4302990.53 3235855.06 +SET 430324.05 288303.51 +SET 430365.88 323635.76 +SET 4303658.80 3236357.60 +SET 43037.15 28833.53 +SET 430371.50 288335.30 +SET 4303846.89 3469460.64 +SET 430390.18 298424.22 +SET 4304234.00 2592483.85 +SET 4304327.07 3236860.14 +SET 430443.64 254058.42 +SET 4304498.10 3469985.60 +SET 430466.40 288398.88 +SET 43048.62 31928.88 +SET 4305149.31 3470510.56 +SET 430530.10 245111.23 +SET 4305545.60 2593273.84 +SET 430561.30 288462.46 +SET 4305663.61 3237865.22 +SET 43057.95 31935.80 +SET 430580.76 274975.68 +SET 430597.70 254149.35 +SET 430642.00 259380.05 +SET 4306420.00 2593800.50 +SET 430657.36 268941.54 +SET 43067.28 31942.72 +SET 430703.65 288557.83 +SET 4307102.94 3472085.44 +SET 4307294.40 2594327.16 +SET 430735.80 245228.34 +SET 430749.69 372348.49 +SET 43076.61 31949.64 +SET 4307668.42 3239372.84 +SET 4307754.15 3472610.40 +SET 430798.83 298707.57 +SET 4308168.80 2594853.82 +SET 43085.94 31956.56 +SET 430891.04 141317.12 +SET 4309043.20 2595380.48 +SET 430905.82 254331.21 +SET 4309056.57 3473660.32 +SET 430912.64 269100.96 +SET 430941.50 245345.45 +SET 4309480.40 2595643.81 +SET 430962.29 298820.91 +SET 4309707.78 3474185.28 +SET 4309917.60 2595907.14 +SET 4310341.50 3241383.00 +SET 431035.80 288780.36 +SET 43104.60 31970.40 +SET 431044.02 298877.58 +SET 4310792.00 2596433.80 +SET 431109.60 141388.80 +SET 431125.75 298934.25 +SET 431147.20 245462.56 +SET 4311666.40 2596960.46 +SET 431178.15 288875.73 +SET 431207.48 298990.92 +SET 4312103.60 2597223.79 +SET 431225.60 288907.52 +SET 4312312.62 3476285.12 +SET 4312346.31 3242890.62 +SET 431273.05 288939.31 +SET 4312963.83 3476810.08 +SET 4312978.00 2597750.45 +SET 4313014.58 3243393.16 +SET 4313415.20 2598013.78 +SET 431368.00 254604.00 +SET 431370.94 299104.26 +SET 4314289.60 2598540.44 +SET 4314917.46 3478384.96 +SET 4315164.00 2599067.10 +SET 431522.06 254694.93 +SET 43153.44 29921.76 +SET 431534.40 299217.60 +SET 431557.75 289130.05 +SET 4316038.40 2599593.76 +SET 4316219.88 3479434.88 +SET 4316355.93 3245905.86 +SET 431652.65 289193.63 +SET 4316871.09 3479959.84 +SET 43169.91 32018.84 +SET 4316912.80 2600120.42 +SET 4317.95 2892.89 +SET 431700.10 289225.42 +SET 4317024.20 3246408.40 +SET 431752.23 348048.48 +SET 4317522.30 3480484.80 +SET 431764.30 245813.89 +SET 4317692.47 3246910.94 +SET 4317787.20 2600647.08 +SET 431795.00 289289.00 +SET 43180.14 27575.52 +SET 431801.40 275755.20 +SET 4318173.51 3481009.76 +SET 431861.32 299444.28 +SET 4318661.60 2601173.74 +SET 43188.57 32032.68 +SET 431889.90 289352.58 +SET 4319.79 3203.96 +SET 431933.76 269738.64 +SET 431937.35 289384.37 +SET 4319697.28 3248418.56 +SET 43197.00 24593.10 +SET 43197.90 32039.60 +SET 431983.84 141675.52 +SET 431984.80 289416.16 +SET 4320127.14 3482584.64 +SET 432024.78 299557.62 +SET 4320365.55 3248921.10 +SET 4320410.40 2602227.06 +SET 4320778.35 3483109.60 +SET 4320847.60 2602490.39 +SET 432093.12 141711.36 +SET 4321033.82 3249423.64 +SET 432106.56 275950.08 +SET 432127.15 289511.53 +SET 4321284.80 2602753.72 +SET 4322080.77 3484159.52 +SET 4322159.20 2603280.38 +SET 432222.05 289575.11 +SET 43225.89 32060.36 +SET 432259.14 276047.52 +SET 432269.50 289606.90 +SET 432269.97 299727.63 +SET 4323383.19 3485209.44 +SET 43235.17 29978.43 +SET 4323908.00 2604333.70 +SET 4324034.40 3485734.40 +SET 432420.96 141818.88 +SET 4324345.20 2604597.03 +SET 432437.25 373807.25 +SET 4324375.17 3251936.34 +SET 432444.32 270057.48 +SET 432446.42 255240.51 +SET 4324782.40 2604860.36 +SET 432515.16 299897.64 +SET 4325219.60 2605123.69 +SET 4325336.82 3486784.32 +SET 432554.20 289797.64 +SET 432564.30 276242.40 +SET 4325711.71 3252941.42 +SET 432596.89 299954.31 +SET 432600.48 255331.44 +SET 43263.21 32088.04 +SET 432699.60 270216.90 +SET 432744.00 289924.80 +SET 432748.80 141926.40 +SET 4327716.52 3254449.04 +SET 4327842.80 2606703.67 +SET 432791.45 289956.59 +SET 432792.80 246399.44 +SET 4327941.66 3488884.16 +SET 432828.00 260696.70 +SET 4328384.79 3254951.58 +SET 432842.08 300124.32 +SET 4328592.87 3489409.12 +SET 4329.12 3210.88 +SET 432908.60 255513.30 +SET 432954.88 270376.32 +SET 432967.36 141998.08 +SET 4329721.33 3255956.66 +SET 432981.25 290083.75 +SET 4329895.29 3490459.04 +SET 432998.50 246516.55 +SET 433022.04 276534.72 +SET 433028.70 290115.54 +SET 433038.96 325645.92 +SET 4330466.00 2608283.65 +SET 4330546.50 3490984.00 +SET 433062.66 255604.23 +SET 433076.15 290147.33 +SET 4331057.87 3256961.74 +SET 433123.60 290179.12 +SET 43316.90 30035.10 +SET 433171.05 290210.91 +SET 433174.62 276632.16 +SET 4331777.60 2609073.64 +SET 4331848.92 3492033.92 +SET 433204.20 246633.66 +SET 433210.16 270535.74 +SET 433218.50 290242.70 +SET 4332214.80 2609336.97 +SET 433250.73 300407.67 +SET 433265.20 260960.03 +SET 4332652.00 2609600.30 +SET 433295.20 142105.60 +SET 4333062.68 3258469.36 +SET 4333151.34 3493083.84 +SET 433327.20 276729.60 +SET 433332.46 300464.34 +SET 433360.85 290338.07 +SET 43337.85 32143.40 +SET 433370.78 255786.09 +SET 4333963.60 2610390.29 +SET 433404.48 142141.44 +SET 433409.90 246750.77 +SET 433414.19 300521.01 +SET 4334400.80 2610653.62 +SET 4335104.97 3494658.72 +SET 433524.84 255877.02 +SET 4335275.20 2611180.28 +SET 4335735.76 3260479.52 +SET 4335756.18 3495183.68 +SET 433577.65 300634.35 +SET 433615.60 246867.88 +SET 433645.55 290528.81 +SET 433659.38 300691.02 +SET 433678.90 255967.95 +SET 4337072.30 3261484.60 +SET 433741.11 300747.69 +SET 4337461.20 2612496.93 +SET 43375.17 32171.08 +SET 4337740.57 3261987.14 +SET 433787.90 290624.18 +SET 4337898.40 2612760.26 +SET 4338.45 3217.80 +SET 433821.30 246984.99 +SET 4338361.02 3497283.52 +SET 43384.16 14228.48 +SET 433841.60 142284.80 +SET 433882.80 290687.76 +SET 4339012.23 3497808.48 +SET 4339077.11 3262992.22 +SET 433930.25 290719.55 +SET 433950.88 142320.64 +SET 43397.60 27101.40 +SET 433986.30 300917.70 +SET 4340084.40 2614076.91 +SET 43402.70 24710.21 +SET 434027.00 247102.10 +SET 4340314.65 3498858.40 +SET 4340521.60 2614340.24 +SET 434068.03 300974.37 +SET 43412.49 32198.76 +SET 434139.60 261486.69 +SET 4341617.07 3499908.32 +SET 4342268.28 3500433.28 +SET 4342270.40 2615393.56 +SET 434231.28 271173.42 +SET 4343086.73 3266007.46 +SET 434309.85 290973.87 +SET 434313.22 301144.38 +SET 4343144.80 2615920.22 +SET 434357.30 291005.66 +SET 434375.50 326651.00 +SET 434388.00 142464.00 +SET 4344221.91 3502008.16 +SET 4344456.40 2616710.21 +SET 434452.20 291069.24 +SET 434476.68 301257.72 +SET 4345091.54 3267515.08 +SET 4345330.80 2617236.87 +SET 434547.10 291132.82 +SET 4345524.33 3503058.08 +SET 4345759.81 3268017.62 +SET 43459.14 32233.36 +SET 434603.26 256513.53 +SET 434606.56 142535.68 +SET 4346428.08 3268520.16 +SET 434644.10 247453.43 +SET 4346826.75 3504108.00 +SET 434700.42 277606.56 +SET 4347764.62 3269525.24 +SET 434803.60 301484.40 +SET 4348129.17 3505157.92 +SET 4348391.20 2619080.18 +SET 43485.30 27770.40 +SET 434853.00 277704.00 +SET 43487.13 32254.12 +SET 4348780.38 3505682.88 +SET 434885.33 301541.07 +SET 4349101.16 3270530.32 +SET 434911.38 256695.39 +SET 43493.44 14264.32 +SET 4349431.59 3506207.84 +SET 43496.46 32261.04 +SET 434967.06 301597.74 +SET 434968.59 375995.39 +SET 4349769.43 3271032.86 +SET 434997.12 271651.68 +SET 435014.00 262013.35 +SET 435043.68 142679.04 +SET 4350437.70 3271535.40 +SET 435048.79 301654.41 +SET 435065.44 256786.32 +SET 435069.05 291482.51 +SET 4350734.01 3507257.76 +SET 43511.65 29151.43 +SET 4351105.97 3272037.94 +SET 435130.52 301711.08 +SET 4351451.60 2620923.49 +SET 4351888.80 2621186.82 +SET 435212.25 301767.75 +SET 43524.45 32281.80 +SET 4352442.51 3273043.02 +SET 435252.40 271811.10 +SET 435306.30 291641.46 +SET 43533.78 32288.72 +SET 435353.75 291673.25 +SET 435371.52 142786.56 +SET 4353990.06 3509882.56 +SET 4354074.80 2622503.47 +SET 43543.11 32295.64 +SET 435451.20 262276.68 +SET 4354512.00 2622766.80 +SET 435457.44 301937.76 +SET 435466.90 247921.87 +SET 4354949.20 2623030.13 +SET 4355292.48 3510932.48 +SET 435539.17 301994.43 +SET 4355823.60 2623556.79 +SET 4355943.69 3511457.44 +SET 43562.09 30205.11 +SET 435638.45 291863.99 +SET 4356452.13 3276058.26 +SET 435659.49 351198.24 +SET 4356698.00 2624083.45 +SET 435681.68 257150.04 +SET 4357.11 3231.64 +SET 435712.04 327656.08 +SET 4357135.20 2624346.78 +SET 435733.35 291927.57 +SET 4357572.40 2624610.11 +SET 435780.80 291959.36 +SET 435784.36 302164.44 +SET 43580.43 32323.32 +SET 435812.37 376724.77 +SET 4358456.94 3277565.88 +SET 4358548.53 3513557.28 +SET 4358884.00 2625400.10 +SET 4359199.74 3514082.24 +SET 4359321.20 2625663.43 +SET 4359793.48 3278570.96 +SET 4359850.95 3514607.20 +SET 43599.09 32337.16 +SET 4360195.60 2626190.09 +SET 436029.55 302334.45 +SET 43606.55 29215.01 +SET 4360632.80 2626453.42 +SET 436065.50 292150.10 +SET 436112.95 292181.89 +SET 436136.48 143037.44 +SET 436143.86 257422.83 +SET 4361944.40 2627243.41 +SET 436234.26 377089.46 +SET 4362381.60 2627506.74 +SET 436245.76 143073.28 +SET 4362455.79 3516707.04 +SET 4362466.56 3280581.12 +SET 436255.30 292277.26 +SET 43627.08 32357.92 +SET 436273.52 272448.78 +SET 436297.92 257513.76 +SET 436310.70 351723.20 +SET 436325.60 262803.34 +SET 436355.04 143109.12 +SET 436356.47 302561.13 +SET 4363693.20 2628296.73 +SET 4364130.40 2628560.06 +SET 4364409.42 3518281.92 +SET 436445.10 292404.42 +SET 436451.98 257604.69 +SET 436492.55 292436.21 +SET 4365.40 2924.68 +SET 4365004.80 2629086.72 +SET 4365060.63 3518806.88 +SET 43655.07 32378.68 +SET 436573.60 143180.80 +SET 436682.35 292563.37 +SET 4367144.45 3284098.90 +SET 436729.80 292595.16 +SET 43673.73 32392.52 +SET 436760.10 257786.55 +SET 436762.80 263066.67 +SET 436777.25 292626.95 +SET 436872.15 292690.53 +SET 436901.44 143288.32 +SET 436906.80 248741.64 +SET 4369376.80 2631720.02 +SET 436967.05 292754.11 +SET 4369814.00 2631983.35 +SET 43701.45 29278.59 +SET 43701.72 32413.28 +SET 437010.72 143324.16 +SET 437039.36 272927.04 +SET 437061.95 292817.69 +SET 4370688.40 2632510.01 +SET 4371.20 1433.60 +SET 437112.50 248858.75 +SET 437141.70 279165.60 +SET 4372.00 2633.30 +SET 43720.38 32427.12 +SET 437200.00 263330.00 +SET 4372000.00 2633300.00 +SET 437204.30 292913.06 +SET 437222.28 258059.34 +SET 437229.28 143395.84 +SET 437255.50 303184.50 +SET 43729.71 32434.04 +SET 437318.20 248975.86 +SET 4373827.15 3289124.30 +SET 43739.04 32440.96 +SET 437394.10 293040.22 +SET 4374177.57 3526156.32 +SET 437489.00 293103.80 +SET 437500.69 303354.51 +SET 43753.04 25824.12 +SET 43757.70 32454.80 +SET 4375831.96 3290631.92 +SET 4376131.20 3527731.20 +SET 437631.35 293199.17 +SET 437666.40 143539.20 +SET 43767.03 32461.72 +SET 437678.80 293230.96 +SET 4376782.41 3528256.16 +SET 437716.85 329163.70 +SET 4377168.50 3291637.00 +SET 4377433.62 3528781.12 +SET 437745.88 303524.52 +SET 437775.68 143575.04 +SET 437821.15 293326.33 +SET 437827.61 303581.19 +SET 43785.69 32475.56 +SET 4378505.04 3292642.08 +SET 437868.60 293358.12 +SET 4379173.31 3293144.62 +SET 4379387.25 3530356.00 +SET 43795.02 32482.48 +SET 437991.07 303694.53 +SET 4380509.85 3294149.70 +SET 438058.40 293485.28 +SET 438103.52 143682.56 +SET 4381178.12 3294652.24 +SET 43814.10 24944.43 +SET 438146.64 258604.92 +SET 438154.53 303807.87 +SET 438209.76 279847.68 +SET 43821.28 14371.84 +SET 438212.80 143718.40 +SET 43823.01 32503.24 +SET 438295.65 293644.23 +SET 438315.76 273724.14 +SET 4383294.51 3533505.76 +SET 438346.70 249561.41 +SET 4383945.72 3534030.72 +SET 43841.67 32517.08 +SET 438431.36 143790.08 +SET 4384519.47 3297164.94 +SET 438485.45 293771.39 +SET 4385187.74 3297667.48 +SET 438540.64 143825.92 +SET 438552.40 249678.52 +SET 4385856.01 3298170.02 +SET 4386524.28 3298672.56 +SET 4386550.56 3536130.56 +SET 438667.50 280140.00 +SET 4387192.55 3299175.10 +SET 4387201.77 3536655.52 +SET 438759.20 143897.60 +SET 43876.56 37927.76 +SET 438765.60 379277.60 +SET 4387852.98 3537180.48 +SET 438826.32 274042.98 +SET 438868.48 143933.44 +SET 43888.32 32551.68 +SET 43889.01 30431.79 +SET 438890.10 304317.90 +SET 43891.25 29405.75 +SET 438915.54 353823.04 +SET 438948.80 264383.32 +SET 438963.80 249912.74 +SET 43897.65 32558.60 +SET 438971.83 304374.57 +SET 438972.66 280334.88 +SET 4389806.61 3538755.36 +SET 439007.40 294121.08 +SET 4390533.90 3301687.80 +SET 43907.10 25915.05 +SET 439087.04 144005.12 +SET 439102.30 294184.66 +SET 43916.31 32572.44 +SET 439217.02 304544.58 +SET 4392411.45 3540855.20 +SET 4392538.71 3303195.42 +SET 439298.75 304601.25 +SET 43930.56 14407.68 +SET 4393206.98 3303697.96 +SET 439336.88 274361.82 +SET 43934.97 32586.28 +SET 439375.20 250146.96 +SET 43938.70 29437.54 +SET 439380.48 304657.92 +SET 43943.04 28062.72 +SET 439434.45 294407.19 +SET 43944.30 32593.20 +SET 4394543.52 3304703.04 +SET 4395016.29 3542955.04 +SET 43953.63 32600.12 +SET 4395880.06 3305708.12 +SET 439625.67 304827.93 +SET 439707.40 304884.60 +SET 439719.15 294597.93 +SET 439735.56 280822.08 +SET 439786.60 250381.18 +SET 439789.13 304941.27 +SET 43981.62 32620.88 +SET 439823.20 264909.98 +SET 4398272.34 3545579.84 +SET 439841.30 259605.15 +SET 43986.15 29469.33 +SET 439861.50 294693.30 +SET 439870.86 304997.94 +SET 439888.14 280919.52 +SET 4398923.55 3546104.80 +SET 439956.40 294756.88 +SET 439961.28 144291.84 +SET 439992.30 250498.29 +SET 4401894.49 3310230.98 +SET 44019.80 25061.54 +SET 440193.30 281114.40 +SET 4403482.02 3549779.52 +SET 440358.00 274999.50 +SET 440361.24 305337.96 +SET 440389.93 331173.86 +SET 44039.84 14443.52 +SET 440403.70 250732.51 +SET 4404133.23 3550304.48 +SET 440453.16 380736.36 +SET 4404567.57 3312241.14 +SET 44046.93 32669.32 +SET 4404784.44 3550829.44 +SET 4406086.86 3551879.36 +SET 440609.40 250849.62 +SET 440616.96 144506.88 +SET 44065.59 32683.16 +SET 440697.60 265436.64 +SET 4407240.65 3314251.30 +SET 440726.24 144542.72 +SET 4407389.28 3552929.28 +SET 44074.92 32690.08 +SET 440769.89 305621.31 +SET 4407908.92 3314753.84 +SET 4408040.49 3553454.24 +SET 44081.05 29532.91 +SET 440851.62 305677.98 +SET 440857.95 295360.89 +SET 4408577.19 3315256.38 +SET 4408691.70 3553979.20 +SET 440919.72 260241.66 +SET 44093.58 32703.92 +SET 4409342.91 3554504.16 +SET 440944.80 144614.40 +SET 4409913.73 3316261.46 +SET 441000.30 295456.26 +SET 44102.91 32710.84 +SET 44105.82 33167.64 +SET 441058.20 331676.40 +SET 4410582.00 3316764.00 +SET 441096.81 305847.99 +SET 441123.84 275477.76 +SET 4411296.54 3556079.04 +SET 441142.65 295551.63 +SET 441163.36 144686.08 +SET 441178.54 305904.66 +SET 4411918.54 3317769.08 +SET 4411947.75 3556604.00 +SET 44121.57 32724.68 +SET 441227.84 260423.52 +SET 441261.36 281796.48 +SET 441296.94 381465.74 +SET 4413901.38 3558178.88 +SET 441413.94 281893.92 +SET 441423.73 306074.67 +SET 441427.35 295742.37 +SET 4414591.62 3319779.24 +SET 441520.38 355922.88 +SET 4415203.80 3559228.80 +SET 441535.96 260605.38 +SET 441569.70 295837.74 +SET 44158.89 32752.36 +SET 4415855.01 3559753.76 +SET 441587.19 306188.01 +SET 441634.40 275796.60 +SET 4416596.43 3321286.86 +SET 441664.60 295901.32 +SET 44168.22 32759.28 +SET 441712.05 295933.11 +SET 441718.83 381830.43 +SET 441719.10 282088.80 +SET 4417932.97 3322291.94 +SET 441806.95 295996.69 +SET 441832.38 306358.02 +SET 441843.60 251552.28 +SET 441844.08 260787.24 +SET 44186.88 32773.12 +SET 4418601.24 3322794.48 +SET 441871.68 282186.24 +SET 441901.85 296060.27 +SET 4419111.06 3562378.56 +SET 441914.11 306414.69 +SET 441928.32 144936.96 +SET 441949.30 296092.06 +SET 44196.21 32780.04 +SET 4419762.27 3562903.52 +SET 442009.20 266226.63 +SET 4420413.48 3563428.48 +SET 442049.30 251669.39 +SET 44205.54 32786.96 +SET 4420606.05 3324302.10 +SET 442091.65 296187.43 +SET 442139.10 296219.22 +SET 442152.20 260969.10 +SET 4422367.11 3565003.36 +SET 44224.20 32800.80 +SET 442241.03 306641.37 +SET 442394.74 332681.48 +SET 4424.82 2825.76 +SET 44242.86 32814.64 +SET 442423.80 296409.96 +SET 4424320.74 3566578.24 +SET 4424615.67 3327317.34 +SET 44248.20 28257.60 +SET 442486.22 306811.38 +SET 442562.61 382559.81 +SET 4425623.16 3567628.16 +SET 44258.40 14515.20 +SET 4425952.21 3328322.42 +SET 44270.85 32835.40 +SET 4427288.75 3329327.50 +SET 442755.95 296632.49 +SET 442768.44 261332.82 +SET 442787.16 282770.88 +SET 44280.18 32842.32 +SET 442813.14 307038.06 +SET 4428228.00 3569728.00 +SET 442850.85 296696.07 +SET 4428879.21 3570252.96 +SET 442911.84 145259.52 +SET 442922.50 261423.75 +SET 4429530.42 3570777.92 +SET 44297.66 30715.14 +SET 442976.60 307151.40 +SET 4429961.83 3331337.66 +SET 443021.12 145295.36 +SET 443063.01 333184.02 +SET 4430630.10 3331840.20 +SET 443076.56 261514.68 +SET 443077.80 252254.94 +SET 443088.10 296855.02 +SET 443130.40 145331.20 +SET 443140.06 307264.74 +SET 4431484.05 3572352.80 +SET 443183.00 296918.60 +SET 4432135.26 3572877.76 +SET 443221.79 307321.41 +SET 443230.62 261605.61 +SET 443239.68 145367.04 +SET 443283.50 252372.05 +SET 443325.35 297013.97 +SET 4433437.68 3573927.68 +SET 443348.96 145402.88 +SET 443372.80 297045.76 +SET 443384.68 261696.54 +SET 443397.48 283160.64 +SET 4433971.45 3334352.90 +SET 44345.49 32890.76 +SET 4434639.72 3334855.44 +SET 443466.98 307491.42 +SET 44354.82 32897.68 +SET 443562.60 297172.92 +SET 4435976.26 3335860.52 +SET 443610.05 297204.71 +SET 443657.50 297236.50 +SET 443676.64 277071.96 +SET 443692.80 261878.40 +SET 443694.90 252606.27 +SET 443702.64 283355.52 +SET 443731.28 333686.56 +SET 443786.08 145546.24 +SET 443793.90 307718.10 +SET 44382.81 32918.44 +SET 4438649.34 3337870.68 +SET 443895.36 145582.08 +SET 4439317.61 3338373.22 +SET 44400.78 28355.04 +SET 444004.64 145617.92 +SET 444039.09 307888.11 +SET 4441.08 3293.92 +SET 444106.30 252840.49 +SET 444120.82 307944.78 +SET 44413.20 29755.44 +SET 4441322.42 3339880.84 +SET 444154.98 262151.19 +SET 444160.38 283647.84 +SET 44418.72 27739.08 +SET 444187.20 277390.80 +SET 4441903.41 3580752.16 +SET 444202.55 308001.45 +SET 4442554.62 3581277.12 +SET 44431.20 25295.76 +SET 4443205.83 3581802.08 +SET 4443327.23 3341388.46 +SET 444366.01 308114.79 +SET 4443995.50 3341891.00 +SET 444442.48 277550.22 +SET 444463.10 262333.05 +SET 4444663.77 3342393.54 +SET 44448.12 32966.88 +SET 4445159.46 3583376.96 +SET 444551.04 145797.12 +SET 444559.05 297840.51 +SET 44460.65 29787.23 +SET 4446000.31 3343398.62 +SET 4446461.88 3584426.88 +SET 44466.78 32980.72 +SET 444660.32 145832.96 +SET 4446668.58 3343901.16 +SET 444701.40 297935.88 +SET 44476.96 14586.88 +SET 444770.70 284037.60 +SET 4447764.30 3585476.80 +SET 4448673.39 3345408.78 +SET 444953.04 277869.06 +SET 444986.10 298126.62 +SET 4450.41 3300.84 +SET 445019.85 308568.15 +SET 4450369.14 3587576.64 +SET 44504.10 33008.40 +SET 445101.58 308624.82 +SET 445128.45 298221.99 +SET 4451671.56 3588626.56 +SET 445208.32 278028.48 +SET 44522.76 33022.24 +SET 445223.35 298285.57 +SET 445233.40 262787.70 +SET 44532.09 33029.16 +SET 445381.02 284427.36 +SET 445427.64 359072.64 +SET 4454276.40 3590726.40 +SET 445428.50 308851.50 +SET 445463.60 278187.90 +SET 445510.23 308908.17 +SET 44553.36 28452.48 +SET 4455356.09 3350434.18 +SET 445546.20 253660.26 +SET 445591.96 308964.84 +SET 445643.84 146155.52 +SET 445673.69 309021.51 +SET 44569.41 33056.84 +SET 445695.58 263060.49 +SET 445718.88 278347.32 +SET 445736.09 335194.18 +SET 4457360.90 3351941.80 +SET 445745.30 298635.26 +SET 445751.90 253777.37 +SET 44578.74 33063.76 +SET 445792.75 298667.05 +SET 4458183.66 3593876.16 +SET 445840.20 298698.84 +SET 445849.64 263151.42 +SET 4458697.44 3352946.88 +SET 44588.07 33070.68 +SET 4458834.87 3594401.12 +SET 445887.65 298730.63 +SET 4459.74 3307.76 +SET 44594.40 26859.66 +SET 44597.40 33077.60 +SET 445971.68 146263.04 +SET 445982.55 298794.21 +SET 4460.30 2988.26 +SET 44603.00 29882.60 +SET 446030.00 298826.00 +SET 446124.90 298889.58 +SET 4462038.79 3355459.58 +SET 446219.80 298953.16 +SET 446245.80 309418.20 +SET 44625.39 33098.36 +SET 4462742.13 3597550.88 +SET 446296.50 285012.00 +SET 446311.82 263424.21 +SET 4463375.33 3356464.66 +SET 44634.72 33105.28 +SET 44636.90 25412.87 +SET 446362.15 299048.53 +SET 446369.00 254128.70 +SET 446381.20 268859.93 +SET 446404.36 335696.72 +SET 446449.08 285109.44 +SET 446457.05 299112.11 +SET 446484.72 278825.58 +SET 44650.45 29914.39 +SET 4465346.97 3599650.72 +SET 4465380.14 3357972.28 +SET 446599.40 299207.48 +SET 446601.66 285206.88 +SET 4466048.41 3358474.82 +SET 446619.94 263606.07 +SET 44672.04 33132.96 +SET 446730.06 360122.56 +SET 446736.18 309758.22 +SET 44674.00 27898.50 +SET 446740.00 278985.00 +SET 44677.40 26369.70 +SET 446774.00 263697.00 +SET 446780.40 254362.92 +SET 4468053.22 3359982.44 +SET 446836.65 299366.43 +SET 4468603.02 3602275.52 +SET 4468721.49 3360484.98 +SET 446884.10 299398.22 +SET 4469254.23 3602800.48 +SET 4469389.76 3360987.52 +SET 446955.20 146585.60 +SET 44697.90 29946.18 +SET 446979.00 299461.80 +SET 446981.37 309928.23 +SET 446995.28 279144.42 +SET 447.84 332.16 +SET 4470058.03 3361490.06 +SET 447059.40 285499.20 +SET 447063.10 309984.90 +SET 447064.48 146621.44 +SET 4471207.86 3604375.36 +SET 447144.83 310041.57 +SET 447168.80 299588.96 +SET 447191.80 254597.14 +SET 447203.40 386571.40 +SET 447211.98 285596.64 +SET 447216.25 299620.75 +SET 447226.56 310098.24 +SET 447236.18 263969.79 +SET 4472510.28 3605425.28 +SET 447255.60 269386.59 +SET 44728.02 33174.48 +SET 447308.29 310154.91 +SET 4473161.49 3605950.24 +SET 447358.60 299716.12 +SET 447381.27 360647.52 +SET 4473812.70 3606475.20 +SET 447390.02 310211.58 +SET 447406.05 299747.91 +SET 4474067.65 3364505.30 +SET 4474463.91 3607000.16 +SET 44746.68 33188.32 +SET 447505.84 279463.26 +SET 4475115.12 3607525.12 +SET 447610.88 146800.64 +SET 447625.29 386936.09 +SET 4476740.73 3366515.46 +SET 447692.80 269649.92 +SET 4477068.75 3609100.00 +SET 447716.94 310438.26 +SET 447738.20 299970.44 +SET 447761.12 279622.68 +SET 447785.65 300002.23 +SET 447798.67 310494.93 +SET 4478.40 3321.60 +SET 4478077.27 3367520.54 +SET 447822.30 285986.40 +SET 447829.44 146872.32 +SET 447880.40 310551.60 +SET 447880.55 300065.81 +SET 447938.72 146908.16 +SET 4479673.59 3611199.84 +SET 447974.88 286083.84 +SET 447975.45 300129.39 +SET 448006.48 264424.44 +SET 448014.60 255065.58 +SET 448016.40 279782.10 +SET 4480324.80 3611724.80 +SET 448070.35 300192.97 +SET 4480750.35 3369530.70 +SET 448165.25 300256.55 +SET 44821.32 33243.68 +SET 448220.30 255182.69 +SET 448271.68 279941.52 +SET 4482755.16 3371038.32 +SET 4482929.64 3613824.64 +SET 44831.46 26460.63 +SET 448314.60 264606.30 +SET 4483423.43 3371540.86 +SET 448355.05 300383.71 +SET 4483580.85 3614349.60 +SET 44839.98 33257.52 +SET 44840.25 30041.55 +SET 448402.50 300415.50 +SET 4484091.70 3372043.40 +SET 448432.62 286376.16 +SET 448452.51 310948.29 +SET 448469.07 387665.47 +SET 448485.12 147087.36 +SET 44849.31 33264.44 +SET 448497.40 300479.08 +SET 448534.24 311004.96 +SET 4485534.48 3615924.48 +SET 44858.52 28647.36 +SET 44858.64 33271.36 +SET 448585.20 286473.60 +SET 448594.40 147123.20 +SET 4486836.90 3616974.40 +SET 448687.20 300606.24 +SET 4487.73 3328.52 +SET 448703.68 147159.04 +SET 448734.65 300638.03 +SET 4488139.32 3618024.32 +SET 448829.55 300701.61 +SET 44886.63 33292.12 +SET 4488769.59 3375561.18 +SET 448890.36 286668.48 +SET 448922.24 147230.72 +SET 44895.96 33299.04 +SET 448971.90 300796.98 +SET 449019.35 300828.77 +SET 449042.94 286765.92 +SET 4490744.16 3620124.16 +SET 4490774.40 3377068.80 +SET 449084.90 265060.95 +SET 449106.35 311401.65 +SET 449161.70 300924.14 +SET 449209.15 300955.93 +SET 44923.95 33319.80 +SET 449238.96 265151.88 +SET 449250.08 147338.24 +SET 449256.60 300987.72 +SET 4492697.79 3621699.04 +SET 44929.28 28057.92 +SET 449312.85 388394.85 +SET 44933.28 33326.72 +SET 449334.90 362222.40 +SET 449359.36 147374.08 +SET 449393.02 265242.81 +SET 4494000.21 3622748.96 +SET 449446.40 301114.88 +SET 4494651.42 3623273.92 +SET 449468.64 147409.92 +SET 449500.68 287058.24 +SET 449547.08 265333.74 +SET 449577.92 147445.76 +SET 449588.75 301210.25 +SET 4496120.56 3381089.12 +SET 449653.26 287155.68 +SET 4496605.05 3624848.80 +SET 4496788.83 3381591.66 +SET 4497.06 3335.44 +SET 44970.60 33354.40 +SET 449701.14 265424.67 +SET 4497256.26 3625373.76 +SET 449734.74 388759.54 +SET 449745.71 338209.42 +SET 449760.19 311855.01 +SET 449796.48 147517.44 +SET 449805.84 287253.12 +SET 4498125.37 3382596.74 +SET 449841.92 311911.68 +SET 44985.52 26551.56 +SET 4499209.89 3626948.64 +SET 4499461.91 3383601.82 +SET 450009.26 265606.53 +SET 450015.80 301496.36 +SET 450063.25 301528.15 +SET 450071.60 256236.68 +SET 450110.70 301559.94 +SET 450111.00 287448.00 +SET 450158.15 301591.73 +SET 450168.84 312138.36 +SET 4501814.73 3629048.48 +SET 4502134.99 3385611.98 +SET 4502465.94 3629573.44 +SET 450250.57 312195.03 +SET 450253.05 301655.31 +SET 450263.58 287545.44 +SET 4502803.26 3386114.52 +SET 45030.05 30168.71 +SET 450317.38 265788.39 +SET 45033.23 31225.17 +SET 450342.88 147696.64 +SET 450347.95 301718.89 +SET 450395.40 301750.68 +SET 4504139.80 3387119.60 +SET 450414.03 312308.37 +SET 450452.16 147732.48 +SET 4504808.07 3387622.14 +SET 450561.44 147768.32 +SET 4505721.99 3632198.24 +SET 450578.52 389488.92 +SET 450585.20 301877.84 +SET 45063.90 33423.60 +SET 450632.65 301909.63 +SET 450680.10 301941.42 +SET 4507024.41 3633248.16 +SET 450727.55 301973.21 +SET 45073.23 33430.52 +SET 450753.20 271493.23 +SET 4507675.62 3633773.12 +SET 450775.00 302005.00 +SET 450779.56 266061.18 +SET 4508326.83 3634298.08 +SET 4508978.04 3634823.04 +SET 450904.41 312648.39 +SET 450917.35 302100.37 +SET 4509485.96 3391139.92 +SET 450986.14 312705.06 +SET 450998.56 147911.68 +SET 451000.41 389853.61 +SET 451012.25 302163.95 +SET 451026.48 288032.64 +SET 451079.76 281695.14 +SET 4510822.50 3392145.00 +SET 451107.15 302227.53 +SET 451107.84 147947.52 +SET 4512159.04 3393150.08 +SET 451217.12 147983.36 +SET 451231.33 312875.07 +SET 45124.95 30232.29 +SET 451241.74 266333.97 +SET 451249.50 302322.90 +SET 45129.21 33472.04 +SET 451305.80 256939.34 +SET 451326.40 148019.20 +SET 451344.40 302386.48 +SET 4513536.51 3638497.76 +SET 45138.54 33478.96 +SET 45139.58 26642.49 +SET 451391.85 302418.27 +SET 451395.80 266424.90 +SET 45142.23 39021.83 +SET 451422.30 390218.30 +SET 451476.52 313045.08 +SET 4514832.12 3395160.24 +SET 4514838.93 3639547.68 +SET 4515.72 3349.28 +SET 451511.50 257056.45 +SET 451534.20 302513.64 +SET 451544.96 148090.88 +SET 451549.86 266515.83 +SET 45157.20 33492.80 +SET 451581.65 302545.43 +SET 4516141.35 3640597.60 +SET 451654.24 148126.72 +SET 45166.53 33499.72 +SET 4516792.56 3641122.56 +SET 451721.71 313215.09 +SET 4517505.20 3397170.40 +SET 45184.56 28217.34 +SET 451844.19 390582.99 +SET 451857.98 266697.69 +SET 451922.90 257290.67 +SET 4519510.01 3398678.02 +SET 451961.25 302799.75 +SET 451982.08 148234.24 +SET 452008.70 302831.54 +SET 4520178.28 3399180.56 +SET 4520699.82 3644272.32 +SET 452094.54 288714.72 +SET 452103.60 302895.12 +SET 452151.05 302926.91 +SET 452166.10 266879.55 +SET 452200.64 148305.92 +SET 4522002.24 3645322.24 +SET 4522183.09 3400688.18 +SET 4522653.45 3645847.20 +SET 452320.16 266970.48 +SET 4523304.66 3646372.16 +SET 4523519.63 3401693.26 +SET 452356.16 282492.24 +SET 45241.17 33555.08 +SET 45241.92 14837.76 +SET 452418.79 340219.58 +SET 452435.75 303117.65 +SET 452483.20 303149.44 +SET 4524856.17 3402698.34 +SET 4525.05 3356.20 +SET 45250.50 33562.00 +SET 452528.48 148413.44 +SET 4525524.44 3403200.88 +SET 452578.10 303213.02 +SET 4525909.50 3648472.00 +SET 452620.74 313838.46 +SET 452625.55 303244.81 +SET 4526560.71 3648996.96 +SET 45267.30 30327.66 +SET 4526860.98 3404205.96 +SET 452687.97 391312.37 +SET 4527529.25 3404708.50 +SET 45278.42 31395.18 +SET 45278.49 33582.76 +SET 452815.35 303371.97 +SET 452857.44 289201.92 +SET 452865.93 314008.47 +SET 452866.72 282811.08 +SET 45287.82 33589.68 +SET 45293.64 26733.42 +SET 452936.40 267334.20 +SET 452939.20 272809.88 +SET 4529534.06 3406216.12 +SET 452957.70 303467.34 +SET 452965.60 148556.80 +SET 45297.15 33596.60 +SET 453010.02 289299.36 +SET 4530202.33 3406718.66 +SET 4530467.97 3652146.72 +SET 453052.60 303530.92 +SET 45306.48 33603.52 +SET 453074.88 148592.64 +SET 4530870.60 3407221.20 +SET 453100.05 303562.71 +SET 453122.00 282970.50 +SET 45314.75 30359.45 +SET 45315.81 33610.44 +SET 453184.16 148628.48 +SET 453192.85 314235.15 +SET 453194.95 303626.29 +SET 4532207.14 3408226.28 +SET 45325.14 33617.36 +SET 453274.58 314291.82 +SET 453293.44 148664.32 +SET 4533072.81 3654246.56 +SET 453315.18 289494.24 +SET 453337.30 303721.66 +SET 453362.80 258110.44 +SET 4533724.02 3654771.52 +SET 453377.28 283129.92 +SET 453384.75 303753.45 +SET 453402.72 148700.16 +SET 45343.80 33631.20 +SET 453432.20 303785.24 +SET 453467.76 289591.68 +SET 45351.20 14873.60 +SET 453531.75 392041.75 +SET 453574.55 303880.61 +SET 45360.15 31451.85 +SET 453621.28 148771.84 +SET 453632.56 283289.34 +SET 4536328.86 3656871.36 +SET 453683.23 314575.17 +SET 4536885.03 3411744.06 +SET 453706.70 267788.85 +SET 45371.79 33651.96 +SET 4537631.28 3657921.28 +SET 4538221.57 3412749.14 +SET 4538282.49 3658446.24 +SET 453859.25 304071.35 +SET 453860.76 267879.78 +SET 453928.42 314745.18 +SET 453954.15 304134.93 +SET 4540226.38 3414256.76 +SET 4540236.12 3660021.12 +SET 454049.05 304198.51 +SET 4540887.33 3660546.08 +SET 454143.95 304262.09 +SET 454168.88 268061.64 +SET 454185.60 258578.88 +SET 454191.40 304293.88 +SET 454238.85 304325.67 +SET 454250.80 273599.87 +SET 454255.34 314971.86 +SET 4542840.96 3662120.96 +SET 4542899.46 3416266.92 +SET 4543.71 3370.04 +SET 4543492.17 3662645.92 +SET 454398.40 283767.60 +SET 45441.88 31508.52 +SET 4544143.38 3663170.88 +SET 45442.36 34172.72 +SET 454423.60 341727.20 +SET 454477.00 268243.50 +SET 4544794.59 3663695.84 +SET 4544904.27 3417774.54 +SET 454523.55 304516.41 +SET 45455.76 33714.24 +SET 45457.10 30454.82 +SET 45459.70 25881.31 +SET 454631.06 268334.43 +SET 4546748.22 3665270.72 +SET 45468.84 29037.12 +SET 454688.00 273863.20 +SET 454745.72 315311.88 +SET 454785.12 268425.36 +SET 454802.70 258930.21 +SET 454823.36 149166.08 +SET 4548245.62 3420287.24 +SET 4549353.06 3667370.56 +SET 4549582.16 3421292.32 +SET 454993.56 290566.08 +SET 4550004.27 3667895.52 +SET 4550655.48 3668420.48 +SET 455072.64 315538.56 +SET 4550918.70 3422297.40 +SET 455092.95 304897.89 +SET 455151.20 149273.60 +SET 455164.24 284245.86 +SET 455195.79 366947.04 +SET 455219.31 393500.51 +SET 4553.04 3376.96 +SET 45539.73 33776.52 +SET 455399.56 315765.24 +SET 455401.36 268789.08 +SET 455425.10 305120.42 +SET 4554260.05 3424810.10 +SET 455481.29 315821.91 +SET 45552.00 30518.40 +SET 455567.45 305215.79 +SET 455603.88 290955.84 +SET 4556264.86 3426317.72 +SET 45564.12 39386.52 +SET 455644.75 315935.25 +SET 45569.76 14945.28 +SET 4556933.13 3426820.26 +SET 455757.25 305342.95 +SET 45577.05 33804.20 +SET 4558269.67 3427825.34 +SET 455831.20 259515.76 +SET 455847.00 367472.00 +SET 455852.15 305406.53 +SET 45586.38 33811.12 +SET 455863.54 269061.87 +SET 455889.94 316105.26 +SET 4558937.94 3428327.88 +SET 455909.04 291150.72 +SET 4559121.21 3675244.96 +SET 455916.16 149524.48 +SET 4559606.21 3428830.42 +SET 455999.60 274653.19 +SET 456036.90 259632.87 +SET 45605.04 33824.96 +SET 4561074.84 3676819.84 +SET 4561726.05 3677344.80 +SET 456214.20 291345.60 +SET 456231.75 305660.85 +SET 4562947.56 3431343.12 +SET 4563028.47 3678394.72 +SET 456366.78 291443.04 +SET 4563679.68 3678919.68 +SET 456374.10 305756.22 +SET 45642.36 33852.64 +SET 456479.78 269425.59 +SET 456498.21 367996.96 +SET 4564982.10 3679969.60 +SET 45651.69 33859.56 +SET 456563.90 305883.38 +SET 4565633.31 3680494.56 +SET 4566288.91 3433855.82 +SET 45665.40 25998.42 +SET 456671.94 291637.92 +SET 456706.25 305978.75 +SET 456707.24 316671.96 +SET 4567586.94 3682069.44 +SET 456787.90 269607.45 +SET 4568293.72 3435363.44 +SET 456870.70 316785.30 +SET 456896.05 306105.91 +SET 456941.96 269698.38 +SET 45695.12 28536.18 +SET 456951.20 285361.80 +SET 456952.43 316841.97 +SET 456990.95 306169.49 +SET 457065.40 260218.42 +SET 45707.67 33901.08 +SET 4570842.99 3684694.24 +SET 4571.70 3390.80 +SET 457115.89 316955.31 +SET 4571494.20 3685219.20 +SET 4571635.07 3437876.14 +SET 45717.00 33908.00 +SET 457197.62 317011.98 +SET 457206.48 285521.22 +SET 4572145.41 3685744.16 +SET 457250.08 269880.24 +SET 457271.10 260335.53 +SET 457275.65 306360.23 +SET 457279.35 317068.65 +SET 457311.20 275443.18 +SET 457323.10 306392.02 +SET 4573639.88 3439383.76 +SET 457434.84 292125.12 +SET 45744.99 33928.76 +SET 457442.81 317181.99 +SET 457476.80 260452.64 +SET 4574976.42 3440388.84 +SET 457524.54 317238.66 +SET 45754.32 33935.68 +SET 45755.82 27006.21 +SET 457555.36 150062.08 +SET 4576.88 3173.52 +SET 4576052.67 3688893.92 +SET 4576312.96 3441393.92 +SET 457702.70 306646.34 +SET 457748.40 275706.51 +SET 4577649.50 3442399.00 +SET 457797.60 306709.92 +SET 45782.31 33956.44 +SET 4578317.77 3442901.54 +SET 457845.05 306741.71 +SET 457892.50 306773.50 +SET 457892.58 292417.44 +SET 4578986.04 3443404.08 +SET 4579308.72 3691518.72 +SET 4579654.31 3443906.62 +SET 458014.92 317578.68 +SET 458045.16 292514.88 +SET 458093.90 260803.97 +SET 458096.65 317635.35 +SET 4581.03 3397.72 +SET 45810.30 33977.20 +SET 458177.20 306964.24 +SET 458197.74 292612.32 +SET 458260.11 317748.69 +SET 458299.60 260921.08 +SET 458341.84 317805.36 +SET 458350.32 292709.76 +SET 45838.29 33997.96 +SET 458433.22 344742.44 +SET 45847.62 34004.88 +SET 458505.30 261038.19 +SET 4585169.61 3696243.36 +SET 458538.88 150384.64 +SET 458587.03 317975.37 +SET 4586337.01 3448932.02 +SET 458636.62 270698.61 +SET 458648.16 150420.48 +SET 458651.70 307282.14 +SET 458655.48 292904.64 +SET 45866.28 34018.72 +SET 458668.76 318032.04 +SET 4587123.24 3697818.24 +SET 458746.60 307345.72 +SET 458750.49 318088.71 +SET 458790.68 270789.54 +SET 458832.22 318145.38 +SET 45884.15 30740.93 +SET 458913.95 318202.05 +SET 458936.40 307472.88 +SET 45894.27 34039.48 +SET 4589728.08 3699918.08 +SET 458976.00 150528.00 +SET 458993.44 286637.16 +SET 4590.36 3404.64 +SET 45903.60 34046.40 +SET 459031.30 307536.46 +SET 4590379.29 3700443.04 +SET 459060.00 276496.50 +SET 459078.75 307568.25 +SET 459085.28 150563.84 +SET 45909.88 27097.14 +SET 459098.80 270971.40 +SET 459101.49 345244.98 +SET 459103.05 370096.80 +SET 459113.22 293196.96 +SET 459126.20 307600.04 +SET 459159.14 318372.06 +SET 4591681.71 3701492.96 +SET 459194.56 150599.68 +SET 45922.26 34060.24 +SET 4592351.44 3453454.88 +SET 45926.58 29329.44 +SET 459303.84 150635.52 +SET 45931.60 30772.72 +SET 45932.26 31848.54 +SET 459328.10 261506.63 +SET 459363.45 307758.99 +SET 459406.92 271153.26 +SET 459410.90 307790.78 +SET 459413.12 150671.36 +SET 4594286.55 3703592.80 +SET 4594356.25 3454962.50 +SET 459438.21 397147.41 +SET 4594937.76 3704117.76 +SET 459505.80 307854.36 +SET 459522.40 150707.20 +SET 459553.25 307886.15 +SET 459560.98 271244.19 +SET 45959.58 34087.92 +SET 4596240.18 3705167.68 +SET 45968.91 34094.84 +SET 4597029.33 3456972.66 +SET 459740.96 150778.88 +SET 459754.26 370621.76 +SET 459769.76 345747.52 +SET 45978.24 34101.76 +SET 45979.05 30804.51 +SET 4598193.81 3706742.56 +SET 4598365.87 3457977.74 +SET 459837.95 308076.89 +SET 459850.24 150814.72 +SET 459869.10 271426.05 +SET 45987.57 34108.68 +SET 459894.71 318882.09 +SET 4599034.14 3458480.28 +SET 459934.40 277023.16 +SET 459959.52 150850.56 +SET 45996.90 34115.60 +SET 460028.70 293781.60 +SET 460058.17 318995.43 +SET 46006.23 34122.52 +SET 46006.88 15088.64 +SET 460068.80 150886.40 +SET 46013.99 31905.21 +SET 460139.90 319052.10 +SET 46015.56 34129.44 +SET 460178.08 150922.24 +SET 4602.65 3083.63 +SET 46026.50 30836.30 +SET 460265.00 308363.00 +SET 460281.99 397876.79 +SET 4603043.76 3461495.52 +SET 460333.86 293976.48 +SET 46034.22 34143.28 +SET 460438.03 346250.06 +SET 460454.80 308490.16 +SET 460485.34 271789.77 +SET 460548.55 319335.45 +SET 460549.70 308553.74 +SET 460562.30 262209.29 +SET 460615.20 151065.60 +SET 46063.94 27188.07 +SET 460644.60 308617.32 +SET 460703.88 398241.48 +SET 460786.95 308712.69 +SET 46079.16 29426.88 +SET 4607961.96 3714616.96 +SET 460833.76 151137.28 +SET 4608389.92 3465515.84 +SET 460875.47 319562.13 +SET 460929.30 308808.06 +SET 460947.52 272062.56 +SET 46095.72 31961.88 +SET 4609726.46 3466520.92 +SET 460973.70 262443.51 +SET 460976.75 308839.85 +SET 46099.53 34191.72 +SET 4609915.59 3716191.84 +SET 461024.20 308871.64 +SET 4610394.73 3467023.46 +SET 461052.32 151208.96 +SET 461096.76 294463.68 +SET 461101.58 272153.49 +SET 461106.30 346752.60 +SET 4611063.00 3467526.00 +SET 461120.66 319732.14 +SET 461125.77 398606.17 +SET 46116.16 15124.48 +SET 461166.55 308967.01 +SET 46118.19 34205.56 +SET 4611869.22 3717766.72 +SET 461202.39 319788.81 +SET 46121.40 30899.88 +SET 461214.00 308998.80 +SET 4612520.43 3718291.68 +SET 461255.64 272244.42 +SET 461261.45 309030.59 +SET 46127.52 34212.48 +SET 4613067.81 3469033.62 +SET 46136.85 34219.40 +SET 4613736.08 3469536.16 +SET 4613822.85 3719341.60 +SET 461385.10 262677.73 +SET 461409.70 272335.35 +SET 4614474.06 3719866.56 +SET 461489.44 151352.32 +SET 461498.70 309189.54 +SET 4615125.27 3720391.52 +SET 461546.24 288231.36 +SET 461554.50 294756.00 +SET 4615776.48 3720916.48 +SET 4616409.16 3471546.32 +SET 461683.20 278076.48 +SET 461707.89 372196.64 +SET 4617078.90 3721966.40 +SET 461774.57 347255.14 +SET 461801.52 288390.78 +SET 461817.28 151459.84 +SET 461830.85 309412.07 +SET 4618381.32 3723016.32 +SET 4619082.24 3473556.48 +SET 461969.55 399335.55 +SET 461973.20 309507.44 +SET 462.18 272.79 +SET 46202.16 34267.84 +SET 462035.84 151531.52 +SET 4620418.78 3474561.56 +SET 46205.68 28855.02 +SET 4620986.16 3725116.16 +SET 4621.80 2727.90 +SET 4621087.05 3475064.10 +SET 46211.49 34274.76 +SET 462145.12 151567.36 +SET 46216.30 30963.46 +SET 4621637.37 3725641.12 +SET 4621755.32 3475566.64 +SET 46218.00 27279.00 +SET 462183.15 320468.85 +SET 462210.45 309666.39 +SET 4622288.58 3726166.08 +SET 4622423.59 3476069.18 +SET 46225.44 15160.32 +SET 462264.88 320525.52 +SET 46230.15 34288.60 +SET 462305.35 309729.97 +SET 462312.08 288709.62 +SET 462346.61 320582.19 +SET 462359.10 372721.60 +SET 4623591.00 3727216.00 +SET 462400.25 309793.55 +SET 4624242.21 3727740.96 +SET 4625096.67 3478079.34 +SET 462557.60 278603.14 +SET 462567.36 288869.04 +SET 462582.24 151710.72 +SET 462590.05 309920.71 +SET 462619.30 263380.39 +SET 4626195.84 3729315.84 +SET 46263.75 30995.25 +SET 462642.18 273062.79 +SET 462673.53 320808.87 +SET 462691.52 151746.56 +SET 4627.68 3432.32 +SET 462732.40 310016.08 +SET 462779.85 310047.87 +SET 4628149.47 3730890.72 +SET 46282.50 26349.75 +SET 462825.00 263497.50 +SET 462836.99 320922.21 +SET 46286.13 34330.12 +SET 462927.72 295632.96 +SET 462969.65 310175.03 +SET 462994.80 278866.47 +SET 463010.31 373246.56 +SET 4630103.10 3732465.60 +SET 463017.10 310206.82 +SET 463030.70 263614.61 +SET 46304.79 34343.96 +SET 4630754.31 3732990.56 +SET 463111.11 348260.22 +SET 463112.00 310270.40 +SET 463163.91 321148.89 +SET 4632056.73 3734040.48 +SET 463245.64 321205.56 +SET 46332.78 34364.72 +SET 463327.37 321262.23 +SET 463347.20 151961.60 +SET 463349.25 310429.35 +SET 463385.46 295925.28 +SET 463396.70 310461.14 +SET 463409.10 321318.90 +SET 46342.11 34371.64 +SET 463456.48 151997.44 +SET 4635120.72 3485617.44 +SET 4635312.78 3736665.28 +SET 463565.76 152033.28 +SET 463566.54 273608.37 +SET 463572.56 321432.24 +SET 4635788.99 3486119.98 +SET 463657.11 400794.31 +SET 463690.62 296120.16 +SET 46370.10 34392.40 +SET 4637125.53 3487125.06 +SET 4637266.41 3738240.16 +SET 463736.02 321545.58 +SET 463776.30 310715.46 +SET 4637793.80 3487627.60 +SET 46379.43 34399.32 +SET 463817.75 321602.25 +SET 463853.50 264083.05 +SET 463871.20 310779.04 +SET 463918.65 310810.83 +SET 46398.09 34413.16 +SET 463995.78 296315.04 +SET 464002.88 152176.64 +SET 464028.72 273881.16 +SET 46407.90 40115.90 +SET 4641135.15 3490140.30 +SET 464144.67 321828.93 +SET 4641824.88 3741914.88 +SET 464221.44 152248.32 +SET 4642471.69 3491145.38 +SET 4642476.09 3742439.84 +SET 464250.80 311033.36 +SET 464264.90 264317.27 +SET 464300.94 296509.92 +SET 464308.13 321942.27 +SET 4643127.30 3742964.80 +SET 464336.84 274063.02 +SET 464345.70 311096.94 +SET 46435.41 34440.84 +SET 464354.32 289984.98 +SET 464389.86 321998.94 +SET 464393.15 311128.73 +SET 46444.74 34447.76 +SET 464440.60 311160.52 +SET 464470.60 264434.38 +SET 464471.59 322055.61 +SET 464490.90 274153.95 +SET 464549.28 152355.84 +SET 464553.32 322112.28 +SET 464606.10 296704.80 +SET 46463.40 34461.60 +SET 464630.40 311287.68 +SET 464676.30 264551.49 +SET 4647034.56 3746114.56 +SET 4647149.58 3494663.16 +SET 464716.78 322225.62 +SET 46472.73 34468.52 +SET 464767.84 152427.52 +SET 464772.75 311383.05 +SET 4647817.85 3495165.70 +SET 464798.51 322282.29 +SET 46482.06 34475.44 +SET 4648486.12 3495668.24 +SET 46488.20 26466.86 +SET 464922.78 401888.38 +SET 464961.97 322395.63 +SET 464986.40 152499.20 +SET 4650290.61 3748739.36 +SET 465057.45 311573.79 +SET 465063.84 296997.12 +SET 465095.68 152535.04 +SET 46510.05 34496.20 +SET 465104.90 311605.58 +SET 465107.14 274517.67 +SET 465125.43 322508.97 +SET 4651593.03 3749789.28 +SET 4651827.47 3498180.94 +SET 465199.80 311669.16 +SET 465207.16 322565.64 +SET 465216.42 297094.56 +SET 46528.71 34510.04 +SET 465294.70 311732.74 +SET 465344.67 402253.07 +SET 465375.44 290622.66 +SET 46538.04 34516.96 +SET 465389.60 311796.32 +SET 465415.26 274699.53 +SET 4654197.87 3751889.12 +SET 465423.52 152642.56 +SET 46548.45 31185.99 +SET 465521.58 297289.44 +SET 46553.28 15267.84 +SET 465532.80 152678.40 +SET 46556.70 34530.80 +SET 465615.81 322848.99 +SET 465626.85 311955.27 +SET 4656505.36 3501698.72 +SET 465674.16 297386.88 +SET 4656802.71 3753988.96 +SET 4657173.63 3502201.26 +SET 46575.36 34544.64 +SET 465766.56 402617.76 +SET 465779.27 322962.33 +SET 465784.19 350270.38 +SET 4658510.17 3503206.34 +SET 465877.44 274972.32 +SET 465910.50 265254.15 +SET 465911.55 312146.01 +SET 4659407.55 3756088.80 +SET 465942.73 323075.67 +SET 465959.00 312177.80 +SET 4660058.76 3756613.76 +SET 4660514.98 3504713.96 +SET 4660709.97 3757138.72 +SET 466079.20 152857.60 +SET 4662012.39 3758188.64 +SET 46622.01 34579.24 +SET 466266.36 375871.36 +SET 466284.48 297776.64 +SET 466321.90 265488.37 +SET 4663314.81 3759238.56 +SET 466338.60 312432.12 +SET 466339.62 275245.11 +SET 4663856.33 3507226.66 +SET 46640.67 34593.08 +SET 466433.11 323415.69 +SET 466480.95 312527.49 +SET 46650.00 34600.00 +SET 4665192.87 3508231.74 +SET 466527.60 265605.48 +SET 466575.85 312591.07 +SET 466589.64 297971.52 +SET 46659.33 34606.92 +SET 466623.30 312622.86 +SET 46667.83 32358.57 +SET 466670.75 312654.65 +SET 466678.30 323585.70 +SET 466718.20 312686.44 +SET 4667197.68 3509739.36 +SET 466733.30 265722.59 +SET 466742.22 298068.96 +SET 466765.65 312718.23 +SET 4668534.22 3510744.44 +SET 46687.32 34627.68 +SET 46689.48 29816.64 +SET 466917.57 376396.32 +SET 4669175.70 3763963.20 +SET 4669202.49 3511246.98 +SET 466929.60 281236.44 +SET 466953.44 153144.32 +SET 4669870.76 3511749.52 +SET 467002.90 312877.18 +SET 467032.23 403711.83 +SET 467047.38 298263.84 +SET 4670478.12 3765013.12 +SET 46705.98 34641.52 +SET 467050.35 312908.97 +SET 467086.95 323869.05 +SET 467109.92 275699.76 +SET 467162.40 291738.60 +SET 4671875.57 3513257.14 +SET 467192.70 313004.34 +SET 46724.64 34655.36 +SET 467240.15 313036.13 +SET 4672543.84 3513759.68 +SET 467281.28 153251.84 +SET 46733.97 34662.28 +SET 467332.14 324039.06 +SET 467335.05 313099.71 +SET 467350.40 266073.92 +SET 467352.54 298458.72 +SET 4673734.17 3767637.92 +SET 4673880.38 3514764.76 +SET 46749.56 32415.24 +SET 4675036.59 3768687.84 +SET 467505.12 298556.16 +SET 46752.63 34676.12 +SET 4675216.92 3515769.84 +SET 467556.10 266191.03 +SET 467568.78 376921.28 +SET 467572.10 275972.55 +SET 467572.30 313258.66 +SET 467667.20 313322.24 +SET 467672.96 292057.44 +SET 467726.16 276063.48 +SET 4677890.00 3517780.00 +SET 467804.00 281763.10 +SET 467827.68 153431.04 +SET 4678292.64 3771312.64 +SET 4678558.27 3518282.54 +SET 467876.01 404441.21 +SET 467880.22 276154.41 +SET 467904.25 324435.75 +SET 467928.24 292216.86 +SET 467936.96 153466.88 +SET 467967.50 266425.25 +SET 468034.28 276245.34 +SET 468046.24 153502.72 +SET 46808.61 34717.64 +SET 4680897.48 3773412.48 +SET 468094.25 313608.35 +SET 4681231.35 3520292.70 +SET 468141.70 313640.14 +SET 4681548.69 3773937.44 +SET 468155.52 153538.56 +SET 46817.94 34724.56 +SET 468183.52 292376.28 +SET 4681899.62 3520795.24 +SET 468219.99 377446.24 +SET 468236.60 313703.72 +SET 4682567.89 3521297.78 +SET 46827.27 34731.48 +SET 468297.90 404805.90 +SET 4683.66 3473.84 +SET 468312.90 324719.10 +SET 468331.50 313767.30 +SET 46836.60 34738.40 +SET 468378.90 266659.47 +SET 468378.95 313799.09 +SET 46842.06 29914.08 +SET 468420.60 299140.80 +SET 468473.85 313862.67 +SET 468476.36 324832.44 +SET 4684804.74 3776562.24 +SET 468483.36 153646.08 +SET 46855.26 34752.24 +SET 4685909.24 3523810.48 +SET 468616.20 313958.04 +SET 468639.82 324945.78 +SET 46864.59 34759.16 +SET 468650.52 276609.06 +SET 468694.08 292695.12 +SET 468711.10 314021.62 +SET 4687245.78 3524815.56 +SET 468758.55 314053.41 +SET 468804.58 276699.99 +SET 468806.00 314085.20 +SET 46881.12 15375.36 +SET 46883.25 34773.00 +SET 46887.12 37797.12 +SET 468871.20 377971.20 +SET 468900.90 314148.78 +SET 46892.58 34779.92 +SET 4689363.21 3780236.96 +SET 468958.64 276790.92 +SET 469029.76 153825.28 +SET 469043.25 314244.15 +SET 469090.70 314275.94 +SET 469125.54 352783.08 +SET 469130.20 325285.80 +SET 4691316.84 3781811.84 +SET 469141.68 405535.28 +SET 4691923.67 3528333.34 +SET 4691968.05 3782336.80 +SET 46920.57 34800.68 +SET 469201.70 267127.91 +SET 4692591.94 3528835.88 +SET 4692619.26 3782861.76 +SET 46929.90 34807.60 +SET 469327.95 314434.89 +SET 4693270.47 3783386.72 +SET 469357.60 153932.80 +SET 469375.39 325455.81 +SET 4693921.68 3783911.68 +SET 469457.12 325512.48 +SET 469459.92 293173.38 +SET 4694596.75 3530343.50 +SET 469466.88 153968.64 +SET 469470.30 314530.26 +SET 469488.66 299822.88 +SET 469517.75 314562.05 +SET 469552.80 282816.42 +SET 469565.20 314593.84 +SET 469576.16 154004.48 +SET 4695933.29 3531348.58 +SET 469612.65 314625.63 +SET 469728.94 277245.57 +SET 469784.04 325739.16 +SET 469793.81 353285.62 +SET 469802.45 314752.79 +SET 469818.80 267479.24 +SET 4698480.15 3787586.40 +SET 469849.90 314784.58 +SET 46985.88 34849.12 +SET 46990.40 15411.20 +SET 469904.00 154112.00 +SET 4699274.64 3533861.28 +SET 46994.75 32585.25 +SET 469946.40 300115.20 +SET 46995.21 34856.04 +SET 4699782.57 3788636.32 +SET 469992.25 314879.95 +SET 4699942.91 3534363.82 +SET 470024.50 267596.35 +SET 470037.06 277427.43 +SET 470087.15 314943.53 +SET 470098.98 300212.64 +SET 470173.62 379021.12 +SET 4701947.72 3535871.44 +SET 4702.32 3487.68 +SET 47022.95 31503.89 +SET 470229.50 315038.90 +SET 470230.20 267713.46 +SET 470231.84 154219.52 +SET 470274.42 326079.18 +SET 470276.95 315070.69 +SET 470324.40 315102.48 +SET 4703284.26 3536876.52 +SET 470345.18 277609.29 +SET 470404.14 300407.52 +SET 47041.86 34890.64 +SET 470419.30 315166.06 +SET 470462.08 353788.16 +SET 4704620.80 3537881.60 +SET 470481.04 293811.06 +SET 470499.24 277700.22 +SET 4704992.25 3792836.00 +SET 47051.19 34897.56 +SET 470514.20 315229.64 +SET 470519.61 326249.19 +SET 4705289.07 3538384.14 +SET 470556.72 300504.96 +SET 4705643.46 3793360.96 +SET 47060.52 34904.48 +SET 470653.30 277791.15 +SET 4706625.61 3539389.22 +SET 47070.40 31535.68 +SET 470709.30 300602.40 +SET 470736.32 293970.48 +SET 4707597.09 3794935.84 +SET 47076.48 32641.92 +SET 470764.80 326419.20 +SET 470778.24 154398.72 +SET 47079.18 34918.32 +SET 4707962.15 3540394.30 +SET 470824.83 379546.08 +SET 470847.30 268064.79 +SET 470861.88 300699.84 +SET 4708899.51 3795985.76 +SET 470941.25 315515.75 +SET 470988.70 315547.54 +SET 47099.68 15447.04 +SET 470991.60 294129.90 +SET 470996.80 154470.40 +SET 4709966.96 3541901.92 +SET 471009.99 326589.21 +SET 471014.46 300797.28 +SET 47105.30 26818.19 +SET 471053.00 268181.90 +SET 4711.65 3494.60 +SET 471115.48 278063.94 +SET 471130.35 354290.70 +SET 4711504.35 3798085.60 +SET 471167.04 300894.72 +SET 4711971.77 3543409.54 +SET 4712155.56 3798610.56 +SET 471251.13 407358.73 +SET 471255.18 326759.22 +SET 4712640.04 3543912.08 +SET 471269.54 278154.87 +SET 4712806.77 3799135.52 +SET 471319.62 300992.16 +SET 471320.85 315770.07 +SET 471324.64 154577.92 +SET 4713308.31 3544414.62 +SET 4713457.98 3799660.48 +SET 471423.60 278245.80 +SET 47147.22 30108.96 +SET 471472.20 301089.60 +SET 471510.65 315897.23 +SET 471543.20 154649.60 +SET 471577.66 278336.73 +SET 4715981.39 3546424.78 +SET 471605.55 315960.81 +SET 47165.30 31599.26 +SET 471663.83 327042.57 +SET 471673.02 407723.42 +SET 4717317.93 3547429.86 +SET 471745.56 327099.24 +SET 4718016.45 3803335.20 +SET 47181.81 34994.44 +SET 471827.29 327155.91 +SET 471875.80 268650.34 +SET 471890.25 316151.55 +SET 471909.02 327212.58 +SET 471929.94 301381.92 +SET 4719318.87 3804385.12 +SET 4719991.01 3549440.02 +SET 4720.98 3501.52 +SET 47200.47 35008.28 +SET 472012.72 294767.58 +SET 4720621.29 3805435.04 +SET 472080.05 316278.71 +SET 472089.60 154828.80 +SET 47209.80 35015.20 +SET 472094.91 408088.11 +SET 47212.75 31631.05 +SET 47219.13 35022.12 +SET 4721995.82 3550947.64 +SET 4722664.09 3551450.18 +SET 472268.00 294927.00 +SET 472287.20 268884.56 +SET 472308.16 154900.48 +SET 472317.30 316437.66 +SET 472317.67 327495.93 +SET 472387.68 301674.24 +SET 4723877.34 3808059.84 +SET 47239.94 32755.26 +SET 472417.44 154936.32 +SET 4724528.55 3808584.80 +SET 472459.65 316533.03 +SET 472466.89 355295.78 +SET 472507.10 316564.82 +SET 47251.68 40845.28 +SET 472562.86 327665.94 +SET 4726005.44 3553962.88 +SET 472613.20 284659.73 +SET 472636.00 155008.00 +SET 4726482.18 3810159.68 +SET 472656.08 278973.24 +SET 472696.90 316691.98 +SET 472698.60 269118.78 +SET 4727341.98 3554967.96 +SET 472745.28 155043.84 +SET 472791.80 316755.56 +SET 4728010.25 3555470.50 +SET 472808.05 327835.95 +SET 472810.14 279064.17 +SET 472839.25 316787.35 +SET 4728435.81 3811734.56 +SET 472845.42 301966.56 +SET 47293.77 35077.48 +SET 472934.15 316850.93 +SET 4729346.79 3556475.58 +SET 472938.69 408817.49 +SET 472963.84 155115.52 +SET 4729738.23 3812784.48 +SET 472981.60 316882.72 +SET 4730015.06 3556978.12 +SET 473029.05 316914.51 +SET 473053.24 328005.96 +SET 4730683.33 3557480.66 +SET 47307.65 31694.63 +SET 473073.12 155151.36 +SET 473076.50 316946.30 +SET 473110.00 269353.00 +SET 473118.26 279246.03 +SET 473123.95 316978.09 +SET 473150.58 302161.44 +SET 4731691.86 3814359.36 +SET 473171.40 317009.88 +SET 4732019.87 3558485.74 +SET 473218.85 317041.67 +SET 4732688.14 3558988.28 +SET 473272.32 279336.96 +SET 473291.68 155223.04 +SET 473303.16 302258.88 +SET 473313.75 317105.25 +SET 473315.70 269470.11 +SET 4734024.68 3559993.36 +SET 473426.38 279427.89 +SET 4734296.70 3816459.20 +SET 473455.74 302356.32 +SET 473456.10 317200.62 +SET 4734692.95 3560495.90 +SET 4734947.91 3816984.16 +SET 4735361.22 3560998.44 +SET 47355.10 31726.42 +SET 473580.44 279518.82 +SET 473598.45 317295.99 +SET 4736029.49 3561500.98 +SET 473608.32 302453.76 +SET 473693.35 317359.57 +SET 4737366.03 3562506.06 +SET 473788.25 317423.15 +SET 473788.81 328515.99 +SET 473870.54 328572.66 +SET 473883.15 317486.73 +SET 4738855.17 3820133.92 +SET 473888.56 279700.68 +SET 4739.64 3515.36 +SET 473924.80 285449.72 +SET 473930.60 317518.52 +SET 473947.36 155438.08 +SET 4739506.38 3820658.88 +SET 474.50 317.90 +SET 47402.55 31758.21 +SET 474025.50 317582.10 +SET 47405.73 35160.52 +SET 4740707.38 3565018.76 +SET 474120.40 317645.68 +SET 474138.50 269938.55 +SET 474196.68 279882.54 +SET 4742043.92 3566023.84 +SET 474215.30 317709.26 +SET 474218.64 302843.52 +SET 4742712.19 3566526.38 +SET 474310.20 317772.84 +SET 4743413.64 3823808.64 +SET 474357.65 317804.63 +SET 474360.92 328912.68 +SET 474371.22 302940.96 +SET 474405.10 317836.42 +SET 4744064.85 3824333.60 +SET 474442.65 328969.35 +SET 474471.70 356803.40 +SET 4745.00 3179.00 +SET 474500.00 317900.00 +SET 47452.38 30303.84 +SET 474523.80 303038.40 +SET 474524.38 329026.02 +SET 4745367.27 3825383.52 +SET 4745385.27 3568536.54 +SET 474565.52 296361.78 +SET 4746018.48 3825908.48 +SET 474603.04 155653.12 +SET 4746053.54 3569039.08 +SET 47461.71 35202.04 +SET 474626.25 410276.25 +SET 474658.86 280155.33 +SET 4747390.08 3570044.16 +SET 47480.37 35215.88 +SET 474820.80 296521.20 +SET 474851.30 329252.70 +SET 4748623.32 3828008.32 +SET 474933.03 329309.37 +SET 474966.98 280337.19 +SET 47497.45 31821.79 +SET 4750063.16 3572054.32 +SET 475040.16 155796.48 +SET 4750576.95 3829583.20 +SET 475076.08 296680.62 +SET 47508.36 35236.64 +SET 475096.49 329422.71 +SET 475134.12 303428.16 +SET 475167.00 270524.10 +SET 47517.69 35243.56 +SET 475178.22 329479.38 +SET 4751879.37 3830633.12 +SET 475258.72 155868.16 +SET 475259.95 329536.05 +SET 475275.10 280519.05 +SET 475368.00 155904.00 +SET 47538.33 38322.08 +SET 475383.30 383220.80 +SET 4753833.00 3832208.00 +SET 47544.90 31853.58 +SET 4754484.21 3832732.96 +SET 4754741.05 3575572.10 +SET 475505.14 329706.06 +SET 47555.01 35271.24 +SET 4755786.63 3833782.88 +SET 4756437.84 3834307.84 +SET 4756745.86 3577079.72 +SET 475695.84 156011.52 +SET 475737.28 280791.84 +SET 475744.44 303817.92 +SET 4758.30 3529.20 +SET 475805.12 156047.36 +SET 47583.00 35292.00 +SET 4758750.67 3578587.34 +SET 475897.02 303915.36 +SET 4759042.68 3836407.68 +SET 4759418.94 3579089.88 +SET 4759693.89 3836932.64 +SET 475989.80 270992.54 +SET 476023.68 156119.04 +SET 4760345.10 3837457.60 +SET 47604.96 30401.28 +SET 476045.40 280973.70 +SET 476049.60 304012.80 +SET 4761647.52 3838507.52 +SET 476195.50 271109.65 +SET 47620.32 35319.68 +SET 4762092.02 3581100.04 +SET 4762760.29 3581602.58 +SET 47629.65 35326.60 +SET 476322.44 330272.76 +SET 4763428.56 3582105.12 +SET 476352.48 297477.72 +SET 47638.98 35333.52 +SET 47639.80 31917.16 +SET 476401.20 271226.76 +SET 476476.51 358311.02 +SET 4764903.57 3841132.32 +SET 4765433.37 3583612.74 +SET 4765554.78 3841657.28 +SET 476649.36 330499.44 +SET 47666.97 35354.28 +SET 476661.64 281337.42 +SET 476679.36 156334.08 +SET 476685.72 384270.72 +SET 47673.57 41209.97 +SET 4767438.18 3585120.36 +SET 47676.30 35361.20 +SET 4768810.83 3844282.08 +SET 47694.96 35375.04 +SET 476985.20 287293.03 +SET 4770111.26 3587130.52 +SET 477018.30 271578.09 +SET 477058.01 330782.79 +SET 4770764.46 3845856.96 +SET 477117.66 304694.88 +SET 477118.32 297955.98 +SET 477139.74 330839.46 +SET 477157.59 412464.39 +SET 4772718.09 3847431.84 +SET 477303.20 330952.80 +SET 47732.28 35402.72 +SET 477336.93 384795.68 +SET 47734.70 31980.74 +SET 4773452.61 3589643.22 +SET 477422.82 304889.76 +SET 477429.70 271812.31 +SET 4774789.15 3590648.30 +SET 47750.94 35416.56 +SET 47755.36 15662.08 +SET 477628.88 298274.82 +SET 477630.12 331179.48 +SET 47769.60 35430.40 +SET 477711.85 331236.15 +SET 4777462.23 3592658.46 +SET 477772.16 156692.48 +SET 4777927.77 3851631.52 +SET 477813.05 359316.10 +SET 4778130.50 3593161.00 +SET 4778578.98 3852156.48 +SET 477881.44 156728.32 +SET 477990.72 156764.16 +SET 4780135.31 3594668.62 +SET 478038.77 331462.83 +SET 478046.80 272163.64 +SET 4780532.61 3853731.36 +SET 4780803.58 3595171.16 +SET 478100.00 156800.00 +SET 47812.05 33151.95 +SET 478139.44 298593.66 +SET 478185.72 305376.96 +SET 478202.24 282246.72 +SET 4782808.39 3596678.78 +SET 47829.60 32044.32 +SET 478356.30 282337.65 +SET 478365.69 331689.51 +SET 4785091.08 3857406.08 +SET 478610.88 331859.52 +SET 4786149.74 3599191.48 +SET 47862.90 35499.60 +SET 4786393.50 3858456.00 +SET 478643.46 305669.28 +SET 478663.90 272514.97 +SET 4786818.01 3599694.02 +SET 478692.61 331916.19 +SET 47872.23 35506.52 +SET 4787486.28 3600196.56 +SET 4787695.92 3859505.92 +SET 478818.48 282610.44 +SET 4788347.13 3860030.88 +SET 478856.07 332029.53 +SET 478905.28 299071.92 +SET 4790159.36 3602206.72 +SET 47909.55 35534.20 +SET 4790951.97 3862130.72 +SET 47912.66 28279.23 +SET 479149.59 360321.18 +SET 479171.20 288609.68 +SET 47924.50 32107.90 +SET 479264.72 332312.88 +SET 479280.66 282883.23 +SET 479406.36 306156.48 +SET 479411.36 157230.08 +SET 479415.84 299390.76 +SET 4794208.02 3864755.52 +SET 479428.18 332426.22 +SET 479486.70 272983.41 +SET 4795.62 3556.88 +SET 4795505.52 3606227.04 +SET 479558.94 306253.92 +SET 479588.78 283065.09 +SET 479591.64 332539.56 +SET 4796161.65 3866330.40 +SET 4796173.79 3606729.58 +SET 47965.53 35575.72 +SET 479688.93 414652.53 +SET 479692.40 273100.52 +SET 479711.52 306351.36 +SET 4797464.07 3867380.32 +SET 47975.51 33265.29 +SET 479755.10 332652.90 +SET 4798115.28 3867905.28 +SET 479817.86 360823.72 +SET 4798178.60 3608237.20 +SET 479836.83 332709.57 +SET 479918.56 332766.24 +SET 47992.64 29970.96 +SET 4799417.70 3868955.20 +SET 4800068.91 3869480.16 +SET 480045.60 289136.34 +SET 480050.96 283337.88 +SET 480082.02 332879.58 +SET 480163.75 332936.25 +SET 480176.32 157480.96 +SET 480181.68 299869.02 +SET 48021.51 35617.24 +SET 480245.48 332992.92 +SET 48030.84 35624.16 +SET 480321.84 306741.12 +SET 480327.21 333049.59 +SET 4803524.76 3612257.52 +SET 4804.95 3563.80 +SET 480408.94 333106.26 +SET 480436.96 300028.44 +SET 480474.42 306838.56 +SET 480482.80 289399.67 +SET 480486.13 361326.26 +SET 4804861.30 3613262.60 +SET 48049.50 35638.00 +SET 480532.71 415381.91 +SET 4805529.57 3613765.14 +SET 48058.83 35644.92 +SET 480613.44 157624.32 +SET 480654.13 333276.27 +SET 48066.72 28370.16 +SET 480667.20 283701.60 +SET 48068.16 35651.84 +SET 4806866.11 3614770.22 +SET 480692.24 300187.86 +SET 480722.72 157660.16 +SET 4807232.22 3875254.72 +SET 4808.32 1576.96 +SET 4808202.65 3615775.30 +SET 480821.26 283792.53 +SET 4809.20 2896.63 +SET 4809185.85 3876829.60 +SET 480920.00 289663.00 +SET 480932.16 307130.88 +SET 4809539.19 3616780.38 +SET 480954.60 415746.60 +SET 480975.32 283883.46 +SET 4810207.46 3617282.92 +SET 481050.56 157767.68 +SET 481132.30 273920.29 +SET 48114.81 35686.44 +SET 4811544.00 3618288.00 +SET 481202.80 300506.70 +SET 481244.19 387945.44 +SET 4812441.90 3879454.40 +SET 481283.44 284065.32 +SET 4812880.54 3619293.08 +SET 481376.49 416111.29 +SET 48138.97 33378.63 +SET 481389.90 307423.20 +SET 48142.80 35707.20 +SET 4814217.08 3620298.16 +SET 481437.50 284156.25 +SET 4815046.74 3881554.24 +SET 48152.13 35714.12 +SET 481542.48 307520.64 +SET 481553.16 333899.64 +SET 4815697.95 3882079.20 +SET 481591.56 284247.18 +SET 481706.24 157982.72 +SET 481713.36 300825.54 +SET 481745.62 284338.11 +SET 481749.40 274271.62 +SET 481794.40 290189.66 +SET 481798.35 334069.65 +SET 4818302.79 3884179.04 +SET 48189.54 38847.04 +SET 481895.40 388470.40 +SET 4818954.00 3884704.00 +SET 481899.68 284429.04 +SET 48192.48 15805.44 +SET 481924.80 158054.40 +SET 481955.10 274388.73 +SET 481961.81 334182.99 +SET 48198.78 35748.72 +SET 4820231.51 3624821.02 +SET 482043.54 334239.66 +SET 482053.74 284519.97 +SET 48208.11 35755.64 +SET 4820899.78 3625323.56 +SET 4820907.63 3886278.88 +SET 482143.36 158126.08 +SET 4821558.84 3886803.84 +SET 4821568.05 3625826.10 +SET 48220.70 33435.30 +SET 48220.78 28461.09 +SET 482207.00 334353.00 +SET 482207.80 284610.90 +SET 482223.92 301144.38 +SET 482305.38 308007.84 +SET 4824163.68 3888903.68 +SET 482471.20 158233.60 +SET 482479.20 301303.80 +SET 4824814.89 3889428.64 +SET 482490.94 362833.88 +SET 482533.92 334579.68 +SET 482546.61 388995.36 +SET 4825466.10 3889953.60 +SET 48256.65 32330.43 +SET 482572.20 274740.06 +SET 482610.54 308202.72 +SET 482615.65 334636.35 +SET 4826245.94 3629343.88 +SET 482668.80 290716.32 +SET 482669.98 284883.69 +SET 4826768.52 3891003.52 +SET 482734.48 301463.22 +SET 4827419.73 3891528.48 +SET 4827582.48 3630348.96 +SET 482763.12 308300.16 +SET 482779.11 334749.69 +SET 4828070.94 3892053.44 +SET 482915.70 308397.60 +SET 48292.08 35817.92 +SET 4829373.36 3893103.36 +SET 4829587.29 3631856.58 +SET 482983.60 274974.28 +SET 48301.41 35824.84 +SET 48302.43 33491.97 +SET 4830255.56 3632359.12 +SET 48304.10 32362.22 +SET 483068.28 308495.04 +SET 483106.00 290979.65 +SET 483126.88 158448.64 +SET 4831592.10 3633364.20 +SET 483220.86 308592.48 +SET 4832260.37 3633866.74 +SET 483236.16 158484.48 +SET 483286.22 285247.41 +SET 48329.40 35845.60 +SET 4832928.64 3634369.28 +SET 483373.44 308689.92 +SET 48338.73 35852.52 +SET 4834265.18 3635374.36 +SET 483432.95 335203.05 +SET 483454.72 158556.16 +SET 4834933.45 3635876.90 +SET 483526.02 308787.36 +SET 4835885.46 3898352.96 +SET 483594.34 285429.27 +SET 4836269.99 3636881.98 +SET 48366.72 35873.28 +SET 483678.60 308884.80 +SET 483755.60 302100.90 +SET 483759.87 335429.73 +SET 4837606.53 3637887.06 +SET 483806.40 275442.72 +SET 483831.18 308982.24 +SET 48384.16 33548.64 +SET 483891.84 158699.52 +SET 4839.90 3242.58 +SET 48394.71 35894.04 +SET 483980.40 291506.31 +SET 484012.10 275559.83 +SET 48404.04 35900.96 +SET 484086.79 335656.41 +SET 4841095.14 3902552.64 +SET 48411.04 15877.12 +SET 484136.34 309177.12 +SET 4841616.15 3640902.30 +SET 484168.52 335713.08 +SET 4841746.35 3903077.60 +SET 484217.80 275676.94 +SET 484219.68 158807.04 +SET 4842397.56 3903602.56 +SET 484288.92 309274.56 +SET 484328.96 158842.88 +SET 484329.72 418664.12 +SET 484331.98 335826.42 +SET 484364.64 285883.92 +SET 4843699.98 3904652.48 +SET 48441.36 35928.64 +SET 484413.71 335883.09 +SET 484417.60 291769.64 +SET 484423.50 275794.05 +SET 484495.44 335939.76 +SET 484500.24 390570.24 +SET 484521.44 302579.16 +SET 484577.17 335996.43 +SET 484594.08 309469.44 +SET 48460.02 35942.48 +SET 4846294.04 3644420.08 +SET 4846962.31 3644922.62 +SET 484751.61 419028.81 +SET 4847630.58 3645425.16 +SET 484826.82 286156.71 +SET 48488.01 35963.24 +SET 4848967.12 3646430.24 +SET 48493.90 32489.38 +SET 4849560.87 3909377.12 +SET 4850212.08 3909902.08 +SET 485032.00 302898.00 +SET 485051.82 309761.76 +SET 4850971.93 3647937.86 +SET 485134.94 286338.57 +SET 4851514.50 3910952.00 +SET 48516.00 35984.00 +SET 485164.02 364844.04 +SET 4851640.20 3648440.40 +SET 48520.32 15912.96 +SET 485287.28 303057.42 +SET 485312.48 159165.44 +SET 485312.74 336506.46 +SET 485356.98 309956.64 +SET 48541.35 32521.17 +SET 4854313.28 3650450.56 +SET 485509.56 310054.08 +SET 48553.32 36011.68 +SET 485542.56 303216.84 +SET 485557.93 336676.47 +SET 4855649.82 3651455.64 +SET 485597.12 286611.36 +SET 4856318.09 3651958.18 +SET 485640.32 159272.96 +SET 485657.70 276496.71 +SET 4856986.36 3652460.72 +SET 48571.98 36025.52 +SET 485721.39 336789.81 +SET 485749.60 159308.80 +SET 485797.84 303376.26 +SET 485802.66 391620.16 +SET 485803.12 336846.48 +SET 485863.40 276613.82 +SET 485884.85 336903.15 +SET 4858991.17 3653968.34 +SET 48590.64 36039.36 +SET 4859329.02 3917251.52 +SET 4859659.44 3654470.88 +SET 485968.16 159380.48 +SET 4860327.71 3654973.42 +SET 486048.31 337016.49 +SET 4860631.44 3918301.44 +SET 4860995.98 3655475.96 +SET 486119.88 310443.84 +SET 4861664.25 3655978.50 +SET 48618.63 36060.12 +SET 486211.77 337129.83 +SET 4862332.52 3656481.04 +SET 4862585.07 3919876.32 +SET 48627.96 36067.04 +SET 486272.46 310541.28 +SET 48629.60 15948.80 +SET 486296.00 159488.00 +SET 4863236.28 3920401.28 +SET 48637.29 36073.96 +SET 486425.04 310638.72 +SET 486439.17 420487.57 +SET 486456.96 337299.84 +SET 48646.62 36080.88 +SET 486480.50 276965.15 +SET 4865189.91 3921976.16 +SET 486577.62 310736.16 +SET 486620.42 337413.18 +SET 4866492.33 3923026.08 +SET 48665.28 36094.72 +SET 4867678.68 3660501.36 +SET 486783.88 337526.52 +SET 486818.96 304013.94 +SET 48682.96 28733.88 +SET 486829.60 287338.80 +SET 48683.94 36108.56 +SET 486842.40 159667.20 +SET 486891.90 277199.37 +SET 48693.27 36115.48 +SET 486951.68 159703.04 +SET 486983.66 287429.73 +SET 4870.26 3612.24 +SET 4871020.03 3663014.06 +SET 487105.08 392670.08 +SET 48711.93 36129.32 +SET 487110.80 337753.20 +SET 4871688.30 3663516.60 +SET 487170.24 159774.72 +SET 487187.94 311125.92 +SET 4872353.22 3927750.72 +SET 48730.59 36143.16 +SET 4873004.43 3928275.68 +SET 487303.30 277433.59 +SET 487329.52 304332.78 +SET 487355.99 337923.21 +SET 4873693.11 3665024.22 +SET 4874361.38 3665526.76 +SET 487478.00 293612.95 +SET 487493.10 311320.80 +SET 4874958.06 3929850.56 +SET 487498.08 159882.24 +SET 487519.45 338036.55 +SET 48758.58 36163.92 +SET 487599.90 287793.45 +SET 487607.36 159918.08 +SET 4876366.19 3667034.38 +SET 487645.68 311418.24 +SET 48767.91 36170.84 +SET 487704.84 421581.64 +SET 487714.70 277667.81 +SET 487716.64 159953.92 +SET 487764.64 338206.56 +SET 48777.24 36177.76 +SET 4878214.11 3932475.36 +SET 48783.71 36685.42 +SET 487837.10 366854.20 +SET 48786.57 36184.68 +SET 487908.02 287975.31 +SET 487928.10 338319.90 +SET 488009.83 338376.57 +SET 4880375.81 3670049.62 +SET 488062.08 288066.24 +SET 488095.36 304811.04 +SET 488103.42 311710.56 +SET 488126.10 277902.03 +SET 488126.73 421946.33 +SET 48814.56 36205.44 +SET 4882.56 3118.08 +SET 488216.14 288157.17 +SET 48823.89 36212.36 +SET 4882380.62 3671557.24 +SET 488255.02 338546.58 +SET 48826.05 32711.91 +SET 4882772.58 3936150.08 +SET 488336.75 338603.25 +SET 48837.02 28824.81 +SET 4883717.16 3672562.32 +SET 488372.32 160168.96 +SET 48840.75 39372.00 +SET 488408.58 311905.44 +SET 48848.16 16020.48 +SET 488481.60 160204.80 +SET 48851.88 36233.12 +SET 488548.62 422311.02 +SET 488581.94 338773.26 +SET 488605.92 305129.88 +SET 4886390.24 3674572.48 +SET 4887.35 3274.37 +SET 488700.16 160276.48 +SET 4887058.51 3675075.02 +SET 48873.50 32743.70 +SET 488745.40 338886.60 +SET 48879.87 36253.88 +SET 4888395.05 3676080.10 +SET 4888633.47 3940874.72 +SET 488918.72 160348.16 +SET 4889284.68 3941399.68 +SET 4889935.89 3941924.64 +SET 489018.90 312295.20 +SET 4890587.10 3942449.60 +SET 489116.48 305448.72 +SET 4891238.31 3942974.56 +SET 489137.28 160419.84 +SET 489140.50 288702.75 +SET 489171.48 312392.64 +SET 489173.64 367859.28 +SET 4891736.40 3678592.80 +SET 489294.56 288793.68 +SET 4893191.94 3944549.44 +SET 489371.76 305608.14 +SET 489448.62 288884.61 +SET 4895145.57 3946124.32 +SET 48956.27 33945.33 +SET 489566.00 278721.80 +SET 4895746.02 3681608.04 +SET 489627.04 305767.56 +SET 48963.84 36316.16 +SET 4896414.29 3682110.58 +SET 489664.00 294929.60 +SET 489683.68 160599.04 +SET 4897082.56 3682613.12 +SET 489781.80 312782.40 +SET 4898.25 3633.00 +SET 489814.29 423405.09 +SET 48982.50 36330.00 +SET 4898401.62 3948749.12 +SET 489882.32 305926.98 +SET 489889.62 339679.98 +SET 489902.24 160670.72 +SET 48991.08 28915.74 +SET 4899704.04 3949799.04 +SET 4899755.64 3684623.28 +SET 490011.52 160706.56 +SET 490053.08 339793.32 +SET 490120.80 160742.40 +SET 49013.76 30608.64 +SET 490137.60 306086.40 +SET 49015.85 32839.07 +SET 4901657.67 3951373.92 +SET 49019.82 36357.68 +SET 490230.08 160778.24 +SET 490239.54 313074.72 +SET 4902960.09 3952423.84 +SET 4903096.99 3687135.98 +SET 490361.13 395294.88 +SET 4903611.30 3952948.80 +SET 490372.98 289430.19 +SET 49038.00 34002.00 +SET 490388.80 279190.24 +SET 4904262.51 3953473.76 +SET 490461.73 340076.67 +SET 4905101.80 3688643.60 +SET 4905770.07 3689146.14 +SET 490625.19 340190.01 +SET 490648.16 306405.24 +SET 49066.47 36392.28 +SET 490667.20 160921.60 +SET 4906867.35 3955573.60 +SET 4907.58 3639.92 +SET 490788.65 340303.35 +SET 490800.20 279424.46 +SET 4908169.77 3956623.52 +SET 4908443.15 3691156.30 +SET 490870.38 340360.02 +SET 4908820.98 3957148.48 +SET 490885.76 160993.28 +SET 490903.44 306564.66 +SET 4910123.40 3958198.40 +SET 4910774.61 3958723.36 +SET 491079.96 424499.16 +SET 49110.75 32902.65 +SET 491143.28 289884.84 +SET 491155.02 313659.36 +SET 491158.72 306724.08 +SET 4911784.50 3693669.00 +SET 491213.60 161100.80 +SET 4912452.77 3694171.54 +SET 491307.60 313756.80 +SET 4914030.66 3961348.16 +SET 491417.30 279775.79 +SET 49145.14 29006.67 +SET 491460.18 313854.24 +SET 49150.44 36454.56 +SET 4915125.85 3696181.70 +SET 491541.44 161208.32 +SET 49159.77 36461.48 +SET 491605.46 290157.63 +SET 491605.95 340870.05 +SET 491623.00 279892.90 +SET 49169.10 36468.40 +SET 49176.00 16128.00 +SET 491765.34 314049.12 +SET 491769.41 340983.39 +SET 491846.72 369869.44 +SET 4919135.47 3699196.94 +SET 491923.74 425228.54 +SET 491924.56 307202.34 +SET 4919891.55 3966072.80 +SET 49201.46 34115.34 +SET 492014.60 341153.40 +SET 492070.50 314244.00 +SET 492087.84 161387.52 +SET 4921193.97 3967122.72 +SET 49215.75 36503.00 +SET 4921845.18 3967647.68 +SET 4922476.82 3701709.64 +SET 4922496.39 3968172.64 +SET 49225.08 36509.92 +SET 492259.79 341323.41 +SET 492306.40 161459.20 +SET 4923798.81 3969222.56 +SET 4923813.36 3702714.72 +SET 492415.68 161495.04 +SET 49243.74 36523.76 +SET 492435.12 307521.18 +SET 4924481.63 3703217.26 +SET 492504.98 341493.42 +SET 492514.99 370371.98 +SET 49253.07 36530.68 +SET 492586.71 341550.09 +SET 492634.24 161566.72 +SET 492651.50 280478.45 +SET 492668.44 341606.76 +SET 492680.82 314633.76 +SET 492683.88 290794.14 +SET 49269.04 30768.06 +SET 49271.73 36544.52 +SET 492724.40 296772.91 +SET 4927706.07 3972372.32 +SET 49281.06 36551.44 +SET 49283.19 34172.01 +SET 49283.34 31473.12 +SET 49285.28 16163.84 +SET 492913.63 341776.77 +SET 4929659.70 3973947.20 +SET 492985.98 314828.64 +SET 49299.72 36565.28 +SET 492992.00 290976.00 +SET 492995.36 341833.44 +SET 493062.90 280712.67 +SET 493071.36 161710.08 +SET 49309.05 36572.20 +SET 4930962.12 3974997.12 +SET 493138.56 314926.08 +SET 493146.06 291066.93 +SET 493183.26 370874.52 +SET 49327.71 36586.04 +SET 493289.92 161781.76 +SET 493291.14 315023.52 +SET 493300.12 291157.86 +SET 49337.04 36592.96 +SET 493404.01 342116.79 +SET 4934218.17 3977621.92 +SET 4934505.68 3710755.36 +SET 493454.18 291248.79 +SET 49346.37 36599.88 +SET 4935.57 3660.68 +SET 4935520.59 3978671.84 +SET 493596.30 315218.40 +SET 49361.13 42668.73 +SET 493617.76 161889.28 +SET 49364.92 34228.68 +SET 493649.20 342286.80 +SET 4936510.49 3712262.98 +SET 49368.00 28106.40 +SET 493680.00 281064.00 +SET 4936823.01 3979721.76 +SET 493711.52 308318.28 +SET 4937178.76 3712765.52 +SET 493727.04 161925.12 +SET 493730.93 342343.47 +SET 493762.30 291430.65 +SET 4937847.03 3713268.06 +SET 49383.69 36627.56 +SET 493836.32 161960.96 +SET 493901.46 315413.28 +SET 4939183.57 3714273.14 +SET 49393.02 36634.48 +SET 49395.45 33093.39 +SET 49402.35 36641.40 +SET 494054.04 315510.72 +SET 4940730.27 3982871.52 +SET 494091.40 281298.22 +SET 494164.16 162068.48 +SET 4941856.65 3716283.30 +SET 494206.62 315608.16 +SET 494221.31 342683.49 +SET 494224.48 291703.44 +SET 494268.39 398444.64 +SET 49430.34 36662.16 +SET 4943193.19 3717288.38 +SET 4943335.11 3984971.36 +SET 494359.20 315705.60 +SET 494378.54 291794.37 +SET 494382.72 162140.16 +SET 4943861.46 3717790.92 +SET 4943986.32 3985496.32 +SET 4944529.73 3718293.46 +SET 49446.65 34285.35 +SET 4944637.53 3986021.28 +SET 494473.20 297826.23 +SET 49449.00 36676.00 +SET 494511.78 315803.04 +SET 49458.33 36682.92 +SET 4945866.27 3719298.54 +SET 4946534.54 3719801.08 +SET 494664.36 315900.48 +SET 494686.66 291976.23 +SET 494710.56 162247.68 +SET 494816.94 315997.92 +SET 494840.72 292067.16 +SET 494875.15 343136.85 +SET 494876.97 427781.37 +SET 494910.40 298089.56 +SET 49495.65 36710.60 +SET 494969.52 316095.36 +SET 4950498.42 3990745.92 +SET 49514.31 36724.44 +SET 495147.68 162391.04 +SET 4951800.84 3991795.84 +SET 495202.07 343363.53 +SET 495243.20 309274.80 +SET 4953103.26 3992845.76 +SET 49532.97 36738.28 +SET 495366.24 162462.72 +SET 49537.80 33188.76 +SET 4954405.68 3993895.68 +SET 4954553.78 3725831.56 +SET 495475.52 162498.56 +SET 4955222.05 3726334.10 +SET 495528.99 343590.21 +SET 495570.81 399494.56 +SET 495579.84 316485.12 +SET 4956558.59 3727339.18 +SET 495694.08 162570.24 +SET 4957226.86 3727841.72 +SET 495753.76 309593.64 +SET 4957661.73 3996520.48 +SET 495774.18 343760.22 +SET 495803.36 162606.08 +SET 495856.34 372884.68 +SET 49588.50 31668.00 +SET 49588.95 36779.80 +SET 4958964.15 3997570.40 +SET 4959231.67 3729349.34 +SET 4959615.36 3998095.36 +SET 49598.28 36786.72 +SET 496009.04 309753.06 +SET 496019.37 343930.23 +SET 496021.92 162677.76 +SET 4960266.57 3998620.32 +SET 4960568.21 3730354.42 +SET 49607.61 36793.64 +SET 496073.20 292794.60 +SET 49610.11 34398.69 +SET 496101.10 343986.90 +SET 496131.20 162713.60 +SET 496142.64 428875.44 +SET 4961568.99 3999670.24 +SET 496182.83 344043.57 +SET 496222.00 298879.55 +SET 4962573.02 3731862.04 +SET 4962871.41 4000720.16 +SET 4963.56 3681.44 +SET 49632.70 33252.34 +SET 4963241.29 3732364.58 +SET 496381.32 292976.46 +SET 4964173.83 4001770.08 +SET 49644.93 36821.32 +SET 4964825.04 4002295.04 +SET 496495.32 317069.76 +SET 496559.80 282703.54 +SET 496564.53 429240.13 +SET 4966127.46 4003344.96 +SET 49663.59 36835.16 +SET 4966778.67 4003869.92 +SET 49672.92 36842.08 +SET 4968081.09 4004919.84 +SET 496836.67 344496.93 +SET 496843.50 293249.25 +SET 4968587.45 3736384.90 +SET 496896.16 162964.48 +SET 49691.84 34455.36 +SET 4969923.99 3737389.98 +SET 496997.56 293340.18 +SET 49700.91 36862.84 +SET 497000.13 344610.27 +SET 497005.44 163000.32 +SET 4970592.26 3737892.52 +SET 497081.86 344666.94 +SET 497096.40 299406.21 +SET 49710.24 36869.76 +SET 4971260.53 3738395.06 +SET 497151.62 293431.11 +SET 497163.59 344723.61 +SET 4971928.80 3738897.60 +SET 4971988.35 4008069.60 +SET 497224.00 163072.00 +SET 4972597.07 3739400.14 +SET 4972639.56 4008594.56 +SET 497305.68 293522.04 +SET 4973290.77 4009119.52 +SET 4973933.61 3740405.22 +SET 497459.74 293612.97 +SET 497490.51 344950.29 +SET 497563.38 317751.84 +SET 49761.38 29370.39 +SET 497613.80 293703.90 +SET 4977198.03 4012269.28 +SET 4977274.96 3742917.92 +SET 49775.55 36918.20 +SET 497767.86 293794.83 +SET 497770.40 163251.20 +SET 4977849.24 4012794.24 +SET 497794.00 283406.20 +SET 497796.00 310869.00 +SET 4978500.45 4013319.20 +SET 497868.54 317946.72 +SET 497879.68 163287.04 +SET 4979151.66 4013844.16 +SET 497921.92 293885.76 +SET 4979279.77 3744425.54 +SET 49794.21 36932.04 +SET 4979802.87 4014369.12 +SET 498021.12 318044.16 +SET 498062.62 345346.98 +SET 498098.24 163358.72 +SET 4981105.29 4015419.04 +SET 49812.87 36945.88 +SET 498144.35 345403.65 +SET 498175.65 401594.40 +SET 49822.50 33379.50 +SET 498226.08 345460.32 +SET 4982407.71 4016468.96 +SET 4982621.12 3746938.24 +SET 4983058.92 4016993.92 +SET 498306.56 311187.84 +SET 498307.81 345516.99 +SET 4983710.13 4017518.88 +SET 49850.19 36973.56 +SET 498529.42 374894.84 +SET 4985294.20 3748948.40 +SET 498538.16 294249.48 +SET 49855.30 34568.70 +SET 498561.84 311347.26 +SET 49859.52 36980.48 +SET 4986314.97 4019618.72 +SET 4986630.74 3749953.48 +SET 4986966.18 4020143.68 +SET 4987617.39 4020668.64 +SET 49878.18 36994.32 +SET 4987967.28 3750958.56 +SET 498822.50 283991.75 +SET 498826.86 402119.36 +SET 4989303.82 3751963.64 +SET 49896.84 37008.16 +SET 498972.48 163645.44 +SET 499081.76 163681.28 +SET 4990873.44 4023293.44 +SET 499125.11 346083.69 +SET 499197.69 375397.38 +SET 4991976.90 3753973.80 +SET 49924.83 37028.92 +SET 499282.40 300722.86 +SET 499288.57 346197.03 +SET 499308.46 294704.13 +SET 4993313.44 3754978.88 +SET 499439.60 284343.08 +SET 499452.03 346310.37 +SET 499462.52 294795.06 +SET 499533.76 346367.04 +SET 4995431.91 4026968.16 +SET 4996083.12 4027493.12 +SET 499615.49 346423.71 +SET 499616.58 294885.99 +SET 49962.15 37056.60 +SET 499628.16 163860.48 +SET 499645.30 284460.19 +SET 4996654.79 3757491.58 +SET 499697.22 346480.38 +SET 499719.60 300986.19 +SET 499846.72 163932.16 +SET 499851.00 284577.30 +SET 499852.08 319213.44 +SET 4998659.60 3758999.20 +SET 49990.14 37077.36 +SET 499924.70 295067.85 +SET 499939.65 432157.65 +SET 499942.41 346650.39 +SET 49999.47 37084.28 +SET 4999996.14 3760004.28 +SET 5000.88 3709.12 +SET 500065.28 164003.84 +SET 500078.76 295158.78 +SET 500105.87 346763.73 +SET 5001332.68 3761009.36 +SET 500156.80 301249.52 +SET 50018.13 37098.12 +SET 5001944.01 4032217.76 +SET 50027.46 37105.04 +SET 500283.84 164075.52 +SET 5003246.43 4033267.68 +SET 500351.06 346933.74 +SET 500386.88 295340.64 +SET 5003897.64 4033792.64 +SET 500462.40 319603.20 +SET 500514.52 347047.08 +SET 500534.23 376402.46 +SET 500540.94 295431.57 +SET 50055.45 37125.80 +SET 500594.00 301512.85 +SET 50064.78 37132.72 +SET 5006678.84 3765029.68 +SET 500673.80 285045.74 +SET 5007153.69 4036417.44 +SET 5007347.11 3765532.22 +SET 500759.71 347217.09 +SET 500767.56 319798.08 +SET 5007804.90 4036942.40 +SET 50083.44 37146.56 +SET 500830.24 164254.72 +SET 500849.06 295613.43 +SET 5008683.65 3766537.30 +SET 500920.14 319895.52 +SET 5009351.92 3767039.84 +SET 50100.49 34738.71 +SET 501004.90 347387.10 +SET 501031.20 301776.18 +SET 5010688.46 3768044.92 +SET 501085.20 285279.96 +SET 501086.63 347443.77 +SET 501114.64 312941.46 +SET 5011712.16 4040092.16 +SET 5012025.00 3769050.00 +SET 501205.32 433251.72 +SET 501225.30 320090.40 +SET 501250.09 347557.11 +SET 50130.09 37181.16 +SET 5013014.58 4041142.08 +SET 501311.24 295886.22 +SET 501331.82 347613.78 +SET 501369.92 313100.88 +SET 501431.70 404219.20 +SET 5014317.00 4042192.00 +SET 501465.30 295977.15 +SET 501468.40 302039.51 +SET 501496.60 285514.18 +SET 501530.46 320285.28 +SET 5015366.35 3771562.70 +SET 5015619.42 4043241.92 +SET 501577.01 347783.79 +SET 50158.08 37201.92 +SET 50159.52 16450.56 +SET 501625.20 313260.30 +SET 50167.41 37208.84 +SET 5016702.89 3772567.78 +SET 501704.48 164541.44 +SET 5017371.16 3773070.32 +SET 501740.47 347897.13 +SET 5017573.05 4044816.80 +SET 50186.07 37222.68 +SET 5018875.47 4045866.72 +SET 5019.54 3722.96 +SET 50190.80 28574.84 +SET 5019375.97 3774577.94 +SET 501985.66 348067.14 +SET 5020044.24 3775080.48 +SET 5020177.89 4046916.64 +SET 50202.10 33633.82 +SET 502032.32 164648.96 +SET 50204.73 37236.52 +SET 502081.54 296340.87 +SET 5020829.10 4047441.60 +SET 502135.76 313579.14 +SET 502235.60 296431.80 +SET 5022782.73 4049016.48 +SET 50232.72 37257.28 +SET 5023433.94 4049541.44 +SET 502360.16 164756.48 +SET 5024085.15 4050066.40 +SET 502469.44 164792.32 +SET 502470.99 434345.79 +SET 5024736.36 4050591.36 +SET 5025390.40 3779100.80 +SET 502557.77 348463.83 +SET 5026.88 1648.64 +SET 5026038.78 4051641.28 +SET 5026058.67 3779603.34 +SET 502697.78 296704.59 +SET 502734.12 405269.12 +SET 502780.00 302829.50 +SET 5028.87 3729.88 +SET 502851.84 296795.52 +SET 5028731.75 3781613.50 +SET 50288.70 37298.80 +SET 502884.69 348690.51 +SET 5029.70 3369.74 +SET 50290.16 31405.74 +SET 5029946.04 4054791.04 +SET 503048.15 348803.85 +SET 503056.26 321259.68 +SET 5030736.56 3783121.12 +SET 503129.88 348860.52 +SET 503142.20 286451.06 +SET 503159.96 296977.38 +SET 50316.69 37319.56 +SET 5031899.67 4056365.92 +SET 503207.31 378412.62 +SET 5032073.10 3784126.20 +SET 503208.84 321357.12 +SET 503234.40 165043.20 +SET 503293.34 348973.86 +SET 503347.90 286568.17 +SET 50335.35 37333.40 +SET 503361.42 321454.56 +SET 503385.33 405794.08 +SET 50344.45 33729.19 +SET 5034504.51 4058465.76 +SET 503452.96 165114.88 +SET 503456.80 349087.20 +SET 5034746.18 3786136.36 +SET 50351.40 32155.20 +SET 503538.53 349143.87 +SET 5035414.45 3786638.90 +SET 503562.24 165150.72 +SET 503666.58 321649.44 +SET 503671.52 165186.56 +SET 5036750.99 3787643.98 +SET 50372.67 37361.08 +SET 503759.30 286802.39 +SET 50377.62 29734.11 +SET 5037760.56 4061090.56 +SET 5038.20 3736.80 +SET 50382.00 37368.00 +SET 5038411.77 4061615.52 +SET 503865.45 349370.55 +SET 5038755.80 3789151.60 +SET 5039062.98 4062140.48 +SET 50391.90 33760.98 +SET 503947.18 349427.22 +SET 50396.50 28691.95 +SET 503965.00 286919.50 +SET 503971.74 321844.32 +SET 5039714.19 4062665.44 +SET 50400.66 37381.84 +SET 5040092.34 3790156.68 +SET 504028.91 349483.89 +SET 5040365.40 4063190.40 +SET 504084.32 297522.96 +SET 5041428.88 3791161.76 +SET 5041667.82 4064240.32 +SET 5042097.15 3791664.30 +SET 504217.92 165365.76 +SET 504238.38 297613.89 +SET 504276.90 322039.20 +SET 5042765.42 3792166.84 +SET 5043433.69 3792669.38 +SET 50437.98 37409.52 +SET 504429.48 322136.64 +SET 504519.29 349823.91 +SET 5045575.08 4067390.08 +SET 50456.64 37423.36 +SET 504580.44 436169.24 +SET 504582.10 287270.83 +SET 5046106.77 3794679.54 +SET 50465.97 37430.28 +SET 504655.04 165509.12 +SET 504682.75 349937.25 +SET 5046877.50 4068440.00 +SET 504688.56 315173.34 +SET 504734.64 322331.52 +SET 504764.32 165544.96 +SET 504787.80 287387.94 +SET 5048179.92 4069489.92 +SET 50484.63 37444.12 +SET 50487.36 16558.08 +SET 5048779.85 3796689.70 +SET 504887.22 322428.96 +SET 504927.94 350107.26 +SET 50493.96 37451.04 +SET 5049482.34 4070539.84 +SET 504966.00 304146.15 +SET 505002.33 436533.93 +SET 505008.68 298068.54 +SET 5050784.66 3798197.32 +SET 505092.16 165652.48 +SET 5051435.97 4072114.72 +SET 5051452.93 3798699.86 +SET 505173.13 350277.27 +SET 505199.20 287622.16 +SET 5052121.20 3799202.40 +SET 5052789.47 3799704.94 +SET 505310.72 165724.16 +SET 505338.96 407368.96 +SET 5054040.81 4074214.56 +SET 505424.22 436898.62 +SET 505454.40 315651.60 +SET 505500.05 350503.95 +SET 505581.78 350560.62 +SET 50559.27 37499.48 +SET 505624.92 298432.26 +SET 505638.56 165831.68 +SET 505650.12 322916.16 +SET 5057467.36 3803222.72 +SET 505802.70 323013.60 +SET 5058135.63 3803725.26 +SET 505826.97 350730.63 +SET 505840.40 304672.81 +SET 505857.12 165903.36 +SET 50587.26 37520.24 +SET 505880.39 380422.78 +SET 50590.87 35078.73 +SET 505955.28 323111.04 +SET 50596.64 16593.92 +SET 505964.96 315970.44 +SET 505966.40 165939.20 +SET 505990.17 407893.92 +SET 506022.00 288090.60 +SET 506075.68 165975.04 +SET 5060808.71 3805735.42 +SET 506184.96 166010.88 +SET 5062145.25 3806740.50 +SET 506235.62 351013.98 +SET 506277.60 304936.14 +SET 50629.15 33919.93 +SET 5063157.75 4081564.00 +SET 506317.35 351070.65 +SET 50633.91 37554.84 +SET 5063481.79 3807745.58 +SET 506413.02 323403.36 +SET 506433.40 288324.82 +SET 506549.28 298977.84 +SET 506562.54 351240.66 +SET 50661.90 37575.60 +SET 5066413.80 4084188.80 +SET 506689.89 437992.69 +SET 5067.26 3513.54 +SET 50671.23 37582.52 +SET 506714.80 305199.47 +SET 506731.36 166190.08 +SET 5067491.41 3810760.82 +SET 50680.56 37589.44 +SET 506807.73 351410.67 +SET 506840.64 166225.92 +SET 50685.74 29915.97 +SET 5069496.22 3812268.44 +SET 506986.08 316608.12 +SET 50699.22 37603.28 +SET 507059.20 166297.60 +SET 50708.55 37610.20 +SET 507111.78 438357.38 +SET 507134.65 351637.35 +SET 50715.20 30546.28 +SET 507165.52 299341.56 +SET 507168.48 166333.44 +SET 507216.38 351694.02 +SET 5072169.30 3814278.60 +SET 507292.59 408943.84 +SET 5072925.90 4089438.40 +SET 507328.50 323988.00 +SET 5073505.84 3815283.68 +SET 5073577.11 4089963.36 +SET 50736.54 37630.96 +SET 5074228.32 4090488.32 +SET 50745.87 37637.88 +SET 507461.57 351864.03 +SET 5074879.53 4091013.28 +SET 507496.32 166440.96 +SET 507496.64 316926.96 +SET 5075.52 3764.48 +SET 50755.20 37644.80 +SET 5075510.65 3816791.30 +SET 5075530.74 4091538.24 +SET 507589.20 305726.13 +SET 507605.60 166476.80 +SET 507625.03 351977.37 +SET 5077.15 3401.53 +SET 5077484.37 4093113.12 +SET 507751.92 317086.38 +SET 5078135.58 4093638.08 +SET 507870.22 352147.38 +SET 5078852.00 3819304.00 +SET 50794.38 40946.88 +SET 5079438.00 4094688.00 +SET 507951.95 352204.05 +SET 5079520.27 3819806.54 +SET 50800.72 31724.58 +SET 508042.72 166620.16 +SET 5080740.42 4095737.92 +SET 508079.00 289261.70 +SET 5080856.81 3820811.62 +SET 50809.14 32447.52 +SET 50811.18 37686.32 +SET 508115.41 352317.39 +SET 5081391.63 4096262.88 +SET 50820.51 37693.24 +SET 508243.98 324572.64 +SET 508261.28 166691.84 +SET 5082694.05 4097312.80 +SET 5083.98 3000.69 +SET 5083529.89 3822821.78 +SET 50836.06 35248.74 +SET 508360.60 352487.40 +SET 508396.56 324670.08 +SET 5084647.68 4098887.68 +SET 50848.50 37714.00 +SET 5084866.43 3823826.86 +SET 508490.40 289495.92 +SET 508524.06 352600.74 +SET 508552.06 300159.93 +SET 508553.47 382432.94 +SET 50857.83 37720.92 +SET 508589.12 166799.36 +SET 5086871.24 3825334.48 +SET 508698.40 166835.20 +SET 508701.72 324864.96 +SET 508706.12 300250.86 +SET 5087903.73 4101512.48 +SET 508799.34 439816.14 +SET 508807.68 166871.04 +SET 508850.98 352827.42 +SET 508854.30 324962.40 +SET 508860.18 300341.79 +SET 508900.80 306516.12 +SET 508916.96 166906.88 +SET 5089206.15 4102562.40 +SET 5089857.36 4103087.36 +SET 509006.88 325059.84 +SET 509014.24 300432.72 +SET 50904.48 37755.52 +SET 5090508.57 4103612.32 +SET 509096.17 352997.43 +SET 5091159.78 4104137.28 +SET 50913.81 37762.44 +SET 509159.46 325157.28 +SET 509177.90 353054.10 +SET 5091810.99 4104662.24 +SET 509221.23 440180.83 +SET 5092217.40 3829354.80 +SET 509259.63 353110.77 +SET 5092885.67 3829857.34 +SET 5093113.41 4105712.16 +SET 509313.20 289964.36 +SET 50932.47 37776.28 +SET 509341.36 353167.44 +SET 509354.08 167050.24 +SET 50941.80 37783.20 +SET 509423.09 353224.11 +SET 509463.36 167086.08 +SET 5094890.48 3831364.96 +SET 509504.82 353280.78 +SET 509538.88 318202.32 +SET 509572.64 167121.92 +SET 50961.30 34142.46 +SET 5096369.46 4108336.96 +SET 509668.28 353394.12 +SET 509681.92 167157.76 +SET 509724.60 290198.58 +SET 509769.78 325547.04 +SET 509791.20 167193.60 +SET 509831.74 353507.46 +SET 509890.01 383438.02 +SET 5098900.10 3834380.20 +SET 509897.43 411043.68 +SET 509913.47 353564.13 +SET 509922.36 325644.48 +SET 5099625.51 4110961.76 +SET 50999.52 35362.08 +SET 509995.20 353620.80 +SET 510.56 318.84 +SET 510009.76 167265.28 +SET 510076.93 353677.47 +SET 51008.75 34174.25 +SET 5100927.93 4112011.68 +SET 510119.04 167301.12 +SET 51013.60 29043.28 +SET 510158.66 353734.14 +SET 51016.44 37838.56 +SET 510212.40 307306.11 +SET 5102241.45 3836892.90 +SET 510322.12 353847.48 +SET 510337.60 167372.80 +SET 51035.10 37852.40 +SET 5103532.77 4114111.52 +SET 510400.78 301251.09 +SET 5104183.98 4114636.48 +SET 5104246.26 3838400.52 +SET 51044.43 37859.32 +SET 510446.88 167408.64 +SET 5104835.19 4115161.44 +SET 510485.58 353960.82 +SET 5104914.53 3838903.06 +SET 5105.60 3188.40 +SET 510556.16 167444.48 +SET 5105582.80 3839405.60 +SET 51056.00 31884.00 +SET 51056.20 34206.04 +SET 5106137.61 4116211.36 +SET 5106251.07 3839908.14 +SET 510649.60 307569.44 +SET 5106919.34 3840410.68 +SET 5107440.03 4117261.28 +SET 510753.10 290784.13 +SET 5108091.24 4117786.24 +SET 51081.25 35418.75 +SET 5108255.88 3841415.76 +SET 510862.96 301523.88 +SET 5108742.45 4118311.20 +SET 510894.23 354244.17 +SET 510993.28 167587.84 +SET 51100.41 37900.84 +SET 5110044.87 4119361.12 +SET 51103.65 34237.83 +SET 511057.69 354357.51 +SET 5110696.08 4119886.08 +SET 511086.80 307832.77 +SET 5110928.96 3843425.92 +SET 5111347.29 4120411.04 +SET 511139.42 354414.18 +SET 511199.85 412093.60 +SET 5111998.50 4120936.00 +SET 511211.84 167659.52 +SET 511221.15 354470.85 +SET 5112649.71 4121460.96 +SET 5113602.04 3845436.08 +SET 5113952.13 4122510.88 +SET 5114270.31 3845938.62 +SET 511430.40 167731.20 +SET 51147.06 37935.44 +SET 511539.68 167767.04 +SET 511548.07 354697.53 +SET 511600.74 326716.32 +SET 51162.98 35475.42 +SET 5116275.12 3847446.24 +SET 511629.80 354754.20 +SET 511633.26 301978.53 +SET 5116556.97 4124610.72 +SET 5117208.18 4125135.68 +SET 511781.60 291369.68 +SET 5117859.39 4125660.64 +SET 511793.26 354867.54 +SET 511836.40 319637.10 +SET 51184.38 37963.12 +SET 5118510.60 4126185.60 +SET 511905.90 326911.20 +SET 511956.72 354980.88 +SET 5119616.47 3849958.94 +SET 511976.80 167910.40 +SET 5119813.02 4127235.52 +SET 512095.44 302251.32 +SET 5120953.01 3850964.02 +SET 512120.18 355094.22 +SET 5121766.65 4128810.40 +SET 51221.70 37990.80 +SET 512211.06 327106.08 +SET 512304.64 168017.92 +SET 512363.64 327203.52 +SET 5123720.28 4130385.28 +SET 5124371.49 4130910.24 +SET 51244.71 35532.09 +SET 512447.10 355320.90 +SET 5124962.63 3853979.26 +SET 512516.22 327300.96 +SET 512523.20 168089.60 +SET 512528.83 355377.57 +SET 51259.02 38018.48 +SET 512596.35 443098.35 +SET 5126299.17 3854984.34 +SET 512668.80 327398.40 +SET 5126967.44 3855486.88 +SET 5127635.71 3855989.42 +SET 51277.68 38032.32 +SET 512774.02 355547.58 +SET 5128303.98 3856491.96 +SET 512855.75 355604.25 +SET 5128929.96 4134584.96 +SET 5128972.25 3856994.50 +SET 512937.48 355660.92 +SET 51296.34 38046.16 +SET 512960.32 168232.96 +SET 513.15 380.60 +SET 51301.98 30279.69 +SET 513015.80 292072.34 +SET 513019.21 355717.59 +SET 5131.50 3806.00 +SET 51311.28 32043.42 +SET 5131645.33 3859004.66 +SET 513173.86 302887.83 +SET 513178.88 168304.64 +SET 5132186.01 4137209.76 +SET 51326.44 35588.76 +SET 513279.12 327788.16 +SET 513346.13 355944.27 +SET 513368.08 320593.62 +SET 513397.44 168376.32 +SET 51342.99 38080.76 +SET 5134318.41 3861014.82 +SET 5135442.06 4139834.56 +SET 513591.32 356114.28 +SET 5136323.22 3862522.44 +SET 5136991.49 3863024.98 +SET 51370.98 38101.52 +SET 513725.28 168483.84 +SET 5137395.69 4141409.44 +SET 51380.31 38108.44 +SET 5138046.90 4141934.40 +SET 513836.51 356284.29 +SET 513862.02 444192.42 +SET 513889.44 328177.92 +SET 51389.64 38115.36 +SET 51398.97 38122.28 +SET 5140332.84 3865537.68 +SET 514044.30 292657.89 +SET 5140651.74 4144034.24 +SET 51408.30 38129.20 +SET 5141302.95 4144559.20 +SET 51417.63 38136.12 +SET 5141954.16 4145084.16 +SET 5142.50 2927.75 +SET 514245.16 356567.64 +SET 51425.00 29277.50 +SET 5142605.37 4145609.12 +SET 514271.68 168663.04 +SET 514326.89 356624.31 +SET 514347.18 328470.24 +SET 5143674.19 3868050.38 +SET 514380.96 168698.88 +SET 5143907.79 4146659.04 +SET 5144342.46 3868552.92 +SET 51445.59 41471.84 +SET 51445.62 38156.88 +SET 514455.90 414718.40 +SET 514490.24 168734.72 +SET 51454.95 38163.80 +SET 51456.04 30370.62 +SET 51456.79 38695.58 +SET 514567.90 386955.80 +SET 514661.40 293009.22 +SET 51470.58 44492.18 +SET 51470.88 16880.64 +SET 5147015.54 3870563.08 +SET 5147163.84 4149283.84 +SET 51473.61 38177.64 +SET 514804.92 328762.56 +SET 514818.08 168842.24 +SET 51482.94 38184.56 +SET 5148352.08 3871568.16 +SET 514868.52 303888.06 +SET 51489.90 35702.10 +SET 514899.76 321550.14 +SET 5149117.47 4150858.72 +SET 514957.50 328860.00 +SET 5149688.62 3872573.24 +SET 5150.16 3819.84 +SET 515036.64 168913.92 +SET 5150419.89 4151908.64 +SET 51510.93 38205.32 +SET 515127.69 445286.49 +SET 515145.92 168949.76 +SET 5151722.31 4152958.56 +SET 515255.20 168985.60 +SET 515262.66 329054.88 +SET 5153675.94 4154533.44 +SET 51538.92 38226.08 +SET 515389.38 357361.02 +SET 515410.32 321868.98 +SET 5154366.51 3876091.02 +SET 515473.76 169057.28 +SET 515484.20 293477.66 +SET 515484.76 304251.78 +SET 5154978.36 4155583.36 +SET 5155034.78 3876593.56 +SET 515552.84 357474.36 +SET 515583.04 169093.12 +SET 515638.82 304342.71 +SET 515665.60 322028.40 +SET 5156931.99 4157158.24 +SET 51571.63 35758.77 +SET 515720.40 329347.20 +SET 515758.32 415768.32 +SET 5157583.20 4157683.20 +SET 51578.15 34555.73 +SET 515801.60 169164.80 +SET 515872.98 329444.64 +SET 5159.49 3826.76 +SET 5159044.40 3879608.80 +SET 515920.88 322187.82 +SET 515946.94 304524.57 +SET 5159536.83 4159258.08 +SET 515971.47 446015.87 +SET 5160188.04 4159783.04 +SET 516020.16 169236.48 +SET 516025.56 329542.08 +SET 51604.23 38274.52 +SET 51610.10 30461.55 +SET 5161049.21 3881116.42 +SET 516129.44 169272.32 +SET 5161717.48 3881618.96 +SET 516288.41 357984.39 +SET 51630.70 29394.61 +SET 516307.00 293946.10 +SET 51632.22 38295.28 +SET 516330.72 329736.96 +SET 516370.14 358041.06 +SET 516393.36 446380.56 +SET 516409.53 416293.28 +SET 51641.55 38302.20 +SET 516457.28 169379.84 +SET 516483.30 329834.40 +SET 5165058.83 3884131.66 +SET 516512.70 294063.21 +SET 5165727.10 3884634.20 +SET 516615.33 358211.07 +SET 516635.88 329931.84 +SET 5166395.37 3885136.74 +SET 516686.72 322666.08 +SET 516697.06 358267.74 +SET 516718.40 294180.32 +SET 51673.05 34619.31 +SET 5167351.35 4165557.60 +SET 5168002.56 4166082.56 +SET 516815.25 446745.25 +SET 5168400.18 3886644.36 +SET 5168653.77 4166607.52 +SET 516871.30 305070.15 +SET 51688.20 38336.80 +SET 516894.40 169523.20 +SET 5169068.45 3887146.90 +SET 516924.10 294297.43 +SET 5169304.98 4167132.48 +SET 51706.86 38350.64 +SET 517060.74 416818.24 +SET 517105.71 358551.09 +SET 5171073.26 3888654.52 +SET 51716.19 38357.56 +SET 517187.44 358607.76 +SET 517207.60 311519.39 +SET 5172561.03 4169757.28 +SET 517269.17 358664.43 +SET 517331.52 169666.56 +SET 5173746.34 3890664.68 +SET 5173863.45 4170807.20 +SET 517432.63 358777.77 +SET 51744.18 38378.32 +SET 517452.56 323144.34 +SET 517541.20 294648.76 +SET 517550.08 169738.24 +SET 5175817.08 4172382.08 +SET 517596.09 358891.11 +SET 517644.80 311782.72 +SET 5176468.29 4172907.04 +SET 517659.36 169774.08 +SET 517677.82 358947.78 +SET 517703.94 330613.92 +SET 517707.84 323303.76 +SET 5177087.69 3893177.38 +SET 51772.17 38399.08 +SET 517759.55 359004.45 +SET 5177755.96 3893679.92 +SET 5177770.71 4173956.96 +SET 51781.50 38406.00 +SET 517841.28 359061.12 +SET 517856.52 330711.36 +SET 5179073.13 4175006.88 +SET 517909.25 389468.50 +SET 5179092.50 3894685.00 +SET 517949.72 305706.66 +SET 517963.12 323463.18 +SET 5179724.34 4175531.84 +SET 51800.16 38419.84 +SET 5180429.04 3895690.08 +SET 518080.92 447839.32 +SET 518082.00 312046.05 +SET 51815.40 34714.68 +SET 518158.30 295000.09 +SET 518161.68 330906.24 +SET 5181677.97 4177106.72 +SET 518205.76 169953.28 +SET 51821.84 32362.26 +SET 5182329.18 4177631.68 +SET 518249.93 359344.47 +SET 51828.15 38440.60 +SET 5182980.39 4178156.64 +SET 5183102.12 3897700.24 +SET 518331.66 359401.14 +SET 51836.40 29511.72 +SET 5183631.60 4178681.60 +SET 518364.00 295117.20 +SET 5183770.39 3898202.78 +SET 51846.81 38454.44 +SET 518466.84 331101.12 +SET 518473.68 323782.02 +SET 5184934.02 4179731.52 +SET 518495.12 359514.48 +SET 5185106.93 3899207.86 +SET 518576.85 359571.15 +SET 518577.52 389971.04 +SET 518619.42 331198.56 +SET 5186236.44 4180781.44 +SET 518728.96 323941.44 +SET 518740.31 359684.49 +SET 5187538.86 4181831.36 +SET 518772.00 331296.00 +SET 518775.40 295351.42 +SET 5187780.01 3901218.02 +SET 51884.13 38482.12 +SET 518861.44 170168.32 +SET 518874.08 306252.24 +SET 5188841.28 4182881.28 +SET 518903.77 359797.83 +SET 5189116.55 3902223.10 +SET 51892.47 44856.87 +SET 518924.58 331393.44 +SET 51893.46 38489.04 +SET 518970.72 170204.16 +SET 51898.55 35985.45 +SET 518985.50 359854.50 +SET 519014.37 418393.12 +SET 519077.16 331490.88 +SET 5191121.36 3903730.72 +SET 51912.12 38502.88 +SET 519182.20 306434.10 +SET 519189.28 170275.84 +SET 5192097.33 4185506.08 +SET 519229.74 331588.32 +SET 519239.52 324260.28 +SET 5192457.90 3904735.80 +SET 519298.56 170311.68 +SET 519346.59 448933.39 +SET 519382.32 331685.76 +SET 519393.60 312836.04 +SET 519394.15 360137.85 +SET 5194050.96 4187080.96 +SET 5194462.71 3906243.42 +SET 5194702.17 4187605.92 +SET 519475.88 360194.52 +SET 519490.32 306615.96 +SET 5195130.98 3906745.96 +SET 5195353.38 4188130.88 +SET 519557.61 360251.19 +SET 51957.75 34810.05 +SET 519598.20 295819.86 +SET 5196004.59 4188655.84 +SET 519665.58 418918.08 +SET 5197135.79 3908253.58 +SET 519721.07 360364.53 +SET 519768.48 449298.08 +SET 51977.43 38551.32 +SET 519803.90 295936.97 +SET 519830.80 313099.37 +SET 5198472.33 3909258.66 +SET 51986.76 38558.24 +SET 519884.53 360477.87 +SET 519914.06 390976.12 +SET 51996.09 38565.16 +SET 519966.26 360534.54 +SET 520047.99 360591.21 +SET 5201145.41 3911268.82 +SET 5201214.27 4192855.52 +SET 520129.72 360647.88 +SET 52014.75 38579.00 +SET 520145.22 332172.96 +SET 5201813.68 3911771.36 +SET 520215.30 296171.19 +SET 5202516.69 4193905.44 +SET 52026.80 31336.27 +SET 520260.62 307070.61 +SET 520260.64 324897.96 +SET 520268.00 313362.70 +SET 520282.08 170634.24 +SET 520297.80 332270.40 +SET 520316.79 419443.04 +SET 520374.91 360817.89 +SET 5204470.32 4195480.32 +SET 520450.38 332367.84 +SET 5205155.03 3914284.06 +SET 52052.07 38606.68 +SET 520538.37 360931.23 +SET 5205772.74 4196530.24 +SET 5205823.30 3914786.60 +SET 520612.26 450027.46 +SET 520626.70 296405.41 +SET 5206423.95 4197055.20 +SET 52070.73 38620.52 +SET 5207075.16 4197580.16 +SET 520719.20 170777.60 +SET 520722.80 307343.40 +SET 520755.54 332562.72 +SET 5207828.11 3916294.22 +SET 52080.06 38627.44 +SET 5208496.38 3916796.76 +SET 5209.68 4199.68 +SET 5209028.79 4199155.04 +SET 520947.02 361214.58 +SET 5209680.00 4199680.00 +SET 52098.72 38641.28 +SET 521.95 349.69 +SET 521030.92 307525.26 +SET 5210331.21 4200204.96 +SET 521038.10 296639.63 +SET 521047.04 170885.12 +SET 5210501.19 3918304.38 +SET 5210982.42 4200729.92 +SET 5211169.46 3918806.92 +SET 521142.40 313889.36 +SET 521213.28 332855.04 +SET 52125.06 39198.12 +SET 52126.71 38662.04 +SET 521265.60 170956.80 +SET 521281.76 325535.64 +SET 521339.04 307707.12 +SET 521374.88 170992.64 +SET 5213842.54 3920817.08 +SET 521449.50 296873.85 +SET 5214510.81 3921319.62 +SET 521456.04 450756.84 +SET 521484.16 171028.48 +SET 521518.44 333049.92 +SET 521519.13 361611.27 +SET 521537.04 325695.06 +SET 521579.60 314152.69 +SET 5215847.35 3922324.70 +SET 521619.21 420492.96 +SET 5216192.10 4204929.60 +SET 521801.22 307979.91 +SET 5218145.73 4206504.48 +SET 521823.60 333244.80 +SET 521846.05 361837.95 +SET 521877.93 451121.53 +SET 5218796.94 4207029.44 +SET 521918.87 392483.74 +SET 5219448.15 4207554.40 +SET 521955.28 308070.84 +SET 521976.18 333342.24 +SET 522.48 387.52 +SET 5220099.36 4208079.36 +SET 52201.35 38717.40 +SET 522030.56 171207.68 +SET 5220525.24 3925842.48 +SET 522066.60 297225.18 +SET 5220750.57 4208604.32 +SET 52210.68 38724.32 +SET 522109.34 308161.77 +SET 5221193.51 3926345.02 +SET 522128.76 333439.68 +SET 52220.01 38731.24 +SET 522254.70 362121.30 +SET 522263.40 308252.70 +SET 522270.42 421017.92 +SET 5223198.32 3927852.64 +SET 5223355.41 4210704.16 +SET 522358.40 171315.20 +SET 5224.80 3875.20 +SET 522433.92 333634.56 +SET 522499.89 362291.31 +SET 5225203.13 3929360.26 +SET 52257.33 38758.92 +SET 522571.52 308434.56 +SET 5225960.25 4212804.00 +SET 522663.35 362404.65 +SET 522686.24 171422.72 +SET 522739.08 333829.44 +SET 5227913.88 4214378.88 +SET 522795.52 171458.56 +SET 522813.44 326492.16 +SET 522826.81 362517.99 +SET 5228565.09 4214903.84 +SET 522879.64 308616.42 +SET 522891.20 314942.68 +SET 522904.80 171494.40 +SET 522908.54 362574.66 +SET 522921.63 421542.88 +SET 5229212.75 3932375.50 +SET 5229216.30 4215428.80 +SET 52294.65 38786.60 +SET 5229881.02 3932878.04 +SET 522990.27 362631.33 +SET 52307.20 36268.80 +SET 523072.00 362688.00 +SET 5231217.56 3933883.12 +SET 523153.73 362744.67 +SET 523187.76 308798.28 +SET 523196.82 334121.76 +SET 52322.64 38807.36 +SET 5232472.35 4218053.60 +SET 52331.97 38814.28 +SET 523349.40 334219.20 +SET 5233774.77 4219103.52 +SET 5234.13 3882.12 +SET 5234425.98 4219628.48 +SET 523495.88 308980.14 +SET 5235227.18 3936898.36 +SET 523560.48 171709.44 +SET 523565.49 452580.29 +SET 523572.84 422067.84 +SET 5236379.61 4221203.36 +SET 523654.56 334414.08 +SET 523669.76 171745.28 +SET 52369.29 38841.96 +SET 5237030.82 4221728.32 +SET 523712.20 298162.06 +SET 5237231.99 3938405.98 +SET 52378.62 38848.88 +SET 5237900.26 3938908.52 +SET 5238.04 3091.62 +SET 523807.14 334511.52 +SET 523807.57 363198.03 +SET 52384.80 35096.16 +SET 523888.32 171816.96 +SET 5238984.45 4223303.20 +SET 5239236.80 3939913.60 +SET 5239635.66 4223828.16 +SET 523997.60 171852.80 +SET 5240286.87 4224353.12 +SET 524052.76 363368.04 +SET 524112.30 334706.40 +SET 5241241.61 3941421.22 +SET 52415.94 38876.56 +SET 5241589.29 4225403.04 +SET 524216.16 171924.48 +SET 5242240.50 4225928.00 +SET 52425.27 38883.48 +SET 5242891.71 4226452.96 +SET 52432.25 35127.95 +SET 5243246.42 3942928.84 +SET 524325.44 171960.32 +SET 5243914.69 3943431.38 +SET 524417.46 334901.28 +SET 5244582.96 3943933.92 +SET 5245251.23 3944436.46 +SET 52453.50 29863.05 +SET 52454.40 17203.20 +SET 524544.00 172032.00 +SET 5246.40 3159.96 +SET 5246798.97 4229602.72 +SET 52470.66 36382.14 +SET 524706.60 363821.40 +SET 524722.62 335096.16 +SET 524728.36 309707.58 +SET 5247450.18 4230127.68 +SET 52481.25 38925.00 +SET 5248592.58 3946949.16 +SET 524875.20 335193.60 +SET 524875.26 423117.76 +SET 5249260.85 3947451.70 +SET 5249403.81 4231702.56 +SET 52499.91 38938.84 +SET 5250706.23 4232752.48 +SET 525110.96 327926.94 +SET 5251265.66 3948959.32 +SET 525152.10 298981.83 +SET 525190.54 309980.37 +SET 5251933.93 3949461.86 +SET 5252.79 3895.96 +SET 525308.96 172282.88 +SET 525357.80 299098.94 +SET 525360.44 364274.76 +SET 52537.23 38966.52 +SET 5253962.28 4235377.28 +SET 525442.17 364331.43 +SET 525514.40 316522.66 +SET 525526.47 423642.72 +SET 525527.52 172354.56 +SET 52555.89 38980.36 +SET 5255915.91 4236952.16 +SET 5255943.55 3952477.10 +SET 525605.63 364444.77 +SET 525621.52 328245.78 +SET 52565.22 38987.28 +SET 5256567.12 4237477.12 +SET 5256611.82 3952979.64 +SET 5257280.09 3953482.18 +SET 52574.55 38994.20 +SET 52574.60 35223.32 +SET 5257869.54 4238527.04 +SET 525790.68 335778.24 +SET 52583.88 39001.12 +SET 525855.36 172462.08 +SET 5258616.63 3954487.26 +SET 525876.80 328405.20 +SET 5259171.96 4239576.96 +SET 52593.21 39008.04 +SET 525943.26 335875.68 +SET 525951.60 316785.99 +SET 5259823.17 4240101.92 +SET 5259953.17 3955492.34 +SET 526095.84 335973.12 +SET 52611.87 39021.88 +SET 526132.08 328564.62 +SET 526177.68 424167.68 +SET 526177.74 364841.46 +SET 526183.20 172569.60 +SET 52630.53 39035.72 +SET 5263294.52 3958005.04 +SET 52634.12 36495.48 +SET 526386.30 299684.49 +SET 526401.00 336168.00 +SET 526422.93 365011.47 +SET 526423.02 310707.81 +SET 5264631.06 3959010.12 +SET 526511.04 172677.12 +SET 526577.08 310798.74 +SET 526592.00 299801.60 +SET 526668.12 365181.48 +SET 52669.50 35286.90 +SET 526706.16 336362.88 +SET 526749.85 365238.15 +SET 526797.70 299918.71 +SET 5267972.41 3961522.82 +SET 5268288.90 4246926.40 +SET 5268640.68 3962025.36 +SET 526885.20 310980.60 +SET 5268940.11 4247451.36 +SET 526948.16 172820.48 +SET 5269591.32 4247976.32 +SET 527003.40 300035.82 +SET 5271.45 3909.80 +SET 52714.50 39098.00 +SET 52715.85 36552.15 +SET 527153.20 329202.30 +SET 52723.83 39104.92 +SET 527263.20 317575.98 +SET 5272650.30 3965040.60 +SET 527321.96 365634.84 +SET 5273318.57 3965543.14 +SET 527347.38 311253.39 +SET 5273986.84 3966045.68 +SET 527403.69 365691.51 +SET 527408.48 329361.72 +SET 527414.80 300270.04 +SET 5274149.79 4251651.04 +SET 52742.49 39118.76 +SET 527469.06 336850.08 +SET 52748.01 42521.76 +SET 527480.10 425217.60 +SET 5274801.00 4252176.00 +SET 527494.56 172999.68 +SET 527501.44 311344.32 +SET 5275452.21 4252700.96 +SET 527603.84 173035.52 +SET 527621.64 336947.52 +SET 52764.40 35350.48 +SET 527648.88 365861.52 +SET 527655.50 311435.25 +SET 527713.12 173071.36 +SET 527784.39 456227.19 +SET 5277996.46 3969060.92 +SET 5278708.26 4255325.76 +SET 52789.14 39153.36 +SET 527894.07 366031.53 +SET 52793.33 39700.66 +SET 52797.58 36608.82 +SET 52798.47 39160.28 +SET 5280.78 3916.72 +SET 5280001.27 3970568.54 +SET 5280010.68 4256375.68 +SET 528057.53 366144.87 +SET 52807.80 39167.20 +SET 52811.85 35382.27 +SET 5281313.10 4257425.60 +SET 5281337.81 3971573.62 +SET 52817.13 39174.12 +SET 5281964.31 4257950.56 +SET 528220.99 366258.21 +SET 528259.52 173250.56 +SET 52826.46 39181.04 +SET 5282615.52 4258475.52 +SET 5283266.73 4259000.48 +SET 5283342.62 3973081.24 +SET 52835.79 39187.96 +SET 528537.12 337532.16 +SET 528547.91 366484.89 +SET 528574.80 318365.97 +SET 528579.86 311980.83 +SET 52859.30 35414.06 +SET 528629.64 366541.56 +SET 52864.90 30097.27 +SET 5286522.78 4261625.28 +SET 528684.88 330158.82 +SET 528689.70 337629.60 +SET 528711.37 366598.23 +SET 52873.11 39215.64 +SET 5287352.24 3976096.48 +SET 528782.52 426267.52 +SET 5287825.20 4262675.20 +SET 52879.31 36665.49 +SET 5288020.51 3976599.02 +SET 528874.83 366711.57 +SET 528887.98 312162.69 +SET 52891.52 17346.56 +SET 528915.20 173465.60 +SET 5289357.05 3977604.10 +SET 5290.11 3923.64 +SET 5290025.32 3978106.64 +SET 52901.10 39236.40 +SET 52901.20 31862.93 +SET 529038.29 366824.91 +SET 529050.06 457321.26 +SET 5291361.86 3979111.72 +SET 5291732.46 4265824.96 +SET 529196.10 312344.55 +SET 529243.04 173573.12 +SET 529269.84 398011.68 +SET 5292698.40 3980116.80 +SET 52929.09 39257.16 +SET 5293034.88 4266874.88 +SET 5293366.67 3980619.34 +SET 529433.73 426792.48 +SET 5294337.30 4267924.80 +SET 529446.94 367108.26 +SET 529452.60 338116.80 +SET 5294988.51 4268449.76 +SET 529528.67 367164.93 +SET 52954.20 35477.64 +SET 52961.04 36722.16 +SET 5296290.93 4269499.68 +SET 529680.16 173716.48 +SET 529773.86 367334.94 +SET 5298044.56 3984137.12 +SET 529812.34 312708.27 +SET 52985.07 39298.68 +SET 529898.72 173788.16 +SET 5299.44 3930.56 +SET 529937.32 367448.28 +SET 529938.11 398514.22 +SET 5299381.10 3985142.20 +SET 52994.40 39305.60 +SET 529961.28 330955.92 +SET 53000.80 17382.40 +SET 5300049.37 3985644.74 +SET 530008.00 173824.00 +SET 530062.92 338506.56 +SET 530100.78 367561.62 +SET 530264.24 367674.96 +SET 530294.60 301909.58 +SET 530323.60 319419.29 +SET 53041.05 39340.20 +SET 530445.12 173967.36 +SET 5304756.66 4276324.16 +SET 530500.30 302026.69 +SET 530509.43 367844.97 +SET 530520.66 338798.88 +SET 530582.64 313162.92 +SET 530591.16 367901.64 +SET 530606.38 399016.76 +SET 530663.68 174039.04 +SET 530672.89 367958.31 +SET 530673.24 338896.32 +SET 5306732.07 3990670.14 +SET 53070.60 30214.38 +SET 530727.12 331434.18 +SET 530736.70 313253.85 +SET 530754.62 368014.98 +SET 5308.77 3937.48 +SET 530825.82 338993.76 +SET 530836.35 368071.65 +SET 5309315.13 4279998.88 +SET 53097.84 33909.12 +SET 530991.52 174146.56 +SET 531.81 394.44 +SET 531044.82 313435.71 +SET 53110.08 17418.24 +SET 531100.80 174182.40 +SET 531117.40 302378.02 +SET 5311268.76 4281573.76 +SET 531159.51 459144.71 +SET 5311919.97 4282098.72 +SET 531198.00 319945.95 +SET 531210.08 174218.24 +SET 53124.50 36835.50 +SET 531352.94 313617.57 +SET 531387.36 428367.36 +SET 5314.40 3560.48 +SET 531408.46 368468.34 +SET 5314083.04 3996198.08 +SET 53144.00 35604.80 +SET 5314751.31 3996700.62 +SET 53150.70 31370.85 +SET 531507.00 313708.50 +SET 5315176.02 4284723.52 +SET 53158.14 45950.94 +SET 53162.34 39430.16 +SET 531635.20 320209.28 +SET 531647.20 174361.60 +SET 531661.06 313799.43 +SET 53171.67 39437.08 +SET 5317129.65 4286298.40 +SET 531734.50 302729.35 +SET 531741.30 339578.40 +SET 53181.00 39444.00 +SET 531898.84 368808.36 +SET 5319083.28 4287873.28 +SET 5319429.20 4000218.40 +SET 531969.18 313981.29 +SET 532003.29 459874.09 +SET 5320097.47 4000720.94 +SET 53206.23 36892.17 +SET 5321036.91 4289448.16 +SET 5321434.01 4001726.02 +SET 532144.03 368978.37 +SET 532145.90 302963.57 +SET 5322339.33 4290498.08 +SET 532277.30 314163.15 +SET 5322990.54 4291023.04 +SET 532351.60 303080.68 +SET 53238.90 35668.38 +SET 532425.18 460238.78 +SET 532504.20 340065.60 +SET 5325443.63 4004741.26 +SET 532552.68 369261.72 +SET 532557.30 303197.79 +SET 5326111.90 4005243.80 +SET 53264.97 39506.28 +SET 532689.78 429417.28 +SET 5327.43 3951.32 +SET 532716.14 369375.06 +SET 5327448.44 4006248.88 +SET 532769.36 332709.54 +SET 532797.87 369431.73 +SET 532809.36 340260.48 +SET 53283.63 39520.12 +SET 532879.60 369488.40 +SET 532893.54 314526.87 +SET 532946.80 320999.27 +SET 533067.84 174827.52 +SET 5330789.79 4008761.58 +SET 5330805.06 4297322.56 +SET 533124.79 369658.41 +SET 533174.40 303549.12 +SET 533177.12 174863.36 +SET 53320.95 39547.80 +SET 533267.10 340552.80 +SET 533279.46 401026.92 +SET 5332794.60 4010269.20 +SET 533286.40 174899.20 +SET 533288.25 369771.75 +SET 533340.99 429942.24 +SET 53338.40 32126.26 +SET 533419.68 340650.24 +SET 5334712.32 4300472.32 +SET 53353.52 33318.78 +SET 533614.24 175006.72 +SET 5336665.95 4302047.20 +SET 53369.69 37005.51 +SET 533690.85 461332.85 +SET 533696.90 370055.10 +SET 533723.52 175042.56 +SET 533724.84 340845.12 +SET 533790.48 333347.22 +SET 53381.25 35763.75 +SET 533817.90 315072.45 +SET 533832.80 175078.40 +SET 53386.26 39596.24 +SET 533942.08 175114.24 +SET 533942.09 370225.11 +SET 5339477.30 4015294.60 +SET 53399.22 43046.72 +SET 533992.20 430467.20 +SET 534045.76 333506.64 +SET 5340573.21 4305196.96 +SET 5340813.84 4016299.68 +SET 534112.74 461697.54 +SET 5341224.42 4305721.92 +SET 534182.58 341137.44 +SET 53423.58 39623.92 +SET 5342526.84 4306771.84 +SET 534301.04 333666.06 +SET 534335.16 341234.88 +SET 5343486.92 4018309.84 +SET 53437.92 17525.76 +SET 534434.14 315436.17 +SET 5344823.46 4019314.92 +SET 534488.48 175293.44 +SET 53451.57 39644.68 +SET 534595.93 370678.47 +SET 534597.76 175329.28 +SET 5346.09 3965.16 +SET 53460.90 39651.60 +SET 534616.00 402032.00 +SET 5346434.10 4309921.60 +SET 5346828.27 4020822.54 +SET 5347085.31 4310446.56 +SET 534811.60 333984.90 +SET 5348164.81 4021827.62 +SET 534841.12 370848.48 +SET 53488.89 39672.36 +SET 534896.32 315708.96 +SET 5349038.94 4312021.44 +SET 5349690.15 4312546.40 +SET 535004.58 370961.82 +SET 535034.88 175472.64 +SET 5350341.36 4313071.36 +SET 5351506.16 4024340.32 +SET 535168.04 371075.16 +SET 535204.44 315890.82 +SET 53523.60 35859.12 +SET 535231.40 304720.22 +SET 535249.77 371131.83 +SET 53526.21 39700.04 +SET 5352842.70 4025345.40 +SET 535294.62 431517.12 +SET 535331.50 371188.50 +SET 5353510.97 4025847.94 +SET 535378.41 462791.61 +SET 535413.23 371245.17 +SET 535437.10 304837.33 +SET 53544.87 39713.88 +SET 5354899.83 4316746.08 +SET 5355.42 3972.08 +SET 5355551.04 4317271.04 +SET 535576.69 371358.51 +SET 5356202.25 4317796.00 +SET 53563.53 39727.72 +SET 535642.80 304954.44 +SET 535666.62 316163.61 +SET 5356853.46 4318320.96 +SET 535690.56 175687.68 +SET 53571.05 35890.91 +SET 535740.15 371471.85 +SET 5357520.59 4028863.18 +SET 535800.30 463156.30 +SET 5358155.88 4319370.88 +SET 535820.68 316254.54 +SET 535821.88 371528.52 +SET 535832.72 334622.58 +SET 535860.96 342209.28 +SET 5358857.13 4029868.26 +SET 535903.61 371585.19 +SET 535952.54 403037.08 +SET 535974.74 316345.47 +SET 53600.85 39755.40 +SET 536018.40 175795.20 +SET 5360193.67 4030873.34 +SET 536067.07 371698.53 +SET 536128.80 316436.40 +SET 536166.12 342404.16 +SET 536230.53 371811.87 +SET 5362714.35 4323045.60 +SET 53628.84 39776.16 +SET 5362866.75 4032883.50 +SET 536312.26 371868.54 +SET 536455.52 175938.56 +SET 536590.98 316709.19 +SET 5365970.40 4325670.40 +SET 536620.81 403539.62 +SET 53665.95 35954.49 +SET 53666.16 39803.84 +SET 536674.08 176010.24 +SET 536720.91 372151.89 +SET 536745.04 316800.12 +SET 53675.49 39810.76 +SET 536783.36 176046.08 +SET 5368212.91 4036903.82 +SET 53684.82 39817.68 +SET 5368575.24 4327770.24 +SET 536881.60 323369.24 +SET 5368881.18 4037406.36 +SET 53694.15 39824.60 +SET 5369549.45 4037908.90 +SET 537047.83 372378.57 +SET 5370885.99 4038913.98 +SET 53712.81 39838.44 +SET 537129.56 372435.24 +SET 53722.14 39845.36 +SET 537329.76 176225.28 +SET 537361.28 317163.84 +SET 537364.40 335579.10 +SET 537374.75 372605.25 +SET 537386.76 343183.68 +SET 5374.08 3985.92 +SET 5374227.34 4041426.68 +SET 537456.48 372661.92 +SET 537494.10 306008.43 +SET 5375563.88 4042431.76 +SET 5376232.15 4042934.30 +SET 53768.79 39879.96 +SET 5376900.42 4043436.84 +SET 537691.92 343378.56 +SET 5377040.97 4334594.72 +SET 53775.60 32389.59 +SET 537756.00 323895.90 +SET 53778.12 39886.88 +SET 53778.34 37288.86 +SET 5378236.96 4044441.92 +SET 537844.50 343476.00 +SET 537957.35 404544.70 +SET 53796.78 39900.72 +SET 5379645.81 4336694.56 +SET 537985.44 176440.32 +SET 537997.08 343573.44 +SET 53808.30 36049.86 +SET 5380910.04 4046452.08 +SET 538094.72 176476.16 +SET 53815.44 39914.56 +SET 538204.00 176512.00 +SET 5382246.58 4047457.16 +SET 53824.77 39921.48 +SET 538285.64 317709.42 +SET 5382901.86 4339319.36 +SET 5382914.85 4047959.70 +SET 538316.90 306476.87 +SET 5383553.07 4339844.32 +SET 5384251.39 4048964.78 +SET 53860.07 37345.53 +SET 538600.70 373455.30 +SET 538607.40 343963.20 +SET 53862.09 39949.16 +SET 5386256.20 4050472.40 +SET 538641.12 176655.36 +SET 5386809.12 4342469.12 +SET 5387460.33 4342994.08 +SET 5388261.01 4051980.02 +SET 5388762.75 4344044.00 +SET 5388929.28 4052482.56 +SET 538968.96 176762.88 +SET 5390065.17 4345093.92 +SET 539009.35 373738.65 +SET 5390265.82 4053487.64 +SET 53903.20 36113.44 +SET 539078.24 176798.72 +SET 539091.08 373795.32 +SET 5391367.59 4346143.84 +SET 539139.70 306945.31 +SET 5391602.36 4054492.72 +SET 5392.10 3182.55 +SET 5392018.80 4346668.80 +SET 53921.00 31825.50 +SET 539210.00 318255.00 +SET 5392270.63 4054995.26 +SET 5392670.01 4347193.76 +SET 539293.89 405549.78 +SET 539370.30 344450.40 +SET 5394.18 3740.22 +SET 539406.08 176906.24 +SET 53941.80 37402.20 +SET 5394275.44 4056502.88 +SET 5394623.64 4348768.64 +SET 53950.65 36145.23 +SET 539515.36 176942.08 +SET 539518.12 318436.86 +SET 5395274.85 4349293.60 +SET 53955.39 40018.36 +SET 5395611.98 4057507.96 +SET 5395926.06 4349818.56 +SET 539624.64 176977.92 +SET 5396577.27 4350343.52 +SET 5396948.52 4058513.04 +SET 539826.24 318618.72 +SET 539828.04 344742.72 +SET 53984.32 17704.96 +SET 539843.20 177049.60 +SET 5398953.33 4060020.66 +SET 5399182.11 4352443.36 +SET 539942.00 325212.55 +SET 539962.16 406052.32 +SET 539962.50 307413.75 +SET 540019.20 466803.20 +SET 5400289.87 4061025.74 +SET 5400958.14 4061528.28 +SET 54011.37 40059.88 +SET 540134.36 318800.58 +SET 54020.70 40066.80 +SET 5402294.68 4062533.36 +SET 540280.32 177192.96 +SET 5402962.95 4063035.90 +SET 5403631.22 4063538.44 +SET 5403740.58 4356118.08 +SET 540379.20 325475.88 +SET 540398.76 374702.04 +SET 540427.76 337492.14 +SET 5404391.79 4356643.04 +SET 54045.55 36208.81 +SET 54048.69 40087.56 +SET 5405043.00 4357168.00 +SET 540579.60 307765.08 +SET 540590.94 345229.92 +SET 540596.54 319073.37 +SET 540608.16 177300.48 +SET 5406304.30 4065548.60 +SET 5406345.42 4358217.92 +SET 540643.95 374872.05 +SET 540717.44 177336.32 +SET 540743.52 345327.36 +SET 54076.68 40108.32 +SET 5407640.84 4066553.68 +SET 540826.72 177372.16 +SET 5408977.38 4067558.76 +SET 540904.66 319255.23 +SET 5410313.92 4068563.84 +SET 541052.60 375155.40 +SET 5410982.19 4069066.38 +SET 5411.40 4013.60 +SET 54119.36 33797.04 +SET 541193.60 337970.40 +SET 541196.70 308116.41 +SET 54123.33 40142.92 +SET 541253.60 326002.54 +SET 541284.87 467897.27 +SET 5413508.73 4363992.48 +SET 541353.84 345717.12 +SET 541366.84 319528.02 +SET 541448.88 338129.82 +SET 541482.40 177587.20 +SET 541542.98 375495.42 +SET 541591.68 177623.04 +SET 54160.65 40170.60 +SET 5416113.57 4366092.32 +SET 5416328.35 4073086.70 +SET 541659.00 345912.00 +SET 541674.96 319709.88 +SET 5416764.78 4366617.28 +SET 5416996.62 4073589.24 +SET 541706.44 375608.76 +SET 541788.17 375665.43 +SET 5418067.20 4367667.20 +SET 541810.24 177694.72 +SET 541919.52 177730.56 +SET 541959.44 338448.66 +SET 5420.73 4020.52 +SET 5420020.83 4369242.08 +SET 54202.88 17776.64 +SET 5420672.04 4369767.04 +SET 54207.30 40205.20 +SET 5421323.25 4370292.00 +SET 5422342.78 4077609.56 +SET 542247.36 177838.08 +SET 54225.96 40219.04 +SET 5422625.67 4371341.92 +SET 542291.20 320073.60 +SET 5423276.88 4371866.88 +SET 54235.35 36335.97 +SET 5423928.09 4372391.84 +SET 542430.90 308819.07 +SET 54244.62 40232.88 +SET 5424579.30 4372916.80 +SET 5425015.86 4079619.72 +SET 5425230.51 4373441.76 +SET 542550.54 468991.34 +SET 542565.20 326792.53 +SET 5425684.13 4080122.26 +SET 542599.32 320255.46 +SET 542636.60 308936.18 +SET 542684.48 177981.44 +SET 542687.20 376288.80 +SET 542725.28 338926.92 +SET 5427688.94 4081629.88 +SET 54281.94 40260.56 +SET 54282.80 36367.76 +SET 5429025.48 4082634.96 +SET 542903.04 178053.12 +SET 54291.27 40267.48 +SET 5429693.75 4083137.50 +SET 5429788.98 4377116.48 +SET 542980.56 339086.34 +SET 543002.40 327055.86 +SET 543061.50 320528.25 +SET 54309.93 40281.32 +SET 543109.14 437816.64 +SET 5431742.61 4378691.36 +SET 54319.26 40288.24 +SET 543215.56 320619.18 +SET 543235.84 339245.76 +SET 5432366.83 4085147.66 +SET 5432393.82 4379216.32 +SET 5433035.10 4085650.20 +SET 5433045.03 4379741.28 +SET 543337.38 346983.84 +SET 543340.16 178196.48 +SET 543369.62 320710.11 +SET 54347.25 40309.00 +SET 543491.12 339405.18 +SET 54350.45 37685.55 +SET 5435039.91 4087157.82 +SET 543523.68 320801.04 +SET 5435708.18 4087660.36 +SET 543586.23 376912.17 +SET 5437044.72 4088665.44 +SET 54374.64 33956.46 +SET 5437603.50 4383416.00 +SET 543777.28 178339.84 +SET 5438254.71 4383940.96 +SET 54383.18 32098.29 +SET 543971.78 409067.56 +SET 5439717.80 4090675.60 +SET 543994.88 377195.52 +SET 544001.68 339724.02 +SET 544076.50 309755.95 +SET 544214.40 178483.20 +SET 5442390.88 4092685.76 +SET 544256.96 339883.44 +SET 544411.56 438866.56 +SET 5444395.69 4094193.38 +SET 544566.99 377592.21 +SET 5445732.23 4095198.46 +SET 544602.10 321437.55 +SET 5446400.50 4095701.00 +SET 544648.72 377648.88 +SET 544659.99 470814.79 +SET 5447068.77 4096203.54 +SET 54471.06 34786.08 +SET 54472.60 36494.92 +SET 544760.80 178662.40 +SET 5448.72 4041.28 +SET 5448022.86 4391815.36 +SET 5448674.07 4392340.32 +SET 544870.08 178698.24 +SET 544910.22 321619.41 +SET 5449325.28 4392865.28 +SET 545015.76 348055.68 +SET 545022.80 340361.70 +SET 5450410.12 4098716.24 +SET 545062.77 439391.52 +SET 5451278.91 4394440.16 +SET 54513.91 37798.89 +SET 545218.34 321801.27 +SET 545220.83 378045.57 +SET 5452581.33 4395490.08 +SET 545278.08 340521.12 +SET 545310.70 310458.61 +SET 545320.92 348250.56 +SET 5453232.54 4396015.04 +SET 54533.85 40447.40 +SET 545372.40 321892.20 +SET 545384.29 378158.91 +SET 5453883.75 4396540.00 +SET 54543.18 40454.32 +SET 545473.50 348348.00 +SET 5455088.01 4102234.02 +SET 5455186.17 4397589.92 +SET 54552.51 40461.24 +SET 545547.75 378272.25 +SET 5456488.59 4398639.84 +SET 5457092.82 4103741.64 +SET 545711.21 378385.59 +SET 5457139.80 4399164.80 +SET 5457791.01 4399689.76 +SET 5458.05 4048.20 +SET 54580.50 40482.00 +SET 545853.60 179020.80 +SET 5459093.43 4400739.68 +SET 545927.80 310809.94 +SET 545956.40 378555.60 +SET 545962.88 179056.64 +SET 545976.59 410575.18 +SET 5459765.90 4105751.80 +SET 54599.16 40495.84 +SET 546.40 179.20 +SET 546083.82 348737.76 +SET 546119.86 378668.94 +SET 54614.95 36590.29 +SET 5461770.71 4107259.42 +SET 546181.44 179128.32 +SET 5462349.48 4403364.48 +SET 5462438.98 4107761.96 +SET 54627.15 40516.60 +SET 546290.72 179164.16 +SET 546299.20 341158.80 +SET 5463000.69 4403889.44 +SET 5463107.25 4108264.50 +SET 546339.20 311044.16 +SET 54636.48 40523.52 +SET 5463775.52 4108767.04 +SET 54640.00 17920.00 +SET 5464303.11 4404939.36 +SET 5464443.79 4109269.58 +SET 54645.81 40530.44 +SET 546450.82 322528.71 +SET 5464954.32 4405464.32 +SET 546509.28 179235.84 +SET 5465112.06 4109772.12 +SET 546528.51 378952.29 +SET 546544.90 311161.27 +SET 54655.14 40537.36 +SET 546554.48 341318.22 +SET 5466256.74 4406514.24 +SET 546691.97 379065.63 +SET 5467.38 4055.12 +SET 546727.84 179307.52 +SET 546773.70 379122.30 +SET 5467785.14 4111782.28 +SET 546809.76 341477.64 +SET 5468210.37 4408089.12 +SET 546999.30 349322.40 +SET 54701.79 40571.96 +SET 547016.40 440966.40 +SET 5470458.22 4113792.44 +SET 547067.06 322892.43 +SET 5470815.21 4410188.96 +SET 54716.20 31151.26 +SET 547182.35 379405.65 +SET 547191.33 473002.93 +SET 5472768.84 4411763.84 +SET 54729.78 40592.72 +SET 547304.46 349517.28 +SET 5473131.30 4115802.60 +SET 547375.18 323074.29 +SET 5474071.26 4412813.76 +SET 5474467.84 4116807.68 +SET 54748.44 40606.56 +SET 5475.91 3796.89 +SET 54757.77 40613.48 +SET 547591.00 379689.00 +SET 5476.71 4062.04 +SET 547609.62 349712.16 +SET 5476472.65 4118315.30 +SET 5476676.10 4414913.60 +SET 547672.73 379745.67 +SET 547711.36 179630.08 +SET 5477140.92 4118817.84 +SET 5477327.31 4415438.56 +SET 547754.46 379802.34 +SET 54776.43 40627.32 +SET 547811.60 329952.49 +SET 547837.36 323347.08 +SET 547914.78 349907.04 +SET 5479280.94 4417013.44 +SET 547984.80 311981.04 +SET 54804.42 40648.08 +SET 548067.36 350004.48 +SET 548081.38 380029.02 +SET 5481234.57 4418588.32 +SET 548248.80 330215.82 +SET 5482536.99 4419638.24 +SET 548257.76 179809.28 +SET 5483155.35 4123340.70 +SET 548318.82 442016.32 +SET 548326.57 380199.03 +SET 548341.44 342434.16 +SET 5484.57 4740.97 +SET 548408.30 380255.70 +SET 54841.74 40675.76 +SET 5485141.83 4421738.08 +SET 54852.20 36749.24 +SET 548525.10 350296.80 +SET 548596.72 342593.58 +SET 54860.40 40689.60 +SET 548601.90 312332.37 +SET 548653.49 380425.71 +SET 548694.88 179952.64 +SET 548735.22 380482.38 +SET 54879.06 40703.44 +SET 548830.26 350491.68 +SET 54885.20 34275.30 +SET 548878.89 474461.69 +SET 54888.39 40710.36 +SET 548913.44 180024.32 +SET 54897.72 40717.28 +SET 548970.03 442541.28 +SET 5489838.05 4128366.10 +SET 549013.30 312566.59 +SET 5490351.51 4425937.76 +SET 5491174.59 4129371.18 +SET 549123.20 330742.48 +SET 549135.42 350686.56 +SET 5491653.93 4426987.68 +SET 5491842.86 4129873.72 +SET 549219.00 312683.70 +SET 549223.90 324165.45 +SET 549288.00 350784.00 +SET 549317.94 413087.88 +SET 54935.04 40744.96 +SET 549350.56 180167.68 +SET 5493847.67 4131381.34 +SET 5494258.77 4429087.52 +SET 549440.58 350881.44 +SET 549459.84 180203.52 +SET 549470.79 380992.41 +SET 5494909.98 4429612.48 +SET 5495.37 4075.88 +SET 549532.02 324347.31 +SET 549593.16 350978.88 +SET 549621.24 443066.24 +SET 5496212.40 4430662.40 +SET 549630.40 312917.92 +SET 5496520.75 4133391.50 +SET 54967.84 18027.52 +SET 5497189.02 4133894.04 +SET 5498166.03 4432237.28 +SET 549840.14 324529.17 +SET 5498525.56 4134899.12 +SET 549873.12 343390.68 +SET 5498817.24 4432762.24 +SET 54991.02 40786.48 +SET 5499862.10 4135904.20 +SET 55.98 41.52 +SET 55000.35 40793.40 +SET 550041.80 313152.14 +SET 5500770.87 4434337.12 +SET 5501866.91 4137411.82 +SET 55019.01 40807.24 +SET 550203.48 351368.64 +SET 550247.50 313269.25 +SET 5502535.18 4137914.36 +SET 5502724.50 4435912.00 +SET 550302.32 324801.96 +SET 550334.08 180490.24 +SET 5503871.72 4138919.44 +SET 5504.20 3687.64 +SET 55042.00 36876.40 +SET 550451.55 381672.45 +SET 550453.20 313386.36 +SET 5504539.99 4139421.98 +SET 5505208.26 4139924.52 +SET 550610.44 324983.82 +SET 550615.01 381785.79 +SET 5506544.80 4140929.60 +SET 550661.22 351660.96 +SET 550661.92 180597.76 +SET 5506631.76 4439061.76 +SET 550696.74 381842.46 +SET 55074.99 40848.76 +SET 550778.47 381899.13 +SET 5507934.18 4440111.68 +SET 55081.38 35175.84 +SET 550813.80 351758.40 +SET 5508549.61 4142437.22 +SET 550860.20 381955.80 +SET 550864.60 313620.58 +SET 55087.20 33179.58 +SET 550880.48 180669.44 +SET 55089.45 36908.19 +SET 5509217.88 4142939.76 +SET 550923.66 444116.16 +SET 550941.93 382012.47 +SET 5509887.81 4441686.56 +SET 550989.76 180705.28 +SET 55102.98 40869.52 +SET 551023.66 382069.14 +SET 551072.62 325256.61 +SET 551105.39 382125.81 +SET 551118.96 351953.28 +SET 5511190.23 4442736.48 +SET 55112.31 40876.44 +SET 551208.32 180776.96 +SET 551226.68 325347.54 +SET 5512492.65 4443786.40 +SET 5512559.23 4145452.46 +SET 55127.60 31385.48 +SET 551271.54 352050.72 +SET 551276.00 313854.80 +SET 551309.20 332059.13 +SET 551317.60 180812.80 +SET 5513227.50 4145955.00 +SET 5513795.07 4444836.32 +SET 5514.03 4089.72 +SET 55140.48 34434.72 +SET 551404.80 344347.20 +SET 551424.12 352148.16 +SET 551432.31 382352.49 +SET 55149.63 40904.12 +SET 551574.87 444641.12 +SET 551595.77 382465.83 +SET 551660.08 344506.62 +SET 551677.50 382522.50 +SET 55168.29 40917.96 +SET 551687.40 314089.02 +SET 551688.86 325620.33 +SET 5517051.12 4447461.12 +SET 551754.72 180956.16 +SET 551759.23 382579.17 +SET 5517702.33 4447986.08 +SET 551840.96 382635.84 +SET 5519241.93 4150477.86 +SET 5519655.96 4449560.96 +SET 551996.98 325802.19 +SET 552004.42 382749.18 +SET 5520307.17 4450085.92 +SET 5520578.47 4151482.94 +SET 552086.15 382805.85 +SET 5520958.38 4450610.88 +SET 5521246.74 4151985.48 +SET 552170.64 344825.46 +SET 552183.60 332585.79 +SET 552187.02 352635.36 +SET 5521915.01 4152488.02 +SET 552226.08 445166.08 +SET 552249.61 382919.19 +SET 5523919.82 4153995.64 +SET 552410.40 181171.20 +SET 55242.93 40973.32 +SET 5524588.09 4154498.18 +SET 552494.80 383089.20 +SET 552519.68 181207.04 +SET 5525256.36 4155000.72 +SET 5525516.85 4454285.60 +SET 552613.22 326165.91 +SET 552620.80 332849.12 +SET 552628.96 181242.88 +SET 552644.76 352927.68 +SET 552681.20 345144.30 +SET 55270.92 40994.08 +SET 55279.25 37035.35 +SET 55280.25 41001.00 +SET 5528121.69 4456385.44 +SET 552847.52 181314.56 +SET 5528597.71 4157513.42 +SET 552877.29 445691.04 +SET 552903.45 383372.55 +SET 552921.34 326347.77 +SET 552985.18 383429.22 +SET 5529934.25 4158518.50 +SET 553058.00 333112.45 +SET 55307.54 32643.87 +SET 553127.30 314908.79 +SET 5531270.79 4159523.58 +SET 55317.57 41028.68 +SET 553175.36 181422.08 +SET 553230.37 383599.23 +SET 553255.08 353317.44 +SET 55326.70 37067.14 +SET 5532680.16 4460060.16 +SET 55331.21 38365.59 +SET 553327.56 416103.12 +SET 55333.30 31502.59 +SET 55336.23 41042.52 +SET 553393.92 181493.76 +SET 5533943.87 4161533.74 +SET 5533982.58 4461110.08 +SET 553447.04 345622.56 +SET 5534612.14 4162036.28 +SET 553528.50 446216.00 +SET 5535280.41 4162538.82 +SET 5535936.21 4462684.96 +SET 5535948.68 4163041.36 +SET 55364.22 41063.28 +SET 5536616.95 4163543.90 +SET 553702.32 345781.98 +SET 553721.76 181601.28 +SET 5537285.22 4164046.44 +SET 55373.55 41070.20 +SET 55382.88 41077.12 +SET 553845.70 326893.35 +SET 55386.54 35370.72 +SET 553865.40 353707.20 +SET 5539192.26 4465309.76 +SET 55392.21 41084.04 +SET 553940.32 181672.96 +SET 55395.76 34594.14 +SET 55404.96 18170.88 +SET 5540626.57 4166559.14 +SET 55410.87 41097.88 +SET 5541145.89 4466884.64 +SET 554129.40 384222.60 +SET 554153.82 327075.21 +SET 5542.02 4110.48 +SET 55421.60 37130.72 +SET 554212.88 346100.82 +SET 554268.16 181780.48 +SET 5543299.65 4168569.30 +SET 554369.60 333902.44 +SET 5544401.94 4469509.44 +SET 554456.32 384449.28 +SET 5544636.19 4169574.38 +SET 5546.16 3273.48 +SET 55461.60 32734.80 +SET 554619.78 384562.62 +SET 554628.30 354194.40 +SET 55466.85 41139.40 +SET 5547006.78 4471609.28 +SET 554772.90 315845.67 +SET 554780.88 354291.84 +SET 554783.24 384675.96 +SET 554830.92 447265.92 +SET 554864.97 384732.63 +SET 554924.12 327529.86 +SET 5549314.08 4173092.16 +SET 55494.67 38478.93 +SET 5549611.62 4473709.12 +SET 5550262.83 4474234.08 +SET 555033.12 182031.36 +SET 5550650.62 4174097.24 +SET 555086.04 354486.72 +SET 5551.35 4117.40 +SET 55516.50 37194.30 +SET 5552216.46 4475808.96 +SET 55524.40 33442.91 +SET 555244.00 334429.10 +SET 555251.68 182103.04 +SET 5552655.43 4175604.86 +SET 555273.62 385015.98 +SET 555332.37 417610.74 +SET 5553323.70 4176107.40 +SET 555355.35 385072.65 +SET 55541.49 41194.76 +SET 5555472.51 4478433.76 +SET 555579.52 182210.56 +SET 5556123.72 4478958.72 +SET 5556665.05 4178620.10 +SET 555688.80 182246.40 +SET 555694.42 327984.51 +SET 5557426.14 4480008.64 +SET 55578.81 41222.44 +SET 5558077.35 4480533.60 +SET 5558669.86 4180127.72 +SET 555907.36 182318.08 +SET 5560.68 4124.32 +SET 556000.64 418113.28 +SET 5560006.40 4181132.80 +SET 556001.52 355071.36 +SET 5560030.98 4482108.48 +SET 556009.19 385526.01 +SET 556016.64 182353.92 +SET 556051.02 480661.42 +SET 556133.34 448315.84 +SET 556212.80 316665.44 +SET 556235.20 182425.60 +SET 55625.46 41257.04 +SET 556254.38 385696.02 +SET 5562635.82 4484208.32 +SET 5562679.48 4183142.96 +SET 556310.66 328348.23 +SET 5563347.75 4183645.50 +SET 556344.48 182461.44 +SET 5563938.24 4485258.24 +SET 55644.12 41270.88 +SET 5564589.45 4485783.20 +SET 556472.91 481026.11 +SET 5565352.56 4185153.12 +SET 55658.13 38592.27 +SET 556618.78 328530.09 +SET 55662.78 41284.72 +SET 556624.20 316899.66 +SET 5566543.08 4487358.08 +SET 5566689.10 4186158.20 +SET 556672.32 182568.96 +SET 5567194.29 4487883.04 +SET 5567357.37 4186660.74 +SET 556781.60 182604.80 +SET 5567845.50 4488408.00 +SET 5568025.64 4187163.28 +SET 556908.22 386149.38 +SET 55691.70 35565.60 +SET 5569147.92 4489457.92 +SET 5569362.18 4188168.36 +SET 5569799.13 4489982.88 +SET 556989.95 386206.05 +SET 55700.10 41312.40 +SET 5570030.45 4188670.90 +SET 5570450.34 4490507.84 +SET 5571101.55 4491032.80 +SET 5571752.76 4491557.76 +SET 55718.76 41326.24 +SET 557222.16 355850.88 +SET 557235.02 328893.81 +SET 5572403.97 4492082.72 +SET 5572703.53 4190681.06 +SET 55728.09 41333.16 +SET 5573.28 1827.84 +SET 55732.80 18278.40 +SET 557389.08 328984.74 +SET 5574040.07 4191686.14 +SET 5574357.60 4493657.60 +SET 55746.75 41347.00 +SET 557480.33 386546.07 +SET 557546.56 182855.68 +SET 55756.08 41353.92 +SET 5575660.02 4494707.52 +SET 5576044.88 4193193.76 +SET 557655.84 182891.52 +SET 557725.52 386716.08 +SET 557738.58 482120.18 +SET 5577381.42 4194198.84 +SET 55774.74 41367.76 +SET 5578049.69 4194701.38 +SET 557858.40 317602.32 +SET 557874.40 182963.20 +SET 55793.40 41381.60 +SET 5579567.28 4497857.28 +SET 557970.71 386886.09 +SET 557985.06 356338.08 +SET 558005.32 329348.46 +SET 558005.45 419620.90 +SET 5580218.49 4498382.24 +SET 558064.10 317719.43 +SET 558086.97 449890.72 +SET 55812.06 41395.44 +SET 558134.17 386999.43 +SET 558137.64 356435.52 +SET 5582059.31 4197716.62 +SET 5582823.33 4500482.08 +SET 55830.72 41409.28 +SET 5583474.54 4501007.04 +SET 55840.05 41416.20 +SET 5584125.75 4501532.00 +SET 558442.80 356630.40 +SET 558461.09 387226.11 +SET 558467.50 329621.25 +SET 5584732.39 4199726.78 +SET 558475.50 317953.65 +SET 5584776.96 4502056.96 +SET 5585400.66 4200229.32 +SET 5585428.17 4502581.92 +SET 558552.64 348810.96 +SET 5586068.93 4200731.86 +SET 558624.55 387339.45 +SET 558639.36 183214.08 +SET 558673.72 420123.44 +SET 5586730.59 4503631.84 +SET 5586737.20 4201234.40 +SET 558681.20 318070.76 +SET 558741.60 336535.74 +SET 558747.96 356825.28 +SET 5588.67 4145.08 +SET 5588033.01 4504681.76 +SET 558857.92 183285.76 +SET 55886.70 41450.80 +SET 5588742.01 4202742.02 +SET 558900.54 356922.72 +SET 558951.47 387566.13 +SET 5589986.64 4506256.64 +SET 5590078.55 4203747.10 +SET 559053.12 357020.16 +SET 559063.20 349129.80 +SET 5590746.82 4204249.64 +SET 559083.74 329984.97 +SET 559092.60 318304.98 +SET 5591415.09 4204752.18 +SET 5592591.48 4508356.48 +SET 559295.04 183429.12 +SET 559298.30 318422.09 +SET 559318.48 349289.22 +SET 559341.99 420625.98 +SET 559391.86 330166.83 +SET 5594088.17 4206762.34 +SET 55942.68 41492.32 +SET 559426.14 483578.94 +SET 55943.55 37480.41 +SET 559441.85 387906.15 +SET 5594756.44 4207264.88 +SET 559504.00 318539.20 +SET 559513.60 183500.80 +SET 5595424.71 4207767.42 +SET 559573.76 349448.64 +SET 559616.00 337062.40 +SET 559622.88 183536.64 +SET 5596761.25 4208772.50 +SET 559687.04 388076.16 +SET 559699.98 330348.69 +SET 559732.16 183572.48 +SET 5597429.52 4209275.04 +SET 559768.77 388132.83 +SET 5597801.16 4512556.16 +SET 5598.00 4152.00 +SET 55980.00 41520.00 +SET 559816.02 357507.36 +SET 559841.44 183608.32 +SET 559854.04 330439.62 +SET 5598766.06 4210280.12 +SET 55991.00 37512.20 +SET 559915.40 318773.42 +SET 559950.72 183644.16 +SET 55996.86 35760.48 +SET 5599754.79 4514131.04 +SET 560008.10 330530.55 +SET 5600102.60 4211285.20 +SET 560013.96 388302.84 +SET 56004.06 45146.56 +SET 5601057.21 4515180.96 +SET 56017.32 41547.68 +SET 5601708.42 4515705.92 +SET 560259.15 388472.85 +SET 560273.76 357799.68 +SET 560278.56 183751.68 +SET 5603010.84 4516755.84 +SET 5603443.95 4213797.90 +SET 56035.98 41561.52 +SET 56038.45 37543.99 +SET 560387.84 183787.52 +SET 5604112.22 4214300.44 +SET 5604780.49 4214802.98 +SET 560532.50 319124.75 +SET 5605448.76 4215305.52 +SET 560586.07 388699.53 +SET 560594.88 350086.32 +SET 56060.64 18385.92 +SET 5606117.03 4215808.06 +SET 560624.34 330894.27 +SET 56063.97 41582.28 +SET 560678.53 421631.06 +SET 5606785.30 4216310.60 +SET 560691.81 451990.56 +SET 560691.81 484673.01 +SET 56073.30 41589.20 +SET 5607453.57 4216813.14 +SET 560749.53 388812.87 +SET 5607569.31 4520430.56 +SET 56082.63 41596.12 +SET 5608790.11 4217818.22 +SET 560912.99 388926.21 +SET 560932.46 331076.13 +SET 560943.90 319358.97 +SET 5609458.38 4218320.76 +SET 560994.72 388982.88 +SET 56101.29 41609.96 +SET 561036.66 358286.88 +SET 56110.62 41616.88 +SET 56111.37 48503.77 +SET 561149.60 319476.08 +SET 561239.91 389152.89 +SET 561262.08 184074.24 +SET 5612799.73 4220833.46 +SET 56129.28 41630.72 +SET 561321.64 389209.56 +SET 56133.35 37607.57 +SET 561360.72 350564.58 +SET 56138.61 41637.64 +SET 561403.37 389266.23 +SET 561480.64 184145.92 +SET 561535.59 485402.39 +SET 5615472.81 4222843.62 +SET 561589.92 184181.76 +SET 5616.66 4165.84 +SET 561646.98 358676.64 +SET 561648.56 389436.24 +SET 56169.92 18421.76 +SET 561699.20 184217.60 +SET 561702.76 331530.78 +SET 56175.93 41665.32 +SET 561766.70 319827.41 +SET 561802.00 338379.05 +SET 561808.48 184253.44 +SET 561856.82 331621.71 +SET 561893.75 389606.25 +SET 561917.76 184289.28 +SET 561952.14 358871.52 +SET 561957.48 485767.08 +SET 561972.40 319944.52 +SET 561975.48 389662.92 +SET 562015.07 422636.14 +SET 5620150.70 4226361.40 +SET 56203.92 41686.08 +SET 562136.32 184360.96 +SET 5622155.51 4227869.02 +SET 5622547.14 4532504.64 +SET 562257.30 359066.40 +SET 56230.24 38988.96 +SET 56231.91 41706.84 +SET 5623198.35 4533029.60 +SET 562379.37 486131.77 +SET 56241.24 41713.76 +SET 5624160.32 4229376.64 +SET 562465.86 390002.94 +SET 56259.90 41727.60 +SET 5626165.13 4230884.26 +SET 562627.12 332076.36 +SET 5626454.40 4535654.40 +SET 562683.34 423138.68 +SET 5626833.40 4231386.80 +SET 562715.04 359358.72 +SET 5627501.67 4231889.34 +SET 56279.20 18457.60 +SET 5628169.94 4232391.88 +SET 562874.51 390286.29 +SET 5628838.21 4232894.42 +SET 5629059.24 4537754.24 +SET 5629710.45 4538279.20 +SET 5630361.66 4538804.16 +SET 563037.97 390399.63 +SET 563089.30 332349.15 +SET 5631012.87 4539329.12 +SET 56311.97 39045.63 +SET 563113.60 339169.04 +SET 563119.70 390456.30 +SET 563119.84 184683.52 +SET 563147.68 351680.52 +SET 56315.88 41769.12 +SET 563223.15 486861.15 +SET 56323.15 37734.73 +SET 56325.21 41776.04 +SET 5632966.50 4540904.00 +SET 563351.61 423641.22 +SET 5633516.10 4236412.20 +SET 5633617.71 4541428.96 +SET 563364.89 390626.31 +SET 563402.96 351839.94 +SET 563447.68 184791.04 +SET 563477.94 359845.92 +SET 5635.32 4179.68 +SET 563528.35 390739.65 +SET 563550.80 339432.37 +SET 5635520.91 4237919.82 +SET 563556.96 184826.88 +SET 5635571.34 4543003.84 +SET 563610.08 390796.32 +SET 563618.00 320881.40 +SET 56362.53 41803.72 +SET 5636222.55 4543528.80 +SET 563645.04 487225.84 +SET 5636873.76 4544053.76 +SET 56370.60 37766.52 +SET 5637524.97 4544578.72 +SET 563773.54 390909.66 +SET 563775.52 184898.56 +SET 563823.70 320998.51 +SET 563855.27 390966.33 +SET 56390.52 41824.48 +SET 563988.00 339695.70 +SET 56399.85 41831.40 +SET 563994.08 184970.24 +SET 564066.93 487590.53 +SET 5640867.07 4241940.14 +SET 564088.26 360235.68 +SET 56409.18 41838.32 +SET 5641432.23 4547728.48 +SET 5641535.34 4242442.68 +SET 56416.88 35231.82 +SET 56418.05 37798.31 +SET 564212.64 185041.92 +SET 5642734.65 4548778.40 +SET 5642871.88 4243447.76 +SET 56437.17 41859.08 +SET 564424.08 352477.62 +SET 564440.80 321349.84 +SET 564475.84 333167.52 +SET 5644876.69 4244955.38 +SET 564599.07 455140.32 +SET 5645990.70 4551403.20 +SET 564629.90 333258.45 +SET 56465.16 41879.84 +SET 564679.36 352637.04 +SET 564688.15 424646.30 +SET 56475.43 39158.97 +SET 564754.30 391589.70 +SET 564783.96 333349.38 +SET 5647944.33 4552978.08 +SET 5648218.04 4247468.08 +SET 564836.03 391646.37 +SET 564851.16 360722.88 +SET 5648595.54 4553503.04 +SET 564862.40 340222.36 +SET 564868.32 185256.96 +SET 564910.71 488319.91 +SET 5649246.75 4554028.00 +SET 56497.76 18529.28 +SET 5649897.96 4554552.96 +SET 564999.49 391759.71 +SET 5650549.17 4555077.92 +SET 565092.08 333531.24 +SET 565156.32 360917.76 +SET 565162.95 391873.05 +SET 5652227.66 4250483.32 +SET 5652895.93 4250985.86 +SET 565305.44 185400.32 +SET 5653154.01 4557177.76 +SET 565356.42 425148.84 +SET 5653564.20 4251488.40 +SET 56539.80 41935.20 +SET 565408.14 392043.06 +SET 5654456.43 4558227.68 +SET 565489.87 392099.73 +SET 56549.13 41942.12 +SET 565571.60 392156.40 +SET 565614.06 361210.08 +SET 5656237.28 4253498.56 +SET 565633.28 185507.84 +SET 565708.32 333894.96 +SET 565754.49 489049.29 +SET 565766.64 361307.52 +SET 56577.12 41962.88 +SET 5658363.69 4561377.44 +SET 565862.38 333985.89 +SET 565880.70 322169.61 +SET 5658910.36 4255508.72 +SET 565898.52 392383.08 +SET 565901.49 456190.24 +SET 5659014.90 4561902.40 +SET 56595.78 41976.72 +SET 565955.76 353434.14 +SET 565980.25 392439.75 +SET 566016.44 334076.82 +SET 566070.40 185651.20 +SET 5660915.17 4257016.34 +SET 56614.44 41990.56 +SET 566176.38 489413.98 +SET 566179.68 185687.04 +SET 5662270.95 4564527.20 +SET 5663.31 4200.44 +SET 566324.56 334258.68 +SET 5663573.37 4565577.12 +SET 56638.89 39272.31 +SET 56642.43 42011.32 +SET 5664256.52 4259529.04 +SET 566478.62 334349.61 +SET 566497.80 322520.94 +SET 5665527.00 4567152.00 +SET 566598.27 489778.67 +SET 5666829.42 4568201.92 +SET 5666929.60 4261539.20 +SET 56670.42 42032.08 +SET 566703.50 322638.05 +SET 5667597.87 4262041.74 +SET 5668131.84 4569251.84 +SET 5668266.14 4262544.28 +SET 5668783.05 4569776.80 +SET 5669434.26 4570301.76 +SET 566976.88 354071.82 +SET 5670085.47 4570826.72 +SET 567020.16 490143.36 +SET 567053.92 185973.76 +SET 56707.74 42059.76 +SET 5670736.68 4571351.68 +SET 5670939.22 4264554.44 +SET 567114.90 322872.27 +SET 567124.47 393233.13 +SET 5671387.89 4571876.64 +SET 5671607.49 4265056.98 +SET 56717.07 42066.68 +SET 5672.64 4207.36 +SET 567203.91 457240.16 +SET 567206.20 393289.80 +SET 5672690.31 4572926.56 +SET 5673341.52 4573451.52 +SET 567381.76 186081.28 +SET 567445.02 362379.36 +SET 5674643.94 4574501.44 +SET 567485.60 341802.34 +SET 567487.44 354390.66 +SET 5674948.84 4267569.68 +SET 567526.30 323106.49 +SET 5675295.15 4575026.40 +SET 56754.39 42094.36 +SET 5675617.11 4268072.22 +SET 5676285.38 4268574.76 +SET 5676597.57 4576076.32 +SET 5677248.78 4576601.28 +SET 56773.20 32322.36 +SET 567742.72 354550.08 +SET 5677621.92 4269579.84 +SET 567818.88 186224.64 +SET 567863.94 490872.74 +SET 56791.71 42122.04 +SET 5679202.41 4578176.16 +SET 567998.00 354709.50 +SET 56801.04 42128.96 +SET 568019.22 335258.91 +SET 568037.44 186296.32 +SET 5680504.83 4579226.08 +SET 5680963.27 4272092.54 +SET 5681.97 4214.28 +SET 56810.37 42135.88 +SET 568207.92 362866.56 +SET 568285.83 491237.43 +SET 5683.60 3423.29 +SET 568349.10 323574.93 +SET 568350.42 394083.18 +SET 56836.00 34232.90 +SET 568360.00 342329.00 +SET 568360.50 362964.00 +SET 56838.36 42156.64 +SET 5684304.62 4274605.24 +SET 568432.15 394139.85 +SET 5684412.09 4582375.84 +SET 56845.10 38084.42 +SET 5684972.89 4275107.78 +SET 568554.80 323692.04 +SET 5686309.43 4276112.86 +SET 56866.35 42177.40 +SET 568665.66 363158.88 +SET 568677.34 394309.86 +SET 5686977.70 4276615.40 +SET 568707.72 491602.12 +SET 56875.68 42184.32 +SET 568797.20 342592.33 +SET 5688319.35 4585525.60 +SET 568840.80 394423.20 +SET 5688970.56 4586050.56 +SET 5688982.51 4278123.02 +SET 568911.68 186583.04 +SET 56892.55 38116.21 +SET 5689650.78 4278625.56 +SET 568966.20 323926.26 +SET 569.13 422.12 +SET 569.40 381.48 +SET 5690924.19 4587625.44 +SET 5691.30 4221.20 +SET 569123.40 363451.20 +SET 5691575.40 4588150.40 +SET 5691655.59 4280133.18 +SET 569167.72 394649.88 +SET 5692323.86 4280635.72 +SET 56927.44 35550.66 +SET 569274.40 355506.60 +SET 5692992.13 4281138.26 +SET 56931.66 42225.84 +SET 5693529.03 4589725.28 +SET 569377.60 324160.48 +SET 56940.99 42232.76 +SET 569405.76 336077.28 +SET 569428.56 363646.08 +SET 5694328.67 4282143.34 +SET 569559.82 336168.21 +SET 5696333.48 4283650.96 +SET 56965.81 39498.99 +SET 569676.64 186833.92 +SET 56968.98 42253.52 +SET 5697001.75 4284153.50 +SET 569733.72 363840.96 +SET 5697670.02 4284656.04 +SET 56978.90 32439.47 +SET 569784.96 355825.44 +SET 569785.92 186869.76 +SET 569821.56 395103.24 +SET 56987.64 42267.36 +SET 569886.30 363938.40 +SET 5699389.92 4594449.92 +SET 5699674.83 4286163.66 +SET 569985.02 395216.58 +SET 569994.70 324511.81 +SET 570022.00 336441.00 +SET 570034.31 428666.62 +SET 570038.88 364035.84 +SET 57006.30 42281.20 +SET 570108.80 343382.32 +SET 570113.76 186977.28 +SET 57015.63 42288.12 +SET 570191.46 364133.28 +SET 570223.04 187013.12 +SET 5702347.91 4288173.82 +SET 5702645.97 4597074.72 +SET 570330.12 336622.86 +SET 570332.32 187048.96 +SET 57034.29 42301.96 +SET 5703948.39 4598124.64 +SET 570395.28 493060.88 +SET 570406.10 324746.03 +SET 57043.62 42308.88 +SET 57044.16 18708.48 +SET 5704599.60 4598649.60 +SET 570484.18 336713.79 +SET 570496.62 364328.16 +SET 57052.95 42315.80 +SET 5705250.81 4599174.56 +SET 570546.00 343645.65 +SET 570550.88 187120.64 +SET 5705689.26 4290686.52 +SET 5705902.02 4599699.52 +SET 57062.28 42322.72 +SET 57064.92 36442.56 +SET 570649.20 364425.60 +SET 5706553.23 4600224.48 +SET 57071.61 42329.64 +SET 570720.59 395726.61 +SET 5707204.44 4600749.44 +SET 570769.44 187192.32 +SET 5707855.65 4601274.40 +SET 570801.78 364523.04 +SET 570806.08 356463.12 +SET 570878.72 187228.16 +SET 57090.27 42343.48 +SET 5709158.07 4602324.32 +SET 570965.78 395896.62 +SET 5709698.88 4293701.76 +SET 570988.00 187264.00 +SET 57108.93 42357.32 +SET 571097.28 187299.84 +SET 571100.42 337077.51 +SET 5711035.42 4294706.84 +SET 571106.94 364717.92 +SET 571111.17 460389.92 +SET 5711703.69 4295209.38 +SET 57118.26 42364.24 +SET 571210.97 396066.63 +SET 5712371.96 4295711.92 +SET 571239.06 493790.26 +SET 571259.52 364815.36 +SET 57127.59 42371.16 +SET 57129.80 38275.16 +SET 5713065.33 4605474.08 +SET 571315.84 187371.52 +SET 571374.43 396179.97 +SET 571412.10 364912.80 +SET 571425.12 187407.36 +SET 5714367.75 4606524.00 +SET 5714376.77 4297219.54 +SET 5715045.04 4297722.08 +SET 57153.44 18744.32 +SET 571534.40 187443.20 +SET 571564.68 365010.24 +SET 571571.92 356941.38 +SET 571619.62 396349.98 +SET 5716381.58 4298727.16 +SET 571701.35 396406.65 +SET 5717049.85 4299229.70 +SET 571717.26 365107.68 +SET 57174.24 42405.76 +SET 571762.38 460914.88 +SET 57182.72 35710.08 +SET 5718386.39 4300234.78 +SET 571846.00 325565.80 +SET 571862.24 187550.72 +SET 5719054.66 4300737.32 +SET 57192.90 42419.60 +SET 571946.54 396576.66 +SET 572.11 396.69 +SET 57202.23 42426.52 +SET 572024.78 337623.09 +SET 572039.12 430174.24 +SET 5720391.20 4301742.40 +SET 572051.70 325682.91 +SET 572082.84 494519.64 +SET 5721.10 3966.90 +SET 5721059.47 4302244.94 +SET 57211.00 39669.00 +SET 572110.00 396690.00 +SET 5721531.06 4612298.56 +SET 57217.50 36540.00 +SET 5721727.74 4302747.48 +SET 572175.00 365400.00 +SET 572190.08 187658.24 +SET 572191.73 396746.67 +SET 5722833.48 4613348.48 +SET 5723064.28 4303752.56 +SET 572327.58 365497.44 +SET 5723484.69 4613873.44 +SET 57239.55 42454.20 +SET 5724135.90 4614398.40 +SET 572436.92 396916.68 +SET 5725438.32 4615448.32 +SET 5725737.36 4305762.72 +SET 572627.20 187801.60 +SET 572632.74 365692.32 +SET 572641.02 337986.81 +SET 57267.54 42474.96 +SET 572682.11 397086.69 +SET 5727073.90 4306767.80 +SET 57272.15 38370.53 +SET 572732.00 344962.30 +SET 57276.87 42481.88 +SET 572785.32 365789.76 +SET 572795.08 338077.74 +SET 57286.20 42488.80 +SET 572874.50 326151.35 +SET 57292.73 39725.67 +SET 572926.62 495249.02 +SET 572937.90 365887.20 +SET 572955.04 187909.12 +SET 57310.32 33825.96 +SET 573103.60 357897.90 +SET 57314.19 42509.56 +SET 573169.20 345225.63 +SET 573173.60 187980.80 +SET 573243.06 366082.08 +SET 573254.22 397483.38 +SET 573257.26 338350.53 +SET 573282.88 188016.64 +SET 57332.85 42523.40 +SET 5733252.84 4621747.84 +SET 573358.88 358057.32 +SET 573375.66 431179.32 +SET 5733904.05 4622272.80 +SET 573392.16 188052.48 +SET 573395.64 366179.52 +SET 573411.32 338441.46 +SET 573501.44 188088.32 +SET 57360.84 42544.16 +SET 573606.40 345488.96 +SET 573614.16 358216.74 +SET 5736508.89 4624372.64 +SET 573662.87 397766.73 +SET 57370.08 36637.44 +SET 573720.00 188160.00 +SET 57377.04 49597.84 +SET 573770.40 495978.40 +SET 57379.50 42558.00 +SET 5738434.49 4315310.98 +SET 57388.83 42564.92 +SET 573903.00 326736.90 +SET 573908.06 397936.74 +SET 5739102.76 4315813.52 +SET 573938.56 188231.68 +SET 573989.79 397993.41 +SET 574005.96 366569.28 +SET 574043.60 345752.29 +SET 574043.93 431681.86 +SET 574047.84 188267.52 +SET 5741067.36 4628047.36 +SET 5741107.57 4317321.14 +SET 574124.72 358535.58 +SET 57414.50 38465.90 +SET 574153.25 398106.75 +SET 574192.29 496343.09 +SET 57426.15 42592.60 +SET 574266.40 188339.20 +SET 574314.40 326971.12 +SET 574367.22 463014.72 +SET 574380.00 358695.00 +SET 574480.17 398333.43 +SET 574480.80 346015.62 +SET 574489.74 339077.97 +SET 5744974.62 4631197.12 +SET 5745785.46 4320838.92 +SET 57461.95 38497.69 +SET 574616.28 366959.04 +SET 57463.47 42620.28 +SET 5747.28 4262.72 +SET 574712.20 432184.40 +SET 574725.36 398503.44 +SET 574725.80 327205.34 +SET 5747579.46 4633296.96 +SET 574807.09 398560.11 +SET 57482.13 42634.12 +SET 574890.56 359013.84 +SET 574918.00 346278.95 +SET 574921.44 367153.92 +SET 574922.08 188554.24 +SET 5749533.09 4634871.84 +SET 5750184.30 4635396.80 +SET 575052.28 398730.12 +SET 5750835.51 4635921.76 +SET 575137.20 327439.56 +SET 575215.74 398843.46 +SET 575342.90 327556.67 +SET 57537.92 39895.68 +SET 5753804.70 4326869.40 +SET 5754742.77 4639071.52 +SET 5755141.24 4327874.48 +SET 575531.76 367543.68 +SET 5755393.98 4639596.48 +SET 575568.16 339714.48 +SET 5756.61 4269.64 +SET 5756477.78 4328879.56 +SET 575656.40 359492.10 +SET 575706.12 399183.48 +SET 57575.43 42703.32 +SET 575787.85 399240.15 +SET 575792.40 346805.61 +SET 57584.76 42710.24 +SET 575869.58 399296.82 +SET 575905.60 188876.80 +SET 57596.00 32790.80 +SET 575960.00 327908.00 +SET 5759819.13 4331392.26 +SET 5759952.45 4643271.20 +SET 57603.42 42724.08 +SET 576033.04 399410.16 +SET 576048.74 433189.48 +SET 576114.77 399466.83 +SET 5761254.87 4644321.12 +SET 57619.65 39952.35 +SET 5761906.08 4644846.08 +SET 5762492.21 4333402.42 +SET 576338.46 340169.13 +SET 576342.72 189020.16 +SET 5763828.75 4334407.50 +SET 5763859.71 4646420.96 +SET 57640.74 42751.76 +SET 576422.24 359970.36 +SET 576441.69 399693.51 +SET 576447.24 368128.32 +SET 57650.07 42758.68 +SET 5765162.13 4647470.88 +SET 576561.28 189091.84 +SET 576577.10 328259.33 +SET 5765833.56 4335915.12 +SET 576599.82 368225.76 +SET 576646.58 340350.99 +SET 5766464.55 4648520.80 +SET 5766501.83 4336417.66 +SET 576666.80 347332.27 +SET 576686.88 399863.52 +SET 5767115.76 4649045.76 +SET 576717.01 433692.02 +SET 576723.63 498531.23 +SET 576752.40 368323.20 +SET 576779.84 189163.52 +SET 57678.06 42779.44 +SET 576800.64 340441.92 +SET 5768418.18 4650095.68 +SET 576850.34 399976.86 +SET 5769069.39 4650620.64 +SET 57693.28 36028.92 +SET 5769720.60 4651145.60 +SET 57699.84 18923.52 +SET 57701.38 40009.02 +SET 577013.80 400090.20 +SET 5770511.45 4339432.90 +SET 57706.05 42800.20 +SET 577095.53 400146.87 +SET 5771023.02 4652195.52 +SET 577145.52 498895.92 +SET 57715.38 42807.12 +SET 577194.20 328610.66 +SET 5772516.26 4340940.52 +SET 5772976.65 4653770.40 +SET 5773184.53 4341443.06 +SET 57734.04 42820.96 +SET 5773627.86 4654295.36 +SET 577385.28 434194.56 +SET 5774521.07 4342448.14 +SET 57746.65 38688.43 +SET 5774930.28 4655345.28 +SET 577515.30 368810.40 +SET 57752.70 42834.80 +SET 577541.20 347858.93 +SET 577570.94 340896.57 +SET 5775857.61 4343453.22 +SET 577605.60 328844.88 +SET 5776232.70 4656395.20 +SET 577698.64 360767.46 +SET 577763.36 189486.08 +SET 5778186.33 4657970.08 +SET 57783.11 40065.69 +SET 5778530.69 4345463.38 +SET 577879.06 341078.43 +SET 577953.92 360926.88 +SET 577973.04 369102.72 +SET 577981.92 189557.76 +SET 578017.00 329079.10 +SET 578033.12 341169.36 +SET 578053.55 434697.10 +SET 5780535.50 4346971.00 +SET 578076.29 400826.91 +SET 5780791.17 4660069.92 +SET 578091.20 189593.60 +SET 5781203.77 4347473.54 +SET 578125.62 369200.16 +SET 578222.70 329196.21 +SET 578274.48 466164.48 +SET 578278.20 369297.60 +SET 578321.48 400996.92 +SET 578403.21 401053.59 +SET 5784047.22 4662694.72 +SET 578415.60 348385.59 +SET 57846.00 42904.00 +SET 578495.30 341442.15 +SET 5785213.39 4350488.78 +SET 578566.67 401166.93 +SET 5785881.66 4350991.32 +SET 5786000.85 4664269.60 +SET 5786549.93 4351493.86 +SET 5786652.06 4664794.56 +SET 578719.76 361405.14 +SET 57873.99 42924.76 +SET 578803.42 341624.01 +SET 57883.32 42931.68 +SET 578839.80 329547.54 +SET 5788554.74 4353001.48 +SET 5788605.69 4666369.44 +SET 5789223.01 4353504.02 +SET 578957.48 341714.94 +SET 578965.44 189880.32 +SET 578975.04 361564.56 +SET 57901.98 42945.52 +SET 579041.10 369784.80 +SET 5790559.55 4354509.10 +SET 579057.05 401506.95 +SET 5791.84 1899.52 +SET 57911.31 42952.44 +SET 5791210.53 4668469.28 +SET 5791227.82 4355011.64 +SET 579138.78 401563.62 +SET 579184.00 189952.00 +SET 5791861.74 4668994.24 +SET 579220.51 401620.29 +SET 579230.32 361723.98 +SET 579251.20 329781.76 +SET 57929.97 42966.28 +SET 579290.00 348912.25 +SET 5793.93 4297.32 +SET 5793164.16 4670044.16 +SET 579346.26 369979.68 +SET 57939.30 42973.20 +SET 579402.56 190023.68 +SET 57946.57 40179.03 +SET 57948.63 42980.12 +SET 579485.60 361883.40 +SET 579498.84 370077.12 +SET 5795237.44 4358026.88 +SET 579547.43 401846.97 +SET 579573.72 342078.66 +SET 579576.90 467214.40 +SET 5795769.00 4672144.00 +SET 5795905.71 4358529.42 +SET 579621.12 190095.36 +SET 57967.29 42993.96 +SET 579710.89 401960.31 +SET 5797242.25 4359534.50 +SET 579730.40 190131.20 +SET 5797910.52 4360037.04 +SET 579792.62 402016.98 +SET 579804.00 370272.00 +SET 5798578.79 4360539.58 +SET 5800327.47 4675818.72 +SET 580035.90 342351.45 +SET 580037.81 402186.99 +SET 580109.16 370466.88 +SET 5801251.87 4362549.74 +SET 5801629.89 4676868.64 +SET 580167.52 190274.56 +SET 580189.96 342442.38 +SET 5802.83 4023.57 +SET 580201.27 402300.33 +SET 580279.70 330367.31 +SET 580283.00 402357.00 +SET 5803.26 4304.24 +SET 58031.35 38879.17 +SET 580414.32 370661.76 +SET 5804593.22 4365062.44 +SET 580520.64 501813.44 +SET 58060.59 43063.16 +SET 580601.60 349702.24 +SET 5806188.36 4680543.36 +SET 580652.14 342715.17 +SET 58069.92 43070.08 +SET 580691.65 402640.35 +SET 580719.48 370856.64 +SET 580726.63 436707.26 +SET 58079.25 43077.00 +SET 580806.20 342806.10 +SET 580879.32 468264.32 +SET 580932.48 190525.44 +SET 580936.84 402810.36 +SET 580960.26 342897.03 +SET 58097.91 43090.84 +SET 5809939.38 4369082.76 +SET 5810095.62 4683693.12 +SET 581017.28 362839.92 +SET 581024.64 371051.52 +SET 581038.80 349965.57 +SET 58107.24 43097.76 +SET 5810746.83 4684218.08 +SET 58110.03 40292.37 +SET 581114.32 342987.96 +SET 5811398.04 4684743.04 +SET 581151.04 190597.12 +SET 581177.22 371148.96 +SET 5812.59 4311.16 +SET 58125.90 43111.60 +SET 58126.25 38942.75 +SET 581260.32 190632.96 +SET 5812612.46 4371092.92 +SET 581263.76 403037.04 +SET 5812700.46 4685792.96 +SET 581329.80 371246.40 +SET 581345.49 403093.71 +SET 58136.96 19066.88 +SET 581364.42 502542.82 +SET 581369.60 190668.80 +SET 581394.90 437209.80 +SET 5813949.00 4372098.00 +SET 58144.56 43125.44 +SET 581476.00 350228.90 +SET 581478.88 190704.64 +SET 581482.38 371343.84 +SET 581508.95 403207.05 +SET 581530.53 468789.28 +SET 58163.22 43139.28 +SET 581672.41 403320.39 +SET 5817258.93 4689467.68 +SET 5817290.35 4374610.70 +SET 58173.70 38974.54 +SET 581730.56 343351.68 +SET 581787.54 371538.72 +SET 581835.87 403433.73 +SET 5818561.35 4690517.60 +SET 581884.62 343442.61 +SET 58191.21 43160.04 +SET 581925.30 331304.19 +SET 5819295.16 4376118.32 +SET 581940.12 371636.16 +SET 581999.33 403547.07 +SET 582025.28 190883.84 +SET 582038.40 363477.60 +SET 582038.68 343533.54 +SET 5821.92 4318.08 +SET 5821166.19 4692617.44 +SET 58219.20 43180.80 +SET 582208.20 503272.20 +SET 58221.15 39006.33 +SET 582245.28 371831.04 +SET 5822468.61 4693667.36 +SET 582293.68 363637.02 +SET 582326.25 403773.75 +SET 5823304.78 4379133.56 +SET 582350.40 350755.56 +SET 582353.12 190991.36 +SET 5823771.03 4694717.28 +SET 5823973.05 4379636.10 +SET 582542.40 331655.52 +SET 582550.44 372025.92 +SET 58256.52 43208.48 +SET 582571.44 403943.76 +SET 5826646.13 4381646.26 +SET 58273.49 40405.71 +SET 5827678.29 4697867.04 +SET 5827982.67 4382651.34 +SET 58293.84 43236.16 +SET 582953.80 331889.74 +SET 582963.04 344079.12 +SET 583008.18 372318.24 +SET 583008.80 191206.40 +SET 5830283.13 4699966.88 +SET 58303.17 43243.08 +SET 583059.52 364115.28 +SET 5831.25 4325.00 +SET 583117.10 344170.05 +SET 583143.55 404340.45 +SET 5831585.55 4701016.80 +SET 58321.83 43256.92 +SET 5832236.76 4701541.76 +SET 583224.80 351282.22 +SET 5832887.97 4702066.72 +SET 583307.01 404453.79 +SET 583314.80 364274.70 +SET 583336.64 191313.92 +SET 583425.22 344351.91 +SET 583465.92 372610.56 +SET 583473.87 504366.27 +SET 583484.16 470364.16 +SET 5835492.81 4704166.56 +SET 58355.22 40462.38 +SET 583552.20 404623.80 +SET 583570.08 364434.12 +SET 58359.15 43284.60 +SET 5836.35 3910.17 +SET 5836001.91 4388681.82 +SET 583633.93 404680.47 +SET 5836795.23 4705216.48 +SET 583733.34 344533.77 +SET 58377.81 43298.44 +SET 5838097.65 4706266.40 +SET 583825.36 364593.54 +SET 5838674.99 4390691.98 +SET 583879.12 404850.48 +SET 58388.74 34462.47 +SET 583883.04 191493.12 +SET 583923.66 372902.88 +SET 5840051.28 4707841.28 +SET 58405.80 43319.20 +SET 5840679.80 4392199.60 +SET 5840702.49 4708366.24 +SET 584124.31 405020.49 +SET 5842004.91 4709416.16 +SET 5842016.34 4393204.68 +SET 584210.88 191600.64 +SET 584228.82 373097.76 +SET 58424.46 43333.04 +SET 584317.65 505095.65 +SET 58433.79 43339.96 +SET 5843307.33 4710466.08 +SET 584335.92 364912.38 +SET 584349.58 344897.49 +SET 584369.50 405190.50 +SET 584381.40 373195.20 +SET 584429.44 191672.32 +SET 5845260.96 4712040.96 +SET 584536.40 352072.21 +SET 584538.72 191708.16 +SET 58458.40 39165.28 +SET 584591.20 365071.80 +SET 58461.78 43360.72 +SET 58464.80 19174.40 +SET 584657.70 345079.35 +SET 5846694.23 4396722.46 +SET 584686.56 373390.08 +SET 584696.42 405417.18 +SET 584736.25 439722.50 +SET 584757.28 191779.84 +SET 584811.76 345170.28 +SET 584839.14 373487.52 +SET 584859.88 405530.52 +SET 5849.91 4338.84 +SET 5849367.31 4398732.62 +SET 584973.60 352335.54 +SET 5849819.43 4715715.68 +SET 58499.10 43388.40 +SET 5850035.58 4399235.16 +SET 5850703.85 4399737.70 +SET 58508.43 43395.32 +SET 585105.07 405700.53 +SET 585144.30 373682.40 +SET 585161.43 505825.03 +SET 585186.80 405757.20 +SET 5852040.39 4400742.78 +SET 585216.50 333177.95 +SET 5852424.27 4717815.52 +SET 5852708.66 4401245.32 +SET 585273.94 345443.07 +SET 585296.88 373779.84 +SET 585303.68 191959.04 +SET 5853075.48 4718340.48 +SET 5853376.93 4401747.86 +SET 585412.96 191994.88 +SET 58542.80 34553.40 +SET 585428.00 345534.00 +SET 5854377.90 4719390.40 +SET 58545.75 43423.00 +SET 58553.30 39228.86 +SET 585583.32 506189.72 +SET 585627.90 333412.17 +SET 5856718.28 4404260.56 +SET 58573.74 43443.76 +SET 585736.12 345715.86 +SET 585740.80 192102.40 +SET 585833.60 333529.28 +SET 58584.80 35286.22 +SET 585840.64 406210.56 +SET 5858723.09 4405768.18 +SET 585890.18 345806.79 +SET 585907.20 374169.60 +SET 58592.40 43457.60 +SET 586004.10 406323.90 +SET 58601.73 43464.52 +SET 5860238.79 4724115.04 +SET 586072.79 440727.58 +SET 5860727.90 4407275.80 +SET 586089.00 472464.00 +SET 58611.06 43471.44 +SET 5861396.17 4407778.34 +SET 58624.50 33376.35 +SET 5862732.71 4408783.42 +SET 5862843.63 4726214.88 +SET 5863400.98 4409285.96 +SET 586352.36 346079.58 +SET 586364.94 374461.92 +SET 586378.16 366187.74 +SET 586396.48 192317.44 +SET 5864146.05 4727264.80 +SET 5864737.52 4410291.04 +SET 58648.38 43499.12 +SET 586494.48 406663.92 +SET 586576.21 406720.59 +SET 5866099.68 4728839.68 +SET 586656.40 333997.72 +SET 586657.94 406777.26 +SET 586660.48 346261.44 +SET 58667.04 43512.96 +SET 5866742.33 4411798.66 +SET 586722.40 353388.86 +SET 5868078.87 4412803.74 +SET 58682.14 40689.06 +SET 586821.40 406890.60 +SET 58683.36 19246.08 +SET 586848.99 507283.79 +SET 5868747.14 4413306.28 +SET 586903.13 406947.27 +SET 5869355.73 4731464.48 +SET 5869415.41 4413808.82 +SET 58696.86 34644.33 +SET 587.79 435.96 +SET 58704.36 43540.64 +SET 5870658.15 4732514.40 +SET 5871.44 3666.66 +SET 5871309.36 4733039.36 +SET 5871420.22 4415316.44 +SET 587144.00 366666.00 +SET 5872611.78 4734089.28 +SET 5872756.76 4416321.52 +SET 587276.72 346625.16 +SET 5873425.03 4416824.06 +SET 5873914.20 4735139.20 +SET 587399.28 366825.42 +SET 5874093.30 4417326.60 +SET 587433.00 375144.00 +SET 587479.20 334466.16 +SET 5875216.62 4736189.12 +SET 5875429.84 4418331.68 +SET 587556.97 407400.63 +SET 587638.70 407457.30 +SET 5876519.04 4737239.04 +SET 587654.56 366984.84 +SET 5876766.38 4419336.76 +SET 5877170.25 4737764.00 +SET 587738.16 375338.88 +SET 587738.90 346897.95 +SET 587802.16 407570.64 +SET 587817.12 192783.36 +SET 587883.89 407627.31 +SET 58792.64 19281.92 +SET 587926.40 192819.20 +SET 587965.62 407683.98 +SET 58797.66 43609.84 +SET 5879775.09 4739863.84 +SET 588034.00 354178.85 +SET 588035.68 192855.04 +SET 588047.02 347079.81 +SET 588047.35 407740.65 +SET 58806.99 43616.76 +SET 588096.30 334817.49 +SET 588114.66 508377.86 +SET 588129.08 407797.32 +SET 58816.32 43623.68 +SET 588201.08 347170.74 +SET 5882112.54 4423357.08 +SET 58825.65 43630.60 +SET 5882780.81 4423859.62 +SET 5883031.14 4742488.64 +SET 58834.98 43637.52 +SET 5883449.08 4424362.16 +SET 588355.14 347261.67 +SET 5883682.35 4743013.60 +SET 58838.00 39419.60 +SET 5884.56 4080.24 +SET 58844.31 43644.44 +SET 588456.00 408024.00 +SET 588471.20 354442.18 +SET 5884785.62 4425367.24 +SET 588507.70 335051.71 +SET 588509.20 347352.60 +SET 58853.64 43651.36 +SET 588536.55 508742.55 +SET 588537.73 408080.67 +SET 5885453.89 4425869.78 +SET 5885635.98 4744588.48 +SET 588653.64 375923.52 +SET 588663.26 347443.53 +SET 5886790.43 4426874.86 +SET 588691.36 193070.08 +SET 588701.19 408194.01 +SET 5887589.61 4746163.36 +SET 588782.92 408250.68 +SET 588800.64 193105.92 +SET 5888892.03 4747213.28 +SET 588908.40 354705.51 +SET 5889463.51 4428885.02 +SET 58895.88 37611.84 +SET 5889543.24 4747738.24 +SET 588958.44 509107.24 +SET 588971.38 347625.39 +SET 58900.29 43685.96 +SET 5890194.45 4748263.20 +SET 589028.11 408420.69 +SET 5890845.66 4748788.16 +SET 589124.80 335403.04 +SET 5891468.32 4430392.64 +SET 5891496.87 4749313.12 +SET 5892148.08 4749838.08 +SET 5892804.86 4431397.72 +SET 589330.50 335520.15 +SET 589345.05 475088.80 +SET 589345.60 354968.84 +SET 5893473.13 4431900.26 +SET 589355.03 408647.37 +SET 589380.33 509471.93 +SET 5894101.71 4751412.96 +SET 589433.56 347898.18 +SET 589436.76 408704.04 +SET 589441.52 368100.78 +SET 58946.94 43720.56 +SET 5894752.92 4751937.92 +SET 589518.49 408760.71 +SET 589536.20 335637.26 +SET 5895477.94 4433407.88 +SET 589565.60 193356.80 +SET 589587.62 347989.11 +SET 589681.95 408874.05 +SET 589696.80 368260.20 +SET 589721.70 376605.60 +SET 589741.68 348080.04 +SET 589741.90 335754.37 +SET 5897482.75 4434915.50 +SET 589782.80 355232.17 +SET 58980.35 39514.97 +SET 589802.22 509836.62 +SET 5898151.02 4435418.04 +SET 58984.26 43748.24 +SET 589874.28 376703.04 +SET 589895.74 348170.97 +SET 589952.08 368419.62 +SET 589996.26 475613.76 +SET 5899962.60 4756137.60 +SET 59004.98 34826.19 +SET 590049.80 348261.90 +SET 5900824.10 4437428.20 +SET 590090.60 409157.40 +SET 5901.12 1935.36 +SET 59011.20 19353.60 +SET 5901265.02 4757187.52 +SET 5901492.37 4437930.74 +SET 590153.30 335988.59 +SET 590172.33 409214.07 +SET 590179.44 376897.92 +SET 590203.86 348352.83 +SET 590207.36 368579.04 +SET 590224.11 510201.31 +SET 59030.91 43782.84 +SET 5903218.65 4758762.40 +SET 590332.02 376995.36 +SET 590359.00 336105.70 +SET 59040.24 43789.76 +SET 59048.46 37709.28 +SET 590484.60 377092.80 +SET 590499.25 409440.75 +SET 5905.89 4380.36 +SET 5905172.28 4760337.28 +SET 59058.90 43803.60 +SET 590580.98 409497.42 +SET 59068.23 43810.52 +SET 590750.68 444245.36 +SET 59077.56 43817.44 +SET 590789.76 377287.68 +SET 590826.17 409667.43 +SET 5909511.61 4443961.22 +SET 59096.22 43831.28 +SET 590974.16 348807.48 +SET 590989.63 409780.77 +SET 5910179.88 4444463.76 +SET 591071.36 409837.44 +SET 5910848.15 4444966.30 +SET 591094.40 356022.16 +SET 591153.09 409894.11 +SET 5911684.38 4765586.88 +SET 591181.80 336574.14 +SET 59122.70 39610.34 +SET 591234.82 409950.78 +SET 59124.21 43852.04 +SET 591282.28 348989.34 +SET 5912986.80 4766636.80 +SET 591316.55 410007.45 +SET 591398.28 410064.12 +SET 591400.08 377677.44 +SET 5914189.50 4447479.00 +SET 5914857.77 4447981.54 +SET 591489.78 511295.38 +SET 5915.22 4387.28 +SET 59152.20 43872.80 +SET 5915526.04 4448484.08 +SET 5915591.64 4768736.64 +SET 5916194.31 4448986.62 +SET 5916242.85 4769261.60 +SET 5916862.58 4449489.16 +SET 591725.20 410290.80 +SET 591744.46 349262.13 +SET 5917530.85 4449991.70 +SET 591806.93 410347.47 +SET 5918196.48 4770836.48 +SET 591860.48 194109.44 +SET 5918847.69 4771361.44 +SET 5918867.39 4450996.78 +SET 59189.52 43900.48 +SET 591898.52 349353.06 +SET 591968.80 356548.82 +SET 591970.39 410460.81 +SET 5920150.11 4772411.36 +SET 592052.58 349443.99 +SET 59208.18 43914.32 +SET 5920801.32 4772936.32 +SET 592087.22 445250.44 +SET 592133.85 410574.15 +SET 5921452.53 4773461.28 +SET 59217.60 39673.92 +SET 592206.64 349534.92 +SET 592210.30 337159.69 +SET 5922208.74 4453509.48 +SET 592297.31 410687.49 +SET 592297.60 194252.80 +SET 5923545.28 4454514.56 +SET 59236.17 43935.08 +SET 592360.70 349625.85 +SET 592406.00 356812.15 +SET 592416.00 337276.80 +SET 592468.14 378359.52 +SET 5924881.82 4455519.64 +SET 592514.76 349716.78 +SET 5925359.79 4776611.04 +SET 59254.83 43948.92 +SET 5925550.09 4456022.18 +SET 59260.11 47771.36 +SET 592621.70 337393.91 +SET 5926218.36 4456524.72 +SET 592624.23 410914.17 +SET 592625.44 194360.32 +SET 59264.16 43955.84 +SET 5926662.21 4777660.96 +SET 5926886.63 4457027.26 +SET 592705.96 410970.84 +SET 592755.45 512389.45 +SET 592755.49 445752.98 +SET 5927554.90 4457529.80 +SET 592787.69 411027.51 +SET 5927964.63 4778710.88 +SET 592822.88 349898.64 +SET 5928223.17 4458032.34 +SET 59292.15 43976.60 +SET 5929267.05 4779760.80 +SET 592951.15 411140.85 +SET 593032.88 411197.52 +SET 593033.10 337628.13 +SET 5930896.25 4460042.50 +SET 59310.81 43990.44 +SET 593114.61 411254.19 +SET 59313.10 35008.05 +SET 5931564.52 4460545.04 +SET 593177.34 512754.14 +SET 59320.14 43997.36 +SET 593252.31 478238.56 +SET 593280.40 357338.81 +SET 593281.12 194575.36 +SET 593285.06 350171.43 +SET 5933569.33 4462052.66 +SET 59338.80 44011.20 +SET 593439.12 350262.36 +SET 593441.53 411480.87 +SET 593444.50 337862.35 +SET 5934476.73 4783960.48 +SET 593523.26 411537.54 +SET 59357.46 44025.04 +SET 593599.23 513118.83 +SET 593608.96 194682.88 +SET 5936242.41 4464062.82 +SET 593650.20 337979.46 +SET 593688.78 379139.04 +SET 5937081.57 4786060.32 +SET 5937732.78 4786585.28 +SET 5938383.99 4787110.24 +SET 593850.18 411764.22 +SET 593855.90 338096.57 +SET 593931.91 411820.89 +SET 59394.78 44052.72 +SET 5939583.76 4466575.52 +SET 5939686.41 4788160.16 +SET 594021.12 513483.52 +SET 5940252.03 4467078.06 +SET 5940337.62 4788685.12 +SET 594061.60 338213.68 +SET 59407.40 39801.08 +SET 5941640.04 4789735.04 +SET 5942256.84 4468585.68 +SET 594267.30 338330.79 +SET 594291.84 371129.76 +SET 5942942.46 4790784.96 +SET 594340.56 412104.24 +SET 594451.68 379626.24 +SET 59447.30 33844.79 +SET 59448.32 19496.96 +SET 594483.20 194969.60 +SET 59450.76 44094.24 +SET 59454.85 39832.87 +SET 5945547.30 4792884.80 +SET 594585.75 412274.25 +SET 59459.20 35812.88 +SET 594592.00 358128.80 +SET 59467.16 35098.98 +SET 594671.60 350989.80 +SET 5946849.72 4793934.72 +SET 59469.42 44108.08 +SET 594701.76 195041.28 +SET 594756.84 379821.12 +SET 59478.75 44115.00 +SET 59480.24 37144.86 +SET 594811.04 195077.12 +SET 5948152.14 4794984.64 +SET 594825.66 351080.73 +SET 594830.94 412444.26 +SET 59488.08 44121.92 +SET 594884.40 338682.12 +SET 5948939.54 4473611.08 +SET 594920.32 195112.96 +SET 5949454.56 4796034.56 +SET 5949607.81 4474113.62 +SET 594979.72 351171.66 +SET 59499.44 41255.76 +SET 5950105.77 4796559.52 +SET 595076.13 412614.27 +SET 595090.10 338799.23 +SET 5950944.35 4475118.70 +SET 59516.07 44142.68 +SET 5951612.62 4475621.24 +SET 5952280.89 4476123.78 +SET 595239.59 412727.61 +SET 59525.40 44149.60 +SET 595286.79 514577.59 +SET 595287.84 351353.52 +SET 595321.32 412784.28 +SET 59534.73 44156.52 +SET 595428.57 447763.14 +SET 5954285.70 4477631.40 +SET 595441.90 351444.45 +SET 595484.78 412897.62 +SET 59549.75 39896.45 +SET 595501.50 339033.45 +SET 595519.74 380308.32 +SET 5955315.45 4800759.20 +SET 595648.24 413010.96 +SET 595685.28 195363.84 +SET 595708.68 514942.28 +SET 595750.02 351626.31 +SET 5957627.05 4480144.10 +SET 59581.17 41312.43 +SET 595823.52 372086.28 +SET 595824.90 380503.20 +SET 5958295.32 4480646.64 +SET 5958571.50 4803384.00 +SET 5958963.59 4481149.18 +SET 595903.60 358918.79 +SET 595903.84 195435.52 +SET 5959631.86 4481651.72 +SET 59597.20 39928.24 +SET 595975.16 413237.64 +SET 595977.48 380600.64 +SET 5960525.13 4804958.88 +SET 5961.87 4421.88 +SET 596138.62 413350.98 +SET 5961827.55 4806008.80 +SET 59621.22 35189.91 +SET 596220.35 413407.65 +SET 5962478.76 4806533.76 +SET 596282.64 380795.52 +SET 596340.80 359182.12 +SET 596340.96 195578.88 +SET 5963641.48 4484666.96 +SET 596383.81 413520.99 +SET 5964432.39 4808108.64 +SET 596465.54 413577.66 +SET 596508.36 480863.36 +SET 596530.00 339619.00 +SET 596552.46 515671.66 +SET 596559.52 195650.56 +SET 5966.29 4136.91 +SET 596629.00 413691.00 +SET 5967037.23 4810208.48 +SET 596710.73 413747.67 +SET 59674.68 44260.32 +SET 596828.44 352262.82 +SET 5968319.37 4488184.74 +SET 596844.64 372723.96 +SET 596874.19 413861.01 +SET 596887.36 195758.08 +SET 596996.64 195793.92 +SET 5970324.18 4489692.36 +SET 597037.65 413974.35 +SET 597099.92 372883.38 +SET 5970992.45 4490194.90 +SET 597119.38 414031.02 +SET 597147.10 339970.33 +SET 5971595.70 4813883.20 +SET 5971660.72 4490697.44 +SET 597198.12 381380.16 +SET 597215.20 359708.78 +SET 5972246.91 4814408.16 +SET 5972328.99 4491199.98 +SET 597282.84 414144.36 +SET 597290.62 352535.61 +SET 5972997.26 4491702.52 +SET 59730.66 44301.84 +SET 597324.48 195901.44 +SET 597350.70 381477.60 +SET 597364.57 414201.03 +SET 597433.38 449270.76 +SET 59744.63 41425.77 +SET 5974851.75 4816508.00 +SET 5975002.07 4493210.14 +SET 597503.28 381575.04 +SET 597543.04 195973.12 +SET 5975502.96 4817032.96 +SET 597598.74 352717.47 +SET 597610.48 373202.22 +SET 5976805.38 4818082.88 +SET 597691.49 414427.71 +SET 5977456.59 4818607.84 +SET 59775.28 35280.84 +SET 597752.80 352808.40 +SET 5978107.80 4819132.80 +SET 597818.13 516765.73 +SET 597854.95 414541.05 +SET 59786.64 44343.36 +SET 5979011.69 4496225.38 +SET 597936.68 414597.72 +SET 597969.90 340438.77 +SET 597980.16 196116.48 +SET 5980061.43 4820707.68 +SET 598018.41 414654.39 +SET 59805.30 44357.20 +SET 59811.36 38196.48 +SET 5981363.85 4821757.60 +SET 598198.72 196188.16 +SET 598214.98 353081.19 +SET 5983021.31 4499240.62 +SET 5983317.48 4823332.48 +SET 598345.33 414881.07 +SET 598376.32 373680.48 +SET 598417.28 196259.84 +SET 598418.76 382159.68 +SET 59842.62 44384.88 +SET 5984357.85 4500245.70 +SET 598461.99 482438.24 +SET 598508.79 414994.41 +SET 59851.95 44391.80 +SET 598526.56 196295.68 +SET 5985271.11 4824907.36 +SET 598571.34 382257.12 +SET 598587.00 340790.10 +SET 5985922.32 4825432.32 +SET 59861.28 44398.72 +SET 598631.60 373839.90 +SET 598635.84 196331.52 +SET 598661.91 517495.11 +SET 59870.61 44405.64 +SET 5987030.93 4502255.86 +SET 598723.92 382354.56 +SET 5987875.95 4827007.20 +SET 59879.94 44412.56 +SET 598835.71 415221.09 +SET 5988367.47 4503260.94 +SET 5989035.74 4503763.48 +SET 5989829.58 4828582.08 +SET 598998.40 341024.32 +SET 59907.93 44433.32 +SET 599139.34 353626.77 +SET 5991783.21 4830156.96 +SET 59929.34 35371.77 +SET 5993045.36 4506778.72 +SET 5993713.63 4507281.26 +SET 599397.44 374318.16 +SET 599400.80 196582.40 +SET 599438.19 450778.38 +SET 5994381.90 4507783.80 +SET 599486.82 382841.76 +SET 5995039.26 4832781.76 +SET 599510.08 196618.24 +SET 59954.58 44467.92 +SET 5995690.47 4833306.72 +SET 599571.28 415731.12 +SET 599601.52 353899.56 +SET 599615.50 341375.65 +SET 59963.91 44474.84 +SET 5996386.71 4509291.42 +SET 5997054.98 4509793.96 +SET 599728.64 196689.92 +SET 59976.80 40182.56 +SET 599764.41 483488.16 +SET 5997644.10 4834881.60 +SET 5998295.31 4835406.56 +SET 599838.40 361288.76 +SET 5999059.79 4511301.58 +SET 599908.00 374637.00 +SET 59991.90 44495.60 +SET 599927.58 518589.18 +SET 5999728.06 4511804.12 +SET 6000248.94 4836981.44 +SET 600026.90 341609.87 +SET 600056.48 196797.44 +SET 600061.66 416071.14 +SET 6000900.15 4837506.40 +SET 6001732.87 4513311.74 +SET 60019.89 44516.36 +SET 6002202.57 4838556.32 +SET 600225.12 416184.48 +SET 60024.25 40214.35 +SET 60029.22 44523.28 +SET 60038.55 44530.20 +SET 6004156.20 4840131.20 +SET 6004807.41 4840656.16 +SET 600493.60 196940.80 +SET 6005074.22 4515824.44 +SET 600552.04 416411.16 +SET 60057.21 44544.04 +SET 6006109.83 4841706.08 +SET 600673.84 375115.26 +SET 600679.94 354536.07 +SET 600712.80 361815.42 +SET 60075.87 44557.88 +SET 600771.36 519318.56 +SET 6007747.30 4517834.60 +SET 600797.23 416581.17 +SET 6008.34 3546.27 +SET 600878.96 416637.84 +SET 6009083.84 4518839.68 +SET 60094.53 44571.72 +SET 6009752.11 4519342.22 +SET 6010.40 1971.20 +SET 601012.62 383816.16 +SET 60103.86 44578.64 +SET 601042.42 416751.18 +SET 6010420.38 4519844.76 +SET 6010668.30 4845380.80 +SET 601142.12 354808.86 +SET 601149.28 197155.84 +SET 601150.00 362078.75 +SET 601184.40 375434.10 +SET 6011970.72 4846430.72 +SET 601205.88 416864.52 +SET 6012425.19 4521352.38 +SET 601261.10 342312.53 +SET 601296.18 354899.79 +SET 6013093.46 4521854.92 +SET 6013273.14 4847480.64 +SET 601367.84 197227.52 +SET 601369.34 416977.86 +SET 6013761.73 4522357.46 +SET 6013924.35 4848005.60 +SET 60141.18 44606.32 +SET 601443.00 452286.00 +SET 6014575.56 4848530.56 +SET 601470.36 384108.48 +SET 6015877.98 4849580.48 +SET 601614.53 417147.87 +SET 601622.94 384205.92 +SET 60169.17 44627.08 +SET 6017103.08 4524870.16 +SET 601758.36 355172.58 +SET 6017771.35 4525372.70 +SET 601859.72 417317.88 +SET 6019134.03 4852205.28 +SET 601941.45 417374.55 +SET 601950.24 375912.36 +SET 60197.16 44647.84 +SET 6020436.45 4853255.20 +SET 602111.27 452788.54 +SET 60215.82 44661.68 +SET 602186.64 417544.56 +SET 602205.52 376071.78 +SET 602233.26 384595.68 +SET 6022449.24 4528890.48 +SET 602268.37 417601.23 +SET 6023041.29 4855355.04 +SET 6023117.51 4529393.02 +SET 60234.48 44675.52 +SET 60235.01 41765.79 +SET 602351.36 197550.08 +SET 60237.46 35553.63 +SET 602385.84 384693.12 +SET 60243.81 44682.44 +SET 602431.83 417714.57 +SET 6024343.71 4856404.96 +SET 60246.08 37623.12 +SET 602460.80 376231.20 +SET 602461.60 362868.74 +SET 6025122.32 4530900.64 +SET 602513.56 417771.24 +SET 60253.14 44689.36 +SET 6025790.59 4531403.18 +SET 6026458.86 4531905.72 +SET 60269.10 38488.80 +SET 6027.18 4470.32 +SET 60270.10 34313.23 +SET 6027127.13 4532408.26 +SET 602758.75 417941.25 +SET 6028250.97 4859554.72 +SET 602840.48 417997.92 +SET 602843.58 384985.44 +SET 602897.76 197729.28 +SET 60290.46 44717.04 +SET 602906.70 343249.41 +SET 6029131.94 4533915.88 +SET 60299.79 44723.96 +SET 602990.84 355900.02 +SET 603020.46 486112.96 +SET 60308.95 40405.09 +SET 603085.67 418167.93 +SET 6030855.81 4861654.56 +SET 6031136.75 4535423.50 +SET 603116.32 197800.96 +SET 603148.74 385180.32 +SET 60318.45 44737.80 +SET 6031805.02 4535926.04 +SET 603249.13 418281.27 +SET 60327.78 44744.72 +SET 603298.96 356081.88 +SET 60330.27 52150.67 +SET 603330.86 418337.94 +SET 603336.00 363395.40 +SET 6033809.83 4537433.66 +SET 603453.02 356172.81 +SET 603453.90 385375.20 +SET 603494.32 418451.28 +SET 6035414.28 4865329.28 +SET 603553.44 197944.32 +SET 6035814.64 4538941.28 +SET 603606.48 385472.64 +SET 6036065.49 4865854.24 +SET 6036482.91 4539443.82 +SET 60365.10 44772.40 +SET 603657.78 418564.62 +SET 603662.72 197980.16 +SET 603671.67 486637.92 +SET 6037151.18 4539946.36 +SET 603729.50 343717.85 +SET 603737.20 377028.30 +SET 603739.51 418621.29 +SET 603761.14 356354.67 +SET 603773.20 363658.73 +SET 6038019.12 4867429.12 +SET 603821.24 418677.96 +SET 60383.76 44786.24 +SET 6038487.72 4540951.44 +SET 603902.97 418734.63 +SET 60391.52 35644.56 +SET 6039155.99 4541453.98 +SET 60393.09 44793.16 +SET 603984.70 418791.30 +SET 603990.56 198087.68 +SET 603992.48 377187.72 +SET 6039972.75 4869004.00 +SET 6040492.53 4542459.06 +SET 604146.48 522236.08 +SET 604148.16 418904.64 +SET 6041829.07 4543464.14 +SET 6041926.38 4870578.88 +SET 60421.08 44813.92 +SET 604210.40 363922.06 +SET 604216.80 385862.40 +SET 604223.32 356627.46 +SET 60431.84 19819.52 +SET 604311.62 419017.98 +SET 6043165.61 4544469.22 +SET 604322.88 487162.88 +SET 6043228.80 4871628.80 +SET 604377.38 356718.39 +SET 6043833.88 4544971.76 +SET 6043880.01 4872153.76 +SET 60439.74 44827.76 +SET 604427.68 198231.04 +SET 6044502.15 4545474.30 +SET 6045.84 4484.16 +SET 604521.96 386057.28 +SET 604531.44 356809.32 +SET 604552.30 344186.29 +SET 60458.40 44841.60 +SET 604647.60 364185.39 +SET 6046484.85 4874253.60 +SET 604674.54 386154.72 +SET 604685.50 356900.25 +SET 60475.80 34430.34 +SET 604758.32 377665.98 +SET 60477.06 44855.44 +SET 604827.12 386252.16 +SET 6049180.04 4548992.08 +SET 60495.72 44869.28 +SET 604965.46 419471.34 +SET 604974.08 198410.24 +SET 604979.70 386349.60 +SET 604990.26 522965.46 +SET 605013.60 377825.40 +SET 6050392.11 4877403.36 +SET 605047.19 419528.01 +SET 6050516.58 4549997.16 +SET 605083.36 198446.08 +SET 605084.80 364448.72 +SET 6051043.32 4877928.32 +SET 605147.68 357173.04 +SET 605210.65 419641.35 +SET 6052521.39 4551504.78 +SET 605268.88 377984.82 +SET 605284.86 386544.48 +SET 6052996.95 4879503.20 +SET 605301.74 357263.97 +SET 6053648.16 4880028.16 +SET 605375.10 344654.73 +SET 60545.58 35735.49 +SET 605452.62 455301.24 +SET 605455.84 419811.36 +SET 6054950.58 4881078.08 +SET 6055194.47 4553514.94 +SET 605520.48 198589.44 +SET 605522.00 364712.05 +SET 605524.16 378144.24 +SET 60561.03 44917.72 +SET 60561.93 41992.47 +SET 60562.53 48821.28 +SET 605625.30 488212.80 +SET 605629.76 198625.28 +SET 60570.36 44924.64 +SET 605742.60 386836.80 +SET 605779.44 378303.66 +SET 605786.50 344888.95 +SET 6057867.55 4555525.10 +SET 605848.32 198696.96 +SET 6058535.82 4556027.64 +SET 605864.49 420094.71 +SET 6058857.84 4884227.84 +SET 60593.65 40595.83 +SET 6059509.05 4884752.80 +SET 606.45 449.80 +SET 6060160.26 4885277.76 +SET 606034.72 378463.08 +SET 6060811.47 4885802.72 +SET 6061462.68 4886327.68 +SET 606191.41 420321.39 +SET 606197.90 345123.17 +SET 6062113.89 4886852.64 +SET 606226.10 357809.55 +SET 60626.34 44966.16 +SET 606276.51 488737.76 +SET 6062765.10 4887377.60 +SET 606352.92 387226.56 +SET 606354.87 420434.73 +SET 606380.16 357900.48 +SET 6064.50 4498.00 +SET 606518.33 420548.07 +SET 606545.28 378781.92 +SET 606600.06 420604.74 +SET 606677.82 524424.22 +SET 606722.56 198983.68 +SET 6067323.57 4891052.32 +SET 6067891.60 4563063.20 +SET 606815.00 345474.50 +SET 6068625.99 4892102.24 +SET 60691.65 45014.60 +SET 606941.12 199055.36 +SET 6069896.41 4564570.82 +SET 60700.98 45021.52 +SET 607055.84 379100.76 +SET 6070579.62 4893677.12 +SET 607099.71 524788.91 +SET 607115.82 387713.76 +SET 6071882.04 4894727.04 +SET 60719.64 45035.36 +SET 607253.90 421058.10 +SET 6072569.49 4566580.98 +SET 607268.96 199162.88 +SET 6073.60 4069.12 +SET 6073184.46 4895776.96 +SET 607335.63 421114.77 +SET 6073835.67 4896301.92 +SET 607432.10 345825.83 +SET 6074574.30 4568088.60 +SET 607458.58 358536.99 +SET 60747.63 45056.12 +SET 6075138.09 4897351.84 +SET 60756.64 37941.96 +SET 607566.40 379419.60 +SET 60759.68 19927.04 +SET 607596.80 199270.40 +SET 607612.64 358627.92 +SET 607637.80 345942.94 +SET 60770.80 36602.87 +SET 607706.08 199306.24 +SET 607766.70 358718.85 +SET 6077742.93 4899451.68 +SET 6077915.65 4570601.30 +SET 607815.36 199342.08 +SET 607821.68 379579.02 +SET 60783.45 40722.99 +SET 607878.72 388200.96 +SET 607920.76 358809.78 +SET 607924.64 199377.92 +SET 607943.49 525518.29 +SET 6079696.56 4901026.56 +SET 607989.47 421568.13 +SET 60803.61 45097.64 +SET 608033.92 199413.76 +SET 6080347.77 4901551.52 +SET 608049.20 346177.16 +SET 608076.96 379738.44 +SET 60812.94 45104.56 +SET 608152.93 421681.47 +SET 6081650.19 4902601.44 +SET 6081925.27 4573616.54 +SET 60822.27 45111.48 +SET 608228.88 358991.64 +SET 608230.14 490312.64 +SET 6083.16 4511.84 +SET 60830.90 40754.78 +SET 60831.60 45118.40 +SET 608332.24 379897.86 +SET 608382.94 359082.57 +SET 608398.12 421851.48 +SET 6084598.35 4575626.70 +SET 608471.04 199557.12 +SET 60850.26 45132.24 +SET 6085557.45 4905751.20 +SET 608561.58 421964.82 +SET 608580.32 199592.96 +SET 6085934.89 4576631.78 +SET 6086208.66 4906276.16 +SET 608643.31 422021.49 +SET 6086603.16 4577134.32 +SET 608725.04 422078.16 +SET 60878.35 40786.57 +SET 608793.97 457813.94 +SET 6089276.24 4579144.48 +SET 608946.78 388883.04 +SET 6090115.92 4909425.92 +SET 609017.44 199736.32 +SET 609051.96 422304.84 +SET 609077.70 346762.71 +SET 609099.36 388980.48 +SET 609133.69 422361.51 +SET 6091949.32 4581154.64 +SET 6092069.55 4911000.80 +SET 609209.16 526612.36 +SET 609236.00 199808.00 +SET 60925.80 40818.36 +SET 609251.94 389077.92 +SET 609297.15 422474.85 +SET 6093285.86 4582159.72 +SET 60934.23 45194.52 +SET 6093954.13 4582662.26 +SET 609404.52 389175.36 +SET 609456.80 367082.02 +SET 609462.24 458316.48 +SET 6094622.40 4583164.80 +SET 6094674.39 4913100.64 +SET 6095290.67 4583667.34 +SET 609542.34 422644.86 +SET 609608.64 380694.96 +SET 609615.42 359810.01 +SET 60962.22 45215.28 +SET 6096627.21 4584672.42 +SET 609673.12 199951.36 +SET 609694.80 347114.04 +SET 60970.58 42275.82 +SET 609709.68 389370.24 +SET 609782.40 199987.20 +SET 6097963.75 4585677.50 +SET 60990.21 45236.04 +SET 6099232.86 4916775.36 +SET 6099968.56 4587185.12 +SET 610.32 389.76 +SET 610052.94 527341.74 +SET 61007.76 36008.28 +SET 610077.60 360082.80 +SET 61008.87 45249.88 +SET 61011.92 38101.38 +SET 610110.24 200094.72 +SET 610130.51 458819.02 +SET 61018.20 45256.80 +SET 610183.77 491887.52 +SET 610196.18 423098.22 +SET 610320.00 389760.00 +SET 61036.86 45270.64 +SET 610374.48 381173.22 +SET 610385.72 360264.66 +SET 610472.58 389857.44 +SET 610517.60 347582.48 +SET 61052.31 42332.49 +SET 6105744.96 4922024.96 +SET 6105982.99 4591707.98 +SET 610629.76 381332.64 +SET 6106651.26 4592210.52 +SET 61068.15 40913.73 +SET 610693.84 360446.52 +SET 61074.18 45298.32 +SET 610765.92 200309.76 +SET 610768.29 423494.91 +SET 610777.74 390052.32 +SET 6108349.80 4924124.80 +SET 6108656.07 4593718.14 +SET 610885.04 381492.06 +SET 6109001.01 4924649.76 +SET 61092.84 45312.16 +SET 61092.90 34781.67 +SET 610929.00 347816.70 +SET 610984.48 200381.44 +SET 611001.96 360628.38 +SET 61102.17 45319.08 +SET 6111.15 4532.60 +SET 611134.70 347933.81 +SET 611140.32 381651.48 +SET 611156.02 360719.31 +SET 611205.60 368135.34 +SET 611258.67 423834.93 +SET 6113333.96 4597235.92 +SET 611395.60 381810.90 +SET 6114002.23 4597738.46 +SET 611421.60 200524.80 +SET 6114670.50 4598241.00 +SET 61148.82 45353.68 +SET 611486.19 492937.44 +SET 611503.86 424004.94 +SET 61158.15 45360.60 +SET 6116007.04 4599246.08 +SET 611650.88 381970.32 +SET 61167.48 45367.52 +SET 6116815.53 4930949.28 +SET 611740.50 528800.50 +SET 611772.26 361083.03 +SET 611845.80 390734.40 +SET 611858.72 200668.16 +SET 61186.14 45381.36 +SET 6118769.16 4932524.16 +SET 611906.16 382129.74 +SET 6119420.37 4933049.12 +SET 61195.47 45388.28 +SET 611998.38 390831.84 +SET 6120016.66 4602261.32 +SET 6120071.58 4933574.08 +SET 6120684.93 4602763.86 +SET 6120722.79 4934099.04 +SET 612075.97 424401.63 +SET 61208.00 36866.20 +SET 612080.38 361264.89 +SET 61210.50 41009.10 +SET 612137.40 493462.40 +SET 6122025.21 4935148.96 +SET 61223.46 45409.04 +SET 6122676.42 4935673.92 +SET 612303.54 391026.72 +SET 61232.79 45415.96 +SET 612321.16 424571.64 +SET 6123358.01 4604774.02 +SET 612368.90 348636.47 +SET 6123978.84 4936723.84 +SET 6124026.28 4605276.56 +SET 612405.12 200847.36 +SET 612416.72 382448.58 +SET 612456.12 391124.16 +SET 6124694.55 4605779.10 +SET 612484.62 424684.98 +SET 612566.35 424741.65 +SET 612584.28 529529.88 +SET 61260.78 45436.72 +SET 612608.70 391221.60 +SET 6126699.36 4607286.72 +SET 61267.20 38260.80 +SET 612696.62 361628.61 +SET 612729.81 424854.99 +SET 612732.96 200954.88 +SET 6127367.63 4607789.26 +SET 612780.30 348870.69 +SET 612788.61 493987.36 +SET 6127886.10 4939873.60 +SET 61279.44 45450.56 +SET 6128035.90 4608291.80 +SET 6128537.31 4940398.56 +SET 612893.27 424968.33 +SET 612913.86 391416.48 +SET 6129188.52 4940923.52 +SET 61297.50 42502.50 +SET 612986.00 348987.80 +SET 613004.74 361810.47 +SET 613006.17 529894.57 +SET 6130490.94 4941973.44 +SET 61306.08 20106.24 +SET 613066.44 391513.92 +SET 6131142.15 4942498.40 +SET 6131377.25 4610804.50 +SET 613182.56 382926.84 +SET 613220.19 425195.01 +SET 6132444.57 4943548.32 +SET 613312.86 361992.33 +SET 61335.42 45492.08 +SET 6134050.33 4612814.66 +SET 613439.82 494512.32 +SET 6134398.20 4945123.20 +SET 613466.92 362083.26 +SET 613471.86 461331.72 +SET 613497.92 201205.76 +SET 6135049.41 4945648.16 +SET 61354.08 45505.92 +SET 6135700.62 4946173.12 +SET 6136055.14 4614322.28 +SET 613620.98 362174.19 +SET 6136723.41 4614824.82 +SET 6137003.04 4947223.04 +SET 613710.57 425535.03 +SET 613792.30 425591.70 +SET 6138305.46 4948272.96 +SET 613874.03 425648.37 +SET 613955.76 425705.04 +SET 6139607.88 4949322.88 +SET 61400.30 41136.26 +SET 61400.73 45540.52 +SET 614091.03 495037.28 +SET 6140910.30 4950372.80 +SET 61410.06 45547.44 +SET 614134.50 392196.00 +SET 614153.60 201420.80 +SET 6141561.51 4950897.76 +SET 61419.39 45554.36 +SET 614203.68 383564.52 +SET 6142863.93 4951947.68 +SET 614364.41 425988.39 +SET 614372.16 201492.48 +SET 61447.75 41168.05 +SET 6144817.56 4953522.56 +SET 6145410.92 4621357.84 +SET 614592.24 392488.32 +SET 61460.96 42615.84 +SET 6146079.19 4621860.38 +SET 614609.60 426158.40 +SET 6146119.98 4954572.48 +SET 614700.00 201600.00 +SET 614703.20 370241.98 +SET 614714.24 383883.36 +SET 6147415.73 4622865.46 +SET 6148.47 4560.28 +SET 61480.84 46233.68 +SET 6148073.61 4956147.36 +SET 614808.40 462336.80 +SET 614809.28 201635.84 +SET 614853.46 362901.63 +SET 61489.74 39268.32 +SET 6149376.03 4957197.28 +SET 61495.20 41199.84 +SET 614969.52 384042.78 +SET 615043.00 350158.90 +SET 6150678.45 4958247.20 +SET 6151329.66 4958772.16 +SET 615140.40 370505.31 +SET 6151425.35 4625880.70 +SET 615161.58 363083.49 +SET 615181.71 426555.09 +SET 61522.48 38420.22 +SET 61524.64 20177.92 +SET 615246.40 201779.20 +SET 6152632.08 4959822.08 +SET 6152761.89 4626885.78 +SET 61531.35 45637.40 +SET 6153283.29 4960347.04 +SET 6153430.16 4627388.32 +SET 615355.68 201815.04 +SET 615393.45 496087.20 +SET 61540.68 45644.32 +SET 61542.69 42672.51 +SET 615464.96 201850.88 +SET 615469.70 363265.35 +SET 6154766.70 4628393.40 +SET 61550.01 45651.24 +SET 6155888.13 4962446.88 +SET 61559.34 45658.16 +SET 615590.36 426838.44 +SET 615623.76 363356.28 +SET 615672.09 426895.11 +SET 61568.67 45665.08 +SET 61578.00 45672.00 +SET 6157841.76 4964021.76 +SET 615792.80 201958.40 +SET 61587.33 45678.92 +SET 6158776.32 4631408.64 +SET 6159144.18 4965071.68 +SET 615917.28 427065.12 +SET 615931.88 363538.14 +SET 61596.66 45685.84 +SET 615999.01 427121.79 +SET 616.24 363.72 +SET 61605.99 45692.76 +SET 616085.94 363629.07 +SET 616144.94 463341.88 +SET 6161449.40 4633418.80 +SET 6161749.02 4967171.52 +SET 6162.40 3637.20 +SET 6162117.67 4633921.34 +SET 616229.92 202101.76 +SET 616270.62 393560.16 +SET 6163051.44 4968221.44 +SET 616325.93 427348.47 +SET 616339.20 202137.60 +SET 6163454.21 4634926.42 +SET 61637.55 41295.21 +SET 61642.32 39365.76 +SET 616423.20 393657.60 +SET 6164353.86 4969271.36 +SET 6164790.75 4635931.50 +SET 616482.90 350978.67 +SET 6165005.07 4969796.32 +SET 6165459.02 4636434.04 +SET 6165656.28 4970321.28 +SET 616571.12 427518.48 +SET 616575.78 393755.04 +SET 6166307.49 4970846.24 +SET 616652.85 427575.15 +SET 616667.04 202245.12 +SET 6166958.70 4971371.20 +SET 6167.13 4574.12 +SET 616702.18 363992.79 +SET 616728.36 393852.48 +SET 616756.48 385158.72 +SET 6167609.91 4971896.16 +SET 616776.32 202280.96 +SET 61680.63 45748.12 +SET 616803.18 533176.78 +SET 6168132.10 4638444.20 +SET 616856.24 364083.72 +SET 6168800.37 4638946.74 +SET 616885.60 202316.80 +SET 616889.20 371558.63 +SET 6169468.64 4639449.28 +SET 616979.77 427801.83 +SET 61699.29 45761.96 +SET 616994.88 202352.64 +SET 61706.15 42785.85 +SET 61708.62 45768.88 +SET 617143.23 427915.17 +SET 617164.36 364265.58 +SET 617186.10 394144.80 +SET 617213.44 202424.32 +SET 6172141.72 4641459.44 +SET 6172168.38 4975570.88 +SET 617267.04 385477.56 +SET 6172809.99 4641961.98 +SET 6172819.59 4976095.84 +SET 617305.70 351447.11 +SET 617306.69 428028.51 +SET 617318.42 364356.51 +SET 617322.72 202460.16 +SET 617338.68 394242.24 +SET 6173478.26 4642464.52 +SET 617388.42 428085.18 +SET 6174122.01 4977145.76 +SET 6174146.53 4642967.06 +SET 61743.20 20249.60 +SET 61745.94 45796.56 +SET 617470.15 428141.85 +SET 617541.28 202531.84 +SET 6175424.43 4978195.68 +SET 6175483.07 4643972.14 +SET 6176075.64 4978720.64 +SET 617633.61 428255.19 +SET 61764.60 45810.40 +SET 617715.34 428311.86 +SET 61773.93 45817.32 +SET 6177378.06 4979770.56 +SET 6177487.88 4645479.76 +SET 617759.84 202603.52 +SET 617763.60 372085.29 +SET 617777.60 385796.40 +SET 61778.06 36462.93 +SET 61779.90 41390.58 +SET 617796.42 394534.56 +SET 617797.07 428368.53 +SET 61783.26 45824.24 +SET 6179331.69 4981345.44 +SET 617934.66 364720.23 +SET 617949.00 394632.00 +SET 6179492.69 4646987.38 +SET 617960.53 428481.87 +SET 617978.40 202675.20 +SET 617998.29 498187.04 +SET 6179982.90 4981870.40 +SET 61801.92 45838.08 +SET 618042.26 428538.54 +SET 6180634.11 4982395.36 +SET 61811.25 45845.00 +SET 61820.58 45851.92 +SET 6182165.77 4648997.54 +SET 6182587.74 4983970.24 +SET 61827.35 41422.37 +SET 6182834.04 4649500.08 +SET 618287.45 428708.55 +SET 6183238.95 4984495.20 +SET 61839.24 45865.76 +SET 618396.84 364993.02 +SET 618450.91 428821.89 +SET 6184541.37 4985545.12 +SET 61852.48 20285.44 +SET 618539.90 352149.77 +SET 618634.08 202890.24 +SET 618649.50 498712.00 +SET 6186843.66 4652515.32 +SET 618711.90 395119.20 +SET 6187146.21 4987644.96 +SET 6187511.93 4653017.86 +SET 6187797.42 4988169.92 +SET 618818.02 465352.04 +SET 6188848.47 4654022.94 +SET 618941.29 429161.91 +SET 61895.22 45907.28 +SET 618951.30 352383.99 +SET 6189751.05 4989744.80 +SET 61904.55 45914.20 +SET 6190402.26 4990269.76 +SET 619054.00 386593.50 +SET 619071.20 203033.60 +SET 6190853.28 4655530.56 +SET 619104.75 429275.25 +SET 619167.14 365447.67 +SET 6191704.68 4991319.68 +SET 619180.48 203069.44 +SET 6192189.82 4656535.64 +SET 6192355.89 4991844.64 +SET 619289.76 203105.28 +SET 61932.54 45934.96 +SET 619321.20 365538.60 +SET 6193526.36 4657540.72 +SET 6193658.31 4992894.56 +SET 619399.04 203141.12 +SET 61941.87 45941.88 +SET 619431.67 429501.93 +SET 619486.29 465854.58 +SET 61951.34 42955.86 +SET 619512.40 373138.61 +SET 6195531.17 4659048.34 +SET 6195611.94 4994469.44 +SET 61961.76 20321.28 +SET 619617.60 203212.80 +SET 6196263.15 4994994.40 +SET 619627.38 395703.84 +SET 6196867.71 4660053.42 +SET 6197535.98 4660555.96 +SET 619758.59 429728.61 +SET 619783.38 365811.39 +SET 61979.19 45969.56 +SET 619819.84 387071.76 +SET 6198216.78 4996569.28 +SET 61988.52 45976.48 +SET 619949.60 373401.94 +SET 619979.80 352969.54 +SET 6200821.62 4998669.12 +SET 620091.50 365993.25 +SET 6201545.60 4663571.20 +SET 62017.15 41549.53 +SET 620237.70 396093.60 +SET 6202882.14 4664576.28 +SET 62033.07 43012.53 +SET 620330.70 430125.30 +SET 6203426.46 5000768.96 +SET 620390.28 396191.04 +SET 6204077.67 5001293.92 +SET 6204886.95 4666083.90 +SET 620542.86 396288.48 +SET 620575.89 430295.31 +SET 620600.19 536458.99 +SET 620603.13 500286.88 +SET 62063.16 46031.84 +SET 620657.62 430351.98 +SET 6206891.76 4667591.52 +SET 62071.04 20357.12 +SET 620710.40 203571.20 +SET 6207560.03 4668094.06 +SET 6207984.93 5004443.68 +SET 620819.68 203607.04 +SET 62082.40 37392.86 +SET 620821.08 430465.32 +SET 6208228.30 4668596.60 +SET 620861.80 366447.90 +SET 620928.96 203642.88 +SET 6209287.35 5005493.60 +SET 621000.60 396580.80 +SET 621008.30 353555.09 +SET 621015.86 366538.83 +SET 6210901.38 4670606.76 +SET 621096.24 387868.86 +SET 6211569.65 4671109.30 +SET 621214.00 353672.20 +SET 621229.73 430748.67 +SET 6212543.40 5008118.40 +SET 621261.20 374191.93 +SET 621351.52 388028.28 +SET 621419.70 353789.31 +SET 6214497.03 5009693.28 +SET 62147.13 46094.12 +SET 621475.36 203822.08 +SET 62149.11 46736.22 +SET 6214911.00 4673622.00 +SET 62159.50 41644.90 +SET 621606.80 388187.70 +SET 621610.92 396970.56 +SET 6216915.81 4675129.62 +SET 621693.92 203893.76 +SET 6217584.08 4675632.16 +SET 621786.16 366993.48 +SET 62180.32 20392.96 +SET 621801.84 431145.36 +SET 6218252.35 4676134.70 +SET 62184.45 46121.80 +SET 621862.08 388347.12 +SET 621865.86 537553.06 +SET 621883.57 431202.03 +SET 621905.55 501336.80 +SET 62196.53 43125.87 +SET 621965.30 431258.70 +SET 622021.76 204001.28 +SET 62203.11 46135.64 +SET 6220357.92 5014417.92 +SET 622036.80 354140.64 +SET 62206.95 41676.69 +SET 6220925.43 4678144.86 +SET 622117.36 388506.54 +SET 62212.44 46142.56 +SET 622128.76 431372.04 +SET 622131.04 204037.12 +SET 6221593.70 4678647.40 +SET 6222261.97 4679149.94 +SET 6222311.55 5015992.80 +SET 622240.32 204072.96 +SET 622242.50 354257.75 +SET 6222962.76 5016517.76 +SET 62231.10 46156.40 +SET 622349.60 204108.80 +SET 622372.64 388665.96 +SET 62240.43 46163.32 +SET 622402.40 367357.20 +SET 622458.88 204144.64 +SET 6224935.05 4681160.10 +SET 62252.64 39755.52 +SET 622526.40 397555.20 +SET 62254.40 41708.48 +SET 622556.46 367448.13 +SET 622556.76 501861.76 +SET 6225603.32 4681662.64 +SET 622568.16 204180.48 +SET 62259.09 46177.16 +SET 622619.14 431712.06 +SET 6226271.59 4682165.18 +SET 622653.90 354491.97 +SET 622677.44 204216.32 +SET 622678.98 397652.64 +SET 622709.64 538282.44 +SET 622710.52 367539.06 +SET 62278.26 43182.54 +SET 622786.72 204252.16 +SET 622827.64 468367.28 +SET 622831.56 397750.08 +SET 622864.58 367629.99 +SET 622883.20 388984.80 +SET 6229474.86 5021767.36 +SET 622984.14 397847.52 +SET 623027.79 431995.41 +SET 623136.72 397944.96 +SET 623172.70 367811.85 +SET 6232079.70 5023867.20 +SET 6232286.02 4686688.04 +SET 62327.10 35484.33 +SET 623271.00 354843.30 +SET 623272.98 432165.42 +SET 623354.71 432222.09 +SET 62343.06 46239.44 +SET 623447.20 375508.58 +SET 6234684.54 5025967.04 +SET 623476.70 354960.41 +SET 623480.82 367993.71 +SET 623518.17 432335.43 +SET 6235335.75 5026492.00 +SET 623551.68 204503.04 +SET 623553.42 539011.82 +SET 623594.46 398237.28 +SET 623634.88 368084.64 +SET 623649.04 389463.06 +SET 6236638.17 5027541.92 +SET 623682.40 355077.52 +SET 6236963.91 4690205.82 +SET 62371.05 46260.20 +SET 623747.04 398334.72 +SET 6238591.80 5029116.80 +SET 623904.32 389622.48 +SET 6239243.01 5029641.76 +SET 62394.30 36826.65 +SET 623943.00 368266.50 +SET 6239894.22 5030166.72 +SET 624008.55 432675.45 +SET 6240305.26 4692718.52 +SET 624097.06 368357.43 +SET 624164.18 469372.36 +SET 624204.78 398627.04 +SET 624207.36 204718.08 +SET 6242978.34 4694728.68 +SET 624299.50 355428.85 +SET 624335.47 432902.13 +SET 62436.36 46308.64 +SET 62439.72 53974.12 +SET 624397.20 539741.20 +SET 624417.20 432958.80 +SET 624425.92 204789.76 +SET 62445.69 46315.56 +SET 6244983.15 4696236.30 +SET 624505.20 355545.96 +SET 624510.39 503436.64 +SET 624559.24 368630.22 +SET 6245651.42 4696738.84 +SET 6245755.11 5034891.36 +SET 6247656.23 4698246.46 +SET 624825.85 433242.15 +SET 6248324.50 4698749.00 +SET 6248359.95 5036991.20 +SET 6248992.77 4699251.54 +SET 624916.60 355780.18 +SET 62492.34 46350.16 +SET 6249661.04 4699754.08 +SET 624967.68 399114.24 +SET 625.11 463.64 +SET 62501.67 46357.08 +SET 62508.16 20500.48 +SET 62511.00 46364.00 +SET 625120.26 399211.68 +SET 6251665.85 4701261.70 +SET 625175.48 368993.94 +SET 625196.00 376561.90 +SET 6252267.21 5040140.96 +SET 62523.45 43352.55 +SET 6252334.12 4701764.24 +SET 625234.50 433525.50 +SET 625272.84 399309.12 +SET 625300.16 205076.48 +SET 625316.23 433582.17 +SET 625328.00 356014.40 +SET 625329.54 369084.87 +SET 62539.10 41899.22 +SET 625397.96 433638.84 +SET 625425.42 399406.56 +SET 62543.60 39057.90 +SET 6254338.93 4703271.86 +SET 625436.00 390579.00 +SET 625479.69 433695.51 +SET 625483.60 369175.80 +SET 6255675.47 4704276.94 +SET 62557.65 46398.60 +SET 62557.80 39950.40 +SET 6256343.74 4704779.48 +SET 625643.15 433808.85 +SET 62566.98 46405.52 +SET 625662.87 540835.27 +SET 625691.28 390738.42 +SET 625724.88 433865.52 +SET 625730.58 399601.44 +SET 625737.28 205219.84 +SET 62576.31 46412.44 +SET 62586.55 41931.01 +SET 625883.16 399698.88 +SET 6259430.52 5045915.52 +SET 625945.10 356365.73 +SET 625955.84 205291.52 +SET 6259685.09 4707292.18 +SET 6260.43 4643.32 +SET 6260081.73 5046440.48 +SET 6260353.36 4707794.72 +SET 62604.30 46433.20 +SET 626070.40 377088.56 +SET 6261021.63 4708297.26 +SET 626150.80 356482.84 +SET 626174.40 205363.20 +SET 626188.32 399893.76 +SET 6262358.17 4709302.34 +SET 626283.68 205399.04 +SET 6263026.44 4709804.88 +SET 6263337.78 5049065.28 +SET 626378.72 434318.88 +SET 626407.96 369721.38 +SET 62641.62 46460.88 +SET 626460.45 434375.55 +SET 62650.95 46467.80 +SET 626507.60 377351.89 +SET 62660.28 46474.72 +SET 6266593.83 5051690.08 +SET 626705.64 434545.56 +SET 6267245.04 5052215.04 +SET 626787.37 434602.23 +SET 626798.64 400283.52 +SET 62681.45 41994.59 +SET 626830.08 205578.24 +SET 626837.26 471382.52 +SET 6268547.46 5053264.96 +SET 6269040.87 4714327.74 +SET 626928.54 541929.34 +SET 626950.83 434715.57 +SET 626951.22 400380.96 +SET 626967.68 391535.52 +SET 62697.60 46502.40 +SET 6269849.88 5054314.88 +SET 627032.56 434772.24 +SET 62710.38 40047.84 +SET 627103.80 400478.40 +SET 627178.26 370176.03 +SET 627222.96 391694.94 +SET 627267.20 205721.60 +SET 627277.75 434942.25 +SET 627359.48 434998.92 +SET 6273718.76 4717845.52 +SET 627408.96 400673.28 +SET 6274387.03 4718348.06 +SET 627441.21 435055.59 +SET 627478.24 391854.36 +SET 627485.76 205793.28 +SET 627561.54 400770.72 +SET 6275710.77 5059039.52 +SET 627590.70 357302.61 +SET 627604.67 435168.93 +SET 62762.91 46550.84 +SET 6276361.98 5059564.48 +SET 627640.44 370448.82 +SET 62768.64 43522.56 +SET 6277060.11 4720358.22 +SET 627733.52 392013.78 +SET 627766.44 506061.44 +SET 6277728.38 4720860.76 +SET 627796.40 357419.72 +SET 627819.20 378141.88 +SET 6278315.61 5061139.36 +SET 627849.86 435338.94 +SET 627866.70 400965.60 +SET 6279064.92 4721865.84 +SET 62798.88 39217.32 +SET 62800.23 46578.52 +SET 628013.32 435452.28 +SET 6280269.24 5062714.24 +SET 62809.56 46585.44 +SET 6280920.45 5063239.20 +SET 628095.05 435508.95 +SET 6281069.73 4723373.46 +SET 62818.89 46592.36 +SET 628244.08 392332.62 +SET 628250.72 206044.16 +SET 628256.68 370812.54 +SET 6282874.08 5064814.08 +SET 6283074.54 4724881.08 +SET 628324.44 401257.92 +SET 62836.00 20608.00 +SET 628360.00 206080.00 +SET 6283742.81 4725383.62 +SET 628410.74 370903.47 +SET 628413.50 357771.05 +SET 628417.65 506586.40 +SET 62846.88 46613.12 +SET 628477.02 401355.36 +SET 6285079.35 4726388.70 +SET 6285478.92 5066913.92 +SET 62856.48 37099.44 +SET 628564.80 370994.40 +SET 6285747.62 4726891.24 +SET 628578.56 206151.68 +SET 62861.61 54338.81 +SET 628616.10 543388.10 +SET 6286415.89 4727393.78 +SET 628667.16 435905.64 +SET 628687.84 206187.52 +SET 6287084.16 4727896.32 +SET 62874.87 46633.88 +SET 6287432.55 5068488.80 +SET 628748.89 435962.31 +SET 628782.18 401550.24 +SET 628824.90 358005.27 +SET 628842.07 472890.14 +SET 6288420.70 4728901.40 +SET 6289088.97 4729403.94 +SET 628912.35 436075.65 +SET 628934.76 401647.68 +SET 6289386.18 5070063.68 +SET 6290037.39 5070588.64 +SET 629026.98 371267.19 +SET 629030.60 358122.38 +SET 6290425.51 4730409.02 +SET 629068.86 507111.36 +SET 629087.34 401745.12 +SET 6291093.78 4730911.56 +SET 629181.04 371358.12 +SET 6291991.02 5072163.52 +SET 62921.52 46668.48 +SET 629234.24 206366.72 +SET 629236.30 358239.49 +SET 629239.27 436302.33 +SET 629239.92 401842.56 +SET 6292642.23 5072688.48 +SET 6293.21 4363.59 +SET 62930.85 46675.40 +SET 629321.00 436359.00 +SET 6293944.65 5073738.40 +SET 62940.18 46682.32 +SET 629402.73 436415.67 +SET 62944.20 35835.66 +SET 6294595.86 5074263.36 +SET 6295103.40 4733926.80 +SET 629520.48 393129.72 +SET 62956.80 37919.52 +SET 62958.84 46696.16 +SET 6295898.28 5075313.28 +SET 629643.22 371630.91 +SET 62968.17 46703.08 +SET 6297.75 4671.00 +SET 629729.65 436642.35 +SET 62977.50 46710.00 +SET 629775.76 393289.14 +SET 629853.40 358590.82 +SET 62986.83 46716.92 +SET 629881.77 544482.17 +SET 6299154.33 5077938.08 +SET 6299781.29 4737444.58 +SET 6299805.54 5078463.04 +SET 630002.82 402329.76 +SET 6300456.75 5078988.00 +SET 63005.49 46730.76 +SET 63013.83 43692.57 +SET 63015.54 40242.72 +SET 630217.76 206689.28 +SET 630286.32 393607.98 +SET 630301.76 437039.04 +SET 630303.66 544846.86 +SET 6303061.59 5081087.84 +SET 630327.04 206725.12 +SET 6303712.80 5081612.80 +SET 6303790.91 4740459.82 +SET 630413.52 372085.56 +SET 6304364.01 5082137.76 +SET 6304459.18 4740962.36 +SET 630460.56 402622.08 +SET 6305127.45 4741464.90 +SET 63052.14 46765.36 +SET 63054.16 39376.74 +SET 630545.60 206796.80 +SET 630546.95 437209.05 +SET 630567.58 372176.49 +SET 63061.05 42248.91 +SET 63061.47 46772.28 +SET 630628.68 437265.72 +SET 630654.88 206832.64 +SET 630676.20 359059.26 +SET 6306968.85 5084237.60 +SET 6307132.26 4742972.52 +SET 6307620.06 5084762.56 +SET 630873.87 437435.73 +SET 630881.90 359176.37 +SET 630955.60 437492.40 +SET 6309573.69 5086337.44 +SET 6309805.34 4744982.68 +SET 63108.50 42280.70 +SET 631087.60 359293.48 +SET 631200.79 437662.41 +SET 631201.28 207011.84 +SET 6312178.53 5088437.28 +SET 63126.78 46820.72 +SET 631282.52 437719.08 +SET 631307.44 394245.66 +SET 6313146.69 4747495.38 +SET 631337.88 372631.14 +SET 63136.11 46827.64 +SET 631364.25 437775.75 +SET 63145.44 46834.56 +SET 631491.94 372722.07 +SET 631529.12 207119.36 +SET 63154.77 46841.48 +SET 63155.95 42312.49 +SET 6316.46 3728.13 +SET 6316085.79 5091587.04 +SET 631609.44 437945.76 +SET 631638.40 207155.20 +SET 63164.10 46848.40 +SET 631646.00 372813.00 +SET 63167.37 50921.12 +SET 63168.12 40340.16 +SET 631691.17 438002.43 +SET 6317156.31 4750510.62 +SET 6317388.21 5092636.96 +SET 631754.00 380511.85 +SET 631772.90 438059.10 +SET 6317824.58 4751013.16 +SET 6318039.42 5093161.92 +SET 631818.00 394564.50 +SET 6318492.85 4751515.70 +SET 6318690.63 5093686.88 +SET 631910.40 359761.92 +SET 63192.09 46869.16 +SET 631954.12 372994.86 +SET 6319829.39 4752520.78 +SET 631991.22 546305.62 +SET 6319993.05 5094736.80 +SET 63201.42 46876.08 +SET 632099.82 438285.78 +SET 632116.10 359879.03 +SET 6321165.93 4753525.86 +SET 6321295.47 5095786.72 +SET 632138.94 403693.92 +SET 632183.42 475402.84 +SET 63220.08 46889.92 +SET 6322502.47 4754530.94 +SET 6322597.89 5096836.64 +SET 632294.08 207370.24 +SET 6323170.74 4755033.48 +SET 632321.80 359996.14 +SET 6323249.10 5097361.60 +SET 632345.01 438455.79 +SET 632416.30 373267.65 +SET 63248.07 46910.68 +SET 632508.47 438569.13 +SET 6325175.55 4756541.10 +SET 632527.50 360113.25 +SET 6325843.82 4757043.64 +SET 6325853.94 5099461.44 +SET 632596.68 403986.24 +SET 6326505.15 5099986.40 +SET 63266.73 46924.52 +SET 632671.93 438682.47 +SET 632724.42 373449.51 +SET 63276.06 46931.44 +SET 6327848.63 4758551.26 +SET 6328.35 5470.35 +SET 632840.48 207549.44 +SET 63285.39 46938.36 +SET 632851.69 475905.38 +SET 6328516.90 4759053.80 +SET 6329109.99 5102086.24 +SET 632938.90 360347.47 +SET 63294.72 46945.28 +SET 632976.12 510261.12 +SET 6329761.20 5102611.20 +SET 632998.85 438909.15 +SET 633032.54 373631.37 +SET 6330521.71 4760561.42 +SET 633054.42 404278.56 +SET 633162.31 439022.49 +SET 633168.32 207656.96 +SET 6331858.25 4761566.50 +SET 633207.00 404376.00 +SET 63322.71 46966.04 +SET 633256.89 547399.69 +SET 6333017.25 5105236.00 +SET 633325.77 439135.83 +SET 633359.58 404473.44 +SET 63340.75 43919.25 +SET 63341.37 46979.88 +SET 6335.07 4698.68 +SET 63350.70 46986.80 +SET 633519.96 476407.92 +SET 633556.00 360698.80 +SET 63360.03 46993.72 +SET 633605.44 207800.32 +SET 6336273.30 5107860.80 +SET 633648.78 373995.09 +SET 6336924.51 5108385.76 +SET 633802.84 374086.02 +SET 633816.15 439475.85 +SET 633817.32 404765.76 +SET 633860.24 395839.86 +SET 63388.02 47014.48 +SET 6338878.14 5109960.64 +SET 633940.00 381828.50 +SET 63397.35 47021.40 +SET 6339877.49 4767596.98 +SET 634042.56 207943.68 +SET 6340545.76 4768099.52 +SET 6341882.30 4769104.60 +SET 63422.48 43975.92 +SET 63425.34 47042.16 +SET 634275.06 405058.08 +SET 6343218.84 4770109.68 +SET 63434.67 47049.08 +SET 634370.40 208051.20 +SET 634370.80 396158.70 +SET 634377.20 382091.83 +SET 63444.00 47056.00 +SET 6344739.03 5114685.28 +SET 6345390.24 5115210.24 +SET 634573.14 374540.67 +SET 6345891.92 4772119.84 +SET 6346041.45 5115735.20 +SET 634626.08 396318.12 +SET 634633.45 440042.55 +SET 6346692.66 5116260.16 +SET 63471.99 47076.76 +SET 634715.18 440099.22 +SET 6347228.46 4773124.92 +SET 63473.28 40535.04 +SET 634790.20 361401.46 +SET 634796.91 440155.89 +SET 634807.52 208194.56 +SET 634814.40 382355.16 +SET 6348565.00 4774130.00 +SET 634881.26 374722.53 +SET 634885.38 405447.84 +SET 63491.68 20823.04 +SET 6349901.54 4775135.08 +SET 634995.90 361518.57 +SET 635026.08 208266.24 +SET 635042.10 440325.90 +SET 6350569.81 4775637.62 +SET 6350599.92 5119409.92 +SET 635123.83 440382.57 +SET 6351251.13 5119934.88 +SET 635135.36 208302.08 +SET 635136.64 396636.96 +SET 63518.64 47111.36 +SET 635190.54 405642.72 +SET 6351906.35 4776642.70 +SET 635287.29 440495.91 +SET 6353.73 4712.52 +SET 635353.92 208373.76 +SET 635366.34 549223.14 +SET 6353855.97 5122034.72 +SET 635391.92 396796.38 +SET 6353911.16 4778150.32 +SET 63546.63 47132.12 +SET 635463.20 208409.60 +SET 635495.70 405837.60 +SET 635497.50 375086.25 +SET 635532.48 440665.92 +SET 63555.96 47139.04 +SET 635614.21 440722.59 +SET 635648.28 405935.04 +SET 6357112.02 5124659.52 +SET 635788.23 549587.83 +SET 635791.04 208517.12 +SET 6358.30 4259.86 +SET 63583.00 42598.60 +SET 6358589.05 4781668.10 +SET 6359257.32 4782170.64 +SET 63593.28 47166.72 +SET 635941.13 440949.27 +SET 6359716.86 5126759.36 +SET 63600.96 20858.88 +SET 636104.59 441062.61 +SET 636118.88 208624.64 +SET 6361262.13 4783678.26 +SET 636157.76 397274.64 +SET 6361670.49 5128334.24 +SET 636186.32 441119.28 +SET 6362321.70 5128859.20 +SET 63625.86 40632.48 +SET 636258.60 406324.80 +SET 63626.78 37554.09 +SET 636267.80 375540.90 +SET 6363.06 4719.44 +SET 63630.60 47194.40 +SET 636349.78 441232.62 +SET 6363624.12 5129909.12 +SET 636421.86 375631.83 +SET 6364275.33 5130434.08 +SET 636431.51 441289.29 +SET 636446.72 208732.16 +SET 6364603.48 4786190.96 +SET 63649.26 47208.24 +SET 636556.00 208768.00 +SET 6365940.02 4787196.04 +SET 6366228.96 5132008.96 +SET 6366608.29 4787698.58 +SET 636668.32 397593.48 +SET 636676.70 441459.30 +SET 636716.34 406617.12 +SET 636758.43 441515.97 +SET 63677.25 47229.00 +SET 636774.56 208839.68 +SET 6367944.83 4788703.66 +SET 6368182.59 5133583.84 +SET 636847.20 362572.56 +SET 636921.89 441629.31 +SET 636993.12 208911.36 +SET 637000.40 383671.81 +SET 637003.62 441685.98 +SET 637021.50 406812.00 +SET 63705.39 55068.19 +SET 637052.90 362689.67 +SET 637085.35 441742.65 +SET 637102.40 208947.20 +SET 63714.57 47256.68 +SET 637178.88 397912.32 +SET 637211.68 208983.04 +SET 63723.90 47263.60 +SET 637258.60 362806.78 +SET 6372741.06 5137258.56 +SET 6373392.27 5137783.52 +SET 637346.22 376177.41 +SET 6373959.26 4793226.52 +SET 6374043.48 5138308.48 +SET 637430.24 209054.72 +SET 637437.60 383935.14 +SET 6374694.69 5138833.44 +SET 637494.00 442026.00 +SET 637500.28 376268.34 +SET 63751.89 47284.36 +SET 6375295.80 4794231.60 +SET 637534.59 513935.84 +SET 637539.52 209090.56 +SET 637575.73 442082.67 +SET 6375964.07 4794734.14 +SET 637689.44 398231.16 +SET 637739.19 442196.01 +SET 63779.88 47305.12 +SET 6377950.74 5141458.24 +SET 6377968.88 4796241.76 +SET 637820.92 442252.68 +SET 6378601.95 5141983.20 +SET 6378637.15 4796744.30 +SET 6379253.16 5142508.16 +SET 637962.46 376541.13 +SET 637976.64 209233.92 +SET 637984.38 442366.02 +SET 6380641.96 4798251.92 +SET 63807.87 47325.88 +SET 638081.40 363275.22 +SET 638089.56 407494.08 +SET 638116.52 376632.06 +SET 6381310.23 4798754.46 +SET 63819.52 20930.56 +SET 638195.20 209305.60 +SET 6381978.50 4799257.00 +SET 6382.00 3985.50 +SET 63820.00 39855.00 +SET 63820.25 42757.55 +SET 6382509.21 5145132.96 +SET 63826.53 47339.72 +SET 6382646.77 4799759.54 +SET 638270.58 376722.99 +SET 63831.20 38446.18 +SET 6383160.42 5145657.92 +SET 638319.57 551775.97 +SET 6383315.04 4800262.08 +SET 63835.86 47346.64 +SET 638393.03 442649.37 +SET 6384462.84 5146707.84 +SET 6384651.58 4801267.16 +SET 638492.80 363509.44 +SET 6385319.85 4801769.70 +SET 63854.52 47360.48 +SET 638547.30 407786.40 +SET 6385765.26 5147757.76 +SET 638638.22 442819.38 +SET 6386656.39 4802774.78 +SET 63867.70 42789.34 +SET 638698.50 363626.55 +SET 638741.46 552140.66 +SET 638741.60 209484.80 +SET 6387718.89 5149332.64 +SET 6388370.10 5149857.60 +SET 638883.41 442989.39 +SET 638904.20 363743.66 +SET 63891.84 47388.16 +SET 6389329.47 4804784.94 +SET 638965.14 443046.06 +SET 638965.84 399028.26 +SET 6389672.52 5150907.52 +SET 63901.17 47395.08 +SET 6390323.73 5151432.48 +SET 6390666.01 4805790.02 +SET 6390974.94 5151957.44 +SET 6391.05 4740.20 +SET 63910.50 47402.00 +SET 639109.90 363860.77 +SET 639128.60 443159.40 +SET 6391334.28 4806292.56 +SET 63915.15 42821.13 +SET 639157.62 408176.16 +SET 6391626.15 5152482.40 +SET 639186.40 384988.46 +SET 6392277.36 5153007.36 +SET 639315.60 363977.88 +SET 6393339.09 4807800.18 +SET 639349.00 377359.50 +SET 639373.79 443329.41 +SET 639397.28 209699.84 +SET 6394230.99 5154582.24 +SET 63947.82 47429.68 +SET 639503.06 377450.43 +SET 639506.56 209735.68 +SET 639521.30 364094.99 +SET 639534.39 480930.78 +SET 6395343.90 4809307.80 +SET 63957.15 47436.60 +SET 6396012.17 4809810.34 +SET 639615.36 408468.48 +SET 639615.84 209771.52 +SET 639618.98 443499.42 +SET 6396184.62 5156157.12 +SET 639623.60 385251.79 +SET 6396680.44 4810312.88 +SET 639731.68 399506.52 +SET 6397348.71 4810815.42 +SET 63975.81 47450.44 +SET 6398016.98 4811317.96 +SET 639834.40 209843.20 +SET 63985.14 47457.36 +SET 639864.17 443669.43 +SET 6398789.46 5158256.96 +SET 639920.52 408663.36 +SET 639932.70 364329.21 +SET 6399353.52 4812323.04 +SET 6399440.67 5158781.92 +SET 639965.24 377723.22 +SET 640007.13 553234.73 +SET 640027.63 443782.77 +SET 64003.80 47471.20 +SET 640052.96 209914.88 +SET 640060.80 385515.12 +SET 64010.05 42884.71 +SET 64013.13 47478.12 +SET 6401358.33 4813830.66 +SET 640138.40 364446.32 +SET 640162.24 209950.72 +SET 6402045.51 5160881.76 +SET 640225.68 408858.24 +SET 640272.82 443952.78 +SET 64031.79 47491.96 +SET 6403347.93 5161931.68 +SET 6403363.14 4815338.28 +SET 64038.08 21002.24 +SET 6403999.14 5162456.64 +SET 64041.12 47498.88 +SET 640427.42 377996.01 +SET 640429.02 553599.42 +SET 640436.28 444066.12 +SET 640518.01 444122.79 +SET 6405301.56 5163506.56 +SET 6405367.95 4816845.90 +SET 64059.78 47512.72 +SET 640599.74 444179.46 +SET 6406704.49 4817850.98 +SET 640683.42 409150.56 +SET 6407255.19 5165081.44 +SET 640735.54 378177.87 +SET 64075.28 40014.42 +SET 640755.50 364797.65 +SET 64076.32 44429.28 +SET 64078.44 47526.56 +SET 640790.64 516560.64 +SET 6408.36 4092.48 +SET 6408041.03 4818856.06 +SET 640836.00 409248.00 +SET 640844.93 444349.47 +SET 640870.93 481935.86 +SET 6409208.82 5166656.32 +SET 6409377.57 4819861.14 +SET 640988.58 409345.44 +SET 6410045.84 4820363.68 +SET 641008.39 444462.81 +SET 641036.48 210237.44 +SET 6410511.24 5167706.24 +SET 641090.12 444519.48 +SET 6411382.38 4821368.76 +SET 641141.16 409442.88 +SET 6412050.65 4821871.30 +SET 641255.04 210309.12 +SET 6412718.92 4822373.84 +SET 641272.80 554328.80 +SET 6413116.08 5169806.08 +SET 641351.78 378541.59 +SET 6413767.29 5170331.04 +SET 64143.75 47575.00 +SET 641441.85 517085.60 +SET 6414418.50 5170856.00 +SET 641498.77 444802.83 +SET 641505.84 378632.52 +SET 6415069.71 5171380.96 +SET 64152.40 42980.08 +SET 64153.08 47581.92 +SET 64153.92 48243.84 +SET 6415720.92 5171905.92 +SET 641578.30 365266.09 +SET 641598.90 409735.20 +SET 6416060.27 4824886.54 +SET 64162.41 47588.84 +SET 641662.23 444916.17 +SET 641694.69 554693.49 +SET 6417023.34 5172955.84 +SET 64171.74 47595.76 +SET 641801.44 210488.32 +SET 6418065.08 4826394.16 +SET 6418325.76 5174005.76 +SET 6418733.35 4826896.70 +SET 64190.40 47609.60 +SET 641910.72 210524.16 +SET 6419401.62 4827399.24 +SET 6419628.18 5175055.68 +SET 641989.70 365500.31 +SET 642020.00 210560.00 +SET 642056.64 410027.52 +SET 642070.88 445199.52 +SET 64209.06 47623.44 +SET 642116.58 555058.18 +SET 642129.28 210595.84 +SET 6421406.43 4828906.86 +SET 64218.39 47630.36 +SET 642207.47 482940.94 +SET 6422233.02 5177155.52 +SET 642234.34 445312.86 +SET 642238.56 210631.68 +SET 6422742.97 4829911.94 +SET 642276.14 379087.17 +SET 642316.07 445369.53 +SET 6423411.24 4830414.48 +SET 6423535.44 5178205.44 +SET 642361.80 410222.40 +SET 64237.05 47644.20 +SET 6424186.65 5178730.40 +SET 642430.20 379178.10 +SET 64246.38 47651.12 +SET 64247.30 43043.66 +SET 642514.38 410319.84 +SET 6425489.07 5179780.32 +SET 642561.26 445539.54 +SET 6426791.49 5180830.24 +SET 642684.00 387095.10 +SET 642724.72 445652.88 +SET 642738.32 379359.96 +SET 6427420.86 4833429.72 +SET 642795.04 401419.56 +SET 6428.37 4767.88 +SET 642819.54 410514.72 +SET 642888.18 445766.22 +SET 642892.38 379450.89 +SET 64294.75 43075.45 +SET 6429425.67 4834937.34 +SET 643003.52 210882.56 +SET 6430047.54 5183455.04 +SET 6430093.94 4835439.88 +SET 643018.20 366085.86 +SET 64302.36 47692.64 +SET 6430762.21 4835942.42 +SET 643112.80 210918.40 +SET 643121.20 387358.43 +SET 643124.70 410709.60 +SET 6431349.96 5184504.96 +SET 6431430.48 4836444.96 +SET 64321.02 47706.48 +SET 643215.10 445992.90 +SET 6432652.38 5185554.88 +SET 643277.28 410807.04 +SET 643296.83 446049.57 +SET 643429.60 366320.08 +SET 643429.86 410904.48 +SET 643440.64 211025.92 +SET 6434606.01 5187129.76 +SET 64349.01 47727.24 +SET 643508.62 379814.61 +SET 643542.02 446219.58 +SET 643544.01 483946.02 +SET 643558.40 387621.76 +SET 6435908.43 5188179.68 +SET 64367.67 47741.08 +SET 6436776.64 4840465.28 +SET 6437.70 4774.80 +SET 643768.48 211133.44 +SET 64377.00 47748.00 +SET 6437862.06 5189754.56 +SET 643787.21 446389.59 +SET 6438113.18 4841470.36 +SET 643877.76 211169.28 +SET 6438781.45 4841972.90 +SET 643987.04 211205.12 +SET 6440117.99 4842977.98 +SET 64404.99 47768.76 +SET 644040.18 411294.24 +SET 644046.70 366671.41 +SET 6440466.90 5191854.40 +SET 6440786.26 4843480.52 +SET 644096.32 211240.96 +SET 64414.32 47775.68 +SET 6441454.53 4843983.06 +SET 644195.86 446672.94 +SET 644205.60 211276.80 +SET 644226.03 556881.63 +SET 6442420.53 5193429.28 +SET 644277.59 446729.61 +SET 644278.92 380269.26 +SET 644345.34 411489.12 +SET 6443722.95 5194479.20 +SET 6444127.61 4845993.22 +SET 644424.16 211348.48 +SET 6444795.88 4846495.76 +SET 64451.64 47803.36 +SET 6445464.15 4846998.30 +SET 644587.04 380451.12 +SET 644604.51 446956.29 +SET 6446327.79 5196579.04 +SET 644650.50 411684.00 +SET 644663.80 367022.74 +SET 644686.24 447012.96 +SET 6447.52 2114.56 +SET 6447630.21 5197628.96 +SET 644767.97 447069.63 +SET 64479.63 47824.12 +SET 644837.28 402694.92 +SET 644849.70 447126.30 +SET 64488.96 47831.04 +SET 644880.55 484951.10 +SET 6448805.50 4849511.00 +SET 6449473.77 4850013.54 +SET 644970.56 211527.68 +SET 645013.16 447239.64 +SET 645069.81 557611.01 +SET 645094.89 447296.31 +SET 6451478.58 4851521.16 +SET 645176.62 447352.98 +SET 645260.82 412073.76 +SET 6452839.89 5201828.64 +SET 64532.00 43234.40 +SET 645340.08 447466.32 +SET 645349.11 520235.36 +SET 6453491.10 5202353.60 +SET 645357.34 380905.77 +SET 645407.68 211671.04 +SET 645486.60 367491.18 +SET 64551.14 38099.67 +SET 645511.40 380996.70 +SET 645548.82 485453.64 +SET 6456.36 4788.64 +SET 645626.24 211742.72 +SET 64566.70 44769.30 +SET 645665.46 381087.63 +SET 645667.00 447693.00 +SET 6456747.15 5204978.40 +SET 645744.40 388938.41 +SET 6458049.57 5206028.32 +SET 64582.26 47900.24 +SET 6458700.78 5206553.28 +SET 645912.19 447863.01 +SET 645993.92 447919.68 +SET 6460003.20 5207603.20 +SET 646023.72 412560.96 +SET 64610.25 47921.00 +SET 646103.70 367842.51 +SET 6461305.62 5208653.12 +SET 646157.38 448033.02 +SET 64619.58 47927.92 +SET 6461956.83 5209178.08 +SET 646217.09 485956.18 +SET 6462170.90 4859561.80 +SET 6462839.17 4860064.34 +SET 6463259.25 5210228.00 +SET 6463507.44 4860566.88 +SET 64638.24 47941.76 +SET 6463910.46 5210752.96 +SET 646435.76 381542.28 +SET 646515.10 368076.73 +SET 6465512.25 4862074.50 +SET 646647.76 448373.04 +SET 64674.35 43329.77 +SET 64675.56 47969.44 +SET 6467817.72 5213902.72 +SET 646811.22 448486.38 +SET 646828.32 212136.96 +SET 6468468.93 5214427.68 +SET 646885.36 486458.72 +SET 6468853.60 4864587.20 +SET 646897.94 381815.07 +SET 64693.76 21217.28 +SET 646937.60 212172.80 +SET 646939.20 413145.60 +SET 64694.22 47983.28 +SET 6469771.35 5215477.60 +SET 6470.52 3819.06 +SET 6470422.56 5216002.56 +SET 64705.20 38190.60 +SET 647052.00 381906.00 +SET 647138.14 448713.06 +SET 647156.16 212244.48 +SET 6471724.98 5217052.48 +SET 647179.26 559434.46 +SET 647206.06 381996.93 +SET 64721.80 43361.56 +SET 647219.87 448769.73 +SET 6472194.95 4867099.90 +SET 6472376.19 5217577.44 +SET 647265.44 212280.32 +SET 64730.16 44882.64 +SET 6473027.40 5218102.40 +SET 6473531.49 4868104.98 +SET 6473678.61 5218627.36 +SET 64740.87 48017.88 +SET 6474199.76 4868607.52 +SET 6474329.82 5219152.32 +SET 647493.20 389991.73 +SET 6475.02 4802.48 +SET 64750.20 48024.80 +SET 647546.79 448996.41 +SET 6475536.30 4869612.60 +SET 647593.28 212387.84 +SET 6476283.45 5220727.20 +SET 647668.24 382269.72 +SET 64769.25 43393.35 +SET 647710.25 449109.75 +SET 647749.30 368779.39 +SET 6477541.11 4871120.22 +SET 6477585.87 5221777.12 +SET 64778.19 48045.56 +SET 647854.68 413730.24 +SET 64787.52 48052.48 +SET 647873.71 449223.09 +SET 6478877.65 4872125.30 +SET 647921.12 212495.36 +SET 647953.95 522335.20 +SET 6479539.50 5223352.00 +SET 6479545.92 4872627.84 +SET 647976.36 382451.58 +SET 648037.17 449336.43 +SET 64811.89 44939.31 +SET 6481493.13 5224926.88 +SET 648155.92 404767.38 +SET 6482795.55 5225976.80 +SET 648284.48 382633.44 +SET 64834.17 48087.08 +SET 648367.60 390518.39 +SET 648411.20 404926.80 +SET 648438.54 382724.37 +SET 648444.93 560528.53 +SET 648445.82 449619.78 +SET 648465.00 414120.00 +SET 6485560.35 4877150.70 +SET 648592.60 382815.30 +SET 64862.16 48107.84 +SET 6486228.62 4877653.24 +SET 648666.48 405086.22 +SET 648691.01 449789.79 +SET 6487354.02 5229651.52 +SET 6487565.16 4878658.32 +SET 64880.82 48121.68 +SET 6488005.23 5230176.48 +SET 648804.80 390781.72 +SET 6488233.43 4879160.86 +SET 648921.76 405245.64 +SET 648983.50 369482.05 +SET 649017.93 450016.47 +SET 649054.78 383088.09 +SET 6490610.07 5232276.32 +SET 64911.60 43488.72 +SET 649123.20 212889.60 +SET 6491574.78 4881673.56 +SET 649177.04 405405.06 +SET 6491912.49 5233326.24 +SET 649232.48 212925.44 +SET 6492563.70 5233851.20 +SET 649288.71 561257.91 +SET 6492911.32 4882678.64 +SET 649362.90 383269.95 +SET 649426.58 450299.82 +SET 649451.04 212997.12 +SET 649516.96 383360.88 +SET 649558.44 488468.88 +SET 649560.32 213032.96 +SET 64959.05 43520.51 +SET 649600.60 369833.38 +SET 6496470.96 5237000.96 +SET 649685.64 414899.52 +SET 649687.60 405723.90 +SET 6496920.94 4885693.88 +SET 649710.60 561622.60 +SET 649753.50 450526.50 +SET 649778.88 213104.64 +SET 649825.08 383542.74 +SET 649888.16 213140.48 +SET 6498925.75 4887201.50 +SET 6499075.80 5239100.80 +SET 649916.96 450639.84 +SET 649979.14 383633.67 +SET 64999.08 41509.44 +SET 649997.44 213176.32 +SET 6500.65 4355.23 +SET 650012.00 370067.60 +SET 65002.11 48211.64 +SET 6500262.29 4888206.58 +SET 650080.42 450753.18 +SET 650106.72 213212.16 +SET 650132.49 561987.29 +SET 650143.38 415191.84 +SET 6501680.64 5241200.64 +SET 65020.77 48225.48 +SET 650217.70 370184.71 +SET 6502267.10 4889714.20 +SET 6502935.37 4890216.74 +SET 650295.96 415289.28 +SET 6502983.06 5242250.56 +SET 6503603.64 4890719.28 +SET 6503634.27 5242775.52 +SET 650423.40 370301.82 +SET 650441.32 383906.46 +SET 650453.44 406202.16 +SET 650553.60 391835.04 +SET 6505587.90 5244350.40 +SET 6505608.45 4892226.90 +SET 65057.08 45109.32 +SET 650570.80 451093.20 +SET 65058.09 48253.16 +SET 650652.53 451149.87 +SET 65067.42 48260.08 +SET 6506944.99 4893231.98 +SET 650708.72 406361.58 +SET 650749.44 384088.32 +SET 650753.70 415581.60 +SET 65076.75 48267.00 +SET 650871.68 213463.04 +SET 650894.98 489473.96 +SET 6508949.80 4894739.60 +SET 650903.50 384179.25 +SET 6509495.16 5247500.16 +SET 6509618.07 4895242.14 +SET 650979.45 451376.55 +SET 65101.40 43615.88 +SET 651040.50 370653.15 +SET 651058.86 415776.48 +SET 6510797.58 5248550.08 +SET 6511448.79 5249075.04 +SET 6511622.88 4896749.76 +SET 6512.10 5249.60 +SET 65121.00 52496.00 +SET 651210.00 524960.00 +SET 6512100.00 5249600.00 +SET 651224.64 451546.56 +SET 6512959.42 4897754.84 +SET 65132.73 48308.52 +SET 65138.81 45165.99 +SET 651388.10 451659.90 +SET 651398.16 563081.36 +SET 651418.08 213642.24 +SET 651428.00 392361.70 +SET 6514295.96 4898759.92 +SET 651451.90 370887.37 +SET 651469.83 451716.57 +SET 65148.85 43647.67 +SET 6514964.23 4899262.46 +SET 65151.39 48322.36 +SET 651519.74 384542.97 +SET 651551.56 451773.24 +SET 651563.25 489976.50 +SET 651633.29 451829.91 +SET 651657.60 371004.48 +SET 65167.38 38463.39 +SET 6516969.04 4900770.08 +SET 651715.02 451886.58 +SET 651745.92 213749.76 +SET 651796.75 451943.25 +SET 651827.86 384724.83 +SET 65188.71 48350.04 +SET 6518973.85 4902277.70 +SET 65196.30 43679.46 +SET 651960.21 452056.59 +SET 651964.48 213821.44 +SET 651974.34 416361.12 +SET 651981.92 384815.76 +SET 652041.94 452113.26 +SET 65206.90 37123.87 +SET 65207.37 48363.88 +SET 652123.67 452169.93 +SET 652126.92 416458.56 +SET 6522315.20 4904790.40 +SET 652241.94 563810.74 +SET 65226.03 48377.72 +SET 652287.13 452283.27 +SET 6522983.47 4905292.94 +SET 652302.40 392888.36 +SET 6523651.74 4905795.48 +SET 652368.86 452339.94 +SET 65243.75 43711.25 +SET 652432.08 416653.44 +SET 652450.59 452396.61 +SET 652480.40 371472.92 +SET 652512.42 526009.92 +SET 65254.02 48398.48 +SET 6525656.55 4907303.10 +SET 652584.66 416750.88 +SET 652614.05 452509.95 +SET 65263.35 48405.40 +SET 652695.78 452566.62 +SET 652729.44 214072.32 +SET 652739.60 393151.69 +SET 652752.22 385270.41 +SET 6527661.36 4908810.72 +SET 652777.51 452623.29 +SET 6528329.63 4909313.26 +SET 652838.72 214108.16 +SET 652859.24 452679.96 +SET 652891.80 371707.14 +SET 65291.34 48426.16 +SET 653.10 484.40 +SET 653.84 453.36 +SET 65302.27 45279.33 +SET 6530334.44 4910820.88 +SET 653057.28 214179.84 +SET 653085.72 564540.12 +SET 6531.00 4844.00 +SET 653104.43 452849.97 +SET 653186.16 452906.64 +SET 653194.98 417140.64 +SET 653267.89 452963.31 +SET 653275.84 214251.52 +SET 6533007.52 4912831.04 +SET 653303.20 371941.36 +SET 653385.12 214287.36 +SET 6534344.06 4913836.12 +SET 653522.52 385725.06 +SET 6535680.60 4914841.20 +SET 653594.81 453189.99 +SET 6536348.87 4915343.74 +SET 65365.98 48481.52 +SET 653712.96 214394.88 +SET 65375.31 48488.44 +SET 653758.27 453303.33 +SET 653772.08 408274.62 +SET 6538.40 4533.60 +SET 653805.30 417530.40 +SET 653822.24 214430.72 +SET 653840.00 453360.00 +SET 65386.10 43806.62 +SET 653920.30 372292.69 +SET 653921.73 453416.67 +SET 65393.97 48502.28 +SET 653931.52 214466.56 +SET 653957.88 417627.84 +SET 654003.46 453473.34 +SET 654027.36 408434.04 +SET 654085.19 453530.01 +SET 654110.46 417725.28 +SET 654126.00 372409.80 +SET 654150.08 214538.24 +SET 654166.92 453586.68 +SET 654236.33 491986.66 +SET 654263.04 417822.72 +SET 654282.64 408593.46 +SET 65433.55 43838.41 +SET 654330.38 453700.02 +SET 654537.92 408752.88 +SET 6545704.65 4922379.30 +SET 654575.57 453870.03 +SET 65458.72 21468.16 +SET 654587.20 214681.60 +SET 65459.28 48550.72 +SET 65468.61 48557.64 +SET 654739.03 453983.37 +SET 654755.00 386452.50 +SET 65477.94 48564.56 +SET 6548.10 4387.02 +SET 654805.76 214753.28 +SET 654820.76 454040.04 +SET 65487.27 48571.48 +SET 65490.46 49248.92 +SET 654902.49 454096.71 +SET 654904.60 492489.20 +SET 6549046.00 4924892.00 +SET 654909.06 386543.43 +SET 654925.60 394468.34 +SET 655.68 215.04 +SET 655024.32 214824.96 +SET 655117.26 528109.76 +SET 655133.60 214860.80 +SET 655147.68 454266.72 +SET 65515.26 48592.24 +SET 6551719.08 4926902.16 +SET 6552387.35 4927404.70 +SET 655331.10 418504.80 +SET 655360.20 373112.46 +SET 655371.24 386816.22 +SET 6553723.89 4928409.78 +SET 655392.87 454436.73 +SET 65547.46 45449.34 +SET 655474.60 454493.40 +SET 6555060.43 4929414.86 +SET 655525.30 386907.15 +SET 655556.33 454550.07 +SET 655565.90 373229.57 +SET 655570.72 215004.16 +SET 655572.87 492991.74 +SET 6555728.70 4929917.40 +SET 6556.80 2150.40 +SET 65561.91 48626.84 +SET 655617.06 566728.26 +SET 6556396.97 4930419.94 +SET 65568.00 21504.00 +SET 65571.24 48633.76 +SET 65575.90 43933.78 +SET 655768.47 528634.72 +SET 655771.60 373346.68 +SET 6557733.51 4931425.02 +SET 655788.84 418797.12 +SET 655800.00 394995.00 +SET 655801.52 454720.08 +SET 655833.42 387089.01 +SET 6558401.78 4931927.56 +SET 6559070.05 4932430.10 +SET 655964.98 454833.42 +SET 656007.84 215147.52 +SET 656046.71 454890.09 +SET 65606.96 40970.94 +SET 65609.40 41899.20 +SET 656094.00 418992.00 +SET 6561743.13 4934440.26 +SET 656226.40 215219.20 +SET 656237.20 395258.33 +SET 65627.22 48675.28 +SET 65629.56 38736.18 +SET 656295.60 387361.80 +SET 65636.55 48682.20 +SET 6564416.21 4936450.42 +SET 656449.66 387452.73 +SET 656455.36 455173.44 +SET 656460.84 567457.64 +SET 656537.09 455230.11 +SET 656580.16 410028.24 +SET 656603.72 387543.66 +SET 65664.54 48702.96 +SET 6566421.02 4937958.04 +SET 6567089.29 4938460.58 +SET 656757.78 387634.59 +SET 65677.28 21539.84 +SET 6568.32 4871.68 +SET 656864.01 455456.79 +SET 6569094.10 4939968.20 +SET 656945.74 455513.46 +SET 6569762.37 4940470.74 +SET 6570430.64 4940973.28 +SET 657065.90 387816.45 +SET 657111.60 395784.99 +SET 657162.06 419674.08 +SET 65718.25 44029.15 +SET 657219.96 387907.38 +SET 65729.85 48751.40 +SET 657304.62 568187.02 +SET 6573771.99 4943485.98 +SET 65739.18 48758.32 +SET 657417.20 374283.56 +SET 657467.22 419868.96 +SET 6575108.53 4944491.06 +SET 657517.85 455910.15 +SET 6575776.80 4944993.60 +SET 657599.58 455966.82 +SET 65761.98 41996.64 +SET 657619.80 419966.40 +SET 657622.90 374400.67 +SET 6576445.07 4945496.14 +SET 6577113.34 4945998.68 +SET 65776.50 48786.00 +SET 657763.04 456080.16 +SET 657828.60 374517.78 +SET 65785.83 48792.92 +SET 657856.56 410825.34 +SET 65792.65 45619.35 +SET 657924.96 420161.28 +SET 657926.50 456193.50 +SET 657986.00 396311.65 +SET 65804.49 48806.76 +SET 6580454.69 4948511.38 +SET 658077.54 420258.72 +SET 658111.84 410984.76 +SET 6581122.96 4949013.92 +SET 658144.32 388452.96 +SET 658171.69 456363.51 +SET 658193.44 215864.32 +SET 6582.40 3747.52 +SET 65823.15 48820.60 +SET 658230.12 420356.16 +SET 65824.00 37475.20 +SET 658245.95 495001.90 +SET 658253.42 456420.18 +SET 658302.72 215900.16 +SET 658367.12 411144.18 +SET 658373.31 530734.56 +SET 6583796.04 4951024.08 +SET 658382.70 420453.60 +SET 658445.70 374869.11 +SET 6584464.31 4951526.62 +SET 65851.14 48841.36 +SET 658570.29 569281.09 +SET 658606.50 388725.75 +SET 658651.40 374986.22 +SET 658739.84 216043.52 +SET 6587805.66 4954039.32 +SET 65879.13 48862.12 +SET 658825.53 456816.87 +SET 658840.44 420745.92 +SET 6588473.93 4954541.86 +SET 658877.68 411463.02 +SET 658914.22 495504.44 +SET 6589142.20 4955044.40 +SET 658992.18 569645.78 +SET 659024.52 531259.52 +SET 6590478.74 4956049.48 +SET 659068.68 388998.54 +SET 65908.05 44156.31 +SET 659132.96 411622.44 +SET 659145.60 420940.80 +SET 6591815.28 4957054.56 +SET 659234.18 457100.22 +SET 65925.78 48896.72 +SET 659297.60 397101.64 +SET 659376.80 389180.40 +SET 659388.24 411781.86 +SET 659397.64 457213.56 +SET 65944.44 48910.56 +SET 6594488.36 4959064.72 +SET 659479.37 457270.23 +SET 6595.55 4418.81 +SET 6595156.63 4959567.26 +SET 659530.86 389271.33 +SET 659561.10 457326.90 +SET 659603.34 421233.12 +SET 659614.08 216330.24 +SET 659679.90 375571.77 +SET 6597161.44 4961074.88 +SET 65972.43 48931.32 +SET 659723.36 216366.08 +SET 659724.56 457440.24 +SET 659755.92 421330.56 +SET 6597829.71 4961577.42 +SET 659806.29 457496.91 +SET 6598497.98 4962079.96 +SET 659885.60 375688.88 +SET 65991.09 48945.16 +SET 6599834.52 4963085.04 +SET 66000.42 48952.08 +SET 660051.48 457666.92 +SET 660154.08 412260.12 +SET 660160.48 216509.44 +SET 660213.66 421622.88 +SET 660257.85 570739.85 +SET 66028.41 48972.84 +SET 660326.94 532309.44 +SET 660366.24 421720.32 +SET 660378.40 457893.60 +SET 6603844.14 4966100.28 +SET 660460.13 457950.27 +SET 66047.07 48986.68 +SET 6605180.68 4967105.36 +SET 660609.28 389907.84 +SET 6606517.22 4968110.44 +SET 66067.14 42191.52 +SET 660708.40 376157.32 +SET 66075.06 49007.44 +SET 660823.98 422012.64 +SET 66091.74 39008.97 +SET 660914.10 376274.43 +SET 6609190.30 4970120.60 +SET 661032.24 458346.96 +SET 661034.72 216796.16 +SET 6610526.84 4971125.68 +SET 661101.63 571469.23 +SET 661119.80 376391.54 +SET 6611195.11 4971628.22 +SET 66117.52 41289.78 +SET 661175.20 412897.80 +SET 661195.70 458460.30 +SET 661253.28 216867.84 +SET 661281.72 422304.96 +SET 66131.04 49048.96 +SET 661359.16 458573.64 +SET 661379.58 390362.49 +SET 6614.97 4906.28 +SET 66140.37 49055.88 +SET 661440.89 458630.31 +SET 66145.30 44315.26 +SET 66149.70 49062.80 +SET 6615204.73 4974643.46 +SET 661531.20 376625.76 +SET 661533.64 390453.42 +SET 661586.88 422499.84 +SET 66159.03 49069.72 +SET 6616541.27 4975648.54 +SET 6617209.54 4976151.08 +SET 661736.90 376742.87 +SET 661767.81 458856.99 +SET 661849.54 458913.66 +SET 6618546.08 4977156.16 +SET 661908.96 217082.88 +SET 66192.75 44347.05 +SET 6619214.35 4977658.70 +SET 661931.27 458970.33 +SET 661941.04 413376.06 +SET 661942.60 376859.98 +SET 661945.41 572198.61 +SET 6619882.62 4978161.24 +SET 661995.82 390726.21 +SET 662.43 491.32 +SET 6620.13 4590.27 +SET 662044.62 422792.16 +SET 6620550.89 4978663.78 +SET 6621219.16 4979166.32 +SET 662127.52 217154.56 +SET 662148.30 376977.09 +SET 6621887.43 4979668.86 +SET 66223.68 21719.04 +SET 662255.57 498017.14 +SET 662280.57 533884.32 +SET 662346.08 217226.24 +SET 662358.00 398944.95 +SET 6624.30 4913.20 +SET 66240.20 44378.84 +SET 662503.38 459367.02 +SET 66252.33 49138.92 +SET 662559.70 377211.31 +SET 66261.66 49145.84 +SET 662765.40 377328.42 +SET 662789.19 572927.99 +SET 6627901.86 4984191.72 +SET 662830.30 459593.70 +SET 6628570.13 4984694.26 +SET 662923.84 498519.68 +SET 662962.16 414013.74 +SET 663112.68 423474.24 +SET 6631243.21 4986704.42 +SET 663176.80 377562.64 +SET 663232.40 399471.61 +SET 6633248.02 4988212.04 +SET 663417.84 423669.12 +SET 663438.88 217584.64 +SET 6635252.83 4989719.66 +SET 663536.42 391635.51 +SET 663632.97 573657.37 +SET 66364.76 46016.04 +SET 663647.60 460160.40 +SET 663657.44 217656.32 +SET 66372.30 42386.40 +SET 6637257.64 4991227.28 +SET 663729.33 460217.07 +SET 66373.62 49228.88 +SET 66382.55 44474.21 +SET 66382.95 49235.80 +SET 663875.58 423961.44 +SET 663892.79 460330.41 +SET 66392.28 49242.72 +SET 663983.28 414651.42 +SET 663985.28 217763.84 +SET 66399.86 39190.83 +SET 663998.60 391908.30 +SET 663999.60 378031.08 +SET 6640598.99 4993739.98 +SET 664106.80 399998.27 +SET 6642.96 4927.04 +SET 664203.84 217835.52 +SET 664205.30 378148.19 +SET 66423.42 53545.92 +SET 664238.56 414810.84 +SET 66430.00 44506.00 +SET 664383.17 460670.43 +SET 6643940.34 4996252.68 +SET 66442.24 21790.72 +SET 66446.49 46072.71 +SET 664460.78 392181.09 +SET 664464.90 460727.10 +SET 66448.26 49284.24 +SET 664485.90 424351.20 +SET 664493.84 414970.26 +SET 664531.68 217943.04 +SET 664546.63 460783.77 +SET 6645945.15 4997760.30 +SET 664616.70 378382.41 +SET 6647281.69 4998765.38 +SET 66477.45 44537.79 +SET 664859.52 218050.56 +SET 664873.55 461010.45 +SET 664885.41 535984.16 +SET 664928.65 500027.30 +SET 664955.28 461067.12 +SET 665004.40 415289.10 +SET 665118.74 461180.46 +SET 66513.57 49332.68 +SET 665187.36 218158.08 +SET 66522.90 49339.60 +SET 665233.80 378733.74 +SET 66524.88 42483.84 +SET 665248.80 424838.40 +SET 6652627.85 5002785.70 +SET 66528.22 46129.38 +SET 665401.38 424935.84 +SET 665439.50 378850.85 +SET 66550.89 49360.36 +SET 66551.52 21826.56 +SET 665515.20 218265.60 +SET 66553.92 39281.76 +SET 665539.20 392817.60 +SET 665553.96 425033.28 +SET 665609.12 461520.48 +SET 665624.48 218301.44 +SET 6656637.47 5005800.94 +SET 66569.55 49374.20 +SET 665733.76 218337.28 +SET 665742.42 575480.82 +SET 665772.58 461633.82 +SET 665850.90 379085.07 +SET 665855.60 401051.59 +SET 665952.32 218408.96 +SET 666025.52 415926.78 +SET 666056.60 379202.18 +SET 666099.50 461860.50 +SET 666170.88 218480.64 +SET 666181.23 461917.17 +SET 66625.53 49415.72 +SET 666265.19 501032.38 +SET 666280.80 416086.20 +SET 66634.86 49422.64 +SET 666344.69 462030.51 +SET 666389.44 218552.32 +SET 66644.19 49429.56 +SET 66646.80 37943.64 +SET 6664656.71 5011831.42 +SET 666608.00 218624.00 +SET 666622.02 425715.36 +SET 66667.25 44664.95 +SET 666717.28 218659.84 +SET 66672.18 49450.32 +SET 666771.68 393545.04 +SET 666774.60 425812.80 +SET 666791.36 416405.04 +SET 6668666.33 5014846.66 +SET 66690.84 49464.16 +SET 66691.68 46242.72 +SET 666916.80 462427.20 +SET 6670.95 4947.80 +SET 667008.09 576574.89 +SET 667046.64 416564.46 +SET 66707.98 39372.69 +SET 667079.80 393726.90 +SET 667080.26 462540.54 +SET 667085.10 379787.73 +SET 667154.40 218803.20 +SET 667161.99 462597.21 +SET 6672675.95 5017861.90 +SET 667325.45 462710.55 +SET 667488.91 462823.89 +SET 667537.50 426300.00 +SET 667541.98 393999.69 +SET 66756.15 49512.60 +SET 667591.52 218946.56 +SET 6676017.30 5020374.60 +SET 66765.48 49519.52 +SET 667696.04 394090.62 +SET 66770.08 21898.24 +SET 66773.41 46299.39 +SET 667734.10 462993.90 +SET 66774.81 49526.44 +SET 667812.48 417042.72 +SET 667815.83 463050.57 +SET 66784.14 49533.36 +SET 667842.66 426494.88 +SET 667907.90 380256.17 +SET 667979.29 463163.91 +SET 667995.24 426592.32 +SET 6680026.92 5023389.84 +SET 668004.16 394272.48 +SET 66802.80 49547.20 +SET 668028.64 219089.92 +SET 668067.76 417202.14 +SET 6680695.19 5023892.38 +SET 668113.60 380373.28 +SET 668142.75 463277.25 +SET 6682.70 5025.40 +SET 66821.46 49561.04 +SET 668224.48 463333.92 +SET 668300.40 426787.20 +SET 66840.12 49574.88 +SET 668452.98 426884.64 +SET 668525.00 380607.50 +SET 668575.04 219269.12 +SET 66858.78 49588.72 +SET 66862.04 39463.62 +SET 668620.40 394636.20 +SET 668633.13 463617.27 +SET 668695.65 578033.65 +SET 668774.46 394727.13 +SET 668792.67 539133.92 +SET 668902.88 219376.64 +SET 668928.52 394818.06 +SET 668936.40 380841.72 +SET 66896.10 49616.40 +SET 668960.05 463843.95 +SET 66904.50 44823.90 +SET 66905.43 49623.32 +SET 669117.54 578398.34 +SET 669142.10 380958.83 +SET 669230.72 219484.16 +SET 669286.97 464070.63 +SET 669344.16 417999.24 +SET 669353.20 403158.23 +SET 669449.28 219555.84 +SET 66951.95 44855.69 +SET 66952.08 49657.92 +SET 669544.76 395181.78 +SET 669613.89 464297.31 +SET 669667.84 219627.52 +SET 669673.62 427664.16 +SET 669698.82 395272.71 +SET 66970.74 49671.76 +SET 669759.20 381310.16 +SET 669826.20 427761.60 +SET 669859.08 464467.32 +SET 66988.64 21969.92 +SET 669995.68 219735.04 +SET 670186.00 464694.00 +SET 67026.72 49713.28 +SET 670274.81 504047.62 +SET 670283.94 428053.92 +SET 670323.52 219842.56 +SET 670349.46 464807.34 +SET 67036.05 49720.20 +SET 670376.30 381661.49 +SET 670383.21 579492.41 +SET 670431.19 464864.01 +SET 670432.80 219878.40 +SET 67046.85 44919.27 +SET 670469.12 395727.36 +SET 670512.92 464920.68 +SET 67058.20 38177.86 +SET 670589.10 428248.80 +SET 670594.65 464977.35 +SET 670620.56 418796.34 +SET 670623.18 395818.29 +SET 670664.80 403948.22 +SET 670741.68 428346.24 +SET 670758.11 465090.69 +SET 670760.64 219985.92 +SET 670777.24 395909.22 +SET 670839.84 465147.36 +SET 67101.36 49768.64 +SET 671085.36 396091.08 +SET 671102.00 404211.55 +SET 671199.10 382129.93 +SET 671199.42 428638.56 +SET 67120.02 49782.48 +SET 671248.49 465430.71 +SET 671404.80 382247.04 +SET 67141.75 44982.85 +SET 671504.58 428833.44 +SET 671525.60 220236.80 +SET 671547.54 396363.87 +SET 671575.41 465657.39 +SET 671634.88 220272.64 +SET 671641.68 419434.02 +SET 671657.14 465714.06 +SET 6717.60 4982.40 +SET 67170.16 39645.48 +SET 671701.60 396454.80 +SET 671809.74 429028.32 +SET 671853.44 220344.32 +SET 671855.66 396545.73 +SET 671902.33 465884.07 +SET 671962.32 429125.76 +SET 671962.72 220380.16 +SET 671984.06 465940.74 +SET 672009.72 396636.66 +SET 672021.90 382598.37 +SET 672065.79 465997.41 +SET 67207.20 22041.60 +SET 672072.00 220416.00 +SET 67213.32 49851.68 +SET 672163.78 396727.59 +SET 672229.25 466110.75 +SET 672279.62 505555.24 +SET 672317.84 396818.52 +SET 672399.84 220523.52 +SET 672420.06 429418.08 +SET 672492.66 581315.86 +SET 67250.64 49879.36 +SET 672509.12 220559.36 +SET 67259.97 49886.28 +SET 672625.96 397000.38 +SET 67263.90 38294.97 +SET 672637.90 466394.10 +SET 672639.00 382949.70 +SET 672662.80 420071.70 +SET 67269.30 49893.20 +SET 672725.22 429612.96 +SET 672727.68 220631.04 +SET 672780.02 397091.31 +SET 67284.10 45078.22 +SET 672844.70 383066.81 +SET 672850.80 405264.87 +SET 67287.78 42971.04 +SET 67287.96 49907.04 +SET 672877.80 429710.40 +SET 672883.09 466564.11 +SET 672918.08 420231.12 +SET 672934.08 397182.24 +SET 672946.24 220702.72 +SET 673030.38 429807.84 +SET 673050.40 383183.92 +SET 67306.62 49920.88 +SET 673088.14 397273.17 +SET 673128.28 466734.12 +SET 67315.95 49927.80 +SET 673242.20 397364.10 +SET 673373.47 466904.13 +SET 673428.64 420549.96 +SET 673455.20 466960.80 +SET 673488.12 430100.16 +SET 673492.64 220881.92 +SET 673536.93 467017.47 +SET 673550.32 397545.96 +SET 673601.92 220917.76 +SET 673618.66 467074.14 +SET 67362.60 49962.40 +SET 673640.70 430197.60 +SET 673700.39 467130.81 +SET 673793.28 430295.04 +SET 673820.48 220989.44 +SET 673873.20 383652.36 +SET 673945.86 430392.48 +SET 674039.04 221061.12 +SET 674109.04 467414.16 +SET 674148.32 221096.96 +SET 674166.56 397909.68 +SET 674180.22 582774.62 +SET 674194.48 421028.22 +SET 67427.25 46752.75 +SET 674284.43 507062.86 +SET 674354.23 467584.17 +SET 67437.24 50017.76 +SET 67440.36 43068.48 +SET 674474.68 398091.54 +SET 674490.30 384003.69 +SET 67455.90 50031.60 +SET 674556.18 430782.24 +SET 674585.44 221240.32 +SET 674599.60 406318.19 +SET 674628.74 398182.47 +SET 67469.60 38412.08 +SET 674694.72 221276.16 +SET 674708.76 430879.68 +SET 67473.90 45205.38 +SET 67478.28 39827.34 +SET 674782.80 398273.40 +SET 67483.89 50052.36 +SET 674861.34 430977.12 +SET 674901.70 384237.91 +SET 674913.28 221347.84 +SET 67495.27 50756.54 +SET 675013.92 431074.56 +SET 67502.55 50066.20 +SET 675022.56 221383.68 +SET 675024.00 583504.00 +SET 675036.80 406581.52 +SET 67508.98 46809.42 +SET 675089.80 468094.20 +SET 675107.40 384355.02 +SET 675166.50 431172.00 +SET 67521.21 50080.04 +SET 675215.60 421665.90 +SET 675253.26 468207.54 +SET 67530.54 50086.96 +SET 67535.04 22149.12 +SET 67539.87 50093.88 +SET 675416.72 468320.88 +SET 675459.68 221527.04 +SET 675553.10 398728.05 +SET 67558.53 50107.72 +SET 675661.91 468490.89 +SET 67567.86 50114.64 +SET 675707.16 398818.98 +SET 675776.82 431561.76 +SET 675787.52 221634.56 +SET 67586.52 50128.48 +SET 675907.10 468660.90 +SET 675930.20 384823.46 +SET 675988.83 468717.57 +SET 676006.08 221706.24 +SET 67605.18 50142.32 +SET 676081.98 431756.64 +SET 676152.29 468830.91 +SET 676234.56 431854.08 +SET 676236.72 422303.58 +SET 676289.24 508570.48 +SET 676289.67 584598.07 +SET 676315.75 468944.25 +SET 67632.34 39918.27 +SET 67633.17 50163.08 +SET 676341.60 385057.68 +SET 676397.48 469000.92 +SET 67642.50 50170.00 +SET 676443.20 221849.60 +SET 676479.21 469057.59 +SET 67651.83 50176.92 +SET 676692.30 432146.40 +SET 67670.49 50190.76 +SET 67672.44 46922.76 +SET 676724.40 469227.60 +SET 67675.30 38529.19 +SET 676753.00 385291.90 +SET 676771.04 221957.12 +SET 676785.60 407634.84 +SET 676844.88 432243.84 +SET 676880.32 221992.96 +SET 676939.64 399546.42 +SET 676957.51 509073.02 +SET 676997.46 432341.28 +SET 677051.32 469454.28 +SET 677098.88 222064.64 +SET 67711.15 45364.33 +SET 677133.45 585327.45 +SET 677208.16 222100.48 +SET 677247.76 399728.28 +SET 677302.62 432536.16 +SET 677317.44 222136.32 +SET 677370.10 385643.23 +SET 677426.72 222172.16 +SET 677459.97 469737.63 +SET 677536.00 222208.00 +SET 67754.46 50253.04 +SET 677555.88 399910.14 +SET 67758.60 45396.12 +SET 67766.00 40816.15 +SET 677705.16 469907.64 +SET 677754.56 222279.68 +SET 677768.40 423260.10 +SET 677781.50 385877.45 +SET 677786.89 469964.31 +SET 6778.64 4000.92 +SET 67786.40 40009.20 +SET 677868.62 470020.98 +SET 677909.61 546483.36 +SET 67791.78 50280.72 +SET 677977.23 586056.83 +SET 678032.08 470134.32 +SET 678065.52 433023.36 +SET 678113.81 470190.99 +SET 678191.68 222423.04 +SET 678192.90 386111.67 +SET 678277.27 470304.33 +SET 678278.96 423578.94 +SET 67829.10 50308.40 +SET 67835.90 47036.10 +SET 67838.43 50315.32 +SET 678480.24 400455.72 +SET 6785.35 4545.97 +SET 678522.46 470474.34 +SET 678675.84 433413.12 +SET 67875.75 50343.00 +SET 678821.01 586786.21 +SET 678847.36 222638.08 +SET 678931.11 470757.69 +SET 67894.41 50356.84 +SET 678956.64 222673.92 +SET 678971.60 408951.49 +SET 67898.10 43360.80 +SET 67904.48 42405.72 +SET 679044.80 424057.20 +SET 679133.58 433705.44 +SET 679212.03 547533.28 +SET 67922.40 50377.60 +SET 679221.40 386697.22 +SET 679284.48 222781.44 +SET 679286.16 433802.88 +SET 67931.73 50384.52 +SET 67940.46 40100.13 +SET 679408.80 409214.82 +SET 67941.06 50391.44 +SET 679438.74 433900.32 +SET 67950.39 50398.36 +SET 679555.36 424376.04 +SET 679584.95 471211.05 +SET 67959.72 50405.28 +SET 679630.59 511083.18 +SET 679632.80 386931.44 +SET 679666.68 471267.72 +SET 679712.72 401183.16 +SET 67972.16 22292.48 +SET 679748.41 471324.39 +SET 679830.14 471381.06 +SET 679830.88 222960.64 +SET 679838.50 387048.55 +SET 679866.78 401274.09 +SET 67987.71 50426.04 +SET 679896.48 434192.64 +SET 67995.85 45555.07 +SET 679993.60 471494.40 +SET 680049.06 434290.08 +SET 680086.68 587880.28 +SET 680158.72 223068.16 +SET 680174.90 401455.95 +SET 680320.52 471721.08 +SET 680508.57 588244.97 +SET 680565.71 471891.09 +SET 680595.84 223211.52 +SET 680637.08 401728.74 +SET 680647.44 471947.76 +SET 68071.68 50488.32 +SET 680791.14 401819.67 +SET 68081.01 50495.24 +SET 68081.44 22328.32 +SET 680814.40 223283.20 +SET 680867.00 387634.10 +SET 680930.46 588609.66 +SET 68094.52 40191.06 +SET 680967.13 512088.26 +SET 68099.67 50509.08 +SET 6810.90 5051.60 +SET 681056.09 472231.11 +SET 681087.04 425332.56 +SET 681117.12 434972.16 +SET 681137.82 472287.78 +SET 681142.24 223390.72 +SET 681269.70 435069.60 +SET 68127.66 50529.84 +SET 681278.40 387868.32 +SET 681301.28 472401.12 +SET 68136.99 50536.76 +SET 68138.20 45650.44 +SET 681422.28 435167.04 +SET 68146.32 50543.68 +SET 681464.74 472514.46 +SET 68155.65 50550.60 +SET 681561.44 402274.32 +SET 681574.86 435264.48 +SET 681579.36 223534.08 +SET 681597.60 425651.40 +SET 681628.20 472627.80 +SET 68163.54 51259.08 +SET 68164.98 50557.52 +SET 681689.80 388102.54 +SET 681715.50 402365.25 +SET 68174.31 50564.44 +SET 681774.24 589339.04 +SET 681797.92 223605.76 +SET 681873.39 472797.81 +SET 681880.02 435459.36 +SET 681955.12 472854.48 +SET 682032.60 435556.80 +SET 682036.85 472911.15 +SET 682108.16 425970.24 +SET 682118.58 472967.82 +SET 682185.18 435654.24 +SET 682282.04 473081.16 +SET 682306.90 388453.87 +SET 68233.10 45714.02 +SET 682331.74 402728.97 +SET 682344.32 223784.96 +SET 682469.20 411058.13 +SET 682527.23 473251.17 +SET 682562.88 223856.64 +SET 682618.72 426289.08 +SET 682672.16 223892.48 +SET 68280.55 45745.81 +SET 68286.27 50647.48 +SET 6829.56 5065.44 +SET 682906.40 411321.46 +SET 682924.00 388805.20 +SET 683017.61 473591.19 +SET 683102.04 403183.62 +SET 683109.28 224035.84 +SET 683181.07 473704.53 +SET 683218.56 224071.68 +SET 683253.24 436336.32 +SET 683327.84 224107.52 +SET 683343.60 411584.79 +SET 683344.53 473817.87 +SET 683405.82 436433.76 +SET 683410.16 403365.48 +SET 683461.80 590797.80 +SET 683541.10 389156.53 +SET 68355.84 43653.12 +SET 683558.40 436531.20 +SET 683564.22 403456.41 +SET 68360.91 50702.84 +SET 683671.45 474044.55 +SET 683710.98 436628.64 +SET 68377.05 55120.80 +SET 68379.57 50716.68 +SET 683863.56 436726.08 +SET 683872.34 403638.27 +SET 683874.24 224286.72 +SET 68388.90 50723.60 +SET 683998.37 474271.23 +SET 68402.64 40372.92 +SET 684026.40 403729.20 +SET 684080.10 474327.90 +SET 68415.04 42724.56 +SET 684158.20 389507.86 +SET 684161.83 474384.57 +SET 684168.72 436920.96 +SET 684243.56 474441.24 +SET 684305.58 591527.18 +SET 684321.30 437018.40 +SET 68435.55 50758.20 +SET 684405.68 427405.02 +SET 684407.02 474554.58 +SET 684420.64 224465.92 +SET 68444.88 50765.12 +SET 684488.75 474611.25 +SET 684529.92 224501.76 +SET 68454.21 50772.04 +SET 684639.20 224537.60 +SET 684727.47 591891.87 +SET 684733.94 474781.26 +SET 684748.48 224573.44 +SET 684779.04 437310.72 +SET 6848.22 5079.28 +SET 68482.20 50792.80 +SET 684857.76 224609.28 +SET 68489.74 47489.46 +SET 684897.40 474894.60 +SET 684916.24 427723.86 +SET 684931.62 437408.16 +SET 68498.10 38997.63 +SET 684981.00 389976.30 +SET 685072.92 552257.92 +SET 685084.20 437505.60 +SET 685092.40 412638.11 +SET 685104.82 404365.71 +SET 685142.59 475064.61 +SET 685149.36 592256.56 +SET 68518.56 22471.68 +SET 68519.52 50820.48 +SET 685392.40 390210.52 +SET 685404.16 224788.48 +SET 685412.94 404547.57 +SET 685469.51 475291.29 +SET 685513.44 224824.32 +SET 685541.94 437797.92 +SET 68556.70 40463.85 +SET 68556.84 50848.16 +SET 685567.00 404638.50 +SET 685632.97 475404.63 +SET 685682.08 428202.12 +SET 6857.55 5086.20 +SET 685796.43 475517.97 +SET 685803.80 390444.74 +SET 685847.10 437992.80 +SET 68594.16 50875.84 +SET 685966.80 413164.77 +SET 685993.14 592985.94 +SET 686059.84 225003.52 +SET 68612.82 50889.68 +SET 686152.26 438187.68 +SET 68627.84 22507.52 +SET 686278.40 225075.20 +SET 686286.81 475857.99 +SET 686337.30 405093.15 +SET 686368.54 475914.66 +SET 686404.00 413428.10 +SET 686420.90 390796.07 +SET 686447.92 428680.38 +SET 686450.27 475971.33 +SET 686457.42 438382.56 +SET 68653.20 47602.80 +SET 686606.24 225182.72 +SET 68670.32 42883.98 +SET 686703.20 428839.80 +SET 686777.19 476198.01 +SET 686799.48 405365.94 +SET 686824.80 225254.40 +SET 686858.92 476254.68 +SET 68687.46 50945.04 +SET 686915.16 438674.88 +SET 686953.54 405456.87 +SET 68696.79 50951.96 +SET 687026.55 553832.80 +SET 687038.00 391147.40 +SET 687067.74 438772.32 +SET 68707.60 46031.92 +SET 68710.76 40554.78 +SET 687107.60 405547.80 +SET 687152.64 225361.92 +SET 687185.84 476481.36 +SET 68724.78 50972.72 +SET 687267.57 476538.03 +SET 687278.40 413954.76 +SET 68734.93 47659.47 +SET 687349.30 476594.70 +SET 687431.03 476651.37 +SET 687469.04 429318.06 +SET 687525.48 439064.64 +SET 68755.05 46063.71 +SET 687594.49 476764.71 +SET 6876.21 5100.04 +SET 687678.06 439162.08 +SET 687830.64 439259.52 +SET 687839.68 476934.72 +SET 687860.80 391615.84 +SET 687877.90 406002.45 +SET 687917.60 225612.80 +SET 687921.41 476991.39 +SET 688003.14 477048.06 +SET 688026.88 225648.64 +SET 688084.87 477104.73 +SET 688135.80 439454.40 +SET 68816.66 47716.14 +SET 68818.08 51041.92 +SET 688186.02 406184.31 +SET 688245.44 225720.32 +SET 68827.41 51048.84 +SET 688318.10 517616.20 +SET 688340.08 406275.24 +SET 688354.72 225756.16 +SET 68836.74 51055.76 +SET 6884.64 2257.92 +SET 688411.79 477331.41 +SET 688464.00 225792.00 +SET 688477.90 391967.17 +SET 688590.00 414744.75 +SET 68864.82 40645.71 +SET 688648.20 406457.10 +SET 688682.56 225863.68 +SET 688738.71 477558.09 +SET 68874.06 51083.44 +SET 688745.44 430115.16 +SET 688802.26 406548.03 +SET 688898.70 439941.60 +SET 688902.17 477671.43 +SET 688956.32 406638.96 +SET 68898.39 47772.81 +SET 689000.72 430274.58 +SET 68909.50 39231.85 +SET 689095.00 392318.50 +SET 689110.38 406729.89 +SET 689119.68 226007.04 +SET 689147.36 477841.44 +SET 6892.56 4304.34 +SET 68920.71 51118.04 +SET 689203.86 440136.48 +SET 689256.00 430434.00 +SET 689310.82 477954.78 +SET 689338.24 226078.72 +SET 689447.52 226114.56 +SET 689556.01 478124.79 +SET 689556.80 226150.40 +SET 689766.56 430752.84 +SET 68980.12 47829.48 +SET 689801.20 478294.80 +SET 689814.18 440526.24 +SET 689901.60 415534.74 +SET 68992.30 46222.66 +SET 68995.35 51173.40 +SET 689964.66 478408.14 +SET 689966.76 440623.68 +SET 689993.92 226293.76 +SET 690021.84 430912.26 +SET 69018.88 40736.64 +SET 690188.80 407366.40 +SET 690209.85 478578.15 +SET 69028.26 55645.76 +SET 690322.91 519123.82 +SET 690329.20 393021.16 +SET 690373.31 478691.49 +SET 6904.20 5120.80 +SET 690431.04 226437.12 +SET 690455.04 478748.16 +SET 690496.92 407548.26 +SET 690534.90 393138.27 +SET 690536.77 478804.83 +SET 690633.93 596997.53 +SET 690649.60 226508.80 +SET 69069.99 51228.76 +SET 69077.60 41606.14 +SET 690776.00 416061.40 +SET 690781.96 478974.84 +SET 690787.68 431390.52 +SET 69079.32 51235.68 +SET 690868.16 226580.48 +SET 69087.20 46286.24 +SET 690882.24 441208.32 +SET 690933.81 556982.56 +SET 69097.98 51249.52 +SET 691034.82 441305.76 +SET 691042.96 431549.94 +SET 691055.82 597362.22 +SET 691152.00 393489.60 +SET 69116.64 51263.36 +SET 691190.61 479258.19 +SET 691196.00 226688.00 +SET 691272.34 479314.86 +SET 691305.28 226723.84 +SET 69135.30 51277.20 +SET 691414.56 226759.68 +SET 691421.28 408093.84 +SET 69143.58 47942.82 +SET 691435.80 479428.20 +SET 69153.96 51291.04 +SET 69180.88 43202.82 +SET 69181.95 51311.80 +SET 691844.45 479711.55 +SET 691851.68 226903.04 +SET 691883.46 408366.63 +SET 69191.28 51318.72 +SET 691974.80 393958.04 +SET 692007.91 479824.89 +SET 692064.08 432187.62 +SET 69209.94 51332.56 +SET 692179.52 227010.56 +SET 69219.27 51339.48 +SET 692236.23 558032.48 +SET 69225.31 47999.49 +SET 69229.55 46381.61 +SET 692319.36 432347.04 +SET 692321.49 598456.29 +SET 692327.72 520631.44 +SET 69237.93 51353.32 +SET 692416.56 480108.24 +SET 692507.36 227118.08 +SET 692580.02 480221.58 +SET 692591.90 394309.37 +SET 692616.64 227153.92 +SET 692653.76 408821.28 +SET 6927.70 4641.34 +SET 692743.38 598820.98 +SET 692825.21 480391.59 +SET 692829.92 432665.88 +SET 692887.44 558557.44 +SET 692944.48 227261.44 +SET 692961.88 409003.14 +SET 692962.00 417378.05 +SET 692995.99 521133.98 +SET 693003.30 394543.59 +SET 69307.04 48056.16 +SET 693115.94 409094.07 +SET 693163.04 227333.12 +SET 693170.94 442669.92 +SET 6932.19 5141.56 +SET 69320.90 39466.07 +SET 693209.00 394660.70 +SET 69324.45 46445.19 +SET 693270.00 409185.00 +SET 693315.59 480731.61 +SET 693397.32 480788.28 +SET 69349.89 51436.36 +SET 693490.88 227440.64 +SET 693560.78 480901.62 +SET 693587.16 599550.36 +SET 69359.22 51443.28 +SET 69368.55 51450.20 +SET 693709.44 227512.32 +SET 693781.26 443059.68 +SET 693805.97 481071.63 +SET 693818.72 227548.16 +SET 69387.21 51464.04 +SET 693887.70 481128.30 +SET 69396.54 51470.96 +SET 693969.43 481184.97 +SET 694031.80 395129.14 +SET 694040.30 409639.65 +SET 694132.89 481298.31 +SET 694146.56 227655.68 +SET 69415.20 51484.80 +SET 694214.62 481354.98 +SET 69423.90 44335.20 +SET 694237.50 395246.25 +SET 69424.53 51491.72 +SET 694255.84 227691.52 +SET 694296.35 481411.65 +SET 694332.53 522139.06 +SET 69436.16 43362.24 +SET 694365.12 227727.36 +SET 69443.19 51505.56 +SET 694692.96 227834.88 +SET 6947.05 4816.95 +SET 694705.00 481695.00 +SET 694710.80 418431.37 +SET 694786.73 481751.67 +SET 69480.51 51533.24 +SET 694849.32 443741.76 +SET 694854.60 395597.58 +SET 694911.52 227906.56 +SET 694950.19 481865.01 +SET 69500.08 52264.16 +SET 69502.08 22794.24 +SET 695060.30 395714.69 +SET 695118.72 410276.16 +SET 695127.44 434100.66 +SET 69514.25 46572.35 +SET 695148.00 418694.70 +SET 695239.36 228014.08 +SET 69526.60 39583.18 +SET 69527.16 51567.84 +SET 695272.78 410367.09 +SET 695348.64 228049.92 +SET 695358.84 482148.36 +SET 695426.84 410458.02 +SET 695440.57 482205.03 +SET 69545.82 51581.68 +SET 695457.92 228085.76 +SET 695459.64 444131.52 +SET 695471.70 395948.91 +SET 695492.28 560657.28 +SET 695522.30 482261.70 +SET 69555.15 51588.60 +SET 695585.20 418958.03 +SET 695604.03 482318.37 +SET 69561.70 46604.14 +SET 695612.22 444228.96 +SET 695676.48 228157.44 +SET 695677.40 396066.02 +SET 695685.76 482375.04 +SET 695696.61 601373.81 +SET 69573.81 51602.44 +SET 695883.10 396183.13 +SET 695917.38 444423.84 +SET 6960.18 5162.32 +SET 696012.68 482601.72 +SET 696088.80 396300.24 +SET 69609.15 46635.93 +SET 696094.41 482658.39 +SET 696222.88 228336.64 +SET 69629.79 51643.96 +SET 69633.96 48282.84 +SET 696337.34 523646.68 +SET 69635.12 41100.36 +SET 696459.60 419484.69 +SET 69648.45 51657.80 +SET 696505.26 411094.53 +SET 696540.39 602103.19 +SET 69657.78 51664.72 +SET 696660.00 228480.00 +SET 696680.28 444911.04 +SET 696748.25 483111.75 +SET 69679.47 56170.72 +SET 696794.70 561707.20 +SET 696896.80 419748.02 +SET 696911.60 396768.68 +SET 696962.28 602467.88 +SET 696987.84 228587.52 +SET 69704.05 46699.51 +SET 697075.17 483338.43 +SET 697121.50 411458.25 +SET 69713.76 51706.24 +SET 697156.90 483395.10 +SET 69723.09 51713.16 +SET 697315.68 228695.04 +SET 69732.42 51720.08 +SET 697334.00 420011.35 +SET 697384.17 602832.57 +SET 6975.15 4673.13 +SET 697534.24 228766.72 +SET 697595.76 445495.68 +SET 69769.74 51747.76 +SET 697734.40 397237.12 +SET 697806.06 603197.26 +SET 69789.18 41191.29 +SET 697971.36 228910.08 +SET 69816.39 51782.36 +SET 698208.40 420538.01 +SET 698227.95 603561.95 +SET 69825.72 51789.28 +SET 69835.05 51796.20 +SET 698382.85 484245.15 +SET 698508.04 412276.62 +SET 698511.24 446080.32 +SET 698517.76 229089.28 +SET 69853.71 51810.04 +SET 698557.20 397705.56 +SET 698627.04 229125.12 +SET 698748.33 563282.08 +SET 698762.90 397822.67 +SET 69879.15 48452.85 +SET 6988.17 5183.08 +SET 698956.64 436491.96 +SET 698968.60 397939.78 +SET 698968.98 446372.64 +SET 699082.80 421064.67 +SET 699118.42 484755.18 +SET 699121.56 446470.08 +SET 699281.88 484868.52 +SET 6993.80 3981.74 +SET 69938.00 39817.40 +SET 699380.00 398174.00 +SET 699399.54 563807.04 +SET 699467.20 436810.80 +SET 69947.01 51879.24 +SET 699579.30 446762.40 +SET 699610.56 229447.68 +SET 69965.67 51893.08 +SET 699690.53 485151.87 +SET 6997.50 5190.00 +SET 699722.48 436970.22 +SET 69975.00 51900.00 +SET 699791.40 398408.22 +SET 699829.12 229519.36 +SET 69984.33 51906.92 +SET 699853.99 485265.21 +SET 699884.46 446957.28 +SET 699938.40 229555.20 +SET 699957.20 421591.33 +SET 699997.10 398525.33 +SET 700017.45 485378.55 +SET 70002.99 51920.76 +SET 700050.75 564332.00 +SET 700202.80 398642.44 +SET 70021.65 51934.60 +SET 70033.74 60538.54 +SET 700342.20 447249.60 +SET 700346.96 526661.92 +SET 700375.52 229698.56 +SET 700394.40 421854.66 +SET 70048.48 22973.44 +SET 700484.80 229734.40 +SET 70049.64 51955.36 +SET 700510.82 413458.71 +SET 700594.08 229770.24 +SET 700614.20 398876.66 +SET 700647.36 447444.48 +SET 700701.96 564856.96 +SET 700759.29 605750.09 +SET 700818.94 413640.57 +SET 700921.92 229877.76 +SET 701015.23 527164.46 +SET 701025.60 399110.88 +SET 70105.62 51996.88 +SET 701127.06 413822.43 +SET 70124.28 52010.72 +SET 701257.68 447834.24 +SET 701268.80 422381.32 +SET 70131.10 46985.62 +SET 701353.17 565381.92 +SET 701359.04 230021.12 +SET 701406.86 486341.94 +SET 70142.94 52024.56 +SET 701468.32 230056.96 +SET 701509.44 438086.16 +SET 701570.32 486455.28 +SET 701577.60 230092.80 +SET 70170.93 52045.32 +SET 701715.42 448126.56 +SET 701764.72 438245.58 +SET 70178.55 47017.41 +SET 701796.16 230164.48 +SET 70180.26 52052.24 +SET 70186.80 44822.40 +SET 70189.59 52059.16 +SET 701978.97 486738.63 +SET 702054.10 399696.43 +SET 702142.43 486851.97 +SET 7022.60 4704.92 +SET 702205.48 414458.94 +SET 702259.80 399813.54 +SET 70226.00 47049.20 +SET 702305.89 486965.31 +SET 702351.77 528169.54 +SET 702359.54 414549.87 +SET 702387.62 487021.98 +SET 702446.85 607208.85 +SET 7025.49 5210.76 +SET 702551.08 487135.32 +SET 702561.12 230415.36 +SET 70264.23 52114.52 +SET 702670.40 230451.20 +SET 702779.68 230487.04 +SET 7028.78 4873.62 +SET 702876.90 400164.87 +SET 702878.00 487362.00 +SET 702936.06 448906.08 +SET 702975.78 414913.59 +SET 703041.46 487475.34 +SET 703088.64 449003.52 +SET 703283.90 415095.45 +SET 70329.54 52162.96 +SET 703326.08 230666.24 +SET 703437.96 415186.38 +SET 703450.11 487758.69 +SET 70349.40 40051.62 +SET 703531.84 487815.36 +SET 703544.64 230737.92 +SET 703546.38 449295.84 +SET 703551.68 439361.52 +SET 703613.57 487872.03 +SET 70366.86 52190.64 +SET 70369.53 48792.87 +SET 70376.19 52197.56 +SET 70376.32 23080.96 +SET 703777.03 487985.37 +SET 70385.52 52204.48 +SET 70389.20 42396.13 +SET 703900.14 415459.17 +SET 703905.40 400750.42 +SET 703981.76 230881.28 +SET 704004.12 449588.16 +SET 704022.22 488155.38 +SET 70404.18 52218.32 +SET 704091.04 230917.12 +SET 704134.41 608667.61 +SET 70415.80 47176.36 +SET 704156.70 449685.60 +SET 704185.68 488268.72 +SET 704267.41 488325.39 +SET 704309.60 230988.80 +SET 704317.52 439839.78 +SET 704329.20 424224.63 +SET 704349.14 488382.06 +SET 704362.32 415731.96 +SET 7044.15 5224.60 +SET 70450.83 52252.92 +SET 704512.60 488495.40 +SET 704516.38 415822.89 +SET 704522.50 401101.75 +SET 704528.16 231060.48 +SET 70455.63 60903.23 +SET 70457.28 43999.92 +SET 704572.80 439999.20 +SET 704594.33 488552.07 +SET 704670.44 415913.82 +SET 704676.06 488608.74 +SET 704728.20 401218.86 +SET 704746.72 231132.16 +SET 70478.82 52273.68 +SET 70485.60 23116.80 +SET 70488.15 52280.60 +SET 70491.96 45017.28 +SET 704919.60 450172.80 +SET 704978.56 416095.68 +SET 705024.85 530179.70 +SET 705132.62 416186.61 +SET 705139.60 401453.08 +SET 70516.14 52301.36 +SET 705166.44 488948.76 +SET 705183.84 231275.52 +SET 705248.17 489005.43 +SET 70525.47 52308.28 +SET 705260.43 568531.68 +SET 705286.68 416277.54 +SET 70534.80 52315.20 +SET 705377.34 450465.12 +SET 705400.08 609761.68 +SET 705511.68 231383.04 +SET 705529.92 450562.56 +SET 70559.48 41645.94 +SET 705594.80 416459.40 +SET 705640.80 425014.62 +SET 705656.82 489288.78 +SET 705693.12 530682.24 +SET 705738.55 489345.45 +SET 705756.70 401804.41 +SET 705839.52 231490.56 +SET 705849.20 440796.30 +SET 705902.92 416641.26 +SET 705948.80 231526.40 +SET 705987.66 450854.88 +SET 70600.11 52363.64 +SET 706058.08 231562.24 +SET 706104.48 440955.72 +SET 706167.36 231598.08 +SET 7062.81 5238.44 +SET 706243.86 610491.06 +SET 706373.80 402155.74 +SET 706385.92 231669.76 +SET 706392.39 489798.81 +SET 70644.54 45114.72 +SET 706495.20 231705.60 +SET 706515.20 425541.28 +SET 70653.05 47335.31 +SET 706555.85 489912.15 +SET 70656.09 52405.16 +SET 706562.85 569581.60 +SET 706597.98 451244.64 +SET 706665.75 610855.75 +SET 706719.31 490025.49 +SET 706801.04 490082.16 +SET 706882.77 490138.83 +SET 70693.41 52432.84 +SET 706932.32 231848.96 +SET 70696.45 49019.55 +SET 706964.50 490195.50 +SET 706981.34 417277.77 +SET 7070.05 4736.71 +SET 70700.50 47367.10 +SET 70704.16 23188.48 +SET 707046.23 490252.17 +SET 707087.64 611220.44 +SET 70712.07 52446.68 +SET 70712.56 44159.34 +SET 707196.60 402624.18 +SET 707208.30 451634.40 +SET 70721.40 52453.60 +SET 707291.42 490422.18 +SET 70730.73 52460.52 +SET 707402.30 402741.29 +SET 707478.72 232028.16 +SET 707588.00 232064.00 +SET 707597.58 417641.49 +SET 70760.80 40285.84 +SET 707666.04 451926.72 +SET 70768.05 52488.20 +SET 707697.28 232099.84 +SET 707751.64 417732.42 +SET 70778.18 49076.22 +SET 707813.70 402975.51 +SET 707818.62 452024.16 +SET 707826.80 426331.27 +SET 707863.53 490818.87 +SET 707891.44 442071.66 +SET 70796.04 52508.96 +SET 70797.12 45212.16 +SET 708025.12 232207.36 +SET 70805.37 52515.88 +SET 708059.76 417914.28 +SET 7081.47 5252.28 +SET 708123.78 452219.04 +SET 708134.40 232243.20 +SET 70814.70 52522.80 +SET 708213.82 418005.21 +SET 70826.40 42659.46 +SET 708264.00 426594.60 +SET 708272.18 491102.22 +SET 708276.36 452316.48 +SET 708353.31 612314.51 +SET 708367.88 418096.14 +SET 70842.69 52543.56 +SET 70842.85 47462.47 +SET 708428.94 452413.92 +SET 708462.24 232350.72 +SET 708516.48 571156.48 +SET 70852.02 52550.48 +SET 708521.94 418187.07 +SET 708599.10 491328.90 +SET 70870.68 52564.32 +SET 708762.56 491442.24 +SET 70880.01 52571.24 +SET 708844.29 491498.91 +SET 708886.68 452706.24 +SET 708926.02 491555.58 +SET 7090.80 5259.20 +SET 709138.18 418550.79 +SET 70926.66 52605.84 +SET 709292.24 418641.72 +SET 709334.67 491838.93 +SET 70937.75 47526.05 +SET 70941.64 49189.56 +SET 709416.40 491895.60 +SET 709423.12 443028.18 +SET 709445.76 232673.28 +SET 70945.32 52619.68 +SET 709497.00 453096.00 +SET 709575.60 427384.59 +SET 709600.36 418823.58 +SET 709618.98 613408.58 +SET 70966.50 40402.95 +SET 709664.32 232744.96 +SET 709665.00 404029.50 +SET 709702.74 533697.48 +SET 709754.42 418914.51 +SET 709773.60 232780.80 +SET 709802.16 453290.88 +SET 709818.90 572206.40 +SET 70985.20 47557.84 +SET 70991.97 52654.28 +SET 709954.74 453388.32 +SET 709988.51 492292.29 +SET 709992.16 232852.48 +SET 710040.87 613773.27 +SET 710062.54 419096.37 +SET 710076.40 404263.72 +SET 71010.63 52668.12 +SET 710107.32 453485.76 +SET 710151.97 492405.63 +SET 710188.96 443506.44 +SET 71019.96 52675.04 +SET 710210.72 232924.16 +SET 710216.60 419187.30 +SET 710233.70 492462.30 +SET 710259.90 453583.20 +SET 7103.20 2329.60 +SET 710315.43 492518.97 +SET 71032.00 23296.00 +SET 710370.66 419278.23 +SET 71038.62 52688.88 +SET 710397.16 492575.64 +SET 710412.48 453680.64 +SET 710444.24 443665.86 +SET 710462.76 614137.96 +SET 710538.56 233031.68 +SET 710560.62 492688.98 +SET 710642.35 492745.65 +SET 710647.84 233067.52 +SET 71080.10 47621.42 +SET 710805.81 492858.99 +SET 710870.22 453972.96 +SET 71094.60 52730.40 +SET 71103.93 52737.32 +SET 711039.28 534702.56 +SET 711051.00 493029.00 +SET 711084.96 233210.88 +SET 711132.73 493085.67 +SET 711175.38 454167.84 +SET 71127.55 47653.21 +SET 711310.60 404966.38 +SET 711377.92 493255.68 +SET 711412.80 233318.40 +SET 711465.36 444303.54 +SET 711516.30 405083.49 +SET 711631.36 233390.08 +SET 7117.50 4768.50 +SET 711704.84 493482.36 +SET 71172.20 40520.06 +SET 711740.64 233425.92 +SET 71175.72 42009.66 +SET 711772.53 573781.28 +SET 711911.26 420187.53 +SET 711927.70 405317.71 +SET 711938.28 454655.04 +SET 711950.03 493652.37 +SET 71197.23 52806.52 +SET 711975.92 444622.38 +SET 712031.76 493709.04 +SET 71206.56 52813.44 +SET 712113.49 493765.71 +SET 712133.40 405434.82 +SET 712177.76 233569.28 +SET 712219.38 420369.39 +SET 712373.44 420460.32 +SET 712423.74 574306.24 +SET 712440.41 493992.39 +SET 71250.56 23367.68 +SET 712505.60 233676.80 +SET 71263.60 42922.79 +SET 71268.56 49416.24 +SET 712681.56 420642.18 +SET 712685.60 494162.40 +SET 71269.90 47748.58 +SET 712701.18 455142.24 +SET 71271.87 52861.88 +SET 712741.76 445100.64 +SET 712750.50 405786.15 +SET 7128.12 5286.88 +SET 71281.20 52868.80 +SET 71290.53 52875.72 +SET 712989.68 420824.04 +SET 71299.41 61632.61 +SET 71299.86 52882.64 +SET 712997.04 445260.06 +SET 713006.34 455337.12 +SET 713044.09 536210.18 +SET 713052.00 233856.00 +SET 713074.95 574831.20 +SET 71309.19 52889.56 +SET 713094.25 494445.75 +SET 713158.92 455434.56 +SET 71327.85 52903.40 +SET 713311.50 455532.00 +SET 713379.84 233963.52 +SET 713464.08 455629.44 +SET 713489.12 233999.36 +SET 713507.60 445578.90 +SET 713510.40 429754.56 +SET 713584.63 494785.77 +SET 71359.84 23403.52 +SET 713598.40 234035.20 +SET 7137.45 5293.80 +SET 713748.09 494899.11 +SET 713769.24 455824.32 +SET 71383.83 52944.92 +SET 713911.55 495012.45 +SET 713947.60 430017.89 +SET 713984.70 406488.81 +SET 714018.16 445897.74 +SET 71411.82 52965.68 +SET 71412.25 47843.95 +SET 714222.16 421551.48 +SET 714226.98 456116.64 +SET 714254.08 234250.24 +SET 714259.77 617420.17 +SET 714273.44 446057.16 +SET 714376.22 421642.41 +SET 714380.63 537215.26 +SET 714396.10 406723.03 +SET 714472.64 234321.92 +SET 714483.66 495409.14 +SET 714528.72 446216.58 +SET 714565.39 495465.81 +SET 7146.78 5300.72 +SET 714601.80 406840.14 +SET 714684.34 421824.27 +SET 714684.72 456408.96 +SET 71469.12 23439.36 +SET 714784.00 446376.00 +SET 714807.50 406957.25 +SET 714810.58 495635.82 +SET 714837.30 456506.40 +SET 714838.40 421915.20 +SET 714892.31 495692.49 +SET 714989.88 456603.84 +SET 71513.75 49586.25 +SET 71514.45 53041.80 +SET 715218.90 407191.47 +SET 715219.23 495919.17 +SET 715295.04 456798.72 +SET 715300.58 422187.99 +SET 71542.44 53062.56 +SET 715424.60 407308.58 +SET 715464.42 496089.18 +SET 71560.02 45699.36 +SET 715630.30 407425.69 +SET 715696.40 431071.21 +SET 71578.40 23475.20 +SET 715784.00 234752.00 +SET 715805.12 447013.68 +SET 715836.00 407542.80 +SET 71598.42 53104.08 +SET 716002.56 234823.68 +SET 71602.05 47971.11 +SET 716036.53 496485.87 +SET 716041.70 407659.91 +SET 716060.40 447173.10 +SET 716199.99 496599.21 +SET 716210.52 457383.36 +SET 716221.12 234895.36 +SET 71626.41 53124.84 +SET 716331.00 577456.00 +SET 716363.10 457480.80 +SET 716369.22 619243.62 +SET 7165.44 5314.56 +SET 716515.68 457578.24 +SET 716570.96 447491.94 +SET 716608.64 496882.56 +SET 716658.80 408011.24 +SET 716668.26 457675.68 +SET 716687.12 423006.36 +SET 716690.37 496939.23 +SET 71673.06 53159.44 +SET 71677.21 49699.59 +SET 716826.24 447651.36 +SET 716864.50 408128.35 +SET 716876.80 235110.40 +SET 716935.56 497109.24 +SET 716973.42 457870.56 +SET 71700.80 43186.12 +SET 717017.29 497165.91 +SET 717053.71 539225.42 +SET 717070.20 408245.46 +SET 7171.26 4579.68 +SET 71710.38 53187.12 +SET 7172.13 6199.73 +SET 717204.64 235217.92 +SET 71721.30 61997.30 +SET 717275.90 408362.57 +SET 717278.58 458065.44 +SET 717313.92 235253.76 +SET 717344.21 497392.59 +SET 71738.37 53207.88 +SET 7174.77 5321.48 +SET 717431.16 458162.88 +SET 717445.20 432124.53 +SET 717457.42 423461.01 +SET 717507.67 497505.93 +SET 717583.74 458260.32 +SET 717592.08 448129.62 +SET 717633.42 578505.92 +SET 717634.89 620337.69 +SET 717641.76 235361.28 +SET 71766.36 53228.64 +SET 717671.13 497619.27 +SET 717751.04 235397.12 +SET 71785.02 53242.48 +SET 71789.30 40871.39 +SET 717893.00 408713.90 +SET 71794.35 53249.40 +SET 718.41 532.84 +SET 718041.48 458552.64 +SET 718056.78 620702.38 +SET 71822.34 53270.16 +SET 718243.24 498015.96 +SET 718297.44 235576.32 +SET 718304.40 408948.12 +SET 718319.60 432651.19 +SET 718324.97 498072.63 +SET 718346.64 458747.52 +SET 7184.10 5328.40 +SET 71840.67 49812.93 +SET 718406.70 498129.30 +SET 71841.00 53284.00 +SET 718488.43 498185.97 +SET 718510.10 409065.23 +SET 718516.00 235648.00 +SET 718570.16 498242.64 +SET 718651.80 458942.40 +SET 718715.80 409182.34 +SET 718733.62 498355.98 +SET 718815.35 498412.65 +SET 718868.48 448926.72 +SET 71887.65 53318.60 +SET 718900.56 621431.76 +SET 718978.81 498525.99 +SET 719058.52 540733.04 +SET 719123.76 449086.14 +SET 7192.24 4986.96 +SET 719224.00 498696.00 +SET 719280.96 235898.88 +SET 719305.73 498752.67 +SET 719332.90 409533.67 +SET 719387.46 498809.34 +SET 719414.70 459429.60 +SET 71943.63 53360.12 +SET 71946.02 42464.31 +SET 719469.19 498866.01 +SET 719499.52 235970.56 +SET 71952.96 53367.04 +SET 719567.28 459527.04 +SET 719614.26 424734.03 +SET 71962.29 53373.96 +SET 71980.95 53387.80 +SET 719872.44 459721.92 +SET 719889.60 449564.40 +SET 719950.00 409885.00 +SET 71999.61 53401.64 +SET 720045.92 236149.76 +SET 720076.44 425006.82 +SET 720123.03 499319.37 +SET 72015.52 23618.56 +SET 720166.23 622525.83 +SET 72017.76 45991.68 +SET 72018.27 53415.48 +SET 720238.26 580605.76 +SET 720264.48 236221.44 +SET 720361.40 410119.22 +SET 720482.76 460111.68 +SET 720567.10 410236.33 +SET 720592.32 236328.96 +SET 720613.41 499659.39 +SET 720635.34 460209.12 +SET 72064.92 53450.08 +SET 720655.44 450042.66 +SET 720692.68 425370.54 +SET 720776.87 499772.73 +SET 720787.92 460306.56 +SET 72085.86 49982.94 +SET 720858.60 499829.40 +SET 720889.47 581130.72 +SET 720940.50 460404.00 +SET 720978.50 410470.55 +SET 72102.24 53477.76 +SET 721029.44 236472.32 +SET 721093.08 460501.44 +SET 721103.79 499999.41 +SET 72120.90 53491.60 +SET 72124.80 23654.40 +SET 721245.66 460598.88 +SET 721267.25 500112.75 +SET 721308.92 425734.26 +SET 72138.00 43449.45 +SET 721380.00 434494.50 +SET 72139.56 53505.44 +SET 72143.19 62361.99 +SET 721430.71 500226.09 +SET 721431.90 623619.90 +SET 721466.56 236615.68 +SET 72148.89 53512.36 +SET 721512.44 500282.76 +SET 721575.84 236651.52 +SET 72158.22 53519.28 +SET 721595.60 410821.88 +SET 72167.55 53526.20 +SET 72170.34 46089.12 +SET 72171.45 48352.59 +SET 721794.40 236723.20 +SET 72186.21 53540.04 +SET 721903.68 236759.04 +SET 721921.09 500566.11 +SET 72200.70 41105.61 +SET 722012.96 236794.88 +SET 72204.87 53553.88 +SET 722084.55 500679.45 +SET 7221.42 5356.08 +SET 722212.70 411173.21 +SET 722231.52 236866.56 +SET 722248.01 500792.79 +SET 722254.40 435021.16 +SET 722275.68 624349.28 +SET 72232.86 53574.64 +SET 722329.74 500849.46 +SET 72234.08 23690.24 +SET 722340.80 236902.40 +SET 722387.34 426370.77 +SET 722442.40 451158.60 +SET 722450.08 236938.24 +SET 722466.30 461378.40 +SET 722493.20 500962.80 +SET 722541.40 426461.70 +SET 722559.36 236974.08 +SET 722656.66 501076.14 +SET 722668.64 237009.92 +SET 722691.60 435284.49 +SET 722697.57 624713.97 +SET 722771.46 461573.28 +SET 722820.12 501189.48 +SET 72284.31 58270.56 +SET 722843.10 582705.60 +SET 722924.04 461670.72 +SET 72298.17 53623.08 +SET 722983.58 501302.82 +SET 7230.75 5363.00 +SET 723003.58 426734.49 +SET 723035.50 411641.65 +SET 723068.14 543748.28 +SET 723119.46 625078.66 +SET 723157.64 426825.42 +SET 72322.92 46186.56 +SET 723228.77 501472.83 +SET 723310.50 501529.50 +SET 723381.78 461963.04 +SET 723392.23 501586.17 +SET 72344.82 53657.68 +SET 723446.90 411875.87 +SET 723463.52 451796.28 +SET 723465.76 427007.28 +SET 723494.31 583230.56 +SET 723542.88 237296.64 +SET 723555.69 501699.51 +SET 723566.00 435811.15 +SET 72363.48 53671.52 +SET 723773.88 427189.14 +SET 723882.61 501926.19 +SET 723927.94 427280.07 +SET 723974.08 452115.12 +SET 723992.10 462352.80 +SET 72406.40 41222.72 +SET 72408.20 42737.10 +SET 72410.13 53706.12 +SET 724127.80 502096.20 +SET 724144.68 462450.24 +SET 724209.53 502152.87 +SET 724269.70 412344.31 +SET 72428.79 53719.96 +SET 724385.13 626172.73 +SET 724404.68 544753.36 +SET 724417.12 237583.36 +SET 724449.84 462645.12 +SET 724544.18 427643.79 +SET 72456.78 53740.72 +SET 72466.11 53747.64 +SET 724699.91 502492.89 +SET 724739.92 452593.38 +SET 72475.44 53754.56 +SET 724781.64 502549.56 +SET 724796.73 584280.48 +SET 724807.02 626537.42 +SET 72484.77 53761.48 +SET 724852.30 427825.65 +SET 724854.24 237726.72 +SET 724886.80 412695.64 +SET 72494.10 53768.40 +SET 72494.51 50266.29 +SET 724963.52 237762.56 +SET 72499.52 45275.28 +SET 725060.16 463034.88 +SET 725092.50 412812.75 +SET 725250.48 452912.22 +SET 725272.02 502889.58 +SET 725298.20 412929.86 +SET 72540.75 53803.00 +SET 725400.64 237905.92 +SET 725435.48 503002.92 +SET 725468.54 428189.37 +SET 725505.76 453071.64 +SET 72559.41 53816.84 +SET 72562.26 42828.03 +SET 725622.60 428280.30 +SET 725670.48 463424.64 +SET 725741.22 545758.44 +SET 725761.04 453231.06 +SET 725762.40 503229.60 +SET 725776.66 428371.23 +SET 72578.07 53830.68 +SET 7259.85 4863.87 +SET 725925.86 503342.94 +SET 725947.04 238085.12 +SET 72596.73 53844.52 +SET 726016.32 453390.48 +SET 726056.32 238120.96 +SET 72606.06 53851.44 +SET 726072.69 627631.49 +SET 726165.60 238156.80 +SET 726171.05 503512.95 +SET 726252.78 503569.62 +SET 726271.60 453549.90 +SET 72628.08 46381.44 +SET 726416.24 503682.96 +SET 726433.38 463911.84 +SET 72645.95 48670.49 +SET 72652.71 53886.04 +SET 726526.88 453709.32 +SET 726546.96 428825.88 +SET 72662.04 53892.96 +SET 726626.40 437654.46 +SET 72671.20 23833.60 +SET 726712.00 238336.00 +SET 726738.10 413749.63 +SET 726782.16 453868.74 +SET 7268.07 5390.68 +SET 72680.70 53906.80 +SET 72699.36 53920.64 +SET 727037.44 454028.16 +SET 727039.84 238443.52 +SET 727070.08 504136.32 +SET 727077.76 546763.52 +SET 727149.12 238479.36 +SET 727163.20 429189.60 +SET 727196.28 464399.04 +SET 727233.54 504249.66 +SET 72727.35 53941.40 +SET 727292.72 454187.58 +SET 727315.27 504306.33 +SET 727367.68 238551.04 +SET 72746.01 53955.24 +SET 727478.73 504419.67 +SET 727500.80 438181.12 +SET 727501.44 464593.92 +SET 72754.80 45434.70 +SET 727625.38 429462.39 +SET 727642.19 504533.01 +SET 727760.25 629090.25 +SET 727766.60 414335.18 +SET 727779.44 429553.32 +SET 727804.80 238694.40 +SET 727806.60 464788.80 +SET 72788.30 48765.86 +SET 727887.38 504703.02 +SET 727959.18 464886.24 +SET 728023.36 238766.08 +SET 728052.78 586905.28 +SET 728087.56 429735.18 +SET 728111.76 464983.68 +SET 728132.64 238801.92 +SET 72817.80 41456.94 +SET 72820.65 54010.60 +SET 72821.43 50492.97 +SET 728241.92 238837.76 +SET 728264.34 465081.12 +SET 728377.76 505043.04 +SET 72839.31 54024.44 +SET 728460.48 238909.44 +SET 728569.12 454984.68 +SET 728589.40 414803.62 +SET 7286.73 5404.52 +SET 728622.95 505213.05 +SET 72870.38 43009.89 +SET 728703.99 587430.24 +SET 728704.68 505269.72 +SET 728795.10 414920.73 +SET 728857.86 430189.83 +SET 728949.87 505439.73 +SET 729006.88 239088.64 +SET 729027.24 465568.32 +SET 729082.57 548271.14 +SET 729116.16 239124.48 +SET 72913.95 54079.80 +SET 729179.82 465665.76 +SET 729206.50 415154.95 +SET 729249.60 439234.44 +SET 729276.79 505666.41 +SET 72930.65 48861.23 +SET 72932.61 54093.64 +SET 729320.04 430462.62 +SET 72933.24 46576.32 +SET 729332.40 465763.20 +SET 72935.52 58795.52 +SET 729355.20 587955.20 +SET 729412.20 415272.06 +SET 729474.10 430553.55 +SET 729521.98 505836.42 +SET 729553.28 239267.84 +SET 729590.24 455622.36 +SET 7296.06 5411.44 +SET 729603.71 505893.09 +SET 729617.90 415389.17 +SET 729628.16 430644.48 +SET 729637.56 465958.08 +SET 729685.44 505949.76 +SET 729686.80 439497.77 +SET 729750.84 548773.68 +SET 729771.84 239339.52 +SET 729790.14 466055.52 +SET 729845.52 455781.78 +SET 72986.97 63091.37 +SET 729936.28 430826.34 +SET 72999.04 23941.12 +SET 729990.40 239411.20 +SET 730006.41 588480.16 +SET 730029.30 415623.39 +SET 730090.34 430917.27 +SET 730099.68 239447.04 +SET 73010.08 45594.12 +SET 730100.80 455941.20 +SET 73016.58 54155.92 +SET 730208.96 239482.88 +SET 73023.50 41574.05 +SET 730235.00 415740.50 +SET 730244.40 431008.20 +SET 73025.55 48924.81 +SET 730257.55 506346.45 +SET 730291.59 631278.39 +SET 73035.24 54169.76 +SET 730419.11 549276.22 +SET 7305.39 5418.36 +SET 730502.74 506516.46 +SET 73053.90 54183.60 +SET 73063.23 54190.52 +SET 730646.40 415974.72 +SET 730657.62 589005.12 +SET 730666.20 506629.80 +SET 7307.30 4895.66 +SET 730713.48 631643.08 +SET 73072.56 54197.44 +SET 73085.82 46673.76 +SET 73091.22 54211.28 +SET 730973.92 239733.76 +SET 730998.40 440287.76 +SET 731057.80 416208.94 +SET 731083.20 239769.60 +SET 731121.92 456578.88 +SET 731135.37 632007.77 +SET 731156.58 506969.82 +SET 731163.36 466932.48 +SET 73128.54 54238.96 +SET 731315.94 467029.92 +SET 731320.04 507083.16 +SET 731322.82 431644.71 +SET 73137.87 54245.88 +SET 731377.20 456738.30 +SET 7314.72 5425.28 +SET 73147.20 54252.80 +SET 73148.35 50719.65 +SET 73165.86 54266.64 +SET 731728.69 507366.51 +SET 73175.19 54273.56 +SET 731785.00 431917.50 +SET 73184.52 54280.48 +SET 731848.16 240020.48 +SET 731887.76 457057.14 +SET 731892.15 507479.85 +SET 731957.44 240056.32 +SET 731960.04 590055.04 +SET 732055.61 507593.19 +SET 732086.30 416794.49 +SET 7321.76 2401.28 +SET 73215.35 49051.97 +SET 732219.07 507706.53 +SET 732310.00 441077.75 +SET 732382.53 507819.87 +SET 732394.56 240199.68 +SET 732398.32 457375.98 +SET 732401.24 432281.22 +SET 732497.70 417028.71 +SET 732503.84 240235.52 +SET 732555.30 432372.15 +SET 73268.49 54342.76 +SET 732689.16 467906.88 +SET 732709.45 508046.55 +SET 732722.40 240307.20 +SET 732747.20 441341.08 +SET 732822.93 633466.53 +SET 732831.68 240343.04 +SET 732841.74 468004.32 +SET 732863.42 432554.01 +SET 732908.88 457694.82 +SET 732940.96 240378.88 +SET 73296.48 54363.52 +SET 733050.24 240414.72 +SET 73310.25 49115.55 +SET 733114.80 417380.04 +SET 73315.14 54377.36 +SET 733268.80 240486.40 +SET 7333.38 5439.12 +SET 733363.29 508499.91 +SET 73343.13 54398.12 +SET 73352.46 54405.04 +SET 733526.20 417614.26 +SET 73357.70 49147.34 +SET 733596.64 240593.92 +SET 733604.64 468491.52 +SET 733608.48 508669.92 +SET 733633.72 433008.66 +SET 733690.21 508726.59 +SET 733705.92 240629.76 +SET 733757.22 468588.96 +SET 733913.67 591629.92 +SET 733937.60 417848.48 +SET 734017.13 508953.27 +SET 73405.15 49179.13 +SET 73408.86 63456.06 +SET 734095.90 433281.45 +SET 734143.30 417965.59 +SET 7342.71 5446.04 +SET 734214.96 468881.28 +SET 73436.16 24084.48 +SET 734367.54 468978.72 +SET 734404.02 433463.31 +SET 734425.78 509236.62 +SET 73445.76 54474.24 +SET 73449.60 44239.44 +SET 734564.88 592154.88 +SET 734580.16 240916.48 +SET 734672.70 469173.60 +SET 73473.75 54495.00 +SET 734760.40 418316.92 +SET 73483.08 54501.92 +SET 734908.00 241024.00 +SET 73492.41 54508.84 +SET 734951.12 458970.18 +SET 734966.10 418434.03 +SET 734997.89 509633.31 +SET 73500.05 49242.71 +SET 735017.28 241059.84 +SET 735020.26 433827.03 +SET 735126.56 241095.68 +SET 735161.35 509746.65 +SET 735171.80 418551.14 +SET 7352.04 5452.96 +SET 735235.84 241131.52 +SET 735243.08 509803.32 +SET 73529.73 54536.52 +SET 735324.81 509859.99 +SET 7354.75 4927.45 +SET 73545.44 24120.32 +SET 735461.68 459289.02 +SET 73547.50 49274.50 +SET 73548.39 54550.36 +SET 735488.27 509973.33 +SET 7355.70 5100.30 +SET 73557.72 54557.28 +SET 735570.00 510030.00 +SET 735636.50 434190.75 +SET 735651.73 510086.67 +SET 735672.96 241274.88 +SET 735716.96 459448.44 +SET 735740.76 469855.68 +SET 735776.16 636019.36 +SET 735788.90 418902.47 +SET 735807.60 443184.39 +SET 735896.92 510256.68 +SET 73594.95 49306.29 +SET 735944.62 434372.61 +SET 735972.24 459607.86 +SET 735978.65 510313.35 +SET 736000.80 241382.40 +SET 7361.37 5459.88 +SET 736198.05 636384.05 +SET 736200.30 419136.69 +SET 736219.36 241454.08 +SET 73623.03 54605.72 +SET 736328.64 241489.92 +SET 736351.08 470245.44 +SET 736406.00 419253.80 +SET 73642.40 49338.08 +SET 736433.54 553799.08 +SET 736437.92 241525.76 +SET 736547.20 241561.60 +SET 736550.76 510710.04 +SET 73660.35 54633.40 +SET 736619.94 636748.74 +SET 736632.49 510766.71 +SET 736656.24 470440.32 +SET 736682.00 443711.05 +SET 73669.68 54640.32 +SET 736808.82 470537.76 +SET 736817.40 419488.02 +SET 73689.85 49369.87 +SET 736959.41 510993.39 +SET 73696.14 47063.52 +SET 73697.67 54661.08 +SET 737093.60 241740.80 +SET 737101.81 554301.62 +SET 737113.98 470732.64 +SET 737119.20 443974.38 +SET 73716.33 54674.92 +SET 737169.72 594254.72 +SET 737248.64 460404.96 +SET 73725.66 54681.84 +SET 737266.56 470830.08 +SET 737312.16 241812.48 +SET 737421.44 241848.32 +SET 73744.32 54695.68 +SET 73762.98 54709.52 +SET 737639.28 435372.84 +SET 73764.00 24192.00 +SET 737640.00 241920.00 +SET 737724.30 471122.40 +SET 737749.28 241955.84 +SET 737770.08 554804.16 +SET 73781.64 54723.36 +SET 737845.90 420073.57 +SET 737858.44 511616.76 +SET 73794.74 43555.47 +SET 737940.17 511673.43 +SET 7380.03 5473.72 +SET 738014.48 460883.22 +SET 738077.12 242063.36 +SET 738103.63 511786.77 +SET 738182.04 471414.72 +SET 738185.36 511843.44 +SET 738267.09 511900.11 +SET 73828.29 54757.96 +SET 738295.68 242135.04 +SET 73830.75 63820.75 +SET 73832.20 49465.24 +SET 738348.82 511956.78 +SET 73837.62 54764.88 +SET 738409.58 435827.49 +SET 738438.35 555306.70 +SET 73846.30 42042.49 +SET 73846.95 54771.80 +SET 738463.00 420424.90 +SET 738472.14 595304.64 +SET 738512.28 512070.12 +SET 738514.24 242206.72 +SET 738525.04 461202.06 +SET 738668.70 420542.01 +SET 738675.74 512183.46 +SET 73873.28 24227.84 +SET 738757.47 512240.13 +SET 738792.36 471804.48 +SET 73883.92 51229.68 +SET 73884.27 54799.48 +SET 738871.76 436100.28 +SET 738920.93 512353.47 +SET 739025.82 436191.21 +SET 739106.62 555809.24 +SET 73912.26 54820.24 +SET 739151.28 638936.88 +SET 739179.88 436282.14 +SET 739285.80 420893.34 +SET 73930.92 54834.08 +SET 739305.20 445291.03 +SET 739329.58 512636.82 +SET 739388.48 242493.44 +SET 7394.88 4364.64 +SET 73940.25 54841.00 +SET 739488.00 436464.00 +SET 739491.50 421010.45 +SET 739497.76 242529.28 +SET 739546.16 461839.74 +SET 73958.91 54854.84 +SET 739697.20 421127.56 +SET 739707.84 472389.12 +SET 73974.55 49560.61 +SET 739742.40 445554.36 +SET 7398.69 5487.56 +SET 73982.56 24263.68 +SET 73996.23 54882.52 +SET 740013.00 472584.00 +SET 74005.56 54889.44 +SET 740065.15 513146.85 +SET 740108.60 421361.78 +SET 740146.88 513203.52 +SET 740165.58 472681.44 +SET 7402.20 4959.24 +SET 7403.12 4623.18 +SET 740310.34 513316.86 +SET 740318.16 472778.88 +SET 740392.07 513373.53 +SET 740412.36 437009.58 +SET 74042.88 54917.12 +SET 74047.38 51343.02 +SET 740470.74 472876.32 +SET 740590.56 242887.68 +SET 74080.20 54944.80 +SET 740800.72 513656.88 +SET 74089.53 54951.72 +SET 740931.40 421830.22 +SET 74102.86 43737.33 +SET 741028.60 437373.30 +SET 741045.91 513826.89 +SET 741054.00 446344.35 +SET 741111.43 557316.86 +SET 741127.64 513883.56 +SET 741137.10 421947.33 +SET 74116.90 49655.98 +SET 741246.24 243102.72 +SET 741260.73 640760.33 +SET 74129.11 51399.69 +SET 741336.72 437555.16 +SET 741342.80 422064.44 +SET 741454.56 514110.24 +SET 741464.80 243174.40 +SET 741491.20 446607.68 +SET 74154.84 55000.16 +SET 741618.02 514223.58 +SET 74164.35 49687.77 +SET 741683.36 243246.08 +SET 741699.75 514280.25 +SET 7417.35 5501.40 +SET 741863.21 514393.59 +SET 741901.92 243317.76 +SET 741944.94 514450.26 +SET 741952.96 437918.88 +SET 74201.49 55034.76 +SET 742011.20 243353.60 +SET 742098.96 463433.94 +SET 74210.82 55041.68 +SET 74210.84 51456.36 +SET 74211.80 49719.56 +SET 742120.48 243389.44 +SET 742190.13 514620.27 +SET 74220.15 55048.60 +SET 742271.86 514676.94 +SET 74229.48 55055.52 +SET 742354.24 463593.36 +SET 742365.60 447134.34 +SET 74237.94 59845.44 +SET 742454.28 474143.04 +SET 74248.14 55069.36 +SET 742526.40 641854.40 +SET 74256.92 43828.26 +SET 74257.47 55076.28 +SET 742598.78 514903.62 +SET 742776.16 243604.48 +SET 742877.32 438464.46 +SET 742912.02 474435.36 +SET 74292.57 51513.03 +SET 74294.79 55103.96 +SET 742948.29 642219.09 +SET 742994.72 243676.16 +SET 743030.61 598979.36 +SET 74306.46 47453.28 +SET 743064.60 474532.80 +SET 743089.16 515243.64 +SET 743170.89 515300.31 +SET 743185.44 438646.32 +SET 7432.40 4476.61 +SET 743217.18 474630.24 +SET 74322.78 55124.72 +SET 743252.62 515356.98 +SET 743322.56 243783.68 +SET 743370.18 642583.78 +SET 743375.36 464231.04 +SET 743399.80 423235.54 +SET 743416.08 515470.32 +SET 743431.84 243819.52 +SET 743493.56 438828.18 +SET 743497.81 515526.99 +SET 74350.77 55145.48 +SET 74354.15 49814.93 +SET 7436.01 5515.24 +SET 74360.10 55152.40 +SET 743674.92 474922.56 +SET 7437.43 5156.97 +SET 743743.00 515697.00 +SET 743759.68 243927.04 +SET 743801.68 439010.04 +SET 743827.50 475020.00 +SET 743885.92 464549.88 +SET 743906.46 515810.34 +SET 74397.42 55180.08 +SET 743978.24 243998.72 +SET 743980.08 475117.44 +SET 743988.19 515867.01 +SET 74401.60 49846.72 +SET 744069.92 515923.68 +SET 744087.52 244034.56 +SET 744114.40 448187.66 +SET 744132.66 475214.88 +SET 744141.20 464709.30 +SET 74416.08 55193.92 +SET 744213.96 643313.16 +SET 74425.41 55200.84 +SET 744306.08 244106.24 +SET 744315.11 516093.69 +SET 744333.03 600029.28 +SET 744417.92 439373.76 +SET 7445.34 5522.16 +SET 74453.40 55221.60 +SET 74456.03 51626.37 +SET 744560.30 516263.70 +SET 744571.98 439464.69 +SET 74459.04 47550.72 +SET 744642.03 516320.37 +SET 744726.04 439555.62 +SET 744852.48 244285.44 +SET 744880.10 439646.55 +SET 74490.72 55249.28 +SET 744968.95 516547.05 +SET 74500.05 55256.20 +SET 745034.16 439737.48 +SET 745048.14 475799.52 +SET 745050.68 516603.72 +SET 745071.04 244357.12 +SET 745132.41 516660.39 +SET 745200.72 475896.96 +SET 745251.10 424289.53 +SET 74528.96 24442.88 +SET 745295.87 516773.73 +SET 74537.76 51683.04 +SET 745377.60 516830.40 +SET 7454.67 5529.08 +SET 74541.76 46550.64 +SET 745417.60 465506.40 +SET 745426.00 448977.65 +SET 74543.95 49942.09 +SET 745505.88 476091.84 +SET 745541.06 516943.74 +SET 74556.03 55297.72 +SET 745617.44 244536.32 +SET 745650.40 440101.20 +SET 745658.46 476189.28 +SET 745662.50 424523.75 +SET 745786.25 517113.75 +SET 745867.98 517170.42 +SET 745868.20 424640.86 +SET 74593.35 55325.40 +SET 745945.28 244643.84 +SET 745949.71 517227.09 +SET 745958.52 440283.06 +SET 745963.62 476384.16 +SET 746.40 553.60 +SET 746031.44 517283.76 +SET 746073.90 424757.97 +SET 746116.20 476481.60 +SET 74619.49 51739.71 +SET 746194.90 517397.10 +SET 746266.64 440464.92 +SET 746268.78 476579.04 +SET 746276.63 517453.77 +SET 746279.60 424875.08 +SET 74630.67 55353.08 +SET 746440.09 517567.11 +SET 746457.59 561337.18 +SET 746485.30 424992.19 +SET 74649.33 55366.92 +SET 746574.76 440646.78 +SET 74658.66 55373.84 +SET 746600.96 244858.88 +SET 746603.55 517680.45 +SET 746691.00 425109.30 +SET 746694.00 466303.50 +SET 746726.52 476871.36 +SET 74677.32 55387.68 +SET 746819.52 244930.56 +SET 746848.74 517850.46 +SET 74686.30 50037.46 +SET 746882.88 440828.64 +SET 746930.47 517907.13 +SET 746949.28 466462.92 +SET 747031.68 477066.24 +SET 747036.94 440919.57 +SET 747125.86 561839.72 +SET 74714.64 55415.36 +SET 747147.36 245038.08 +SET 74723.97 55422.28 +SET 747257.39 518133.81 +SET 74733.30 55429.20 +SET 747345.06 441101.43 +SET 747420.85 518247.15 +SET 747489.42 477358.56 +SET 747499.12 441192.36 +SET 747502.58 518303.82 +SET 747513.80 425577.74 +SET 747584.31 518360.49 +SET 74764.20 47745.60 +SET 747653.18 441283.29 +SET 747666.04 518417.16 +SET 747715.12 466941.18 +SET 747719.50 425694.85 +SET 74789.28 55470.72 +SET 747911.23 518587.17 +SET 747912.32 245288.96 +SET 747961.30 441465.15 +SET 748010.97 646595.37 +SET 748049.20 450557.63 +SET 748074.69 518700.51 +SET 748130.90 425929.07 +SET 748156.42 518757.18 +SET 7482.66 5549.84 +SET 748225.68 467260.02 +SET 748252.32 477845.76 +SET 74826.60 55498.40 +SET 74828.65 50132.83 +SET 748319.88 518870.52 +SET 74835.93 55505.32 +SET 748458.72 245468.16 +SET 748462.40 562844.80 +SET 748557.48 478040.64 +SET 748677.28 245539.84 +SET 748728.53 519153.87 +SET 74873.16 44191.98 +SET 748731.60 441919.80 +SET 748736.24 467578.86 +SET 74874.80 42628.04 +SET 748748.00 426280.40 +SET 74882.58 55539.92 +SET 74889.15 60370.40 +SET 748923.60 451084.29 +SET 748953.70 426397.51 +SET 74901.24 55553.76 +SET 749039.72 442101.66 +SET 749114.40 245683.20 +SET 74916.78 47843.04 +SET 749218.91 519493.89 +SET 749223.68 245719.04 +SET 74923.55 50196.41 +SET 749246.80 467897.70 +SET 749300.64 519550.56 +SET 749347.84 442283.52 +SET 749360.80 451347.62 +SET 749382.37 519607.23 +SET 749442.24 245790.72 +SET 749464.10 519663.90 +SET 74947.89 55588.36 +SET 749472.96 478625.28 +SET 749501.90 442374.45 +SET 749545.83 519720.57 +SET 749551.52 245826.56 +SET 749570.80 426748.84 +SET 749627.56 519777.24 +SET 74966.08 24586.24 +SET 74966.55 55602.20 +SET 749709.29 519833.91 +SET 74971.00 50228.20 +SET 749791.02 519890.58 +SET 749872.75 519947.25 +SET 749930.70 478917.60 +SET 749954.48 520003.92 +SET 749988.64 245969.92 +SET 750012.64 468375.96 +SET 750083.28 479015.04 +SET 7501.32 5563.68 +SET 750117.94 520117.26 +SET 75018.45 50259.99 +SET 750207.20 246041.60 +SET 750267.92 468535.38 +SET 750281.40 520230.60 +SET 750388.44 479209.92 +SET 750393.60 427217.28 +SET 750444.86 520343.94 +SET 75050.52 55664.48 +SET 75052.32 46869.48 +SET 750542.31 648783.51 +SET 750644.32 246184.96 +SET 750672.40 452137.61 +SET 750753.60 246220.80 +SET 750778.48 468854.22 +SET 75080.50 42745.15 +SET 750846.18 479502.24 +SET 750862.88 246256.64 +SET 75087.84 55692.16 +SET 750888.44 443192.82 +SET 75096.42 64914.82 +SET 75097.17 55699.08 +SET 751010.70 427568.61 +SET 75106.50 55706.00 +SET 751098.70 520797.30 +SET 75113.35 50323.57 +SET 75115.83 55712.92 +SET 751180.43 520853.97 +SET 75134.49 55726.76 +SET 751422.10 427802.83 +SET 751425.62 521023.98 +SET 751456.50 479892.00 +SET 751518.56 246471.68 +SET 751544.32 469332.48 +SET 751546.80 452664.27 +SET 751589.08 521137.32 +SET 75160.80 50355.36 +SET 751609.08 479989.44 +SET 75171.81 55754.44 +SET 751752.54 521250.66 +SET 751799.60 469491.90 +SET 751803.75 565357.50 +SET 751807.98 649877.58 +SET 75181.28 44373.84 +SET 7519.16 5213.64 +SET 75190.47 55768.28 +SET 751914.24 480184.32 +SET 751916.00 521364.00 +SET 75198.40 45292.76 +SET 75199.80 55775.20 +SET 752054.88 469651.32 +SET 752064.96 246650.88 +SET 752066.82 480281.76 +SET 752147.55 606328.80 +SET 752161.19 521534.01 +SET 752219.40 480379.20 +SET 752229.87 650242.27 +SET 752274.98 444011.19 +SET 752310.16 469810.74 +SET 75237.12 55802.88 +SET 752392.80 246758.40 +SET 752429.04 444102.12 +SET 75246.45 55809.80 +SET 752502.08 246794.24 +SET 752583.10 444193.05 +SET 752651.57 521874.03 +SET 752651.76 650606.96 +SET 752656.30 428505.49 +SET 75273.33 52193.07 +SET 752737.16 444283.98 +SET 75274.44 55830.56 +SET 752815.03 521987.37 +SET 752820.72 470129.58 +SET 752862.00 428622.60 +SET 753060.22 522157.38 +SET 753073.65 650971.65 +SET 753076.00 470289.00 +SET 753134.88 480963.84 +SET 753199.34 444556.77 +SET 753223.68 522270.72 +SET 753267.04 247045.12 +SET 753273.40 428856.82 +SET 753331.28 470448.42 +SET 753376.32 247080.96 +SET 75339.75 55879.00 +SET 753449.97 607378.72 +SET 753468.87 522440.73 +SET 753479.10 428973.93 +SET 753485.60 247116.80 +SET 753507.46 444738.63 +SET 753684.80 429091.04 +SET 753732.80 453980.92 +SET 75377.07 55906.68 +SET 753808.56 566865.12 +SET 753813.44 247224.32 +SET 753897.78 481451.04 +SET 753917.43 651701.03 +SET 7540.32 2472.96 +SET 75403.20 24729.60 +SET 754040.98 522837.42 +SET 75405.06 55927.44 +SET 754050.36 481548.48 +SET 754122.71 522894.09 +SET 754123.70 445102.35 +SET 75414.39 55934.36 +SET 754286.17 523007.43 +SET 754301.90 429442.37 +SET 754359.84 247403.52 +SET 754367.90 523064.10 +SET 7544.55 5054.61 +SET 754449.63 523120.77 +SET 754476.83 567367.66 +SET 754507.60 429559.48 +SET 754607.68 471245.52 +SET 754713.30 429676.59 +SET 754776.55 523347.45 +SET 7548.94 4455.57 +SET 754813.26 482035.68 +SET 754858.28 523404.12 +SET 754862.96 471404.94 +SET 754906.24 247582.72 +SET 754919.00 429793.70 +SET 755015.52 247618.56 +SET 755048.06 445647.93 +SET 755118.24 471564.36 +SET 75512.48 24765.44 +SET 755124.80 247654.40 +SET 75514.51 56787.02 +SET 75517.02 56010.48 +SET 755185.20 523630.80 +SET 755202.12 445738.86 +SET 755234.08 247690.24 +SET 75527.10 48232.80 +SET 755348.66 523744.14 +SET 755356.18 445829.79 +SET 75540.36 60895.36 +SET 75540.40 50609.68 +SET 755403.60 608953.60 +SET 755452.64 247761.92 +SET 755481.60 455034.24 +SET 755510.24 445920.72 +SET 755512.12 523857.48 +SET 75554.34 56038.16 +SET 755576.16 482522.88 +SET 75562.88 47188.32 +SET 755628.80 471883.20 +SET 75563.67 56045.08 +SET 755671.20 247833.60 +SET 755741.80 430262.14 +SET 755757.31 524027.49 +SET 755813.37 568372.74 +SET 755818.36 446102.58 +SET 755881.32 482717.76 +SET 755884.08 472042.62 +SET 75591.66 56065.84 +SET 755947.50 430379.25 +SET 756002.50 524197.50 +SET 756026.88 653524.48 +SET 75610.32 56079.68 +SET 756108.32 247976.96 +SET 756186.48 482912.64 +SET 75619.65 56086.60 +SET 75621.76 24801.28 +SET 756217.60 248012.80 +SET 75628.98 56093.52 +SET 756329.42 524424.18 +SET 756339.06 483010.08 +SET 75635.60 45556.09 +SET 756356.00 455560.90 +SET 75643.46 44646.63 +SET 756436.16 248084.48 +SET 756481.64 568875.28 +SET 756492.88 524537.52 +SET 75656.97 56114.28 +SET 756588.66 446557.23 +SET 756656.34 524650.86 +SET 756706.02 610003.52 +SET 75675.63 56128.12 +SET 756796.80 483302.40 +SET 75681.98 52476.42 +SET 756819.80 524764.20 +SET 75682.75 50705.05 +SET 75684.96 56135.04 +SET 756870.66 654253.86 +SET 756901.53 524820.87 +SET 756949.38 483399.84 +SET 757091.84 248299.52 +SET 757101.96 483497.28 +SET 757181.70 431081.91 +SET 757204.90 446920.95 +SET 757230.40 456087.56 +SET 75730.20 50736.84 +SET 75731.04 24837.12 +SET 757391.91 525160.89 +SET 75740.94 56176.56 +SET 757407.12 483692.16 +SET 757419.68 248407.04 +SET 7575.96 5619.04 +SET 757555.37 525274.23 +SET 757638.24 248478.72 +SET 757712.28 483887.04 +SET 757747.52 248514.56 +SET 75778.26 56204.24 +SET 757800.56 525444.24 +SET 757856.80 248550.40 +SET 757964.02 525557.58 +SET 758004.50 431550.35 +SET 758008.44 611053.44 +SET 75806.25 56225.00 +SET 758136.33 655347.93 +SET 758181.60 473477.40 +SET 758209.21 525727.59 +SET 758210.20 431667.46 +SET 758290.94 525784.26 +SET 75832.26 48427.68 +SET 758372.67 525840.93 +SET 75840.32 24872.96 +SET 758403.20 248729.60 +SET 758436.88 473636.82 +SET 758437.38 447648.39 +SET 758486.45 570382.90 +SET 758591.44 447739.32 +SET 758621.76 248801.28 +SET 758659.65 611578.40 +SET 758692.16 473796.24 +SET 758780.34 484569.12 +SET 75880.89 56280.36 +SET 758932.92 484666.56 +SET 758949.60 248908.80 +SET 759026.51 526294.29 +SET 759085.50 484764.00 +SET 759154.72 570885.44 +SET 75918.21 56308.04 +SET 759238.08 484861.44 +SET 75927.54 56314.96 +SET 759277.44 249016.32 +SET 759310.86 612103.36 +SET 759353.43 526520.97 +SET 759361.74 448193.97 +SET 759386.72 249052.16 +SET 759390.66 484958.88 +SET 7594.02 6564.42 +SET 7594.62 5632.88 +SET 75940.20 65644.20 +SET 759416.40 457404.21 +SET 759444.40 432370.12 +SET 759458.00 474274.50 +SET 759496.00 249088.00 +SET 759516.89 526634.31 +SET 759543.24 485056.32 +SET 759598.62 526690.98 +SET 759650.10 432487.23 +SET 759669.86 448375.83 +SET 759713.28 474433.92 +SET 759714.56 249159.68 +SET 759762.08 526804.32 +SET 759823.84 249195.52 +SET 75983.52 56356.48 +SET 759853.60 457667.54 +SET 759855.80 432604.34 +SET 759962.07 612628.32 +SET 759968.56 474593.34 +SET 759977.98 448557.69 +SET 760132.04 448648.62 +SET 760151.68 249303.04 +SET 760170.73 527087.67 +SET 76020.84 56384.16 +SET 760245.78 657171.38 +SET 760252.46 527144.34 +SET 760260.96 249338.88 +SET 760286.10 448739.55 +SET 76030.17 56391.08 +SET 76039.50 56398.00 +SET 760415.92 527257.68 +SET 760497.65 527314.35 +SET 760579.38 527371.02 +SET 760594.22 448921.41 +SET 760728.00 458194.20 +SET 760734.40 475071.60 +SET 760748.28 449012.34 +SET 76076.82 56425.68 +SET 760763.88 485835.84 +SET 76086.15 56432.60 +SET 76090.63 52759.77 +SET 76095.48 56439.52 +SET 760989.68 475231.02 +SET 76104.81 56446.44 +SET 761056.40 449194.20 +SET 76114.14 56453.36 +SET 761151.49 527767.71 +SET 761159.53 572393.06 +SET 761233.22 527824.38 +SET 761244.48 249661.44 +SET 761244.96 475390.44 +SET 761264.49 613678.24 +SET 761295.70 433424.11 +SET 7613.28 5646.72 +SET 76132.80 56467.20 +SET 76137.42 48622.56 +SET 761374.20 486225.60 +SET 76142.13 56474.12 +SET 761478.41 527994.39 +SET 761500.24 475549.86 +SET 761511.45 658265.45 +SET 761526.78 486323.04 +SET 76157.25 51022.95 +SET 761679.36 486420.48 +SET 76170.12 56494.88 +SET 761707.10 433658.33 +SET 761790.88 249840.64 +SET 761826.70 449648.85 +SET 761827.80 572895.60 +SET 761831.94 486517.92 +SET 761887.06 528277.74 +SET 761968.79 528334.41 +SET 76198.11 56515.64 +SET 762010.80 475868.70 +SET 762039.60 458984.19 +SET 76204.70 51054.74 +SET 76207.44 56522.56 +SET 762134.82 449830.71 +SET 762137.10 486712.80 +SET 76216.77 56529.48 +SET 762213.98 528504.42 +SET 76226.10 56536.40 +SET 762266.08 476028.12 +SET 762295.71 528561.09 +SET 762324.20 434009.66 +SET 76235.43 56543.32 +SET 76244.76 56550.24 +SET 762442.94 450012.57 +SET 762459.17 528674.43 +SET 762476.80 459247.52 +SET 76252.15 51086.53 +SET 76254.09 52873.11 +SET 762555.84 250091.52 +SET 762566.91 614728.16 +SET 762704.36 528844.44 +SET 762747.42 487102.56 +SET 762751.06 450194.43 +SET 762777.12 659359.52 +SET 762786.09 528901.11 +SET 7629.00 4872.00 +SET 762900.00 487200.00 +SET 762914.00 459510.85 +SET 762949.55 529014.45 +SET 763031.92 476506.38 +SET 76310.07 56598.68 +SET 763113.01 529127.79 +SET 76314.70 43447.81 +SET 763147.00 434478.10 +SET 763211.52 250306.56 +SET 763213.24 450467.22 +SET 763218.12 615253.12 +SET 763276.47 529241.13 +SET 763320.80 250342.40 +SET 76335.82 52929.78 +SET 763352.70 434595.21 +SET 763357.74 487492.32 +SET 763367.30 450558.15 +SET 763439.93 529354.47 +SET 76347.39 56626.36 +SET 763510.32 487589.76 +SET 763521.66 529411.14 +SET 76356.72 56633.28 +SET 763603.39 529467.81 +SET 76362.09 66008.89 +SET 763648.64 250449.92 +SET 76366.05 56640.20 +SET 763757.92 250485.76 +SET 763764.10 434829.43 +SET 763848.58 529637.82 +SET 763983.54 450921.87 +SET 764.96 250.88 +SET 764012.04 529751.16 +SET 764175.50 435063.65 +SET 764225.60 460300.84 +SET 764381.20 435180.76 +SET 76440.69 56695.56 +SET 76442.58 48817.44 +SET 764420.69 530034.51 +SET 764425.80 488174.40 +SET 764464.68 660818.28 +SET 764522.88 250736.64 +SET 764599.78 451285.59 +SET 764632.16 250772.48 +SET 76468.68 56716.32 +SET 764741.44 250808.32 +SET 764753.84 451376.52 +SET 764829.34 530317.86 +SET 76489.40 51245.48 +SET 764960.00 250880.00 +SET 765036.12 488564.16 +SET 765074.16 477781.74 +SET 765074.53 530487.87 +SET 765100.00 460827.50 +SET 765171.75 616828.00 +SET 765188.70 488661.60 +SET 765204.00 435649.20 +SET 76524.66 56757.84 +SET 765329.44 477941.16 +SET 76536.85 51277.27 +SET 765370.08 451740.24 +SET 765397.12 251023.36 +SET 765409.70 435766.31 +SET 76543.32 56771.68 +SET 765493.86 488856.48 +SET 765524.14 451831.17 +SET 765646.44 488953.92 +SET 76567.82 45192.21 +SET 765678.20 451922.10 +SET 76571.31 56792.44 +SET 765724.96 251130.88 +SET 765728.37 530941.23 +SET 765730.35 661912.35 +SET 7658.40 4782.60 +SET 76584.00 47826.00 +SET 765840.00 478260.00 +SET 76595.16 48914.88 +SET 765973.56 531111.24 +SET 766026.80 436117.64 +SET 76605.28 25123.84 +SET 766052.80 251238.40 +SET 766104.18 489246.24 +SET 766140.38 452194.89 +SET 766162.08 251274.24 +SET 76627.29 56833.96 +SET 766271.36 251310.08 +SET 76631.75 51340.85 +SET 766382.21 531394.59 +SET 76645.95 56847.80 +SET 766463.94 531451.26 +SET 766545.67 531507.93 +SET 766602.56 452467.68 +SET 76662.74 53156.46 +SET 76664.61 56861.64 +SET 766708.48 251453.44 +SET 766714.50 489636.00 +SET 76673.94 56868.56 +SET 76679.20 51372.64 +SET 766817.76 251489.28 +SET 766848.80 461880.82 +SET 766867.08 489733.44 +SET 766872.59 531734.61 +SET 7669.26 5688.24 +SET 766910.68 452649.54 +SET 76711.26 56896.24 +SET 767117.78 531904.62 +SET 767145.60 251596.80 +SET 767172.24 489928.32 +SET 767173.96 576915.92 +SET 76720.59 56903.16 +SET 76726.10 43682.03 +SET 767324.82 490025.76 +SET 767362.97 532074.63 +SET 767371.68 479216.52 +SET 767372.86 452922.33 +SET 76744.47 53213.13 +SET 767444.70 532131.30 +SET 767466.70 436937.41 +SET 76747.74 49012.32 +SET 767473.44 251704.32 +SET 767477.40 490123.20 +SET 76757.91 56930.84 +SET 767629.98 490220.64 +SET 767680.98 453104.19 +SET 76776.57 56944.68 +SET 767801.28 251811.84 +SET 76783.98 66373.58 +SET 76785.90 56951.60 +SET 767853.35 532414.65 +SET 767882.24 479535.36 +SET 767989.10 453286.05 +SET 76804.56 56965.44 +SET 768083.80 437288.74 +SET 76813.89 56972.36 +SET 768143.16 453376.98 +SET 768160.40 462670.81 +SET 76823.22 56979.28 +SET 76823.84 25195.52 +SET 768238.40 251955.20 +SET 768261.69 664100.49 +SET 76839.28 47985.42 +SET 768392.88 490707.84 +SET 76842.78 61945.28 +SET 768427.80 619452.80 +SET 768510.50 577921.00 +SET 768588.92 532924.68 +SET 768597.60 462934.14 +SET 768670.65 532981.35 +SET 768675.52 252098.56 +SET 76869.87 57013.88 +SET 7687.92 5702.08 +SET 768784.80 252134.40 +SET 769034.80 463197.47 +SET 769067.52 453922.56 +SET 76907.19 57041.56 +SET 769112.30 437874.29 +SET 769112.64 252241.92 +SET 769158.64 480332.46 +SET 76916.45 51531.59 +SET 769178.77 578423.54 +SET 769221.58 454013.49 +SET 769242.76 533378.04 +SET 769413.92 480491.88 +SET 76944.51 57069.24 +SET 769460.94 491389.92 +SET 769523.70 438108.51 +SET 769527.36 665194.56 +SET 769569.68 533604.72 +SET 7697.25 5709.00 +SET 769729.40 438225.62 +SET 769730.22 620502.72 +SET 769733.14 533718.06 +SET 769814.87 533774.73 +SET 769837.82 454377.21 +SET 769877.60 252492.80 +SET 769896.60 533831.40 +SET 769935.10 438342.73 +SET 769986.88 252528.64 +SET 770.30 454.65 +SET 77009.82 57117.68 +SET 770096.16 252564.48 +SET 77011.35 51595.17 +SET 770140.80 438459.84 +SET 770223.84 491877.12 +SET 7703.00 4546.50 +SET 77030.00 45465.00 +SET 770300.00 454650.00 +SET 770314.72 252636.16 +SET 770346.40 463987.46 +SET 77037.81 57138.44 +SET 770371.14 665923.94 +SET 770454.06 454740.93 +SET 77047.14 57145.36 +SET 770515.31 579428.62 +SET 770550.44 534284.76 +SET 770552.20 438694.06 +SET 77056.47 57152.28 +SET 77058.80 51626.96 +SET 770608.12 454831.86 +SET 770751.84 252779.52 +SET 770762.18 454922.79 +SET 770793.03 666288.63 +SET 77084.46 57173.04 +SET 770877.36 534511.44 +SET 770963.60 438928.28 +SET 770986.74 492364.32 +SET 771070.30 455104.65 +SET 771139.32 492461.76 +SET 771183.58 579931.16 +SET 771188.96 252922.88 +SET 771200.88 481607.82 +SET 771204.28 534738.12 +SET 771214.92 666653.32 +SET 771220.80 464514.12 +SET 771224.36 455195.58 +SET 771298.24 252958.72 +SET 77137.50 43916.25 +SET 771456.16 481767.24 +SET 77149.77 57221.48 +SET 7715.91 5722.84 +SET 77151.68 25303.04 +SET 771516.80 253030.40 +SET 77153.12 53496.48 +SET 771532.48 455377.44 +SET 771597.06 492754.08 +SET 771612.93 535021.47 +SET 771626.08 253066.24 +SET 771776.39 535134.81 +SET 771786.40 439396.72 +SET 771851.85 580433.70 +SET 771939.85 535248.15 +SET 771966.72 482086.08 +SET 772058.70 667382.70 +SET 772148.72 455741.16 +SET 772172.48 253245.44 +SET 772222.00 482245.50 +SET 77224.41 57276.84 +SET 772266.77 535474.83 +SET 77234.85 53553.15 +SET 772348.50 535531.50 +SET 772391.04 253317.12 +SET 77243.07 57290.68 +SET 772456.84 455923.02 +SET 772477.28 482404.92 +SET 772480.59 667747.39 +SET 772520.12 580936.24 +SET 772609.20 439865.16 +SET 77261.73 57304.52 +SET 772757.15 535814.85 +SET 772764.96 456104.88 +SET 772838.88 535871.52 +SET 77289.72 57325.28 +SET 772902.48 668112.08 +SET 772937.44 253496.32 +SET 772970.28 493631.04 +SET 773002.34 535984.86 +SET 773020.60 440099.38 +SET 773084.07 536041.53 +SET 773122.86 493728.48 +SET 773156.00 253568.00 +SET 77317.71 57346.04 +SET 773226.30 440216.49 +SET 773227.14 456377.67 +SET 773275.44 493825.92 +SET 773324.37 668476.77 +SET 77336.37 57359.88 +SET 773381.20 456468.60 +SET 7734.35 5181.77 +SET 7734.57 5736.68 +SET 773410.99 536268.21 +SET 773432.00 440333.60 +SET 773483.84 253675.52 +SET 77349.84 48304.26 +SET 773535.26 456559.53 +SET 773574.45 536381.55 +SET 773746.26 668841.46 +SET 773843.38 456741.39 +SET 773856.66 581941.32 +SET 773920.96 253818.88 +SET 77398.31 53666.49 +SET 773997.44 456832.32 +SET 774049.10 440684.93 +SET 774064.83 536721.57 +SET 77411.01 57415.24 +SET 774139.52 253890.56 +SET 774146.56 536778.24 +SET 774190.92 494410.56 +SET 77420.34 57422.16 +SET 774248.80 253926.40 +SET 774254.80 440802.04 +SET 774281.20 466357.43 +SET 7743.90 5743.60 +SET 774305.56 457014.18 +SET 774310.02 536891.58 +SET 774391.75 536948.25 +SET 774459.62 457105.11 +SET 774524.93 582443.86 +SET 774590.04 669570.84 +SET 774613.68 457196.04 +SET 774648.66 494702.88 +SET 77466.99 57456.76 +SET 774685.92 254069.76 +SET 774718.40 466620.76 +SET 774767.74 457286.97 +SET 77479.52 25410.56 +SET 77485.65 57470.60 +SET 77485.85 51913.07 +SET 774904.48 254141.44 +SET 77492.18 45737.79 +SET 77493.99 62470.24 +SET 77494.98 57477.52 +SET 775030.08 483999.12 +SET 775045.59 537401.61 +SET 775123.04 254213.12 +SET 77519.32 58294.64 +SET 77522.97 57498.28 +SET 775283.30 441387.59 +SET 77533.30 51944.86 +SET 775450.88 254320.64 +SET 77548.90 44150.47 +SET 775591.11 625227.36 +SET 77560.29 57525.96 +SET 775669.44 254392.32 +SET 775699.43 537854.97 +SET 775846.16 457923.48 +SET 775869.30 495482.40 +SET 77588.80 25446.40 +SET 775888.00 254464.00 +SET 775997.28 254499.84 +SET 776021.88 495579.84 +SET 776026.35 538081.65 +SET 77605.12 48463.68 +SET 77606.94 57560.56 +SET 776106.56 254535.68 +SET 77625.60 57574.40 +SET 776271.54 538251.66 +SET 776311.80 441973.14 +SET 7764.35 5383.65 +SET 77644.26 57588.24 +SET 776517.50 442090.25 +SET 776543.68 254679.04 +SET 776561.76 484955.64 +SET 776598.46 538478.34 +SET 77662.92 57602.08 +SET 776652.96 254714.88 +SET 776699.49 671394.29 +SET 776723.20 442207.36 +SET 77675.65 52040.23 +SET 776762.24 254750.72 +SET 776770.52 458469.06 +SET 776817.04 485115.06 +SET 776924.58 458559.99 +SET 777072.32 485274.48 +SET 777078.64 458650.92 +SET 777089.94 496261.92 +SET 77709.57 57636.68 +SET 777090.08 254858.24 +SET 7771.89 5764.36 +SET 777199.36 254894.08 +SET 777308.64 254929.92 +SET 77737.56 57657.44 +SET 777386.76 458832.78 +SET 777395.10 496456.80 +SET 77754.60 44267.58 +SET 777543.27 672123.67 +SET 777544.74 626802.24 +SET 777660.95 539215.05 +SET 777778.80 468464.07 +SET 777824.41 539328.39 +SET 77784.21 57692.04 +SET 777866.28 584956.56 +SET 777957.40 442910.02 +SET 777964.32 255144.96 +SET 777965.16 672488.36 +SET 778003.00 459196.50 +SET 77806.96 53949.84 +SET 778069.60 539498.40 +SET 77812.20 57712.80 +SET 778163.10 443027.13 +SET 778182.88 255216.64 +SET 77821.53 57719.72 +SET 778216.00 468727.40 +SET 778314.79 539668.41 +SET 778401.44 255288.32 +SET 778478.25 539781.75 +SET 77849.52 57740.48 +SET 778559.98 539838.42 +SET 778574.50 443261.35 +SET 778604.00 486231.00 +SET 778641.71 539895.09 +SET 77865.45 52167.39 +SET 77868.18 57754.32 +SET 778773.30 459651.15 +SET 778838.56 255431.68 +SET 778847.16 627852.16 +SET 778920.90 497431.20 +SET 778927.36 459742.08 +SET 778947.84 255467.52 +SET 77896.17 57775.08 +SET 778968.63 540121.77 +SET 779050.36 540178.44 +SET 779081.42 459833.01 +SET 779132.09 540235.11 +SET 77914.83 57788.92 +SET 77916.64 25553.92 +SET 779191.60 443612.68 +SET 779202.82 585961.64 +SET 779213.82 540291.78 +SET 779230.83 673582.43 +SET 779295.55 540348.45 +SET 77933.49 57802.76 +SET 779377.28 540405.12 +SET 779378.64 497723.52 +SET 779384.96 255610.88 +SET 779397.30 443729.79 +SET 779459.01 540461.79 +SET 779494.24 255646.72 +SET 77952.15 57816.60 +SET 779540.74 540518.46 +SET 77960.35 52230.97 +SET 779603.00 443846.90 +SET 77961.48 57823.52 +SET 779622.47 540575.13 +SET 779625.12 486868.68 +SET 779683.80 497918.40 +SET 779697.66 460196.73 +SET 77970.42 54063.18 +SET 77980.14 57837.36 +SET 779836.38 498015.84 +SET 779880.40 487028.10 +SET 779949.39 540801.81 +SET 77998.80 57851.20 +SET 780005.78 460378.59 +SET 78008.13 57858.12 +SET 780149.58 628902.08 +SET 780194.58 540971.82 +SET 780294.12 498308.16 +SET 780313.90 460560.45 +SET 78036.12 57878.88 +SET 780368.48 255933.44 +SET 780390.96 487346.94 +SET 780425.80 444315.34 +SET 780439.77 541141.83 +SET 78049.65 67467.65 +SET 78064.11 57899.64 +SET 780684.96 541311.84 +SET 780696.32 256040.96 +SET 780751.86 498600.48 +SET 780766.69 541368.51 +SET 780776.08 460833.24 +SET 780805.60 256076.80 +SET 78082.77 57913.48 +SET 780918.39 675041.19 +SET 78092.10 57920.40 +SET 78101.43 57927.32 +SET 781011.88 541538.52 +SET 78102.70 52326.34 +SET 78108.42 46101.51 +SET 781093.61 541595.19 +SET 78110.76 57934.24 +SET 78115.68 48782.52 +SET 781156.80 487825.20 +SET 78120.96 49889.28 +SET 781207.63 587469.26 +SET 781209.60 498892.80 +SET 781248.60 444783.78 +SET 781257.07 541708.53 +SET 781362.18 498990.24 +SET 78138.75 57955.00 +SET 7814.52 6299.52 +SET 781454.30 444900.89 +SET 78148.08 57961.92 +SET 78150.15 52358.13 +SET 781546.38 461287.89 +SET 78157.41 57968.84 +SET 781660.00 445018.00 +SET 781665.72 541991.88 +SET 781667.36 488144.04 +SET 781789.12 256399.36 +SET 7818.54 5798.96 +SET 78185.40 57989.60 +SET 781875.90 587971.80 +SET 78194.73 57996.52 +SET 781992.64 542218.56 +SET 782007.68 256471.04 +SET 782008.56 461560.68 +SET 782071.40 445252.22 +SET 782125.08 499477.44 +SET 78213.39 58010.36 +SET 78215.61 54233.19 +SET 782150.80 471097.37 +SET 782156.10 542331.90 +SET 782162.62 461651.61 +SET 782277.10 445369.33 +SET 78232.05 58024.20 +SET 78241.38 58031.12 +SET 782482.80 445486.44 +SET 782544.17 588474.34 +SET 78258.80 47136.07 +SET 782588.00 471360.70 +SET 78262.48 46192.44 +SET 782688.48 488781.72 +SET 7827.87 5805.88 +SET 782728.21 542728.59 +SET 78273.54 49986.72 +SET 782735.40 499867.20 +SET 782887.98 499964.64 +SET 78297.34 54289.86 +SET 78297.36 58072.64 +SET 782991.20 256793.60 +SET 783.72 581.28 +SET 783040.56 500062.08 +SET 783099.90 445837.77 +SET 78325.35 58093.40 +SET 783300.32 543125.28 +SET 783382.05 543181.95 +SET 78339.95 52485.29 +SET 783405.63 631526.88 +SET 783454.32 489259.98 +SET 783462.40 471887.36 +SET 78353.34 58114.16 +SET 78353.76 25697.28 +SET 783627.24 543351.96 +SET 783646.88 257008.64 +SET 783650.88 500451.84 +SET 7837.20 5812.80 +SET 78370.96 48941.94 +SET 783703.22 462560.91 +SET 783708.97 543408.63 +SET 783717.00 446189.10 +SET 783790.70 543465.30 +SET 78381.33 58134.92 +SET 783899.60 472150.69 +SET 783922.70 446306.21 +SET 783956.04 500646.72 +SET 783974.72 257116.16 +SET 78399.99 58148.76 +SET 784128.40 446423.32 +SET 784165.40 462833.70 +SET 78418.65 58162.60 +SET 784193.28 257187.84 +SET 784220.16 489738.24 +SET 78426.12 50084.16 +SET 784261.20 500841.60 +SET 784319.46 462924.63 +SET 784334.10 446540.43 +SET 784362.81 543861.99 +SET 784411.84 257259.52 +SET 784475.44 489897.66 +SET 784526.27 543975.33 +SET 78455.97 58190.28 +SET 784566.36 501036.48 +SET 7846.53 5819.72 +SET 784627.58 463106.49 +SET 78465.30 58197.20 +SET 784689.73 544088.67 +SET 784718.94 501133.92 +SET 784739.68 257367.04 +SET 78474.63 58204.12 +SET 784848.96 257402.88 +SET 784935.70 463288.35 +SET 785067.52 257474.56 +SET 785098.38 544372.02 +SET 78511.95 58231.80 +SET 785176.80 257510.40 +SET 785217.25 590484.50 +SET 785243.82 463470.21 +SET 785286.08 257546.24 +SET 785329.26 501523.68 +SET 785359.26 633101.76 +SET 78539.94 58252.56 +SET 785395.36 257582.08 +SET 785481.84 501621.12 +SET 78549.27 58259.48 +SET 785496.56 490535.34 +SET 7855.86 5826.64 +SET 785568.30 447243.09 +SET 785613.92 257653.76 +SET 785648.40 473204.01 +SET 78567.93 58273.32 +SET 7857.06 4637.43 +SET 785723.20 257689.60 +SET 785751.84 490694.76 +SET 78577.26 58280.24 +SET 785787.00 501816.00 +SET 785832.48 257725.44 +SET 785885.52 590987.04 +SET 785939.58 501913.44 +SET 78595.92 58294.08 +SET 786051.04 257797.12 +SET 78614.58 58307.92 +SET 78623.91 58314.84 +SET 786242.60 545165.40 +SET 786262.40 491013.60 +SET 786269.60 257868.80 +SET 786324.33 545222.07 +SET 786397.32 502205.76 +SET 786402.96 679782.16 +SET 786406.06 545278.74 +SET 78642.57 58328.68 +SET 786488.16 257940.48 +SET 78651.90 58335.60 +SET 786569.52 545392.08 +SET 786596.80 447828.64 +SET 78661.23 58342.52 +SET 78672.10 52707.82 +SET 786732.98 545505.42 +SET 78679.89 58356.36 +SET 786802.50 447945.75 +SET 786855.06 502498.08 +SET 78689.22 58363.28 +SET 78696.00 47399.40 +SET 786960.00 473994.00 +SET 786978.17 545675.43 +SET 787034.56 258119.68 +SET 787059.90 545732.10 +SET 78707.88 58377.12 +SET 787143.84 258155.52 +SET 78719.55 52739.61 +SET 787246.74 680511.54 +SET 787253.12 258191.36 +SET 78735.87 58397.88 +SET 787419.60 448297.08 +SET 787471.68 258263.04 +SET 787580.96 258298.88 +SET 7876.70 5277.14 +SET 787617.96 502985.28 +SET 787625.30 448414.19 +SET 78763.86 58418.64 +SET 787668.63 680876.23 +SET 787690.24 258334.72 +SET 787713.74 546185.46 +SET 78773.19 58425.56 +SET 787770.54 503082.72 +SET 787799.52 258370.56 +SET 787862.84 465016.02 +SET 787890.33 592494.66 +SET 78790.88 25840.64 +SET 787908.80 258406.40 +SET 787958.93 546355.47 +SET 78796.41 63520.16 +SET 787964.10 635201.60 +SET 78801.18 58446.32 +SET 788016.90 465106.95 +SET 788018.08 258442.24 +SET 788040.66 546412.14 +SET 788049.36 492129.54 +SET 788127.36 258478.08 +SET 78814.45 52803.19 +SET 788170.96 465197.88 +SET 788271.60 474783.99 +SET 788285.85 546582.15 +SET 78829.17 58467.08 +SET 788325.02 465288.81 +SET 788345.92 258549.76 +SET 788367.58 546638.82 +SET 788448.10 448882.63 +SET 788559.92 492448.38 +SET 78861.90 52834.98 +SET 788612.77 546808.83 +SET 788615.31 635726.56 +SET 78866.49 58494.76 +SET 78869.45 54686.55 +SET 78878.72 46556.16 +SET 788783.04 258693.12 +SET 78881.52 49260.78 +SET 788892.32 258728.96 +SET 789021.42 547092.18 +SET 789065.20 449233.96 +SET 789103.15 547148.85 +SET 789110.88 258800.64 +SET 789143.76 503959.68 +SET 789266.52 636251.52 +SET 789270.90 449351.07 +SET 789296.34 504057.12 +SET 789325.76 492926.64 +SET 789329.44 258872.32 +SET 789348.34 547318.86 +SET 78951.18 54743.22 +SET 789593.53 547488.87 +SET 789657.28 258979.84 +SET 789711.56 466107.18 +SET 789756.99 547602.21 +SET 789836.32 493245.48 +SET 78997.11 58591.64 +SET 790019.68 466289.04 +SET 790059.24 504544.32 +SET 790299.40 449936.62 +SET 790364.40 504739.20 +SET 790410.83 548055.57 +SET 79043.76 58626.24 +SET 790492.56 548112.24 +SET 790516.98 504836.64 +SET 790531.52 259266.56 +SET 790568.94 637301.44 +SET 790656.02 548225.58 +SET 790710.80 450170.84 +SET 79081.08 58653.92 +SET 790822.14 505031.52 +SET 790894.80 476363.97 +SET 790974.72 505128.96 +SET 790982.94 548452.26 +SET 791043.75 683793.75 +SET 791064.67 548508.93 +SET 791098.10 466925.55 +SET 791127.30 505226.40 +SET 79114.64 54856.56 +SET 791146.40 548565.60 +SET 79118.72 25948.16 +SET 791220.15 637826.40 +SET 791228.13 548622.27 +SET 791231.68 595007.36 +SET 79127.73 58688.52 +SET 791296.48 259517.44 +SET 7913.68 4942.02 +SET 791309.86 548678.94 +SET 791332.00 476627.30 +SET 79136.80 49420.20 +SET 791432.46 505421.28 +SET 79146.39 58702.36 +SET 791533.60 450639.28 +SET 79155.72 58709.28 +SET 791636.78 548905.62 +SET 791718.51 548962.29 +SET 791733.60 259660.80 +SET 791769.20 476890.63 +SET 791800.24 549018.96 +SET 791890.20 505713.60 +SET 791899.95 595509.90 +SET 79194.05 53057.51 +SET 79194.50 45087.35 +SET 7921.17 5875.08 +SET 792133.84 494680.26 +SET 792195.36 505908.48 +SET 792290.62 549358.98 +SET 79230.36 58764.64 +SET 792347.94 506005.92 +SET 792372.35 549415.65 +SET 792389.28 259875.84 +SET 79239.69 58771.56 +SET 7924.15 5308.93 +SET 792454.08 549472.32 +SET 792484.64 467743.92 +SET 79249.02 58778.48 +SET 792568.22 596012.44 +SET 792617.54 549585.66 +SET 792731.31 685252.51 +SET 792767.80 451341.94 +SET 79277.01 58799.24 +SET 792805.68 506298.24 +SET 792826.40 260019.20 +SET 792935.68 260055.04 +SET 792944.46 549812.34 +SET 79295.67 58813.08 +SET 792958.26 506395.68 +SET 7930.50 5882.00 +SET 793044.96 260090.88 +SET 79305.00 58820.00 +SET 793100.88 468107.64 +SET 793107.92 549925.68 +SET 793154.96 495317.94 +SET 793179.20 451576.16 +SET 793189.65 549982.35 +SET 793236.49 596514.98 +SET 793263.42 506590.56 +SET 793263.52 260162.56 +SET 79332.99 58840.76 +SET 793353.11 550095.69 +SET 79337.28 26019.84 +SET 793416.00 506688.00 +SET 79342.32 58847.68 +SET 793482.08 260234.24 +SET 79351.65 58854.60 +SET 793590.60 451810.38 +SET 793598.30 550265.70 +SET 79360.98 58861.52 +SET 793665.52 495636.78 +SET 793761.76 550379.04 +SET 79383.85 53184.67 +SET 793843.49 550435.71 +SET 793904.76 597017.52 +SET 793919.20 260377.60 +SET 793955.20 478207.28 +SET 79398.30 58889.20 +SET 79407.63 58896.12 +SET 794088.68 550605.72 +SET 794137.76 260449.28 +SET 794170.41 550662.39 +SET 794178.90 507175.20 +SET 794247.04 260485.12 +SET 794333.36 468835.08 +SET 794333.87 550775.73 +SET 79441.56 55083.24 +SET 794415.60 550832.40 +SET 794574.88 260592.64 +SET 794579.06 550945.74 +SET 794619.10 452395.93 +SET 794641.48 469016.94 +SET 794660.79 551002.41 +SET 79472.94 58944.56 +SET 794742.52 551059.08 +SET 794789.22 507564.96 +SET 794824.80 452513.04 +SET 794829.60 478733.94 +SET 794840.76 687075.96 +SET 794902.72 260700.16 +SET 79494.18 50766.24 +SET 79494.96 46919.88 +SET 794941.92 496433.88 +SET 794987.71 551229.09 +SET 795012.00 260736.00 +SET 795069.44 551285.76 +SET 795094.38 507759.84 +SET 795127.41 640976.16 +SET 795197.20 496593.30 +SET 795230.56 260807.68 +SET 79524.13 59802.26 +SET 795246.96 507857.28 +SET 795257.72 469380.66 +SET 795262.65 687440.65 +SET 795339.84 260843.52 +SET 795441.90 452864.37 +SET 795452.48 496752.72 +SET 79547.58 58999.92 +SET 79555.84 26091.52 +SET 79556.91 59006.84 +SET 795565.84 469562.52 +SET 795641.55 551682.45 +SET 795647.60 452981.48 +SET 79566.24 59013.76 +SET 795667.68 260951.04 +SET 795704.00 479260.60 +SET 795707.76 496912.14 +SET 79573.65 53311.83 +SET 79575.57 59020.68 +SET 795853.30 453098.59 +SET 795857.28 508247.04 +SET 795886.24 261022.72 +SET 795909.57 598525.14 +SET 795995.52 261058.56 +SET 796009.86 508344.48 +SET 796104.80 261094.40 +SET 79612.89 59048.36 +SET 796182.08 469926.24 +SET 79621.10 53343.62 +SET 796214.08 261130.24 +SET 796295.39 552135.81 +SET 796315.02 508539.36 +SET 796323.36 261166.08 +SET 79640.88 59069.12 +SET 796467.60 508636.80 +SET 79649.02 47010.81 +SET 796490.20 470108.10 +SET 796528.32 688534.72 +SET 796577.84 599027.68 +SET 796578.40 479787.26 +SET 796620.18 508734.24 +SET 79668.55 53375.41 +SET 79678.20 59096.80 +SET 79687.53 59103.72 +SET 796881.80 453684.14 +SET 796925.34 508929.12 +SET 796949.23 552589.17 +SET 796950.21 688899.41 +SET 796952.38 470380.89 +SET 797087.50 453801.25 +SET 7971.60 5340.72 +SET 797230.50 509124.00 +SET 797239.44 497868.66 +SET 79724.85 59131.40 +SET 797246.11 599530.22 +SET 797306.88 261488.64 +SET 797494.72 498028.08 +SET 79752.84 59152.16 +SET 797535.66 509318.88 +SET 797568.62 470744.61 +SET 7977.15 5916.60 +SET 797704.60 454152.58 +SET 79771.50 59166.00 +SET 797732.25 643076.00 +SET 79774.40 26163.20 +SET 797744.00 261632.00 +SET 797766.53 553155.87 +SET 797793.99 689628.79 +SET 79780.83 59172.92 +SET 797929.99 553269.21 +SET 79799.34 50961.12 +SET 797993.40 509611.20 +SET 79803.08 47101.74 +SET 798071.84 261739.52 +SET 79808.82 59193.68 +SET 798175.18 553439.22 +SET 798215.88 689993.48 +SET 798256.91 553495.89 +SET 79827.48 59207.52 +SET 798338.92 471199.26 +SET 798383.46 643600.96 +SET 798420.37 553609.23 +SET 79850.21 55366.59 +SET 798502.10 553665.90 +SET 79855.47 59228.28 +SET 7986.48 5923.52 +SET 798618.24 261918.72 +SET 79874.13 59242.12 +SET 798756.30 510098.40 +SET 798801.10 471472.05 +SET 79883.68 26199.04 +SET 798836.80 261990.40 +SET 798908.88 510195.84 +SET 798910.75 553949.25 +SET 79892.79 59255.96 +SET 798938.80 454855.24 +SET 798955.16 471562.98 +SET 798992.48 554005.92 +SET 79902.12 59262.88 +SET 799074.21 554062.59 +SET 799109.22 471653.91 +SET 799144.50 454972.35 +SET 79920.78 59276.72 +SET 799273.92 262133.76 +SET 799281.68 499144.02 +SET 79930.11 59283.64 +SET 79931.94 55423.26 +SET 79939.44 59290.56 +SET 799401.13 554289.27 +SET 799481.55 691087.55 +SET 799519.20 510585.60 +SET 79953.25 53566.15 +SET 799564.59 554402.61 +SET 799571.40 471926.70 +SET 79958.10 59304.40 +SET 799728.05 554515.95 +SET 79976.76 59318.24 +SET 799761.60 455323.68 +SET 799891.51 554629.29 +SET 79992.96 26234.88 +SET 799967.30 455440.79 +SET 799973.24 554685.96 +SET 800033.58 472199.49 +SET 800047.52 499622.28 +SET 800076.00 481893.90 +SET 800129.52 510975.36 +SET 800136.70 554799.30 +SET 80014.08 59345.92 +SET 800187.64 472290.42 +SET 800218.43 554855.97 +SET 80032.74 59359.76 +SET 800325.33 691816.93 +SET 800337.09 645175.84 +SET 800341.70 472381.35 +SET 800381.89 554969.31 +SET 800434.68 511170.24 +SET 800463.62 555025.98 +SET 80048.15 53629.73 +SET 800495.76 472472.28 +SET 80051.40 59373.60 +SET 800558.08 499941.12 +SET 800708.81 555195.99 +SET 800739.84 511365.12 +SET 800790.10 455909.23 +SET 800790.54 555252.66 +SET 800892.42 511462.56 +SET 801022.40 262707.20 +SET 801035.73 555422.67 +SET 801068.64 500259.96 +SET 801199.19 555536.01 +SET 801201.50 456143.45 +SET 801255.73 602545.46 +SET 80135.37 59435.88 +SET 801387.60 482683.89 +SET 801407.20 456260.56 +SET 80143.05 53693.31 +SET 801444.38 555706.02 +SET 8015.91 6929.11 +SET 801502.74 511852.32 +SET 801568.80 262886.40 +SET 801579.20 500578.80 +SET 801612.90 456377.67 +SET 801655.32 511949.76 +SET 80172.69 59463.56 +SET 80177.13 55593.27 +SET 801824.80 482947.22 +SET 801882.30 473290.65 +SET 801960.48 512144.64 +SET 80200.68 59484.32 +SET 802024.30 456611.89 +SET 802089.76 500897.64 +SET 802098.22 556159.38 +SET 802115.20 263065.60 +SET 80223.00 45672.90 +SET 802230.00 456729.00 +SET 802261.68 556272.72 +SET 802265.64 512339.52 +SET 80228.67 59505.08 +SET 8023.80 5951.20 +SET 802333.76 263137.28 +SET 802343.41 556329.39 +SET 802345.04 501057.06 +SET 80237.95 53756.89 +SET 80238.00 59512.00 +SET 802425.14 556386.06 +SET 802498.54 473654.37 +SET 802506.87 556442.73 +SET 802570.80 512534.40 +SET 80258.86 55649.94 +SET 802588.60 556499.40 +SET 80265.26 47374.53 +SET 802661.60 263244.80 +SET 802723.38 512631.84 +SET 802752.06 556612.74 +SET 80284.65 59546.60 +SET 802847.10 457080.33 +SET 802880.16 263316.48 +SET 802915.52 556726.08 +SET 80293.98 59553.52 +SET 802989.44 263352.32 +SET 80303.31 59560.44 +SET 803110.88 501535.32 +SET 80312.64 59567.36 +SET 803181.12 512924.16 +SET 80321.97 59574.28 +SET 803278.56 694369.76 +SET 80331.30 59581.20 +SET 803317.28 263459.84 +SET 803324.17 557009.43 +SET 803333.70 513021.60 +SET 80340.63 59588.12 +SET 803422.90 474199.95 +SET 803464.20 457431.66 +SET 803487.63 557122.77 +SET 80349.96 59595.04 +SET 803535.84 263531.52 +SET 803573.60 484000.54 +SET 803576.96 474290.88 +SET 80359.29 59601.96 +SET 803621.44 501854.16 +SET 803638.86 513216.48 +SET 803731.02 474381.81 +SET 803732.82 557292.78 +SET 803754.40 263603.20 +SET 80377.95 59615.80 +SET 803791.44 513313.92 +SET 80380.30 53852.26 +SET 803863.68 263639.04 +SET 803876.72 502013.58 +SET 803896.28 557406.12 +SET 803944.02 513411.36 +SET 804039.14 474563.67 +SET 804059.74 557519.46 +SET 804082.24 263710.72 +SET 80409.66 51350.88 +SET 804132.00 502173.00 +SET 80419.32 47465.46 +SET 804193.20 474654.60 +SET 804223.20 557632.80 +SET 804244.35 648325.60 +SET 804249.18 513606.24 +SET 80427.75 53884.05 +SET 804287.00 457900.10 +SET 80433.93 59657.32 +SET 804410.08 263818.24 +SET 80444.80 48452.72 +SET 804468.39 557802.81 +SET 804519.36 263854.08 +SET 804544.23 695463.83 +SET 80461.92 59678.08 +SET 804628.64 263889.92 +SET 804698.40 458134.32 +SET 804737.92 263925.76 +SET 80475.20 53915.84 +SET 804809.44 475018.32 +SET 804885.20 484790.53 +SET 804897.84 502651.26 +SET 804956.48 263997.44 +SET 804966.12 695828.52 +SET 805012.08 514093.44 +SET 805065.76 264033.28 +SET 805109.80 458368.54 +SET 805117.56 475200.18 +SET 805122.23 558256.17 +SET 805153.12 502810.68 +SET 805271.62 475291.11 +SET 80536.56 59733.44 +SET 805367.42 558426.18 +SET 80539.36 26414.08 +SET 805408.40 502970.10 +SET 805425.68 475382.04 +SET 805663.68 503129.52 +SET 805694.34 558652.86 +SET 80570.10 53979.42 +SET 805726.90 458719.87 +SET 80573.88 59761.12 +SET 80580.99 69655.79 +SET 805887.86 475654.83 +SET 805927.56 514678.08 +SET 806049.28 264355.84 +SET 806080.14 514775.52 +SET 80617.55 54011.21 +SET 806196.80 485580.52 +SET 806197.98 649900.48 +SET 806267.84 264427.52 +SET 80634.40 45907.12 +SET 806350.04 475927.62 +SET 80639.19 59809.56 +SET 806429.52 503607.78 +SET 806429.91 559162.89 +SET 80648.52 59816.48 +SET 806486.40 264499.20 +SET 806504.10 476018.55 +SET 806549.70 459188.31 +SET 806595.68 264535.04 +SET 8066.50 5404.30 +SET 806634.00 485843.85 +SET 806653.68 697287.28 +SET 806704.96 264570.88 +SET 806756.83 559389.57 +SET 806843.04 515262.72 +SET 80685.84 59844.16 +SET 806923.52 264642.56 +SET 806961.10 459422.53 +SET 806995.62 515360.16 +SET 8070.45 5985.80 +SET 807032.80 264678.40 +SET 807083.75 559616.25 +SET 80713.83 59864.92 +SET 807148.20 515457.60 +SET 807195.36 504086.04 +SET 80723.16 59871.84 +SET 807251.36 264750.08 +SET 80732.49 59878.76 +SET 807410.67 559842.93 +SET 807450.64 504245.46 +SET 807469.92 264821.76 +SET 80750.04 65095.04 +SET 80757.92 26485.76 +SET 807574.13 559956.27 +SET 807578.20 459773.86 +SET 80759.90 54106.58 +SET 807655.86 560012.94 +SET 807705.92 504404.88 +SET 807797.76 264929.28 +SET 80788.47 59920.28 +SET 807890.64 476836.92 +SET 807945.60 486633.84 +SET 808016.32 265000.96 +SET 808063.68 516042.24 +SET 80807.13 59934.12 +SET 80807.35 54138.37 +SET 808125.60 265036.80 +SET 80816.46 59941.04 +SET 808234.88 265072.64 +SET 80830.97 56046.63 +SET 80835.12 59954.88 +SET 808391.43 560522.97 +SET 808453.44 265144.32 +SET 808471.76 504883.14 +SET 808473.16 560579.64 +SET 808521.42 516334.56 +SET 80853.78 59968.72 +SET 80854.80 54170.16 +SET 808554.89 560636.31 +SET 8086.74 5164.32 +SET 80860.67 60807.34 +SET 808636.62 560692.98 +SET 808660.94 477291.57 +SET 80867.20 26521.60 +SET 808672.00 265216.00 +SET 80872.44 59982.56 +SET 808781.28 265251.84 +SET 808800.08 560806.32 +SET 80881.77 59989.48 +SET 808812.40 460476.52 +SET 808826.58 516529.44 +SET 808881.81 560862.99 +SET 808963.54 560919.66 +SET 808979.16 516626.88 +SET 808982.32 505201.98 +SET 808999.84 265323.52 +SET 809018.10 460593.63 +SET 809109.12 265359.36 +SET 809131.74 516724.32 +SET 809218.40 265395.20 +SET 80923.76 50536.14 +SET 809237.60 505361.40 +SET 809327.68 265431.04 +SET 809372.19 561203.01 +SET 809429.50 460827.85 +SET 809436.96 265466.88 +SET 809454.03 652525.28 +SET 80949.70 54233.74 +SET 809535.65 561316.35 +SET 809546.24 265502.72 +SET 80956.41 60044.84 +SET 809589.48 517016.64 +SET 809606.91 699840.11 +SET 809617.38 561373.02 +SET 809694.40 487687.16 +SET 809699.11 561429.69 +SET 80976.48 26557.44 +SET 80984.40 60065.60 +SET 809840.90 461062.07 +SET 809893.42 478019.01 +SET 809894.64 517211.52 +SET 80993.73 60072.52 +SET 809943.24 609078.48 +SET 809983.36 265646.08 +SET 81.73 56.67 +SET 810026.03 561656.37 +SET 810028.80 700204.80 +SET 810047.48 478109.94 +SET 81012.39 60086.36 +SET 810131.60 487950.49 +SET 810189.49 561769.71 +SET 81019.98 51740.64 +SET 810201.54 478200.87 +SET 81021.72 60093.28 +SET 810252.30 461296.29 +SET 81031.05 60100.20 +SET 810352.38 517503.84 +SET 810420.48 265789.44 +SET 81044.60 54297.32 +SET 810450.69 700569.49 +SET 810458.00 461413.40 +SET 81059.04 60120.96 +SET 810663.72 478473.66 +SET 8107.77 6013.48 +SET 810748.32 265896.96 +SET 810769.28 506317.92 +SET 81077.70 60134.80 +SET 810810.12 517796.16 +SET 810817.78 478564.59 +SET 81085.76 26593.28 +SET 810869.40 461647.62 +SET 81087.03 60141.72 +SET 81092.05 54329.11 +SET 810962.70 517893.60 +SET 811006.00 488477.15 +SET 811088.52 562393.08 +SET 811115.28 517991.04 +SET 811125.90 478746.45 +SET 811185.44 266040.32 +SET 811251.98 562506.42 +SET 811279.78 610083.56 +SET 811279.96 478837.38 +SET 811280.80 461881.84 +SET 811294.47 701298.87 +SET 811294.72 266076.16 +SET 81133.68 60176.32 +SET 811434.02 478928.31 +SET 811573.02 518283.36 +SET 811692.20 462116.06 +SET 811716.36 701663.56 +SET 811731.84 266219.52 +SET 81180.33 60210.92 +SET 811824.09 562903.11 +SET 81186.95 54392.69 +SET 811878.18 518478.24 +SET 811880.40 489003.81 +SET 811987.55 563016.45 +SET 812151.01 563129.79 +SET 812278.24 266398.72 +SET 812309.30 462467.39 +SET 812335.92 518770.56 +SET 81234.40 54424.48 +SET 812387.52 266434.56 +SET 81245.64 60259.36 +SET 812477.93 563356.47 +SET 812488.50 518868.00 +SET 812515.00 462584.50 +SET 81254.97 60266.28 +SET 812556.24 507433.86 +SET 8126.43 6027.32 +SET 812606.08 266506.24 +SET 812641.39 563469.81 +SET 812666.50 479655.75 +SET 812710.08 655150.08 +SET 812715.36 266542.08 +SET 81281.85 54456.27 +SET 812811.52 507593.28 +SET 812824.64 266577.92 +SET 812886.58 563639.82 +SET 81292.29 60293.96 +SET 812933.92 266613.76 +SET 812946.24 519160.32 +SET 812974.62 479837.61 +SET 812982.03 702757.63 +SET 813132.10 462935.83 +SET 813152.48 266685.44 +SET 813192.00 489793.80 +SET 81321.35 56386.65 +SET 813261.76 266721.28 +SET 813282.74 480019.47 +SET 81329.30 54488.06 +SET 813295.23 563923.17 +SET 813322.08 507912.12 +SET 813361.29 655675.04 +SET 813376.96 563979.84 +SET 813403.92 703122.32 +SET 81348.27 60335.48 +SET 813540.42 564093.18 +SET 813556.56 519550.08 +SET 81357.60 60342.40 +SET 813622.15 564149.85 +SET 81366.93 60349.32 +SET 813703.88 564206.52 +SET 813749.20 463287.16 +SET 813785.61 564263.19 +SET 813808.16 266900.48 +SET 81385.59 60363.16 +SET 813861.72 519744.96 +SET 813898.98 480383.19 +SET 814030.80 564433.20 +SET 814087.92 508390.38 +SET 814136.00 267008.00 +SET 814166.88 519939.84 +SET 814194.26 564546.54 +SET 814207.10 480565.05 +SET 814319.46 520037.28 +SET 814354.56 267079.68 +SET 814366.30 463638.49 +SET 81441.57 60404.68 +SET 81450.90 60411.60 +SET 81457.20 46375.56 +SET 814598.48 508709.22 +SET 814602.91 564829.89 +SET 814669.28 480837.84 +SET 814682.40 267187.20 +SET 814766.37 564943.23 +SET 81477.72 52032.96 +SET 814777.70 463872.71 +SET 814823.34 480928.77 +SET 814853.76 508868.64 +SET 814940.80 490847.12 +SET 81497.55 60446.20 +SET 81506.88 60453.12 +SET 815093.29 565169.91 +SET 815109.04 509028.06 +SET 81522.88 26736.64 +SET 815234.94 520621.92 +SET 81525.54 60466.96 +SET 815256.75 565283.25 +SET 81528.94 61309.88 +SET 815285.52 481201.56 +SET 815289.40 613098.80 +SET 815338.48 565339.92 +SET 81534.87 60473.88 +SET 815387.52 520719.36 +SET 815439.58 481292.49 +SET 81544.20 60480.80 +SET 815501.94 565453.26 +SET 815513.37 704945.77 +SET 815556.64 267473.92 +SET 815583.67 565509.93 +SET 815593.64 481383.42 +SET 815600.50 464341.15 +SET 81566.55 54647.01 +SET 815665.40 565566.60 +SET 815747.13 565623.27 +SET 815828.86 565679.94 +SET 815874.88 509506.32 +SET 815884.48 267581.44 +SET 815901.76 481565.28 +SET 815935.26 705310.46 +SET 815992.32 565793.28 +SET 816074.05 565849.95 +SET 816103.04 267653.12 +SET 816150.42 521206.56 +SET 816155.78 565906.62 +SET 816212.32 267688.96 +SET 816217.60 464692.48 +SET 81628.17 60543.08 +SET 8163.75 6055.00 +SET 816303.00 521304.00 +SET 816357.15 705675.15 +SET 816363.94 481838.07 +SET 816430.88 267760.64 +SET 81651.80 48192.90 +SET 816518.00 481929.00 +SET 816540.16 267796.48 +SET 816629.00 464926.70 +SET 816640.72 509984.58 +SET 816649.44 267832.32 +SET 816672.06 482019.93 +SET 816760.74 521596.32 +SET 816809.62 566359.98 +SET 816834.70 465043.81 +SET 81684.15 60584.60 +SET 816868.00 267904.00 +SET 816980.18 482201.79 +SET 817.30 566.70 +SET 817086.56 267975.68 +SET 81712.14 60605.36 +SET 817126.80 492163.77 +SET 817136.54 566586.66 +SET 817151.28 510303.42 +SET 817195.84 268011.52 +SET 81740.13 60626.12 +SET 817406.56 510462.84 +SET 81749.46 60633.04 +SET 817523.64 522083.52 +SET 817523.68 268119.04 +SET 81756.35 54774.17 +SET 817564.00 492427.10 +SET 817596.42 482565.51 +SET 817661.84 510622.26 +SET 817750.48 482656.44 +SET 817828.80 522278.40 +SET 817919.76 659349.76 +SET 81796.11 60667.64 +SET 817981.38 522375.84 +SET 818068.90 465746.47 +SET 818172.40 510941.10 +SET 818179.36 268334.08 +SET 8182.41 6068.84 +SET 81842.76 60702.24 +SET 818438.40 492953.76 +SET 81851.25 54837.75 +SET 818520.78 483111.09 +SET 818682.96 511259.94 +SET 81870.75 60723.00 +SET 81889.41 60736.84 +SET 81893.46 56783.34 +SET 818938.24 511419.36 +SET 81898.74 60743.76 +SET 819049.44 523057.92 +SET 81908.07 60750.68 +SET 8191.74 6075.76 +SET 819193.52 511578.78 +SET 819303.10 466449.13 +SET 819312.80 493480.42 +SET 81935.46 52325.28 +SET 81944.88 51173.82 +SET 819445.14 483656.67 +SET 819448.80 511738.20 +SET 81946.15 54901.33 +SET 819490.72 268764.16 +SET 81954.72 60785.28 +SET 81959.92 48374.76 +SET 819600.00 268800.00 +SET 819714.50 466683.35 +SET 81975.19 56840.01 +SET 819750.00 493743.75 +SET 819812.34 523545.12 +SET 819873.39 660924.64 +SET 819907.32 483929.46 +SET 81993.60 54933.12 +SET 819959.36 512057.04 +SET 819964.92 523642.56 +SET 820037.12 268943.36 +SET 820270.08 523837.44 +SET 82029.36 60840.64 +SET 82038.69 60847.56 +SET 82041.05 54964.91 +SET 820537.30 467151.79 +SET 820624.40 494270.41 +SET 820725.20 512535.30 +SET 820727.82 524129.76 +SET 82074.30 46726.89 +SET 820831.68 484475.04 +SET 82085.34 60882.16 +SET 82088.50 54996.70 +SET 820880.40 524227.20 +SET 820911.36 269230.08 +SET 820980.48 512694.72 +SET 820997.94 709686.74 +SET 821020.64 269265.92 +SET 82104.00 60896.00 +SET 82113.98 48465.69 +SET 821139.80 484656.90 +SET 821154.40 467503.12 +SET 821185.56 524422.08 +SET 82131.99 60916.76 +SET 821338.14 524519.52 +SET 82138.65 56953.35 +SET 82141.32 60923.68 +SET 821419.83 710051.43 +SET 821491.04 513013.56 +SET 821498.80 494797.07 +SET 82150.65 60930.60 +SET 821567.04 269445.12 +SET 82159.98 60937.52 +SET 821601.98 484929.69 +SET 821676.32 269480.96 +SET 821771.50 467854.45 +SET 82178.56 26951.68 +SET 821785.60 269516.80 +SET 821936.00 495060.40 +SET 821977.20 467971.56 +SET 822001.60 513332.40 +SET 822064.16 485202.48 +SET 82215.96 60979.04 +SET 822218.22 485293.41 +SET 822222.72 269660.16 +SET 822263.61 710780.81 +SET 822332.00 269696.00 +SET 822373.20 495323.73 +SET 822388.60 468205.78 +SET 822478.23 663024.48 +SET 822550.56 269767.68 +SET 822685.50 711145.50 +SET 82271.94 61020.56 +SET 822767.44 513810.66 +SET 82280.00 46844.00 +SET 82281.27 61027.48 +SET 822863.94 525493.92 +SET 8229.06 6103.44 +SET 823005.70 468557.11 +SET 82302.11 57066.69 +SET 823022.72 513970.08 +SET 823096.96 269946.88 +SET 823107.39 711510.19 +SET 823142.58 485838.99 +SET 823206.24 269982.72 +SET 823211.40 468674.22 +SET 82325.75 55155.65 +SET 823417.10 468791.33 +SET 823424.80 270054.40 +SET 823474.26 525883.68 +SET 823533.28 514288.92 +SET 82355.91 61082.84 +SET 823643.36 270126.08 +SET 823752.64 270161.92 +SET 823779.42 526078.56 +SET 8238.39 6110.36 +SET 82383.84 57123.36 +SET 82393.23 61110.52 +SET 823971.20 270233.60 +SET 824066.94 486384.57 +SET 824084.58 526273.44 +SET 824122.00 496377.05 +SET 824189.76 270305.28 +SET 82420.65 55219.23 +SET 824221.00 486475.50 +SET 824237.16 526370.88 +SET 824299.12 514767.18 +SET 824373.06 712604.26 +SET 824375.06 486566.43 +SET 82449.21 61152.04 +SET 824542.32 526565.76 +SET 824559.20 496640.38 +SET 82465.57 57180.03 +SET 824651.30 469493.99 +SET 824736.16 270484.48 +SET 82477.20 61172.80 +SET 824809.68 515086.02 +SET 824837.24 486839.22 +SET 824845.44 270520.32 +SET 825000.06 526858.08 +SET 825062.70 469728.21 +SET 825064.00 270592.00 +SET 825083.07 665124.32 +SET 82514.52 61200.48 +SET 825152.64 526955.52 +SET 82523.85 61207.40 +SET 825268.40 469845.32 +SET 825282.56 270663.68 +SET 825299.42 487112.01 +SET 825305.22 527052.96 +SET 825313.45 620636.90 +SET 825320.24 515404.86 +SET 82533.18 61214.32 +SET 8254.73 5723.67 +SET 82542.51 61221.24 +SET 82545.78 52715.04 +SET 825575.52 515564.28 +SET 825610.38 527247.84 +SET 825610.40 270771.20 +SET 82570.50 61242.00 +SET 825762.96 527345.28 +SET 825830.80 515723.70 +SET 825915.66 487475.73 +SET 826047.52 270914.56 +SET 826060.62 714063.02 +SET 82607.82 61269.68 +SET 826086.08 515883.12 +SET 826091.20 470313.76 +SET 826223.78 487657.59 +SET 82626.48 61283.52 +SET 826341.36 516042.54 +SET 826375.36 271022.08 +SET 826502.60 470547.98 +SET 826678.44 527929.92 +SET 826685.96 487930.38 +SET 826703.20 271129.60 +SET 826812.48 271165.44 +SET 82691.79 61331.96 +SET 826921.76 271201.28 +SET 82698.36 52812.48 +SET 826983.60 528124.80 +SET 82701.12 61338.88 +SET 827031.04 271237.12 +SET 827036.70 666699.20 +SET 827119.70 470899.31 +SET 827136.18 528222.24 +SET 82719.78 61352.72 +SET 827288.76 528319.68 +SET 827318.26 622144.52 +SET 827325.40 471016.42 +SET 827358.88 271344.64 +SET 82738.44 61366.56 +SET 827441.34 528417.12 +SET 82747.77 61373.48 +SET 8275.71 6138.04 +SET 827577.44 271416.32 +SET 82766.43 61387.32 +SET 827736.80 471250.64 +SET 827746.50 528612.00 +SET 827748.18 715521.78 +SET 827764.38 488566.89 +SET 827899.08 528709.44 +SET 82794.42 61408.08 +SET 82800.25 55473.55 +SET 828056.80 498747.02 +SET 828072.50 488748.75 +SET 82813.08 61421.92 +SET 828170.07 715886.47 +SET 828204.24 528904.32 +SET 82834.24 27166.72 +SET 828353.90 471601.97 +SET 828380.62 488930.61 +SET 828509.40 529099.20 +SET 82874.22 57463.38 +SET 828765.30 471836.19 +SET 828814.56 529294.08 +SET 82884.28 48920.34 +SET 828842.80 489203.40 +SET 828888.80 271846.40 +SET 828894.16 517636.74 +SET 82895.15 55537.13 +SET 82897.10 47195.33 +SET 828990.33 668274.08 +SET 82915.71 61498.04 +SET 829150.92 489385.26 +SET 829216.64 271953.92 +SET 82925.04 61504.96 +SET 829304.98 489476.19 +SET 829325.92 271989.76 +SET 82934.37 61511.88 +SET 8294.37 6151.88 +SET 829404.72 517955.58 +SET 82942.60 55568.92 +SET 82943.70 61518.80 +SET 829459.04 489567.12 +SET 82953.03 61525.72 +SET 82971.69 61539.56 +SET 829805.60 499800.34 +SET 82981.02 61546.48 +SET 829921.22 489839.91 +SET 829991.34 624154.68 +SET 829999.50 472538.85 +SET 83003.52 53007.36 +SET 830075.28 489930.84 +SET 830090.88 272240.64 +SET 830170.56 518433.84 +SET 83018.34 61574.16 +SET 830187.78 530171.04 +SET 830205.20 472655.96 +SET 83027.67 61581.08 +SET 83037.50 55632.50 +SET 83037.68 57576.72 +SET 830425.84 518593.26 +SET 83046.33 61594.92 +SET 830492.94 530365.92 +SET 83052.80 27238.40 +SET 830528.00 272384.00 +SET 83064.99 61608.76 +SET 830645.52 530463.36 +SET 830701.41 718074.61 +SET 83074.32 61615.68 +SET 83084.95 55664.29 +SET 83092.98 61629.52 +SET 830936.40 518912.10 +SET 830943.96 669848.96 +SET 830965.12 272527.36 +SET 830999.64 490476.42 +SET 83111.64 61643.36 +SET 83112.33 71843.93 +SET 83119.41 57633.39 +SET 831255.84 530853.12 +SET 831292.96 272634.88 +SET 8313.03 6165.72 +SET 83132.40 55696.08 +SET 831327.88 625159.76 +SET 83139.63 61664.12 +SET 831511.52 272706.56 +SET 831554.40 500853.66 +SET 83167.62 61684.88 +SET 831850.80 473592.84 +SET 8319.24 4910.22 +SET 831924.00 491022.00 +SET 831967.08 719168.68 +SET 832018.74 531340.32 +SET 832056.50 473709.95 +SET 832078.06 491112.93 +SET 83221.28 51970.92 +SET 832246.38 670898.88 +SET 832323.90 531535.20 +SET 832385.76 272993.28 +SET 83251.59 61747.16 +SET 832604.32 273064.96 +SET 832664.42 626164.84 +SET 832673.60 474061.28 +SET 83270.25 61761.00 +SET 83274.75 55791.45 +SET 83282.87 57746.73 +SET 832848.36 491567.58 +SET 832866.00 501643.65 +SET 83298.24 61781.76 +SET 833002.42 491658.51 +SET 833041.44 273208.32 +SET 833086.80 532022.40 +SET 8331.69 6179.56 +SET 833156.48 491749.44 +SET 83322.20 55823.24 +SET 833232.75 720262.75 +SET 833233.92 520346.88 +SET 833239.38 532119.84 +SET 83326.23 61802.52 +SET 833290.70 474412.61 +SET 83335.56 61809.44 +SET 833391.96 532217.28 +SET 83346.46 49193.13 +SET 833478.56 273351.68 +SET 833489.20 520506.30 +SET 833496.40 474529.72 +SET 833548.80 671948.80 +SET 833587.84 273387.52 +SET 83363.55 61830.20 +SET 83369.65 55855.03 +SET 833697.12 273423.36 +SET 833702.10 474646.83 +SET 833926.78 492204.09 +SET 834000.96 627169.92 +SET 834080.84 492295.02 +SET 8341.02 6186.48 +SET 83417.10 55886.82 +SET 834177.60 502433.64 +SET 834234.90 492385.95 +SET 834307.44 532801.92 +SET 83438.19 61885.56 +SET 834388.96 492476.88 +SET 834462.08 273674.24 +SET 83447.52 61892.48 +SET 834498.42 721356.82 +SET 834510.32 521143.98 +SET 834543.02 492567.81 +SET 83456.85 61899.40 +SET 83461.26 53299.68 +SET 834612.60 532996.80 +SET 83466.18 61906.32 +SET 834669.23 627672.46 +SET 834680.64 273745.92 +SET 834697.08 492658.74 +SET 834765.60 521303.40 +SET 834851.14 492749.67 +SET 8350.35 6193.40 +SET 83500.52 49284.06 +SET 83503.50 61934.00 +SET 835052.00 502960.30 +SET 835159.26 492931.53 +SET 83531.49 61954.76 +SET 835313.32 493022.46 +SET 835445.60 273996.80 +SET 835467.38 493113.39 +SET 835489.20 503223.63 +SET 835528.08 533581.44 +SET 835553.40 475700.82 +SET 83559.48 61975.52 +SET 835664.16 274068.48 +SET 835680.66 533678.88 +SET 835773.44 274104.32 +SET 835786.72 521941.08 +SET 83596.80 62003.20 +SET 836005.77 628677.54 +SET 836042.00 522100.50 +SET 836083.62 493477.11 +SET 83615.46 62017.04 +SET 836237.68 493568.04 +SET 836290.98 534068.64 +SET 836319.84 274283.52 +SET 836363.60 503750.29 +SET 836391.74 493658.97 +SET 836538.40 274355.20 +SET 836596.14 534263.52 +SET 836674.04 629180.08 +SET 836699.86 493840.83 +SET 83671.44 62058.56 +SET 83680.77 62065.48 +SET 836800.80 504013.62 +SET 8369.01 6207.24 +SET 83699.43 62079.32 +SET 837007.98 494022.69 +SET 837063.12 522738.18 +SET 83708.76 62086.24 +SET 837084.80 274534.40 +SET 837162.04 494113.62 +SET 83718.09 62093.16 +SET 837194.08 274570.24 +SET 837206.46 534653.28 +SET 837238.00 504276.95 +SET 83727.42 62100.08 +SET 837318.40 522897.60 +SET 837342.31 629682.62 +SET 837359.04 534750.72 +SET 837412.64 274641.92 +SET 837451.65 723909.65 +SET 837521.92 274677.76 +SET 837624.22 494386.41 +SET 83764.74 62127.76 +SET 83766.42 53494.56 +SET 837664.20 534945.60 +SET 837816.10 476989.03 +SET 837816.78 535043.04 +SET 837828.96 523216.44 +SET 83783.40 62141.60 +SET 837932.34 494568.27 +SET 83796.70 56141.14 +SET 837969.36 535140.48 +SET 83802.06 62155.44 +SET 838021.80 477106.14 +SET 838274.52 535335.36 +SET 838286.88 274928.64 +SET 838339.52 523535.28 +SET 83839.38 62183.12 +SET 838394.52 494841.06 +SET 838396.16 274964.48 +SET 83844.15 56172.93 +SET 83848.71 62190.04 +SET 838505.44 275000.32 +SET 838548.58 494931.99 +SET 838549.60 505066.94 +SET 83867.37 62203.88 +SET 8387.67 6221.08 +SET 838702.64 495022.92 +SET 838844.60 477574.58 +SET 838850.08 523854.12 +SET 838986.80 505330.27 +SET 839.70 622.80 +SET 839050.30 477691.69 +SET 839051.84 275179.52 +SET 8391.90 5359.20 +SET 839164.82 495295.71 +SET 839190.00 535920.00 +SET 839270.40 275251.20 +SET 839318.88 495386.64 +SET 83932.68 62252.32 +SET 839379.68 275287.04 +SET 83939.05 56236.51 +SET 83942.01 62259.24 +SET 839461.70 477925.91 +SET 83956.11 72573.31 +SET 839561.10 725733.10 +SET 839647.74 536212.32 +SET 8397.00 6228.00 +SET 83970.00 62280.00 +SET 8398.65 5626.83 +SET 83986.50 56268.30 +SET 83987.12 52449.18 +SET 83988.66 62293.84 +SET 839926.08 275466.24 +SET 839952.90 536407.20 +SET 840035.36 275502.08 +SET 84006.09 67719.84 +SET 840144.64 275537.92 +SET 84035.31 62328.44 +SET 84044.64 62335.36 +SET 840472.48 275645.44 +SET 840490.20 478511.46 +SET 840563.22 536796.96 +SET 840637.04 524970.06 +SET 840695.90 478628.57 +SET 840712.11 677723.36 +SET 840800.32 275752.96 +SET 84081.40 56331.88 +SET 84081.96 62363.04 +SET 840859.48 496295.94 +SET 840892.32 525129.48 +SET 840909.60 275788.80 +SET 84109.95 62383.80 +SET 841107.30 478862.79 +SET 841147.60 525288.90 +SET 84116.76 49647.78 +SET 84119.28 62390.72 +SET 841351.93 632697.86 +SET 841363.32 678248.32 +SET 84137.94 62404.56 +SET 841402.88 525448.32 +SET 84145.60 27596.80 +SET 841456.00 275968.00 +SET 841670.55 727556.55 +SET 84176.30 56395.46 +SET 84184.59 62439.16 +SET 841913.44 525767.16 +SET 841936.44 537673.92 +SET 842002.40 276147.20 +SET 84203.25 62453.00 +SET 842047.20 507173.58 +SET 842092.44 727921.24 +SET 842111.68 276183.04 +SET 84221.91 62466.84 +SET 84223.75 56427.25 +SET 842341.50 479565.45 +SET 842394.18 537966.24 +SET 8424.24 5260.86 +SET 842439.52 276290.56 +SET 842514.33 728285.93 +SET 842548.80 276326.40 +SET 84263.63 58426.77 +SET 842665.74 679298.24 +SET 84270.82 49738.71 +SET 84271.20 56459.04 +SET 842862.26 497478.03 +SET 842876.64 276433.92 +SET 84296.55 62522.20 +SET 842985.92 276469.76 +SET 843.78 729.38 +SET 84305.88 62529.12 +SET 843095.20 276505.60 +SET 84315.21 62536.04 +SET 843157.08 538453.44 +SET 843170.38 497659.89 +SET 843204.48 276541.44 +SET 843309.66 538550.88 +SET 843313.76 276577.28 +SET 843316.95 679823.20 +SET 843356.74 634205.48 +SET 84337.00 48015.10 +SET 843478.50 497841.75 +SET 84352.53 62563.72 +SET 843532.32 276648.96 +SET 843575.70 480268.11 +SET 84361.86 62570.64 +SET 84364.16 27668.48 +SET 843750.88 276720.64 +SET 84376.74 53884.32 +SET 843780.00 729380.00 +SET 84389.85 62591.40 +SET 843919.98 538940.64 +SET 843968.16 680348.16 +SET 843969.44 276792.32 +SET 84413.55 56554.41 +SET 84417.84 62612.16 +SET 844188.00 276864.00 +SET 844201.89 729744.69 +SET 844225.14 539135.52 +SET 844248.80 498296.40 +SET 84427.17 62619.08 +SET 84436.50 62626.00 +SET 844398.50 480736.55 +SET 844406.56 276935.68 +SET 84445.83 62632.92 +SET 844515.84 276971.52 +SET 844625.12 277007.36 +SET 844710.98 498569.19 +SET 844721.52 527520.78 +SET 844809.90 480970.77 +SET 84483.15 62660.60 +SET 844843.68 277079.04 +SET 844952.96 277114.88 +SET 84501.81 62674.44 +SET 845045.67 730474.07 +SET 84508.82 58596.78 +SET 84511.14 62681.36 +SET 845171.52 277186.56 +SET 845173.16 498841.98 +SET 8452.98 6269.52 +SET 845232.08 527839.62 +SET 845270.58 681398.08 +SET 845280.80 277222.40 +SET 84529.32 53981.76 +SET 84529.80 62695.20 +SET 845293.20 539817.60 +SET 845327.22 498932.91 +SET 84539.13 62702.12 +SET 84542.70 48132.21 +SET 845445.78 539915.04 +SET 845467.56 730838.76 +SET 845487.36 527999.04 +SET 845499.36 277294.08 +SET 845544.80 509280.22 +SET 845632.70 481439.21 +SET 845635.34 499114.77 +SET 845717.92 277365.76 +SET 845750.94 540109.92 +SET 84576.45 62729.80 +SET 84578.94 49920.57 +SET 84582.72 27740.16 +SET 84585.78 62736.72 +SET 845889.45 731203.45 +SET 84590.55 58653.45 +SET 845921.79 681923.04 +SET 845943.46 499296.63 +SET 845982.00 509543.55 +SET 845997.92 528317.88 +SET 846029.82 636215.64 +SET 846056.10 540304.80 +SET 846097.52 499387.56 +SET 846208.68 540402.24 +SET 846264.32 277544.96 +SET 84632.43 62771.32 +SET 846361.26 540499.68 +SET 846373.60 277580.80 +SET 84641.76 62778.24 +SET 846482.88 277616.64 +SET 8465.73 6824.48 +SET 846508.48 528636.72 +SET 846573.00 682448.00 +SET 84660.42 62792.08 +SET 846666.42 540694.56 +SET 846701.44 277688.32 +SET 846763.76 528796.14 +SET 846856.40 510070.21 +SET 84688.41 62812.84 +SET 84698.25 56745.15 +SET 847021.88 499933.14 +SET 847029.28 277795.84 +SET 847124.16 540986.88 +SET 84716.40 62833.60 +SET 84725.73 62840.52 +SET 847278.30 482376.09 +SET 84735.06 62847.44 +SET 84745.70 56776.94 +SET 84748.40 48249.32 +SET 847484.00 482493.20 +SET 84752.96 52927.44 +SET 84753.72 62861.28 +SET 84754.01 58766.79 +SET 847575.68 277975.04 +SET 847581.90 541279.20 +SET 847730.80 510596.87 +SET 847734.48 541376.64 +SET 847784.88 529433.82 +SET 847895.40 482727.42 +SET 847903.52 278082.56 +SET 84793.15 56808.73 +SET 8480.97 6290.28 +SET 848034.63 637723.26 +SET 848040.16 529593.24 +SET 84809.70 62902.80 +SET 84816.80 51086.02 +SET 84834.48 54176.64 +SET 848340.64 278225.92 +SET 84835.74 58823.46 +SET 848408.42 500751.51 +SET 848420.79 733391.59 +SET 848550.72 529912.08 +SET 848559.20 278297.60 +SET 848562.48 500842.44 +SET 848605.20 511123.53 +SET 848649.96 541961.28 +SET 84870.29 63822.58 +SET 848716.54 500933.37 +SET 84884.34 62958.16 +SET 848923.90 483312.97 +SET 84903.00 62972.00 +SET 849061.28 530230.92 +SET 84910.56 27847.68 +SET 849105.60 278476.80 +SET 849107.70 542253.60 +SET 84917.47 58880.13 +SET 849260.28 542351.04 +SET 8493.55 5690.41 +SET 849324.16 278548.48 +SET 849335.30 483547.19 +SET 84940.32 62999.68 +SET 849542.72 278620.16 +SET 849718.02 542643.36 +SET 849746.70 483781.41 +SET 84982.95 56935.89 +SET 849827.12 530709.18 +SET 84986.97 63034.28 +SET 84987.06 54274.08 +SET 8499.63 6304.12 +SET 8499.92 5893.68 +SET 849916.80 511913.52 +SET 849949.02 501660.81 +SET 849979.84 278763.52 +SET 850023.18 542838.24 +SET 85008.24 53086.86 +SET 850089.12 278799.36 +SET 85014.96 63055.04 +SET 850158.10 484015.63 +SET 850175.76 542935.68 +SET 85019.84 27883.52 +SET 85024.29 63061.96 +SET 850328.34 543033.12 +SET 850337.68 531028.02 +SET 850354.00 512176.85 +SET 85041.12 50193.36 +SET 85042.95 63075.80 +SET 850526.24 278942.72 +SET 850633.50 543228.00 +SET 85070.94 63096.56 +SET 850719.32 502115.46 +SET 850848.24 531346.86 +SET 85089.60 63110.40 +SET 850952.13 735579.73 +SET 850963.36 279086.08 +SET 851181.50 502388.25 +SET 851228.40 512703.51 +SET 851243.82 543617.76 +SET 85125.30 57031.26 +SET 85129.12 27919.36 +SET 851291.20 279193.60 +SET 851358.80 531665.70 +SET 85136.25 63145.00 +SET 851374.02 735944.42 +SET 851400.48 279229.44 +SET 85145.58 63151.92 +SET 851489.62 502570.11 +SET 851548.98 543812.64 +SET 851619.04 279301.12 +SET 85162.66 59050.14 +SET 851643.68 502661.04 +SET 851728.32 279336.96 +SET 851782.68 686647.68 +SET 851797.74 502751.97 +SET 851803.70 484952.51 +SET 85182.90 63179.60 +SET 851854.14 544007.52 +SET 85192.23 63186.52 +SET 851946.88 279408.64 +SET 85195.18 50284.29 +SET 851951.80 502842.90 +SET 852044.25 640738.50 +SET 852102.80 513230.17 +SET 852105.86 502933.83 +SET 852159.30 544202.40 +SET 85220.20 57094.84 +SET 85221.78 73667.38 +SET 852274.72 279516.16 +SET 852311.88 544299.84 +SET 85238.88 63221.12 +SET 852384.00 279552.00 +SET 85244.39 59106.81 +SET 852464.46 544397.28 +SET 85254.00 51349.35 +SET 852635.20 532462.80 +SET 852712.52 641241.04 +SET 852769.62 544592.16 +SET 852832.20 485538.06 +SET 852890.48 532622.22 +SET 852930.40 279731.20 +SET 85294.86 63262.64 +SET 852977.20 513756.83 +SET 853030.22 503479.41 +SET 853037.90 485655.17 +SET 853039.68 279767.04 +SET 85304.19 63269.56 +SET 853061.58 737403.18 +SET 853338.34 503661.27 +SET 853380.79 641743.58 +SET 853401.04 532941.06 +SET 853449.30 485889.39 +SET 85347.68 27991.04 +SET 853476.80 279910.40 +SET 853483.47 737767.87 +SET 853492.40 503752.20 +SET 853586.08 279946.24 +SET 85365.50 48600.65 +SET 853655.00 486006.50 +SET 853656.32 533100.48 +SET 85378.83 63324.92 +SET 853851.60 514283.49 +SET 853905.36 738132.56 +SET 853913.92 280053.76 +SET 853954.58 504024.99 +SET 854049.06 642246.12 +SET 8541.00 5722.20 +SET 854108.64 504115.92 +SET 854142.84 545469.12 +SET 85425.48 63359.52 +SET 854262.70 504206.85 +SET 854288.80 514546.82 +SET 854295.42 545566.56 +SET 854351.04 280197.12 +SET 854387.52 688747.52 +SET 854422.16 533578.74 +SET 854460.32 280232.96 +SET 854678.88 280304.64 +SET 854726.00 514810.15 +SET 854749.14 738861.94 +SET 854788.16 280340.48 +SET 854878.94 504570.57 +SET 854897.44 280376.32 +SET 855163.20 515073.48 +SET 85518.80 53405.70 +SET 85528.11 63435.64 +SET 855341.12 504843.36 +SET 855385.60 643251.20 +SET 855443.28 534216.42 +SET 855495.18 504934.29 +SET 8555.61 6345.64 +SET 85571.20 48717.76 +SET 855712.00 487177.60 +SET 855803.30 505116.15 +SET 855821.22 546540.96 +SET 85584.09 63477.16 +SET 855917.70 487294.71 +SET 856014.81 739956.01 +SET 856053.87 643753.74 +SET 85612.08 63497.92 +SET 856126.38 546735.84 +SET 856208.80 280806.40 +SET 85621.41 63504.84 +SET 856265.48 505388.94 +SET 85630.74 63511.76 +SET 856318.08 280842.24 +SET 8564.94 6352.56 +SET 856427.36 280878.08 +SET 856436.70 740320.70 +SET 856474.80 515863.47 +SET 856534.80 487646.04 +SET 856536.64 280913.92 +SET 85658.73 63532.52 +SET 856722.14 644256.28 +SET 856727.66 505661.73 +SET 856736.70 547125.60 +SET 856740.50 487763.15 +SET 85675.52 28098.56 +SET 85677.39 63546.36 +SET 85691.20 51612.68 +SET 85696.05 63560.20 +SET 856973.76 281057.28 +SET 856974.96 535172.94 +SET 857192.32 281128.96 +SET 857194.44 547417.92 +SET 85724.04 63580.96 +SET 85733.37 63587.88 +SET 857347.02 547515.36 +SET 857349.20 516390.13 +SET 857390.41 644758.82 +SET 857410.88 281200.64 +SET 85742.15 57444.53 +SET 857499.60 547612.80 +SET 857629.44 281272.32 +SET 857652.18 547710.24 +SET 857702.37 741414.77 +SET 857738.72 281308.16 +SET 857740.80 535651.20 +SET 85776.90 48834.87 +SET 85798.68 63636.32 +SET 858066.56 281415.68 +SET 8581.65 5950.35 +SET 85811.42 50648.01 +SET 858124.26 741779.46 +SET 85816.50 59503.50 +SET 858251.36 535970.04 +SET 8583.60 6366.40 +SET 85836.00 63664.00 +SET 85837.05 57508.11 +SET 858546.15 742144.15 +SET 858567.66 548294.88 +SET 858591.80 488817.14 +SET 858612.96 281594.88 +SET 858722.24 281630.72 +SET 85882.65 63698.60 +SET 858872.82 548489.76 +SET 858884.50 506934.75 +SET 85894.08 28170.24 +SET 859003.20 489051.36 +SET 85901.31 63712.44 +SET 859017.20 536448.30 +SET 859050.08 281738.24 +SET 85910.64 63719.36 +SET 85929.30 63733.20 +SET 859330.56 548782.08 +SET 85938.63 63740.12 +SET 85947.96 63747.04 +SET 859487.20 281881.60 +SET 859527.76 536767.14 +SET 85959.72 69294.72 +SET 859654.80 507389.40 +SET 85975.95 63767.80 +SET 85979.40 57603.48 +SET 859811.82 743238.22 +SET 859826.00 489519.80 +SET 85994.61 63781.64 +SET 859962.92 507571.26 +SET 86003.36 28206.08 +SET 86003.94 63788.56 +SET 860063.49 646768.98 +SET 860116.98 507662.19 +SET 860142.88 282096.64 +SET 860233.71 743602.91 +SET 860398.62 549464.16 +SET 860425.10 507844.05 +SET 86050.59 63823.16 +SET 86055.12 54956.16 +SET 860648.80 489988.24 +SET 860689.28 282275.84 +SET 86069.25 63837.00 +SET 860731.76 647271.52 +SET 86074.30 57667.06 +SET 86078.58 63843.92 +SET 860846.80 518496.77 +SET 860854.50 490105.35 +SET 86087.91 63850.84 +SET 860887.28 508116.84 +SET 860899.62 693997.12 +SET 860907.84 282347.52 +SET 861008.94 549853.92 +SET 861059.44 537723.66 +SET 86106.57 63864.68 +SET 86115.90 63871.60 +SET 861161.52 549951.36 +SET 86119.54 50829.87 +SET 86121.75 57698.85 +SET 86125.23 63878.52 +SET 86128.40 51876.01 +SET 861314.10 550048.80 +SET 861344.96 282490.88 +SET 861349.46 508389.63 +SET 861400.03 647774.06 +SET 86162.55 63906.20 +SET 86169.20 57730.64 +SET 861782.08 282634.24 +SET 86181.21 63920.04 +SET 861811.64 508662.42 +SET 861825.28 538201.92 +SET 861965.70 508753.35 +SET 8620.92 6394.08 +SET 86207.70 55053.60 +SET 862077.00 550536.00 +SET 862080.56 538361.34 +SET 862088.70 490808.01 +SET 86209.20 63940.80 +SET 862158.40 519286.76 +SET 862202.04 695047.04 +SET 862219.20 282777.60 +SET 86237.19 63961.56 +SET 862427.88 509026.14 +SET 862534.74 550828.32 +SET 862656.32 282920.96 +SET 862687.32 550925.76 +SET 86274.51 63989.24 +SET 86283.84 63996.16 +SET 862890.06 509298.93 +SET 86302.50 64010.00 +SET 863117.20 491393.56 +SET 863145.06 551218.08 +SET 863186.94 746155.74 +SET 863202.72 283100.16 +SET 8633.12 2831.36 +SET 86331.20 28313.60 +SET 863404.84 649281.68 +SET 8635.90 5785.78 +SET 863506.30 509662.65 +SET 86359.00 57857.80 +SET 863660.36 509753.58 +SET 86367.81 64058.44 +SET 863749.12 283279.36 +SET 86377.14 64065.36 +SET 863814.42 509844.51 +SET 863858.40 283315.20 +SET 863867.52 539477.28 +SET 86388.61 59900.19 +SET 863907.96 551705.28 +SET 863967.68 283351.04 +SET 864030.72 746885.12 +SET 864060.54 551802.72 +SET 864122.80 539636.70 +SET 864155.67 696621.92 +SET 864186.24 283422.72 +SET 86423.79 64099.96 +SET 864295.52 283458.56 +SET 86433.12 64106.88 +SET 864351.40 492096.22 +SET 86451.78 64120.72 +SET 864741.38 650286.76 +SET 864781.60 520866.74 +SET 864823.44 552289.92 +SET 864841.92 283637.76 +SET 864874.50 747614.50 +SET 864888.64 540114.96 +SET 864951.20 283673.60 +SET 864968.50 492447.55 +SET 86501.35 57953.17 +SET 865143.92 540274.38 +SET 865169.76 283745.28 +SET 86517.09 64169.16 +SET 865218.80 521130.07 +SET 865279.04 283781.12 +SET 865355.02 510753.81 +SET 865388.32 283816.96 +SET 865458.09 697671.84 +SET 86548.80 57984.96 +SET 86549.76 28385.28 +SET 865586.34 552777.12 +SET 865656.00 521393.40 +SET 865716.16 283924.48 +SET 865718.28 748343.88 +SET 8658.24 6421.76 +SET 86596.25 58016.75 +SET 86599.70 49303.31 +SET 866044.00 284032.00 +SET 86610.93 69819.68 +SET 866109.30 698196.80 +SET 866125.32 511208.46 +SET 866153.28 284067.84 +SET 86619.72 64245.28 +SET 866202.70 493150.21 +SET 866262.56 284103.68 +SET 866279.38 511299.39 +SET 86629.05 64252.20 +SET 8663.38 6007.02 +SET 86638.38 64259.12 +SET 86647.71 64266.04 +SET 866562.06 749073.26 +SET 86659.04 28421.12 +SET 866614.10 493384.43 +SET 86665.44 55345.92 +SET 86666.37 64279.88 +SET 866699.68 284247.04 +SET 8667.57 6428.68 +SET 866741.56 511572.18 +SET 866760.51 698721.76 +SET 86691.15 58080.33 +SET 866930.88 541390.32 +SET 86694.36 64300.64 +SET 866983.95 749437.95 +SET 86703.69 64307.56 +SET 867049.68 511754.04 +SET 867112.14 553751.52 +SET 867186.16 541549.74 +SET 867203.74 511844.97 +SET 867246.08 284426.24 +SET 86735.78 51193.59 +SET 867355.36 284462.08 +SET 867436.90 493852.87 +SET 867441.44 541709.16 +SET 86750.34 64342.16 +SET 867511.86 512026.83 +SET 867569.88 554043.84 +SET 867642.60 493969.98 +SET 867665.92 512117.76 +SET 86769.00 64356.00 +SET 867696.72 541868.58 +SET 867722.46 554141.28 +SET 867792.48 284605.44 +SET 86787.66 64369.84 +SET 868011.04 284677.12 +SET 86805.40 49420.42 +SET 868054.00 494204.20 +SET 86806.32 64383.68 +SET 868062.93 699771.68 +SET 868180.20 554433.60 +SET 868249.62 750532.02 +SET 86833.50 58175.70 +SET 868332.78 554531.04 +SET 86834.31 64404.44 +SET 868448.16 284820.48 +SET 868462.56 542346.84 +SET 868485.36 554628.48 +SET 868557.44 284856.32 +SET 868714.14 700296.64 +SET 868716.40 523236.71 +SET 868717.84 542506.26 +SET 868744.34 512754.27 +SET 86875.10 65330.20 +SET 868751.00 653302.00 +SET 868776.00 284928.00 +SET 86878.99 60240.21 +SET 868790.52 554823.36 +SET 86880.96 64439.04 +SET 868876.80 494672.64 +SET 868885.28 284963.84 +SET 86890.29 64445.96 +SET 868973.12 542665.68 +SET 86899.62 64452.88 +SET 868994.56 284999.68 +SET 86908.95 64459.80 +SET 869095.68 555018.24 +SET 869206.52 513027.06 +SET 869248.26 555115.68 +SET 86928.40 58239.28 +SET 869322.40 285107.20 +SET 869365.35 700821.60 +SET 869400.84 555213.12 +SET 869483.68 542984.52 +SET 869493.90 495023.97 +SET 8695.56 6449.44 +SET 869515.29 751626.09 +SET 869540.96 285178.88 +SET 869553.42 555310.56 +SET 86970.60 55540.80 +SET 869738.96 543143.94 +SET 86975.85 58271.07 +SET 869822.76 513390.78 +SET 86983.59 64515.16 +SET 86986.88 28528.64 +SET 869937.18 751990.78 +SET 869976.82 513481.71 +SET 870016.56 701346.56 +SET 87002.25 64529.00 +SET 87002.80 52402.67 +SET 870087.54 654307.08 +SET 87011.10 49537.53 +SET 870111.00 495375.30 +SET 870130.88 513572.64 +SET 87023.30 58302.86 +SET 870305.92 285429.76 +SET 870359.07 752355.47 +SET 87039.57 64556.68 +SET 8704.89 6456.36 +SET 870415.20 285465.60 +SET 87042.45 60353.55 +SET 870504.80 543622.20 +SET 87058.23 64570.52 +SET 870633.76 285537.28 +SET 870667.77 701871.52 +SET 87070.75 58334.65 +SET 870755.81 654809.62 +SET 870901.18 514027.29 +SET 870902.40 524553.36 +SET 87095.55 64598.20 +SET 870961.60 285644.80 +SET 871180.16 285716.48 +SET 87124.18 60410.22 +SET 871318.98 702396.48 +SET 87132.87 64625.88 +SET 871384.38 556479.84 +SET 871398.72 285788.16 +SET 8714.22 6463.28 +SET 871424.08 655312.16 +SET 871508.00 285824.00 +SET 871525.92 544259.88 +SET 87160.86 64646.64 +SET 871624.74 753449.54 +SET 871671.48 514481.94 +SET 871726.56 285895.68 +SET 871756.60 496312.18 +SET 871776.80 525080.02 +SET 87179.52 64660.48 +SET 871835.84 285931.52 +SET 87188.85 64667.40 +SET 871970.19 702921.44 +SET 871979.60 514663.80 +SET 871994.70 556869.60 +SET 872046.63 753814.23 +SET 87205.44 28600.32 +SET 87207.51 64681.24 +SET 872092.35 655814.70 +SET 872133.66 514754.73 +SET 87216.80 49654.64 +SET 87216.84 64688.16 +SET 872163.68 286039.04 +SET 872168.00 496546.40 +SET 872291.76 544738.14 +SET 872299.86 557064.48 +SET 8723.55 6470.20 +SET 87235.50 64702.00 +SET 872382.24 286110.72 +SET 87254.16 64715.84 +SET 872595.84 515027.52 +SET 87260.55 58461.81 +SET 872605.02 557259.36 +SET 87263.49 64722.76 +SET 872651.20 525606.68 +SET 872710.08 286218.24 +SET 872749.90 515118.45 +SET 872760.62 656317.24 +SET 872785.10 496897.73 +SET 872819.36 286254.08 +SET 872890.41 754543.61 +SET 87291.48 64743.52 +SET 87305.76 54521.64 +SET 873088.40 525870.01 +SET 87310.14 64757.36 +SET 873147.20 286361.60 +SET 8732.88 6477.12 +SET 873215.34 557649.12 +SET 873256.48 286397.44 +SET 873365.76 286433.28 +SET 87338.13 64778.12 +SET 87347.46 64785.04 +SET 873520.20 515573.10 +SET 873525.60 526133.34 +SET 873568.16 545535.24 +SET 873607.90 497366.17 +SET 873802.88 286576.64 +SET 873828.32 515754.96 +SET 87384.78 64812.72 +SET 873912.16 286612.48 +SET 874.24 286.72 +SET 874019.30 497600.39 +SET 874021.44 286648.32 +SET 87412.77 64833.48 +SET 874130.72 286684.16 +SET 87422.10 64840.40 +SET 87424.00 28672.00 +SET 874334.00 546013.50 +SET 874349.28 286755.84 +SET 87440.00 52666.00 +SET 87440.76 64854.24 +SET 874400.00 526660.00 +SET 8745.11 6063.69 +SET 87450.09 64861.16 +SET 87451.10 60636.90 +SET 874598.62 516209.61 +SET 87478.08 64881.92 +SET 874837.20 526923.33 +SET 874842.10 498068.83 +SET 874895.68 286935.04 +SET 87496.74 64895.76 +SET 875004.96 286970.88 +SET 87506.08 51648.24 +SET 875099.84 546491.76 +SET 875226.24 705546.24 +SET 875253.50 498303.05 +SET 87532.83 60693.57 +SET 875355.12 546651.18 +SET 875368.92 516664.26 +SET 875421.75 756731.75 +SET 87543.39 64930.36 +SET 875433.70 658327.40 +SET 87545.25 58652.55 +SET 875504.04 559110.72 +SET 875522.98 516755.19 +SET 875551.36 287150.08 +SET 87561.04 54681.06 +SET 875610.40 546810.60 +SET 875664.90 498537.27 +SET 875831.10 516937.05 +SET 875961.78 559403.04 +SET 87599.37 64971.88 +SET 8760.87 6497.88 +SET 876076.30 498771.49 +SET 876097.76 287329.28 +SET 876114.36 559500.48 +SET 876120.96 547129.44 +SET 87614.56 60750.24 +SET 876266.94 559597.92 +SET 87628.20 49888.86 +SET 876282.00 498888.60 +SET 876316.32 287400.96 +SET 87636.69 64999.56 +SET 87642.56 28743.68 +SET 876425.60 287436.80 +SET 876528.66 706596.16 +SET 87660.14 51739.17 +SET 876631.52 547448.28 +SET 87664.68 65020.32 +SET 876724.68 559890.24 +SET 876755.46 517482.63 +SET 876862.72 287580.16 +SET 87687.60 58747.92 +SET 876899.10 499239.93 +SET 87692.67 65041.08 +SET 876972.00 287616.00 +SET 877.02 650.48 +SET 877029.84 560085.12 +SET 877081.28 287651.84 +SET 877104.80 499357.04 +SET 87711.33 65054.92 +SET 87720.66 65061.84 +SET 877217.64 517755.42 +SET 877299.84 287723.52 +SET 877310.50 499474.15 +SET 87735.05 58779.71 +SET 87739.32 65075.68 +SET 877487.58 560377.44 +SET 87751.84 28779.52 +SET 877516.20 499591.26 +SET 877525.76 517937.28 +SET 877531.20 758555.20 +SET 87757.98 65089.52 +SET 877640.16 560474.88 +SET 877721.90 499708.37 +SET 877736.96 287866.88 +SET 877897.60 528766.64 +SET 877953.09 758919.89 +SET 878106.78 660337.56 +SET 87813.96 65131.04 +SET 878133.30 499942.59 +SET 87816.32 54840.48 +SET 878250.48 560864.64 +SET 87829.95 58843.29 +SET 878296.06 518391.93 +SET 87833.90 50005.97 +SET 878339.00 500059.70 +SET 878374.98 759284.58 +SET 878418.48 548564.22 +SET 878482.29 708171.04 +SET 878501.92 288117.76 +SET 87851.28 65158.72 +SET 87860.61 65165.64 +SET 878604.18 518573.79 +SET 87861.12 28815.36 +SET 878611.20 288153.60 +SET 87869.94 65172.56 +SET 878708.22 561156.96 +SET 87877.40 58875.08 +SET 878775.05 660840.10 +SET 87879.27 65179.48 +SET 878796.87 759649.27 +SET 8788.86 6518.64 +SET 878912.30 518755.65 +SET 878939.04 288261.12 +SET 879048.32 288296.96 +SET 879066.36 518846.58 +SET 879157.60 288332.80 +SET 87916.59 65207.16 +SET 87925.92 65214.08 +SET 879266.88 288368.64 +SET 879318.54 561546.72 +SET 879367.50 500645.25 +SET 879376.16 288404.48 +SET 87944.58 65227.92 +SET 879443.32 661342.64 +SET 879471.12 561644.16 +SET 879528.54 519119.37 +SET 879640.65 760378.65 +SET 879704.00 288512.00 +SET 87972.30 58938.66 +SET 87972.57 65248.68 +SET 879778.90 500879.47 +SET 87981.90 65255.60 +SET 879813.28 288547.84 +SET 879836.66 519301.23 +SET 879984.60 500996.58 +SET 879990.72 519392.16 +SET 88000.56 65269.44 +SET 880111.59 661845.18 +SET 880141.12 288655.36 +SET 880190.30 501113.69 +SET 880205.44 549680.16 +SET 880234.02 562131.36 +SET 880298.84 519574.02 +SET 88039.60 50123.08 +SET 880396.00 501230.80 +SET 880452.90 519664.95 +SET 880460.72 549839.58 +SET 880484.43 761108.03 +SET 880539.18 562326.24 +SET 88056.54 65310.96 +SET 880691.76 562423.68 +SET 88071.60 54999.90 +SET 880716.00 549999.00 +SET 880807.40 501465.02 +SET 880906.08 288906.24 +SET 88093.86 65338.64 +SET 880958.00 530609.95 +SET 881069.14 520028.67 +SET 881087.13 710270.88 +SET 881149.50 562716.00 +SET 88121.85 65359.40 +SET 88122.32 52011.96 +SET 881328.21 761837.41 +SET 881377.26 520210.53 +SET 881607.24 563008.32 +SET 881671.04 289157.12 +SET 881737.12 550636.68 +SET 881750.10 762202.10 +SET 88177.83 65400.92 +SET 881832.40 531136.61 +SET 881839.44 520483.32 +SET 881993.50 520574.25 +SET 882108.16 289300.48 +SET 882217.44 289336.32 +SET 882301.62 520756.11 +SET 882370.14 563495.52 +SET 882389.55 711320.80 +SET 88243.14 65449.36 +SET 8825.70 5912.94 +SET 882502.96 551114.94 +SET 882593.88 762931.48 +SET 8826.84 6120.36 +SET 88261.80 65463.20 +SET 882675.30 563690.40 +SET 88271.13 65470.12 +SET 882758.24 551274.36 +SET 88276.38 52102.89 +SET 882763.80 521028.90 +SET 882763.84 289515.52 +SET 882784.67 663855.34 +SET 882827.88 563787.84 +SET 88289.79 65483.96 +SET 882917.86 521119.83 +SET 882980.46 563885.28 +SET 882982.40 289587.20 +SET 883040.76 711845.76 +SET 88308.45 65497.80 +SET 883091.68 289623.04 +SET 883133.04 563982.72 +SET 88314.40 53192.66 +SET 883144.00 531926.60 +SET 88317.78 65504.72 +SET 88326.88 55159.32 +SET 883285.62 564080.16 +SET 883380.04 521392.62 +SET 883419.52 289730.56 +SET 883438.20 564177.60 +SET 883481.50 502987.45 +SET 8835.51 6553.24 +SET 88350.13 61260.27 +SET 88351.90 59192.98 +SET 883524.08 551752.62 +SET 883534.10 521483.55 +SET 883581.20 532189.93 +SET 883638.08 289802.24 +SET 88364.43 65539.32 +SET 883743.36 564372.48 +SET 88383.09 65553.16 +SET 883856.64 289873.92 +SET 883965.92 289909.76 +SET 883996.28 521756.34 +SET 88401.75 65567.00 +SET 884018.40 532453.26 +SET 884034.64 552071.46 +SET 884075.20 289945.60 +SET 884150.34 521847.27 +SET 884184.48 289981.44 +SET 884201.10 564664.80 +SET 884289.92 552230.88 +SET 88429.74 65587.76 +SET 884293.76 290017.28 +SET 88430.44 52193.82 +SET 884304.30 503455.89 +SET 884343.18 712895.68 +SET 884353.68 564762.24 +SET 88439.07 65594.68 +SET 8844.84 6560.16 +SET 884455.60 532716.59 +SET 88446.80 59256.56 +SET 884506.26 564859.68 +SET 884512.32 290088.96 +SET 88457.73 65608.52 +SET 884612.52 522120.06 +SET 884621.60 290124.80 +SET 884658.84 564957.12 +SET 88476.39 65622.36 +SET 884766.58 522210.99 +SET 884800.48 552549.72 +SET 884811.42 565054.56 +SET 8849.64 5651.52 +SET 884920.64 522301.92 +SET 88496.40 56515.20 +SET 885055.76 552709.14 +SET 885058.72 290268.16 +SET 885125.22 765119.62 +SET 885168.00 290304.00 +SET 885277.28 290339.84 +SET 885311.04 552868.56 +SET 885382.82 522574.71 +SET 885386.56 290375.68 +SET 88541.70 65670.80 +SET 885421.74 565444.32 +SET 885495.84 290411.52 +SET 88551.03 65677.72 +SET 885547.11 765484.31 +SET 885566.32 553027.98 +SET 88560.36 65684.64 +SET 88569.69 65691.56 +SET 885823.68 290519.04 +SET 88589.15 59351.93 +SET 88595.32 61430.28 +SET 88597.68 65712.32 +SET 886.35 657.40 +SET 886076.88 553346.82 +SET 886153.12 523029.36 +SET 886204.40 533769.91 +SET 886260.80 290662.40 +SET 886296.81 714470.56 +SET 886370.08 290698.24 +SET 886479.36 290734.08 +SET 886489.80 566126.40 +SET 88653.66 65753.84 +SET 88656.70 50474.41 +SET 886588.64 290769.92 +SET 88662.99 65760.76 +SET 886641.60 534033.24 +SET 886642.38 566223.84 +SET 886697.92 290805.76 +SET 88672.32 65767.68 +SET 886794.96 566321.28 +SET 88700.31 65788.44 +SET 88709.64 65795.36 +SET 887231.54 523665.87 +SET 887252.70 566613.60 +SET 88728.30 65809.20 +SET 8873.15 5944.73 +SET 887385.60 523756.80 +SET 887405.28 566711.04 +SET 88746.96 65823.04 +SET 887557.86 566808.48 +SET 88756.29 65829.96 +SET 887572.16 291092.48 +SET 88765.62 65836.88 +SET 887693.72 523938.66 +SET 88774.95 65843.80 +SET 887790.72 291164.16 +SET 887801.20 505446.76 +SET 887847.78 524029.59 +SET 887863.84 554462.76 +SET 887900.00 291200.00 +SET 88793.61 65857.64 +SET 887953.20 534823.23 +SET 888006.90 505563.87 +SET 88802.94 65864.56 +SET 888119.12 554622.18 +SET 88812.27 65871.48 +SET 888130.83 667875.66 +SET 888168.18 567198.24 +SET 8882.16 6587.84 +SET 888212.60 505680.98 +SET 888227.84 291307.52 +SET 888250.44 716045.44 +SET 88830.93 65885.32 +SET 888390.40 535086.56 +SET 88840.26 65892.24 +SET 888418.30 505798.09 +SET 888446.40 291379.20 +SET 888473.34 567393.12 +SET 88849.59 65899.16 +SET 888618.08 524484.24 +SET 88862.40 50591.52 +SET 888625.92 567490.56 +SET 888629.68 554941.02 +SET 888664.96 291450.88 +SET 888774.24 291486.72 +SET 888799.10 668378.20 +SET 888884.96 555100.44 +SET 888901.65 716570.40 +SET 888926.20 524666.10 +SET 889102.08 291594.24 +SET 889140.24 555259.86 +SET 88921.30 59574.46 +SET 889241.10 506266.53 +SET 889264.80 535613.22 +SET 889320.64 291665.92 +SET 889388.38 524938.89 +SET 889388.82 567977.76 +SET 889395.52 555419.28 +SET 88942.89 65968.36 +SET 88952.22 65975.28 +SET 88953.92 29173.76 +SET 889539.20 291737.60 +SET 88954.14 56807.52 +SET 889542.44 525029.82 +SET 88961.55 65982.20 +SET 889648.48 291773.44 +SET 889696.50 525120.75 +SET 88970.88 65989.12 +SET 889846.56 568270.08 +SET 889867.04 291845.12 +SET 889906.08 555738.12 +SET 889999.14 568367.52 +SET 8900.82 6601.68 +SET 890063.90 506734.97 +SET 89018.79 76949.59 +SET 89026.86 66030.64 +SET 890304.30 568562.40 +SET 890456.88 568659.84 +SET 89046.68 52557.54 +SET 890475.30 506969.19 +SET 890576.40 536403.21 +SET 890620.86 525666.33 +SET 890671.92 556216.38 +SET 8908.57 6177.03 +SET 890850.56 292167.68 +SET 890855.28 718145.28 +SET 890914.62 568952.16 +SET 89092.17 66079.08 +SET 890927.20 556375.80 +SET 89101.50 66086.00 +SET 891013.60 536666.54 +SET 891031.68 770225.28 +SET 891067.20 569049.60 +SET 891092.40 507320.52 +SET 89111.10 59701.62 +SET 891219.78 569147.04 +SET 891237.10 526030.05 +SET 891287.68 292311.04 +SET 891298.10 507437.63 +SET 891472.18 670388.36 +SET 89148.15 66120.60 +SET 89157.48 66127.52 +SET 891693.04 556854.06 +SET 891830.10 569536.80 +SET 891888.00 537193.20 +SET 8919.48 6615.52 +SET 891943.36 292526.08 +SET 891948.32 557013.48 +SET 8920.60 5976.52 +SET 89200.74 52648.47 +SET 892052.64 292561.92 +SET 892120.90 507906.07 +SET 892135.26 569731.68 +SET 892161.46 526575.63 +SET 892203.60 557172.90 +SET 892297.35 771319.35 +SET 892325.20 537456.53 +SET 89241.45 66189.80 +SET 892469.58 526757.49 +SET 892489.76 292705.28 +SET 89253.45 59796.99 +SET 892532.30 508140.29 +SET 892593.00 570024.00 +SET 892599.04 292741.12 +SET 892745.58 570121.44 +SET 892808.91 719720.16 +SET 89281.76 29281.28 +SET 892898.16 570218.88 +SET 892943.70 508374.51 +SET 892969.44 557651.16 +SET 89297.43 66231.32 +SET 893141.13 772048.73 +SET 893149.40 508491.62 +SET 893199.60 537983.19 +SET 893355.10 508608.73 +SET 893355.90 570511.20 +SET 893364.00 292992.00 +SET 8934.80 5579.70 +SET 893473.28 293027.84 +SET 893476.99 671895.98 +SET 89354.80 52739.40 +SET 893560.80 508725.84 +SET 893563.02 772413.42 +SET 893582.56 293063.68 +SET 89372.07 66286.68 +SET 893735.28 558129.42 +SET 893766.50 508842.95 +SET 893801.12 293135.36 +SET 89390.73 66300.52 +SET 89391.04 29317.12 +SET 89395.80 59892.36 +SET 893966.22 570900.96 +SET 893972.20 508960.06 +SET 894010.18 527666.79 +SET 894074.00 538509.85 +SET 89412.62 61996.98 +SET 894145.26 672398.52 +SET 894164.24 527757.72 +SET 894177.90 509077.17 +SET 894245.84 558448.26 +SET 894271.38 571095.84 +SET 89428.05 66328.20 +SET 89437.38 66335.12 +SET 894472.36 527939.58 +SET 894511.20 538773.18 +SET 89456.04 66348.96 +SET 894589.30 509311.39 +SET 894675.36 293422.08 +SET 894729.12 571388.16 +SET 894756.40 558767.10 +SET 894762.54 721295.04 +SET 894780.48 528121.44 +SET 894795.00 509428.50 +SET 894881.70 571485.60 +SET 89490.70 59955.94 +SET 894934.54 528212.37 +SET 895.68 664.32 +SET 89502.69 66383.56 +SET 895112.48 293565.44 +SET 895206.40 509662.72 +SET 895221.76 293601.28 +SET 89530.68 66404.32 +SET 895396.72 528485.16 +SET 89540.01 66411.24 +SET 895412.10 509779.83 +SET 895440.32 293672.96 +SET 895481.80 673403.60 +SET 89549.34 66418.16 +SET 895492.02 571875.36 +SET 895617.80 509896.94 +SET 895704.84 528667.02 +SET 895768.16 293780.48 +SET 895777.52 559404.78 +SET 895797.18 572070.24 +SET 895823.50 510014.05 +SET 895858.90 528757.95 +SET 89586.66 66445.84 +SET 895949.76 572167.68 +SET 895986.72 293852.16 +SET 896012.96 528848.88 +SET 89603.28 55956.42 +SET 89605.32 66459.68 +SET 896094.36 774601.56 +SET 89614.65 66466.60 +SET 896234.90 510248.27 +SET 896254.92 572362.56 +SET 89626.00 53982.65 +SET 896288.08 559723.62 +SET 896314.56 293959.68 +SET 89642.64 66487.36 +SET 89651.97 66494.28 +SET 896516.25 774966.25 +SET 896543.36 559883.04 +SET 8966.13 6650.12 +SET 89662.92 52921.26 +SET 896646.30 510482.49 +SET 89670.63 66508.12 +SET 896712.66 572654.88 +SET 896716.17 722869.92 +SET 896783.26 529303.53 +SET 89679.96 66515.04 +SET 896860.96 294138.88 +SET 89698.62 66528.88 +SET 897053.92 560201.88 +SET 897057.70 510716.71 +SET 897091.38 529485.39 +SET 89717.04 57294.72 +SET 897170.40 572947.20 +SET 89718.88 29424.64 +SET 897263.40 510833.82 +SET 897298.08 294282.24 +SET 897309.20 560361.30 +SET 897367.38 723394.88 +SET 897475.56 573142.08 +SET 89763.93 66577.32 +SET 897674.80 511068.04 +SET 89782.59 66591.16 +SET 897861.68 529940.04 +SET 897880.50 511185.15 +SET 898063.04 294533.12 +SET 898075.04 560839.56 +SET 898085.88 573531.84 +SET 89810.58 66611.92 +SET 89816.98 53012.19 +SET 89819.91 66618.84 +SET 898238.46 573629.28 +SET 89828.16 29460.48 +SET 89829.24 66625.76 +SET 898330.32 560998.98 +SET 89838.57 66632.68 +SET 898446.00 541143.15 +SET 89847.90 66639.60 +SET 898497.60 511536.48 +SET 898585.60 561158.40 +SET 898625.70 776789.70 +SET 898669.80 724444.80 +SET 89870.30 60210.26 +SET 898703.30 511653.59 +SET 89875.89 66660.36 +SET 898786.04 530485.62 +SET 898840.88 561317.82 +SET 89885.22 66667.28 +SET 898883.20 541406.48 +SET 89890.90 51177.07 +SET 89894.55 66674.20 +SET 89903.00 62337.00 +SET 899094.16 530667.48 +SET 89917.75 60242.05 +SET 899248.22 530758.41 +SET 89931.87 66701.88 +SET 899402.28 530849.34 +SET 899459.10 574408.80 +SET 899483.68 294999.04 +SET 89959.86 66722.64 +SET 899592.96 295034.88 +SET 89969.19 66729.56 +SET 899731.80 512239.14 +SET 899764.26 574603.68 +SET 899862.00 561955.50 +SET 899864.46 531122.13 +SET 899920.80 295142.40 +SET 899937.50 512356.25 +SET 899972.22 725494.72 +SET 9.33 6.92 +SET 900030.08 295178.24 +SET 900117.28 562114.92 +SET 900194.80 542196.47 +SET 90022.20 57489.60 +SET 90025.17 66771.08 +SET 900372.56 562274.34 +SET 900374.58 574993.44 +SET 90046.72 29532.16 +SET 900480.70 531485.85 +SET 90053.16 66791.84 +SET 900623.43 726019.68 +SET 90081.15 66812.60 +SET 900827.96 677423.92 +SET 900832.32 575285.76 +SET 900942.88 531758.64 +SET 90096.60 51294.18 +SET 900966.00 512941.80 +SET 901.55 604.01 +SET 90109.14 66833.36 +SET 901122.88 295536.64 +SET 901138.40 562752.60 +SET 901157.04 778977.84 +SET 901171.70 513058.91 +SET 90118.47 66840.28 +SET 901232.16 295572.48 +SET 901274.64 726544.64 +SET 901290.06 575578.08 +SET 901341.44 295608.32 +SET 901393.68 562912.02 +SET 901405.06 532031.43 +SET 901442.64 575675.52 +SET 901450.72 295644.16 +SET 90148.19 62507.01 +SET 901506.40 542986.46 +SET 901559.12 532122.36 +SET 901583.10 513293.13 +SET 901595.22 575772.96 +SET 901648.96 563071.44 +SET 901713.18 532213.29 +SET 901747.80 575870.40 +SET 90183.78 66888.72 +SET 901887.84 295787.52 +SET 901900.38 575967.84 +SET 901904.24 563230.86 +SET 901943.60 543249.79 +SET 901997.12 295823.36 +SET 902000.82 779707.22 +SET 902052.96 576065.28 +SET 90211.77 66909.48 +SET 902164.50 678429.00 +SET 902175.36 532486.08 +SET 902200.20 513644.46 +SET 90239.76 66930.24 +SET 902434.24 295966.72 +SET 90249.09 66937.16 +SET 90249.90 60464.58 +SET 902510.70 576357.60 +SET 902543.52 296002.56 +SET 90258.42 66944.08 +SET 902637.54 532758.87 +SET 902652.80 296038.40 +SET 90267.75 66951.00 +SET 902670.08 563709.12 +SET 902762.08 296074.24 +SET 90277.08 66957.92 +SET 90284.46 78043.66 +SET 902844.60 780436.60 +SET 902925.36 563868.54 +SET 902945.66 532940.73 +SET 90302.30 51411.29 +SET 90305.07 66978.68 +SET 903089.92 296181.76 +SET 9031.44 6698.56 +SET 903253.78 533122.59 +SET 903255.20 544039.78 +SET 903273.60 576844.80 +SET 903417.76 296289.28 +SET 90344.80 60528.16 +SET 90351.72 67013.28 +SET 903636.32 296360.96 +SET 903640.10 514464.23 +SET 90369.12 56434.68 +SET 903715.96 533395.38 +SET 90374.56 29639.68 +SET 903745.60 296396.80 +SET 903879.48 728644.48 +SET 90389.04 67040.96 +SET 903964.16 296468.48 +SET 90398.37 67047.88 +SET 904024.08 533577.24 +SET 904036.50 577332.00 +SET 904073.44 296504.32 +SET 904178.14 533668.17 +SET 904182.72 296540.16 +SET 90426.36 67068.64 +SET 90433.22 53375.91 +SET 90439.70 60591.74 +SET 904510.56 296647.68 +SET 904530.69 729169.44 +SET 90463.68 67096.32 +SET 904668.60 515049.78 +SET 90473.01 67103.24 +SET 90479.94 57781.92 +SET 90482.34 67110.16 +SET 904837.58 680439.16 +SET 90487.15 60623.53 +SET 904874.30 515166.89 +SET 904947.68 296791.04 +SET 904948.44 534122.82 +SET 904954.05 782260.05 +SET 905.01 671.24 +SET 90500.40 54509.31 +SET 905004.00 545093.10 +SET 90508.00 51528.40 +SET 905102.50 534213.75 +SET 90518.19 72969.44 +SET 905257.14 578111.52 +SET 905275.52 296898.56 +SET 90528.99 67144.76 +SET 90538.32 67151.68 +SET 905491.40 515518.22 +SET 90556.84 62790.36 +SET 90556.98 67165.52 +SET 905564.68 534486.54 +SET 905603.36 297006.08 +SET 905712.64 297041.92 +SET 90575.64 67179.36 +SET 90582.05 60687.11 +SET 905833.11 730219.36 +SET 905872.80 534668.40 +SET 905878.40 545619.76 +SET 905902.80 515752.44 +SET 905931.20 297113.60 +SET 905988.72 565781.58 +SET 90603.63 67200.12 +SET 906172.62 578696.16 +SET 9062.95 6071.89 +SET 906219.72 783354.12 +SET 90629.50 60718.90 +SET 906314.20 515986.66 +SET 906315.60 545883.09 +SET 90638.57 62847.03 +SET 90650.28 67234.72 +SET 906519.90 516103.77 +SET 90659.61 67241.64 +SET 906630.36 578988.48 +SET 906643.10 535123.05 +SET 90668.94 67248.56 +SET 906752.80 546146.42 +SET 906797.16 535213.98 +SET 906931.30 516337.99 +SET 906935.52 579183.36 +SET 907009.84 566419.26 +SET 907024.00 297472.00 +SET 90706.26 67276.24 +SET 90713.70 51645.51 +SET 907133.28 297507.84 +SET 907137.00 516455.10 +SET 9072.03 6290.37 +SET 90724.92 67290.08 +SET 907265.12 566578.68 +SET 907351.84 297579.52 +SET 90743.58 67303.92 +SET 907510.66 682449.32 +SET 907627.20 546673.08 +SET 90771.57 67324.68 +SET 907775.68 566897.52 +SET 907786.74 731794.24 +SET 907788.96 297722.88 +SET 9078.09 6733.16 +SET 90785.10 57976.80 +SET 907875.58 535850.49 +SET 908007.52 297794.56 +SET 90811.68 29783.04 +SET 908116.80 297830.40 +SET 90819.30 60846.06 +SET 908286.24 567216.36 +SET 908329.17 785177.57 +SET 908337.76 536123.28 +SET 908461.32 580157.76 +SET 908491.82 536214.21 +SET 908663.20 298009.60 +SET 90874.20 67400.80 +SET 908772.48 298045.44 +SET 90879.68 56753.52 +SET 908796.80 567535.20 +SET 908799.94 536396.07 +SET 90883.76 63017.04 +SET 90895.40 53648.70 +SET 909071.64 580547.52 +SET 909089.16 732844.16 +SET 909108.06 536577.93 +SET 90914.20 60909.64 +SET 90919.40 51762.62 +SET 90920.85 67435.40 +SET 909209.60 298188.80 +SET 909224.22 580644.96 +SET 909262.12 536668.86 +SET 90930.18 67442.32 +SET 909318.88 298224.64 +SET 90937.60 54772.64 +SET 909399.70 517743.31 +SET 909428.16 298260.48 +SET 90948.84 67456.16 +SET 909515.47 683956.94 +SET 909562.64 568013.46 +SET 90958.17 67463.08 +SET 909594.84 786271.64 +SET 90961.65 60941.43 +SET 909646.72 298332.16 +SET 90967.50 67470.00 +SET 909724.30 536941.65 +SET 909740.37 733369.12 +SET 909756.00 298368.00 +SET 909811.10 517977.53 +SET 90986.16 67483.84 +SET 90995.49 67490.76 +SET 909974.56 298439.68 +SET 909987.12 581132.16 +SET 910083.84 298475.52 +SET 91009.10 60973.22 +SET 91014.15 67504.60 +SET 910193.12 298511.36 +SET 91030.24 29854.72 +SET 910411.68 298583.04 +SET 91042.14 67525.36 +SET 910438.62 787001.02 +SET 91047.22 63130.38 +SET 91051.47 67532.28 +SET 910520.96 298618.88 +SET 91056.55 61005.01 +SET 910583.76 568651.14 +SET 910687.60 548516.39 +SET 910750.02 581619.36 +SET 91079.46 67553.04 +SET 910860.51 787365.71 +SET 91090.26 58171.68 +SET 910902.60 581716.80 +SET 910956.78 537669.09 +SET 91098.12 67566.88 +SET 911045.30 518680.19 +SET 911094.32 568969.98 +SET 911176.64 298833.92 +SET 911264.90 537850.95 +SET 91128.95 63187.05 +SET 911282.40 787730.40 +SET 911349.60 569129.40 +SET 91135.44 67594.56 +SET 911360.34 582009.12 +SET 911395.20 298905.60 +SET 911418.96 537941.88 +SET 911456.70 518914.41 +SET 911512.92 582106.56 +SET 911520.28 685464.56 +SET 91154.10 67608.40 +SET 911573.02 538032.81 +SET 911604.88 569288.82 +SET 91163.43 67615.32 +SET 91169.40 73494.40 +SET 911694.00 734944.00 +SET 911704.29 788095.09 +SET 91182.09 67629.16 +SET 911832.32 299048.96 +SET 911860.16 569448.24 +SET 911881.14 538214.67 +SET 911941.60 299084.80 +SET 911970.66 582398.88 +SET 912035.20 538305.60 +SET 912073.80 519265.74 +SET 912123.24 582496.32 +SET 912126.18 788459.78 +SET 912160.16 299156.48 +SET 912269.44 299192.32 +SET 912275.82 582593.76 +SET 91238.07 67670.68 +SET 9124.74 6767.76 +SET 912428.40 582691.20 +SET 912436.40 549569.71 +SET 912485.20 519499.96 +SET 912706.56 299335.68 +SET 91275.39 67698.36 +SET 912815.84 299371.52 +SET 912856.82 686469.64 +SET 91292.41 63300.39 +SET 91293.80 61163.96 +SET 912996.42 735993.92 +SET 913102.30 519851.29 +SET 913136.56 570245.34 +SET 913143.68 299479.04 +SET 913191.30 583178.40 +SET 913267.68 539033.04 +SET 91330.80 51996.84 +SET 913310.80 550096.37 +SET 913343.88 583275.84 +SET 9134.07 6774.68 +SET 91341.25 61195.75 +SET 913421.74 539123.97 +SET 91350.03 67753.72 +SET 913513.70 520085.51 +SET 913525.09 686972.18 +SET 91357.58 53921.49 +SET 913575.80 539214.90 +SET 913580.80 299622.40 +SET 913647.12 570564.18 +SET 913647.63 736518.88 +SET 91368.69 67767.56 +SET 91374.80 55035.97 +SET 91378.02 67774.48 +SET 91387.35 67781.40 +SET 91388.70 61227.54 +SET 913902.40 570723.60 +SET 914037.98 539487.69 +SET 914106.78 583763.04 +SET 91415.34 67802.16 +SET 914185.20 550623.03 +SET 914259.36 583860.48 +SET 9143.40 6781.60 +SET 914336.50 520553.95 +SET 914411.94 583957.92 +SET 91443.33 67822.92 +SET 91452.66 67829.84 +SET 914564.32 299944.96 +SET 91461.99 67836.76 +SET 91467.36 29998.08 +SET 914747.90 520788.17 +SET 914782.88 300016.64 +SET 914869.68 584250.24 +SET 914950.05 737568.80 +SET 914953.60 520905.28 +SET 91499.31 67864.44 +SET 91508.64 67871.36 +SET 915110.72 300124.16 +SET 915174.84 584445.12 +SET 915220.00 300160.00 +SET 915327.42 584542.56 +SET 915438.56 300231.68 +SET 91548.00 58464.00 +SET 915480.00 584640.00 +SET 915496.80 551413.02 +SET 915570.70 521256.61 +SET 915578.58 540396.99 +SET 915601.26 738093.76 +SET 915632.58 584737.44 +SET 915689.36 571839.54 +SET 915732.64 540487.92 +SET 91576.64 30033.92 +SET 91583.28 67926.72 +SET 915886.70 540578.85 +SET 91592.61 67933.64 +SET 91601.94 67940.56 +SET 91611.27 67947.48 +SET 91619.33 63527.07 +SET 916203.52 300482.56 +SET 916242.90 585127.20 +SET 916345.08 792106.68 +SET 916348.88 540851.64 +SET 91639.26 67968.24 +SET 916395.48 585224.64 +SET 91645.52 57231.78 +SET 91657.92 67982.08 +SET 916657.00 541033.50 +SET 91676.58 67995.92 +SET 916811.06 541124.43 +SET 916866.44 689484.88 +SET 916968.48 300733.44 +SET 917005.80 585614.40 +SET 917010.60 522076.38 +SET 9171.39 6802.36 +SET 917119.18 541306.29 +SET 91720.85 61450.07 +SET 917216.30 522193.49 +SET 91723.23 68030.52 +SET 917245.60 552466.34 +SET 917273.24 541397.22 +SET 917296.32 300840.96 +SET 917427.30 541488.15 +SET 917476.32 572955.48 +SET 91751.22 68051.28 +SET 917514.88 300912.64 +SET 917534.71 689987.42 +SET 917627.70 522427.71 +SET 91769.88 68065.12 +SET 917735.42 541670.01 +SET 917768.70 586101.60 +SET 91779.21 68072.04 +SET 917833.40 522544.82 +SET 917986.88 573274.32 +SET 918039.10 522661.93 +SET 91807.20 68092.80 +SET 9181.20 5529.93 +SET 91812.00 55299.30 +SET 918206.10 740193.60 +SET 918226.44 586393.92 +SET 918279.84 301163.52 +SET 91835.19 68113.56 +SET 918379.02 586491.36 +SET 918389.12 301199.36 +SET 918450.50 522896.15 +SET 918454.53 793930.13 +SET 918497.44 573593.16 +SET 91853.16 58658.88 +SET 918531.60 586588.80 +SET 91863.18 68134.32 +SET 91863.20 61545.44 +SET 91864.52 63697.08 +SET 91872.51 68141.24 +SET 91881.84 68148.16 +SET 918857.31 740718.56 +SET 918861.90 523130.37 +SET 918935.52 301378.56 +SET 918967.90 542397.45 +SET 918989.34 586881.12 +SET 918994.40 553519.66 +SET 9190.05 6816.20 +SET 91900.80 57391.20 +SET 919008.00 573912.00 +SET 919067.60 523247.48 +SET 91910.65 61577.23 +SET 919121.96 542488.38 +SET 919141.92 586978.56 +SET 919154.08 301450.24 +SET 91919.16 68175.84 +SET 919263.28 574071.42 +SET 919263.36 301486.08 +SET 91928.49 68182.76 +SET 91937.82 68189.68 +SET 919372.64 301521.92 +SET 919431.60 553782.99 +SET 91947.90 52348.17 +SET 919479.00 523481.70 +SET 919584.14 542761.17 +SET 919591.20 301593.60 +SET 919599.66 587270.88 +SET 91965.81 68210.44 +SET 91972.02 79502.42 +SET 919738.20 542852.10 +SET 91975.14 68217.36 +SET 91984.47 68224.28 +SET 9199.38 6823.12 +SET 919904.82 587465.76 +SET 919919.04 301701.12 +SET 920029.12 574549.68 +SET 92003.13 68238.12 +SET 92005.55 61640.81 +SET 920096.10 523833.03 +SET 92012.46 68245.04 +SET 920137.60 301772.80 +SET 920142.09 795388.89 +SET 920159.73 741768.48 +SET 920200.38 543124.89 +SET 920209.98 587660.64 +SET 920246.88 301808.64 +SET 920284.40 574709.10 +SET 920301.80 523950.14 +SET 920354.44 543215.82 +SET 920356.16 301844.48 +SET 9205.30 6167.26 +SET 920507.50 524067.25 +SET 920508.50 543306.75 +SET 920515.14 587855.52 +SET 920563.98 795753.58 +SET 920810.94 742293.44 +SET 920816.62 543488.61 +SET 920820.30 588050.40 +SET 92087.10 68300.40 +SET 920970.68 543579.54 +SET 920972.88 588147.84 +SET 920985.87 796118.27 +SET 92100.45 61704.39 +SET 921121.12 302095.36 +SET 921125.46 588245.28 +SET 92115.09 68321.16 +SET 92127.88 54376.14 +SET 921278.04 588342.72 +SET 921305.52 575346.78 +SET 921330.30 524535.69 +SET 921339.68 302167.04 +SET 921407.76 796482.96 +SET 921448.96 302202.88 +SET 92156.08 57550.62 +SET 921560.80 575506.20 +SET 92158.32 58853.76 +SET 92161.74 68355.76 +SET 921617.60 555099.64 +SET 921667.52 302274.56 +SET 9218.04 6836.96 +SET 921886.08 302346.24 +SET 921888.36 588732.48 +SET 92189.73 68376.52 +SET 92195.35 61767.97 +SET 92199.06 68383.44 +SET 921995.36 302382.08 +SET 922153.10 525004.13 +SET 92217.72 68397.28 +SET 922193.52 588927.36 +SET 922203.16 544306.98 +SET 922212.60 693505.20 +SET 922213.92 302453.76 +SET 922251.54 797212.34 +SET 92227.05 68404.20 +SET 922323.20 302489.60 +SET 922326.64 575984.46 +SET 922511.28 544488.84 +SET 922564.50 525238.35 +SET 92264.37 68431.88 +SET 922651.26 589219.68 +SET 922760.32 302632.96 +SET 92283.03 68445.72 +SET 922837.20 576303.30 +SET 922869.60 302668.80 +SET 92290.25 61831.55 +SET 922929.20 555889.63 +SET 922956.42 589414.56 +SET 922975.90 525472.57 +SET 923092.48 576462.72 +SET 923095.32 797941.72 +SET 923109.00 589512.00 +SET 923127.52 544852.56 +SET 923197.44 302776.32 +SET 923281.58 544943.49 +SET 92329.68 68480.32 +SET 923414.16 589706.88 +SET 923435.64 545034.42 +SET 92359.30 52582.39 +SET 9236.70 6850.80 +SET 923603.04 576781.56 +SET 92367.00 68508.00 +SET 92376.33 68514.92 +SET 923853.12 302991.36 +SET 923871.90 589999.20 +SET 92393.91 79867.11 +SET 923939.10 798671.10 +SET 923962.40 303027.20 +SET 92404.32 68535.68 +SET 924205.94 545489.07 +SET 924210.10 526175.23 +SET 92422.98 68549.52 +SET 924329.64 590291.52 +SET 924368.88 577259.82 +SET 924399.52 303170.56 +SET 924415.80 526292.34 +SET 924482.22 590388.96 +SET 92450.88 30320.64 +SET 92450.97 68570.28 +SET 924508.80 303206.40 +SET 924514.06 545670.93 +SET 9246.03 6857.72 +SET 92460.30 68577.20 +SET 924621.50 526409.45 +SET 92471.82 74544.32 +SET 924718.20 745443.20 +SET 924727.36 303278.08 +SET 92478.96 68591.04 +SET 92488.29 68597.96 +SET 92497.62 68604.88 +SET 92506.95 68611.80 +SET 925130.30 546034.65 +SET 9252.75 6199.05 +SET 92525.61 68625.64 +SET 925273.76 303457.28 +SET 925284.36 546125.58 +SET 925369.41 745968.16 +SET 925383.04 303493.12 +SET 925492.32 303528.96 +SET 92553.60 68646.40 +SET 9256.50 5269.95 +SET 92560.16 30356.48 +SET 925626.66 800129.86 +SET 925710.88 303600.64 +SET 92581.59 68667.16 +SET 92590.92 68674.08 +SET 925900.56 578216.34 +SET 925900.60 546489.30 +SET 925929.44 303672.32 +SET 92600.25 68681.00 +SET 926020.62 746493.12 +SET 926054.66 546580.23 +SET 92609.58 68687.92 +SET 926148.00 303744.00 +SET 926155.84 578375.76 +SET 926160.60 591460.80 +SET 92618.91 68694.84 +SET 926208.72 546671.16 +SET 92622.40 62054.08 +SET 926257.28 303779.84 +SET 926313.18 591558.24 +SET 926366.56 303815.68 +SET 9264.69 6871.56 +SET 926426.80 557996.27 +SET 926472.80 527463.44 +SET 926475.84 303851.52 +SET 926516.84 546853.02 +SET 926585.12 303887.36 +SET 92665.56 68729.44 +SET 926666.40 578694.60 +SET 926671.83 747018.08 +SET 92669.44 30392.32 +SET 926770.92 591850.56 +SET 926803.68 303959.04 +SET 926824.96 547034.88 +SET 926864.00 558259.60 +SET 926884.20 527697.66 +SET 926921.68 578854.02 +SET 92693.55 68750.20 +SET 926979.02 547125.81 +SET 92712.21 68764.04 +SET 927133.08 547216.74 +SET 92717.30 62117.66 +SET 927176.96 579013.44 +SET 927228.66 592142.88 +SET 927240.80 304102.40 +SET 927287.14 547307.67 +SET 927301.20 558522.93 +SET 927350.08 304138.24 +SET 927459.36 304174.08 +SET 927595.26 547489.53 +SET 92768.19 68805.56 +SET 927707.00 528166.10 +SET 927749.32 547580.46 +SET 92786.85 68819.40 +SET 927974.25 748068.00 +SET 928005.76 304353.28 +SET 928057.44 547762.32 +SET 9281.58 8023.18 +SET 928115.04 304389.12 +SET 928198.08 579651.12 +SET 928211.50 547853.25 +SET 928324.10 528517.43 +SET 92833.50 68854.00 +SET 92845.28 64377.12 +SET 928453.36 579810.54 +SET 928579.89 802682.69 +SET 928601.88 593019.84 +SET 928754.46 593117.28 +SET 9288.80 3046.40 +SET 92880.15 68888.60 +SET 928827.74 548216.97 +SET 92889.53 69853.06 +SET 928941.20 528868.76 +SET 92898.81 68902.44 +SET 92907.10 62244.82 +SET 929098.56 304711.68 +SET 9292.68 6892.32 +SET 92921.22 59340.96 +SET 92926.80 68923.20 +SET 929276.67 749117.92 +SET 929289.92 548489.76 +SET 929317.12 304783.36 +SET 929352.60 529102.98 +SET 929487.20 559839.58 +SET 929517.36 593604.48 +SET 929535.68 304855.04 +SET 92964.12 68950.88 +SET 929729.76 580607.64 +SET 92973.45 68957.80 +SET 929752.10 548762.55 +SET 929754.24 304926.72 +SET 92976.40 52933.72 +SET 929764.00 529337.20 +SET 929822.52 593799.36 +SET 929863.52 304962.56 +SET 92992.11 68971.64 +SET 929972.80 304998.40 +SET 929975.10 593896.80 +SET 9300.20 6230.84 +SET 93001.44 68978.56 +SET 930060.22 548944.41 +SET 93008.74 64490.46 +SET 93010.77 68985.48 +SET 930127.68 593994.24 +SET 930191.36 305070.08 +SET 930214.28 549035.34 +SET 930231.84 699535.68 +SET 93029.43 68999.32 +SET 930300.64 305105.92 +SET 93049.45 62340.19 +SET 93052.24 54921.72 +SET 930522.40 549217.20 +SET 930628.48 305213.44 +SET 930676.46 549308.13 +SET 930689.34 804506.14 +SET 930750.88 581245.32 +SET 93076.08 69033.92 +SET 930890.58 594481.44 +SET 93094.74 69047.76 +SET 93104.07 69054.68 +SET 931043.16 594578.88 +SET 931174.88 305392.64 +SET 931236.00 560892.90 +SET 931261.44 581564.16 +SET 93132.06 69075.44 +SET 93141.39 69082.36 +SET 931500.90 594871.20 +SET 931568.38 700540.76 +SET 931600.82 549853.71 +SET 931612.00 305536.00 +SET 931615.30 530391.19 +SET 93169.38 69103.12 +SET 931721.28 305571.84 +SET 931772.00 581883.00 +SET 931830.56 305607.68 +SET 93191.80 62435.56 +SET 931939.84 305643.52 +SET 931955.01 805600.21 +SET 93206.70 69130.80 +SET 932110.40 561419.56 +SET 932111.22 595260.96 +SET 93215.84 30571.52 +SET 932267.68 305751.04 +SET 932376.90 805964.90 +SET 932376.96 305786.88 +SET 93244.02 69158.48 +SET 932486.24 305822.72 +SET 932537.84 582361.26 +SET 932547.60 561682.89 +SET 932595.52 305858.56 +SET 932643.80 530976.74 +SET 93272.01 69179.24 +SET 932793.12 582520.68 +SET 93286.70 62499.14 +SET 93290.67 69193.08 +SET 933.00 692.00 +SET 933026.70 595845.60 +SET 933141.42 550763.01 +SET 933179.28 595943.04 +SET 933260.90 531328.07 +SET 933295.48 550853.94 +SET 933303.68 582839.52 +SET 933331.86 596040.48 +SET 933360.48 306109.44 +SET 933422.00 562209.55 +SET 933449.54 550944.87 +SET 933558.96 582998.94 +SET 93378.96 59633.28 +SET 933789.60 596332.80 +SET 933814.24 583158.36 +SET 933835.14 752792.64 +SET 933906.88 306288.64 +SET 934064.46 807423.66 +SET 934065.78 551308.59 +SET 934247.34 596625.12 +SET 934289.40 531913.62 +SET 93429.05 62594.51 +SET 934373.90 551490.45 +SET 934399.92 596722.56 +SET 934453.28 306467.84 +SET 934486.35 807788.35 +SET 934580.08 583636.62 +SET 934682.02 551672.31 +SET 934700.80 532147.84 +SET 934705.08 596917.44 +SET 934733.60 562999.54 +SET 93476.50 62626.30 +SET 93499.12 64830.48 +SET 935108.96 306682.88 +SET 935112.20 532382.06 +SET 935137.56 753842.56 +SET 935144.20 551945.10 +SET 935298.26 552036.03 +SET 935317.90 532499.17 +SET 935436.80 306790.40 +SET 935452.32 552126.96 +SET 9355.78 7035.56 +SET 93560.80 56352.62 +SET 935620.56 597502.08 +SET 9357.99 6940.76 +SET 93571.40 62689.88 +SET 936045.20 563789.53 +SET 936092.48 307005.44 +SET 93618.85 62721.67 +SET 936230.88 597891.84 +SET 936311.04 307077.12 +SET 936376.68 552672.54 +SET 936530.74 552763.47 +SET 936536.04 598086.72 +SET 936552.10 533201.83 +SET 936595.80 809611.80 +SET 936638.88 307184.64 +SET 93666.30 62753.46 +SET 936688.62 598184.16 +SET 93684.12 59828.16 +SET 936857.44 307256.32 +SET 93687.76 58507.14 +SET 936992.92 553036.26 +SET 937076.00 307328.00 +SET 937132.88 585230.82 +SET 937146.98 553127.19 +SET 937169.20 533553.16 +SET 937298.94 598573.92 +SET 937374.90 533670.27 +SET 93744.31 65000.49 +SET 937451.52 598671.36 +SET 937455.10 553309.05 +SET 9376.65 6954.60 +SET 937609.16 553399.98 +SET 93762.24 30750.72 +SET 937643.44 585549.66 +SET 937731.68 307543.04 +SET 937756.68 598866.24 +SET 937840.96 307578.88 +SET 937950.24 307614.72 +SET 938061.84 599061.12 +SET 93822.54 55376.37 +SET 938231.20 565106.18 +SET 93826.04 65057.16 +SET 93836.70 59925.60 +SET 9385.98 6961.52 +SET 938519.58 599353.44 +SET 93856.10 62880.62 +SET 938609.10 534372.93 +SET 938664.56 586187.34 +SET 938687.58 554036.49 +SET 93871.52 30786.56 +SET 938824.48 307901.44 +SET 938841.64 554127.42 +SET 938919.35 706068.70 +SET 938919.84 586346.76 +SET 938933.76 307937.28 +SET 938977.32 599645.76 +SET 939175.12 586506.18 +SET 939457.88 554491.14 +SET 9395.10 6294.42 +SET 9395.31 6968.44 +SET 939542.80 565896.17 +SET 939549.03 812164.63 +SET 939589.44 308152.32 +SET 939698.72 308188.16 +SET 9397.66 5546.73 +SET 939740.22 600132.96 +SET 93976.60 55467.30 +SET 939766.00 554673.00 +SET 9398.08 3082.24 +SET 93980.80 30822.40 +SET 939808.00 308224.00 +SET 93989.28 60023.04 +SET 939940.96 586984.44 +SET 939970.92 812529.32 +SET 93998.00 56615.95 +SET 93998.45 62975.99 +SET 940045.38 600327.84 +SET 940074.12 554854.86 +SET 940228.18 554945.79 +SET 940350.54 600522.72 +SET 940417.20 566422.83 +SET 940706.80 587462.70 +SET 94081.47 81325.87 +SET 940814.70 813258.70 +SET 940844.42 555309.51 +SET 94090.08 30858.24 +SET 941119.36 308654.08 +SET 941217.36 587781.54 +SET 941236.59 813623.39 +SET 941266.02 601107.36 +SET 94140.80 63071.36 +SET 941447.20 308761.60 +SET 941472.64 587940.96 +SET 941556.48 308797.44 +SET 941571.18 601302.24 +SET 941694.60 536129.58 +SET 941768.78 555855.09 +SET 941922.84 555946.02 +SET 941993.60 308940.80 +SET 942076.90 556036.95 +SET 942106.00 536363.80 +SET 942166.00 567476.15 +SET 94226.07 70858.14 +SET 942300.87 759617.12 +SET 94234.69 65340.51 +SET 942385.02 556218.81 +SET 942430.72 309084.16 +SET 942493.76 588578.64 +SET 942517.40 536598.02 +SET 942539.08 556309.74 +SET 942540.00 309120.00 +SET 942639.24 601984.32 +SET 942693.14 556400.67 +SET 942723.10 536715.13 +SET 942791.82 602081.76 +SET 942944.40 602179.20 +SET 942977.12 309263.36 +SET 943155.32 556673.46 +SET 94316.42 65397.18 +SET 9432.63 6996.12 +SET 943249.56 602374.08 +SET 943259.60 589056.90 +SET 94330.60 63198.52 +SET 943304.96 309370.88 +SET 943340.20 537066.46 +SET 943346.04 815446.84 +SET 943463.44 556855.32 +SET 943477.60 568266.14 +SET 943514.88 589216.32 +SET 943545.90 537183.57 +SET 943597.24 709586.48 +SET 943707.30 602666.40 +SET 943767.93 815811.53 +SET 943770.16 589375.74 +SET 943771.56 557037.18 +SET 94378.05 63230.31 +SET 943851.36 309550.08 +SET 943859.88 602763.84 +SET 943960.64 309585.92 +SET 94398.15 65453.85 +SET 94416.30 53753.49 +SET 944163.00 537534.90 +SET 94417.92 30965.76 +SET 944233.74 557309.97 +SET 944265.51 710089.02 +SET 944280.72 589694.58 +SET 944288.48 309693.44 +SET 944317.62 603056.16 +SET 944352.00 568792.80 +SET 94438.78 55740.09 +SET 9445.36 5898.54 +SET 944507.04 309765.12 +SET 94472.95 63293.89 +SET 944780.10 537886.23 +SET 944849.98 557673.69 +SET 944944.16 309908.48 +SET 94503.36 81690.56 +SET 945033.60 816905.60 +SET 945053.44 309944.32 +SET 945080.52 603543.36 +SET 945233.10 603640.80 +SET 94527.20 31001.60 +SET 945301.84 590332.26 +SET 945312.16 557946.48 +SET 945381.28 310051.84 +SET 945490.56 310087.68 +SET 945538.26 603835.68 +SET 945602.90 538354.67 +SET 94561.61 65567.19 +SET 945620.28 558128.34 +SET 945663.60 569582.79 +SET 94567.85 63357.47 +SET 945808.60 538471.78 +SET 94592.84 55831.02 +SET 94599.60 60412.80 +SET 945996.00 604128.00 +SET 9460.62 7016.88 +SET 946014.30 538588.89 +SET 946146.24 310302.72 +SET 94615.30 63389.26 +SET 946208.13 762766.88 +SET 946255.52 310338.56 +SET 946322.96 590969.94 +SET 946390.58 558582.99 +SET 94643.34 65623.86 +SET 946453.74 604420.32 +SET 946474.08 310410.24 +SET 946538.00 570109.45 +SET 94662.75 63421.05 +SET 946631.40 538940.22 +SET 946692.64 310481.92 +SET 946758.90 604615.20 +SET 946837.10 539057.33 +SET 9469.95 7023.80 +SET 946975.20 570372.78 +SET 947020.48 310589.44 +SET 947042.80 539174.44 +SET 94708.88 59144.82 +SET 947088.80 591448.20 +SET 947129.76 310625.28 +SET 947348.32 310696.96 +SET 947412.40 570636.11 +SET 94745.76 31073.28 +SET 94757.65 63484.63 +SET 947599.36 591767.04 +SET 947606.86 712601.72 +SET 947674.38 605199.84 +SET 947676.16 310804.48 +SET 947826.96 605297.28 +SET 9479.28 7030.72 +SET 947979.54 605394.72 +SET 948004.00 310912.00 +SET 94805.10 63516.42 +SET 948085.24 559583.22 +SET 948132.12 605492.16 +SET 948239.30 559674.15 +SET 948275.13 713104.26 +SET 948365.20 592245.30 +SET 948482.70 539994.21 +SET 94852.55 63548.21 +SET 948547.42 559856.01 +SET 948688.40 540111.32 +SET 94872.40 57142.61 +SET 948724.00 571426.10 +SET 948895.02 605979.36 +SET 9490.00 6358.00 +SET 94904.76 60607.68 +SET 949161.20 571689.43 +SET 949163.66 560219.73 +SET 949206.08 311306.24 +SET 949352.76 606271.68 +SET 949464.18 765391.68 +SET 949471.78 560401.59 +SET 949505.34 606369.12 +SET 949625.84 560492.52 +SET 94964.16 59304.24 +SET 94964.32 31144.96 +SET 94970.26 65850.54 +SET 949716.90 540696.87 +SET 949752.48 311485.44 +SET 949779.90 560583.45 +SET 949896.88 593201.82 +SET 949933.96 560674.38 +SET 949971.04 311557.12 +SET 950080.32 311592.96 +SET 950088.02 560765.31 +SET 950096.28 821281.88 +SET 950115.39 765916.64 +SET 950189.60 311628.80 +SET 950334.00 541048.20 +SET 950396.14 560947.17 +SET 950407.44 593520.66 +SET 950408.16 311700.48 +SET 950420.82 606953.76 +SET 95051.99 65907.21 +SET 95057.34 60705.12 +SET 9507.36 3118.08 +SET 950725.98 607148.64 +SET 95073.60 31180.80 +SET 950736.00 311808.00 +SET 950745.40 541282.42 +SET 95076.66 76644.16 +SET 950766.60 766441.60 +SET 950858.32 561219.96 +SET 95089.80 63707.16 +SET 951.66 705.84 +SET 951012.38 561310.89 +SET 951031.14 607343.52 +SET 951063.84 311915.52 +SET 951173.12 311951.36 +SET 951183.72 607440.96 +SET 951282.40 311987.20 +SET 951320.50 561492.75 +SET 951347.20 573006.08 +SET 951417.81 766966.56 +SET 951474.56 561583.68 +SET 951488.88 607635.84 +SET 951610.24 312094.72 +SET 951641.46 607733.28 +SET 951773.90 541867.97 +SET 951782.68 561765.54 +SET 951783.84 822740.64 +SET 951794.04 607830.72 +SET 951936.74 561856.47 +SET 951938.08 312202.24 +SET 951946.62 607928.16 +SET 952156.64 312273.92 +SET 952205.73 823105.33 +SET 952244.86 562038.33 +SET 952251.78 608123.04 +SET 952284.75 716119.50 +SET 952398.92 562129.26 +SET 952593.76 312417.28 +SET 952596.70 542336.41 +SET 95279.60 63834.32 +SET 952812.32 312488.96 +SET 952862.10 608512.80 +SET 95297.18 66077.22 +SET 953049.51 823834.71 +SET 95309.60 57405.94 +SET 953140.16 312596.48 +SET 953169.22 562583.91 +SET 953215.52 595274.28 +SET 953319.84 608805.12 +SET 953468.00 312704.00 +SET 953577.28 312739.84 +SET 95362.50 60900.00 +SET 953621.29 717124.58 +SET 953625.00 609000.00 +SET 953625.20 542921.96 +SET 953686.56 312775.68 +SET 95374.50 63897.90 +SET 953777.58 609097.44 +SET 953905.12 312847.36 +SET 95401.44 31288.32 +SET 954236.64 595911.96 +SET 954315.18 824928.78 +SET 9544.59 7079.16 +SET 954451.52 313026.56 +SET 954491.92 596071.38 +SET 954540.48 609584.64 +SET 954555.76 563402.28 +SET 954560.80 313062.40 +SET 954709.82 563493.21 +SET 95474.72 59623.08 +SET 954747.20 596230.80 +SET 954779.36 313134.08 +SET 954844.80 575112.72 +SET 954845.64 609779.52 +SET 954863.88 563584.14 +SET 954957.83 718129.66 +SET 954998.22 609876.96 +SET 9551.72 5637.66 +SET 95510.72 31324.16 +SET 955107.20 313241.60 +SET 955158.96 825658.16 +SET 955216.48 313277.44 +SET 955282.00 575376.05 +SET 9553.92 7086.08 +SET 955303.38 610071.84 +SET 955325.76 313313.28 +SET 955544.32 313384.96 +SET 955626.10 718632.20 +SET 95564.30 64025.06 +SET 955653.60 313420.80 +SET 955682.20 544093.06 +SET 955762.88 313456.64 +SET 955913.70 610461.60 +SET 955976.28 770641.28 +SET 956066.28 610559.04 +SET 95611.75 64056.85 +SET 956156.40 575902.71 +SET 956250.42 564402.51 +SET 956371.44 610753.92 +SET 956527.84 313707.52 +SET 956534.16 597346.74 +SET 95667.66 61094.88 +SET 956712.60 564675.30 +SET 956746.40 313779.20 +SET 956964.96 313850.88 +SET 956981.76 611143.68 +SET 957044.72 597665.58 +SET 95706.65 64120.43 +SET 957074.24 313886.72 +SET 9572.58 7099.92 +SET 957292.80 313958.40 +SET 957327.80 545029.94 +SET 957439.50 611436.00 +SET 95746.80 57669.27 +SET 957468.00 576692.70 +SET 957533.50 545147.05 +SET 95754.10 64152.22 +SET 957592.08 611533.44 +SET 957620.64 314065.92 +SET 957630.91 720139.82 +SET 95769.03 82784.63 +SET 957690.30 827846.30 +SET 957739.20 545264.16 +SET 957791.02 565311.81 +SET 957810.56 598143.84 +SET 95787.56 66417.24 +SET 957944.90 545381.27 +SET 957948.48 314173.44 +SET 95801.55 64184.01 +SET 958099.14 565493.67 +SET 958167.04 314245.12 +SET 95820.24 61192.32 +SET 958299.18 720642.36 +SET 958321.12 598462.68 +SET 958385.60 314316.80 +SET 95849.00 64215.80 +SET 958576.40 598622.10 +SET 958581.12 772741.12 +SET 958715.38 565857.39 +SET 958767.70 545849.71 +SET 958822.72 314460.16 +SET 958831.68 598781.52 +SET 958869.44 565948.32 +SET 958955.97 828940.37 +SET 958967.45 721144.90 +SET 959086.96 598940.94 +SET 959150.56 314567.68 +SET 959259.84 314603.52 +SET 959270.46 612605.28 +SET 959342.24 599100.36 +SET 959369.12 314639.36 +SET 95943.90 64279.38 +SET 959478.40 314675.20 +SET 959575.62 612800.16 +SET 959635.72 721647.44 +SET 959639.74 566402.97 +SET 959654.00 578009.35 +SET 959696.96 314746.88 +SET 95972.82 61289.76 +SET 959796.20 546435.26 +SET 95985.28 59941.92 +SET 95991.35 64311.17 +SET 959947.86 566584.83 +SET 9600.57 7120.68 +SET 960024.80 314854.40 +SET 960091.20 578272.68 +SET 960101.92 566675.76 +SET 960108.08 599578.62 +SET 960221.64 830034.44 +SET 960363.36 599738.04 +SET 960413.30 546786.59 +SET 960461.92 314997.76 +SET 96057.12 31503.36 +SET 960643.53 830399.13 +SET 960643.68 613482.24 +SET 960680.48 315069.44 +SET 960796.26 613579.68 +SET 96086.25 64374.75 +SET 960899.04 315141.12 +SET 960948.84 613677.12 +SET 961030.40 547137.92 +SET 961065.42 830763.82 +SET 961129.20 600216.30 +SET 96114.48 66643.92 +SET 961226.88 315248.64 +SET 961336.16 315284.48 +SET 961441.80 547372.14 +SET 961554.72 315356.16 +SET 961647.50 547489.25 +SET 961711.74 614164.32 +SET 961773.28 315427.84 +SET 96184.00 57932.60 +SET 961840.00 579326.00 +SET 961853.20 547606.36 +SET 961895.04 600694.56 +SET 962016.90 614359.20 +SET 962058.90 547723.47 +SET 962101.12 315535.36 +SET 962104.70 567857.85 +SET 962150.32 600853.98 +SET 962169.48 614456.64 +SET 962258.76 567948.78 +SET 962308.80 723657.60 +SET 962322.06 614554.08 +SET 962412.82 568039.71 +SET 962474.64 614651.52 +SET 962488.38 775890.88 +SET 962538.24 315678.72 +SET 962647.52 315714.56 +SET 96267.60 54807.48 +SET 962720.94 568221.57 +SET 962756.80 315750.40 +SET 96276.05 64501.91 +SET 96277.94 66757.26 +SET 9628.56 7141.44 +SET 962932.38 614943.84 +SET 962975.36 315822.08 +SET 962977.07 724160.14 +SET 963139.59 776415.84 +SET 963151.60 580115.99 +SET 963183.12 568494.36 +SET 963293.10 548426.13 +SET 963337.18 568585.29 +SET 963390.12 615236.16 +SET 963498.80 548543.24 +SET 96359.67 66813.93 +SET 963631.04 316037.12 +SET 963645.30 568767.15 +SET 963682.00 601810.50 +SET 9637.89 7148.36 +SET 96370.95 64565.49 +SET 96379.08 77694.08 +SET 963790.80 776940.80 +SET 96384.96 31610.88 +SET 963849.60 316108.80 +SET 963937.28 601969.92 +SET 964000.44 615625.92 +SET 964026.00 580642.65 +SET 964068.16 316180.48 +SET 964115.90 548894.57 +SET 96418.40 64597.28 +SET 964261.54 569130.87 +SET 964305.60 615820.80 +SET 964321.60 549011.68 +SET 964447.84 602288.76 +SET 964703.12 602448.18 +SET 964723.72 569403.66 +SET 96473.30 54924.59 +SET 964733.00 549245.90 +SET 964833.12 316431.36 +SET 96494.24 31646.72 +SET 964942.40 316467.20 +SET 96495.84 60260.76 +SET 965068.50 616308.00 +SET 965144.40 549480.12 +SET 965221.08 616405.44 +SET 965270.24 316574.72 +SET 965350.10 549597.23 +SET 965468.96 602926.44 +SET 965555.80 549714.34 +SET 9656.55 7162.20 +SET 965648.08 569949.24 +SET 965706.21 834775.41 +SET 965724.24 603085.86 +SET 965774.80 581695.97 +SET 966172.90 550065.67 +SET 966212.00 581959.30 +SET 966234.80 603404.70 +SET 966289.14 617087.52 +SET 966378.60 550182.78 +SET 966395.64 779040.64 +SET 966418.38 570403.89 +SET 966441.72 617184.96 +SET 966472.32 316968.96 +SET 966490.08 603564.12 +SET 9665.88 7169.12 +SET 966581.60 317004.80 +SET 966594.30 617282.40 +SET 9667.90 5504.17 +SET 966746.88 617379.84 +SET 96679.00 55041.70 +SET 966790.00 550417.00 +SET 96686.59 67040.61 +SET 966986.69 727175.38 +SET 967000.64 603882.96 +SET 967046.85 779565.60 +SET 967052.04 617574.72 +SET 96712.80 31718.40 +SET 967188.68 570858.54 +SET 967237.28 317219.84 +SET 96750.55 64819.81 +SET 96751.12 60420.18 +SET 967523.60 582749.29 +SET 967650.86 571131.33 +SET 96768.32 67097.28 +SET 967766.48 604361.22 +SET 967804.92 571222.26 +SET 967814.94 618061.92 +SET 967818.50 551002.55 +SET 9679.80 6485.16 +SET 967958.98 571313.19 +SET 96798.00 64851.60 +SET 968111.52 317506.56 +SET 968120.10 618256.80 +SET 96822.08 31754.24 +SET 968220.80 317542.40 +SET 968267.10 571495.05 +SET 968272.68 618354.24 +SET 968330.08 317578.24 +SET 968421.16 571585.98 +SET 968435.60 551353.88 +SET 96845.45 64883.39 +SET 96850.05 67153.95 +SET 968548.64 317649.92 +SET 968767.20 317721.60 +SET 968835.20 583539.28 +SET 96884.70 55158.81 +SET 968883.00 618744.00 +SET 968883.34 571858.77 +SET 969035.58 618841.44 +SET 969037.40 571949.70 +SET 969081.33 837692.93 +SET 969095.04 317829.12 +SET 969191.46 572040.63 +SET 969258.40 551822.32 +SET 969272.40 583802.61 +SET 969313.60 317900.80 +SET 969532.16 317972.48 +SET 969641.44 318008.32 +SET 969645.90 619231.20 +SET 969651.69 781665.44 +SET 969798.48 619328.64 +SET 969808.72 605636.58 +SET 969925.11 838422.31 +SET 969951.06 619426.08 +SET 969961.76 572495.28 +SET 9700.64 6057.96 +SET 97006.40 60579.60 +SET 970064.00 605796.00 +SET 970081.20 552290.76 +SET 970146.80 584329.27 +SET 970256.22 619620.96 +SET 970286.90 552407.87 +SET 970297.12 318223.36 +SET 9703.20 7196.80 +SET 9703.47 8387.87 +SET 97030.29 78219.04 +SET 970302.90 782190.40 +SET 970347.00 838787.00 +SET 97040.64 31825.92 +SET 970406.40 318259.20 +SET 970423.94 572768.07 +SET 9705.78 5728.59 +SET 970561.38 619815.84 +SET 97057.80 57285.90 +SET 970713.96 619913.28 +SET 970843.52 318402.56 +SET 970866.54 620010.72 +SET 970996.31 730190.62 +SET 971019.12 620108.16 +SET 971109.70 552876.31 +SET 971194.24 573222.72 +SET 971280.64 318545.92 +SET 971502.36 573404.58 +SET 97176.97 67380.63 +SET 971936.32 318760.96 +SET 972045.60 318796.80 +SET 972106.24 607071.36 +SET 97211.86 57376.83 +SET 972138.20 553461.86 +SET 972154.88 318832.64 +SET 972256.53 783765.28 +SET 972264.16 318868.48 +SET 972272.66 573859.23 +SET 972332.85 731195.70 +SET 972392.34 620985.12 +SET 972456.45 840610.45 +SET 97258.70 67437.30 +SET 972580.78 574041.09 +SET 972592.00 318976.00 +SET 972616.80 607390.20 +SET 972697.50 621180.00 +SET 9727.25 6516.95 +SET 97272.50 65169.50 +SET 972734.84 574132.02 +SET 972755.30 553813.19 +SET 972850.08 621277.44 +SET 972872.08 607549.62 +SET 972907.74 784290.24 +SET 973001.12 731698.24 +SET 973002.66 621374.88 +SET 973029.12 319119.36 +SET 9731.19 7217.56 +SET 973138.40 319155.20 +SET 973155.24 621472.32 +SET 973356.96 319226.88 +SET 973460.40 621667.20 +SET 973466.24 319262.72 +SET 973575.52 319298.56 +SET 973637.92 608027.88 +SET 973644.40 586435.91 +SET 97367.40 65233.08 +SET 97368.48 31933.44 +SET 973722.12 841704.52 +SET 973783.80 554398.74 +SET 973794.08 319370.24 +SET 973893.20 608187.30 +SET 973967.32 574859.46 +SET 9740.52 7224.48 +SET 974070.72 622056.96 +SET 974121.38 574950.39 +SET 974144.01 842069.21 +SET 974148.48 608346.72 +SET 974195.20 554632.96 +SET 974210.16 785340.16 +SET 974429.50 575132.25 +SET 974737.62 575314.11 +SET 974777.60 319692.80 +SET 974812.30 554984.29 +SET 974833.62 622544.16 +SET 974891.68 575405.04 +SET 974987.79 842798.59 +SET 975005.93 733205.86 +SET 97501.80 55510.14 +SET 97503.89 67607.31 +SET 97516.96 60898.44 +SET 97519.98 57558.69 +SET 975199.80 575586.90 +SET 975291.36 622836.48 +SET 975324.00 319872.00 +SET 975393.20 587489.23 +SET 975443.94 622933.92 +SET 975512.58 786390.08 +SET 97557.20 65360.24 +SET 975651.84 319979.52 +SET 97567.42 73370.84 +SET 975761.12 320015.36 +SET 975816.04 575950.62 +SET 975830.40 587752.56 +SET 975870.40 320051.20 +SET 9759.18 7238.32 +SET 975901.68 623226.24 +SET 975935.44 609462.66 +SET 976190.72 609622.08 +SET 976198.24 320158.72 +SET 976206.84 623421.12 +SET 976253.46 843892.66 +SET 976307.52 320194.56 +SET 976432.28 576314.34 +SET 976512.00 623616.00 +SET 97652.10 65423.82 +SET 976526.08 320266.24 +SET 976635.36 320302.08 +SET 976663.60 556038.28 +SET 976701.28 609940.92 +SET 9768.15 7874.40 +SET 976815.00 787440.00 +SET 976817.16 623810.88 +SET 976853.92 320373.76 +SET 976869.30 556155.39 +SET 976963.20 320409.60 +SET 97699.55 65455.61 +SET 977075.00 556272.50 +SET 977122.32 624005.76 +SET 977181.76 320481.28 +SET 977211.84 610259.76 +SET 977274.90 624103.20 +SET 977280.70 556389.61 +SET 977427.48 624200.64 +SET 977466.21 787964.96 +SET 977486.40 556506.72 +SET 977519.13 844986.73 +SET 977692.10 556623.83 +SET 977722.40 610578.60 +SET 977818.82 577132.71 +SET 977837.44 320696.32 +SET 977885.22 624492.96 +SET 977941.02 845351.42 +SET 978016.40 589069.21 +SET 978037.80 624590.40 +SET 97805.60 32076.80 +SET 978232.96 610897.44 +SET 978281.00 577405.50 +SET 97830.81 67833.99 +SET 978383.84 320875.52 +SET 97841.90 65550.98 +SET 978435.06 577496.43 +SET 978453.60 589332.54 +SET 978589.12 577587.36 +SET 978648.12 624980.16 +SET 9787.17 7259.08 +SET 978711.68 320983.04 +SET 978800.70 625077.60 +SET 978820.96 321018.88 +SET 978897.24 577769.22 +SET 978926.30 557326.49 +SET 978998.80 611375.70 +SET 979039.52 321090.56 +SET 979051.30 577860.15 +SET 97912.54 67890.66 +SET 979205.36 577951.08 +SET 979206.69 846445.49 +SET 979254.08 611535.12 +SET 979476.64 321233.92 +SET 97956.36 62556.48 +SET 979585.92 321269.76 +SET 9796.50 7266.00 +SET 979683.82 736723.64 +SET 979749.10 557794.93 +SET 979821.60 578314.80 +SET 979868.76 625759.68 +SET 979913.76 321377.28 +SET 97994.27 67947.33 +SET 980023.04 321413.12 +SET 980071.05 790064.80 +SET 980129.72 578496.66 +SET 980275.20 612172.80 +SET 980283.78 578587.59 +SET 98031.70 65678.14 +SET 980366.20 558146.26 +SET 980437.84 578678.52 +SET 980460.16 321556.48 +SET 980479.08 626149.44 +SET 9805.83 7272.92 +SET 980591.90 578769.45 +SET 980639.60 590649.19 +SET 980777.60 558380.48 +SET 980784.24 626344.32 +SET 980785.76 612491.64 +SET 98079.15 65709.93 +SET 980894.25 847904.25 +SET 980900.02 578951.31 +SET 981089.40 626539.20 +SET 981115.84 321771.52 +SET 98118.90 55861.47 +SET 98126.60 65741.72 +SET 981334.40 321843.20 +SET 98136.22 57922.41 +SET 981443.68 321879.04 +SET 981514.00 591175.85 +SET 981516.26 579315.03 +SET 981547.14 626831.52 +SET 981552.96 321914.88 +SET 98157.73 68060.67 +SET 981600.40 558848.92 +SET 981670.32 579405.96 +SET 981699.72 626928.96 +SET 981806.10 558966.03 +SET 981824.38 579496.89 +SET 982004.88 627123.84 +SET 982011.80 559083.14 +SET 982062.16 613288.74 +SET 982099.36 322094.08 +SET 982286.56 579769.68 +SET 982356.90 738733.80 +SET 98239.46 68117.34 +SET 9824.49 7286.76 +SET 982594.68 579951.54 +SET 98261.52 62751.36 +SET 982615.20 627513.60 +SET 982628.90 559434.47 +SET 98268.95 65837.09 +SET 982748.74 580042.47 +SET 982755.04 322309.12 +SET 982834.60 559551.58 +SET 982864.32 322344.96 +SET 98290.28 58013.34 +SET 982973.60 322380.80 +SET 983.52 322.56 +SET 983003.70 849727.70 +SET 983056.86 580224.33 +SET 983082.88 322416.64 +SET 983083.28 613926.42 +SET 983192.16 322452.48 +SET 98321.19 68174.01 +SET 983225.52 627903.36 +SET 98324.60 55978.58 +SET 983301.44 322488.32 +SET 983327.10 792689.60 +SET 983338.56 614085.84 +SET 983451.70 559902.91 +SET 9835.20 3225.60 +SET 983519.04 580497.12 +SET 983530.68 628098.24 +SET 983657.40 560020.02 +SET 98370.00 59249.25 +SET 983847.84 322667.52 +SET 983863.10 560137.13 +SET 983957.12 322703.36 +SET 983978.31 793214.56 +SET 983981.22 580769.91 +SET 98402.92 68230.68 +SET 984068.80 560254.24 +SET 984104.40 614564.10 +SET 984175.68 322775.04 +SET 984274.50 560371.35 +SET 984284.96 322810.88 +SET 984289.34 580951.77 +SET 984293.58 628585.44 +SET 984361.71 740241.42 +SET 98444.34 58104.27 +SET 984480.20 560488.46 +SET 984503.52 322882.56 +SET 98458.75 65964.25 +SET 984597.46 581133.63 +SET 984612.80 322918.40 +SET 984614.96 614882.94 +SET 984629.52 793739.52 +SET 984751.32 628877.76 +SET 98484.65 68287.35 +SET 984940.64 323025.92 +SET 98506.20 65996.04 +SET 985113.15 851551.15 +SET 985125.52 615201.78 +SET 985159.20 323097.60 +SET 9852.48 7307.52 +SET 985209.06 629170.08 +SET 985666.80 629462.40 +SET 985675.88 581770.14 +SET 985714.40 561191.12 +SET 985814.88 323312.64 +SET 985924.16 323348.48 +SET 985956.93 852280.53 +SET 98598.40 58195.20 +SET 986033.44 323384.32 +SET 986124.54 629754.72 +SET 986125.80 561425.34 +SET 986138.06 582042.93 +SET 986277.12 629852.16 +SET 986323.20 594072.48 +SET 986361.28 323491.84 +SET 986470.56 323527.68 +SET 986600.24 582315.72 +SET 98679.84 32363.52 +SET 9869.60 6612.32 +SET 986912.48 616317.72 +SET 986948.60 561893.78 +SET 987016.96 323706.88 +SET 987034.79 742251.58 +SET 987040.02 630339.36 +SET 987126.24 323742.72 +SET 987167.76 616477.14 +SET 987216.48 582679.44 +SET 98722.26 85337.46 +SET 987222.60 853374.60 +SET 987235.52 323778.56 +SET 98729.84 68457.36 +SET 9873.60 5621.28 +SET 987360.00 562128.00 +SET 98743.45 66154.99 +SET 987497.76 630631.68 +SET 987650.34 630729.12 +SET 987678.32 616795.98 +SET 987771.40 562362.22 +SET 987832.72 583043.16 +SET 98790.90 66186.78 +SET 987933.60 616955.40 +SET 987955.50 630924.00 +SET 987977.10 562479.33 +SET 987986.78 583134.09 +SET 988.98 733.52 +SET 9880.47 7328.28 +SET 988066.38 854103.98 +SET 98807.20 59512.58 +SET 988108.08 631021.44 +SET 98811.57 68514.03 +SET 988182.80 562596.44 +SET 988260.66 631118.88 +SET 988294.90 583315.95 +SET 988371.33 743256.66 +SET 98838.35 66218.57 +SET 988509.20 595389.13 +SET 988565.82 631313.76 +SET 988603.02 583497.81 +SET 988656.16 324244.48 +SET 98871.84 63141.12 +SET 988718.40 631411.20 +SET 988757.08 583588.74 +SET 988765.44 324280.32 +SET 988799.90 562947.77 +SET 9889.80 7335.20 +SET 98893.30 68570.70 +SET 988946.40 595652.46 +SET 98898.40 32435.20 +SET 989005.60 563064.88 +SET 98903.96 74375.92 +SET 989039.60 743759.20 +SET 989187.99 797414.24 +SET 989210.00 617752.50 +SET 989328.72 631800.96 +SET 98933.25 66282.15 +SET 989530.40 324531.20 +SET 989622.70 563416.21 +SET 989633.88 631995.84 +SET 989639.68 324567.04 +SET 989720.56 618071.34 +SET 989753.94 855562.74 +SET 989820.80 596179.12 +SET 989828.40 563533.32 +SET 989835.50 584225.25 +SET 989939.04 632190.72 +SET 989989.56 584316.18 +SET 990034.10 563650.43 +SET 990076.80 324710.40 +SET 990231.12 618390.18 +SET 990239.80 563767.54 +SET 990258.00 596442.45 +SET 990451.74 584588.97 +SET 99048.64 61854.96 +SET 990486.40 618549.60 +SET 990549.36 632580.48 +SET 990597.72 856292.12 +SET 990623.20 324889.60 +SET 990651.20 564001.76 +SET 990695.20 596705.78 +SET 990732.48 324925.44 +SET 99075.60 66377.52 +SET 990759.86 584770.83 +SET 9908.46 7349.04 +SET 990854.52 632775.36 +SET 990856.90 564118.87 +SET 990951.04 324997.12 +SET 991044.41 745266.82 +SET 991062.60 564235.98 +SET 991141.62 798989.12 +SET 991222.04 585043.62 +SET 99138.49 68740.71 +SET 991464.84 633165.12 +SET 991530.16 585225.48 +SET 991569.60 597232.44 +SET 991606.72 325212.16 +SET 991679.70 564587.31 +SET 991684.22 585316.41 +SET 991716.00 325248.00 +SET 991762.80 619346.70 +SET 99177.00 63336.00 +SET 991825.28 325283.84 +SET 991922.58 633457.44 +SET 992018.08 619506.12 +SET 992043.84 325355.52 +SET 992075.16 633554.88 +SET 992091.10 564821.53 +SET 99226.24 32542.72 +SET 992273.36 619665.54 +SET 992296.80 564938.64 +SET 992380.95 746271.90 +SET 992454.52 585771.06 +SET 992480.96 325498.88 +SET 992685.48 633944.64 +SET 992913.90 565289.97 +SET 992990.64 634139.52 +SET 99301.95 68854.05 +SET 993027.36 325678.08 +SET 993049.22 746774.44 +SET 993070.76 586134.78 +SET 993119.60 565407.08 +SET 99312.85 66536.47 +SET 993129.06 858480.26 +SET 993143.22 634236.96 +SET 993224.82 586225.71 +SET 99353.10 56564.13 +SET 993532.94 586407.57 +SET 993549.76 620462.64 +SET 99360.30 66568.26 +SET 99368.70 58649.85 +SET 993736.70 565758.41 +SET 993746.46 801088.96 +SET 993901.60 325964.80 +SET 994010.88 326000.64 +SET 994148.10 565992.63 +SET 994149.18 586771.29 +SET 994211.28 634919.04 +SET 994303.24 586862.22 +SET 99444.80 32614.40 +SET 994448.00 326144.00 +SET 994457.30 586953.15 +SET 9945.78 7376.72 +SET 994557.28 326179.84 +SET 994559.50 566226.85 +SET 994666.56 326215.68 +SET 994669.02 635211.36 +SET 994816.62 859939.02 +SET 99482.16 63530.88 +SET 994821.60 635308.80 +SET 995067.20 599339.08 +SET 995081.44 621419.16 +SET 995103.68 326359.04 +SET 995212.96 326394.88 +SET 995227.60 587407.80 +SET 995238.51 860303.71 +SET 995382.30 566695.29 +SET 99547.14 69024.06 +SET 9955.11 7383.64 +SET 995504.40 599602.41 +SET 995535.72 587589.66 +SET 995540.80 326502.40 +SET 995584.50 635796.00 +SET 99566.04 86066.84 +SET 995689.78 587680.59 +SET 995700.09 802663.84 +SET 995737.08 635893.44 +SET 995843.84 587771.52 +SET 995847.28 621897.42 +SET 995868.64 326609.92 +SET 99597.55 66727.21 +SET 996042.24 636088.32 +SET 996087.20 326681.60 +SET 996305.76 326753.28 +SET 996306.02 588044.31 +SET 996351.30 803188.80 +SET 996378.80 600129.07 +SET 9964.44 7390.56 +SET 996410.80 567280.84 +SET 99645.00 66759.00 +SET 996460.08 588135.24 +SET 996499.98 636380.64 +SET 996614.14 588226.17 +SET 996616.50 567397.95 +SET 99681.60 60039.24 +SET 996852.16 326932.48 +SET 996922.26 588408.03 +SET 996957.72 636672.96 +SET 997058.84 749789.68 +SET 997123.68 622694.52 +SET 997230.38 588589.89 +SET 997253.20 600655.73 +SET 997262.88 636867.84 +SET 997289.28 327075.84 +SET 997347.96 862127.16 +SET 997384.44 588680.82 +SET 997398.56 327111.68 +SET 99764.50 56798.35 +SET 997645.00 567983.50 +SET 997690.40 600919.06 +SET 997692.56 588862.68 +SET 997720.62 637160.16 +SET 997727.11 750292.22 +SET 99787.32 63725.76 +SET 997889.52 623172.78 +SET 998000.68 589044.54 +SET 998025.78 637355.04 +SET 99814.48 62333.22 +SET 998154.74 589135.47 +SET 998191.74 862856.54 +SET 998262.10 568334.83 +SET 998272.80 327398.40 +SET 99830.88 58922.64 +SET 998304.93 804763.68 +SET 998400.08 623491.62 +SET 998491.36 327470.08 +SET 998600.64 327505.92 +SET 998616.92 589408.26 +SET 99881.92 32757.76 +SET 998819.20 327577.60 +SET 998879.20 568686.16 +SET 998910.64 623810.46 +SET 998928.48 327613.44 +SET 998941.26 637939.68 +SET 998956.14 805288.64 +SET 999002.00 601709.05 +SET 999035.52 863585.92 +SET 999037.76 327649.28 +SET 999063.65 751297.30 +SET 999093.84 638037.12 +SET 999147.04 327685.12 +SET 999290.60 568920.38 +SET 999365.60 327756.80 +SET 99939.90 63823.20 +SET 999474.88 327792.64 +SET 99955.79 69307.41 +SET 999676.48 624288.72 +SET 999695.34 590044.77 +SET 999731.92 751799.84 +SET 999849.40 590135.70 +SET 999856.74 638524.32 +SET 999879.30 864315.30 diff --git a/test/cmd/push_image_local_cluster.sh b/test/cmd/push_image_local_cluster.sh new file mode 100644 index 0000000..1fd13ea --- /dev/null +++ b/test/cmd/push_image_local_cluster.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Set bash options for better error handling +set -o errexit # Exit immediately if any command returns a non-zero exit status +set -o nounset # Treat unset variables as errors +set -o pipefail # Return a non-zero exit status if any command in a pipeline fails + +# Variable declarations +# registry_name='kind-registry' # Optional: Uncomment and set if a custom registry name is used +registry_port='5001' # Port to use for the local registry +cluster_name='local-cluster-test' # Name of the Kind cluster +redis_operator_image=$1 # The name of the Redis operator image (argument provided during script execution) +host='127.0.0.1' # The host address of the local registry + +# Function to push the operator image to the local registry and load it into the Kind cluster +push_operator_image_local_registry() { + echo "Building redis-operator image..." + docker pull "${redis_operator_image}" # Building the Redis operator image with tag 0.1.0 (assuming Dockerfile is present) + + echo "Pushing redis-operator image to Kind cluster..." + docker tag "${redis_operator_image}" "${host}:${registry_port}/${redis_operator_image}" # Tagging the image for the local registry + docker push "${host}:${registry_port}/${redis_operator_image}" # Pushing the image to the local registry + + echo "Image pushed to local registry." + + kind load docker-image "${redis_operator_image}" --name "${cluster_name}" # Loading the image into the Kind cluster + echo "Image loaded into Kind cluster." +} + +# Call the function to push the operator image to the local registry and load it into Kind cluster +push_operator_image_local_registry \ No newline at end of file diff --git a/test/cmd/redisClusterOLMTest.sh b/test/cmd/redisClusterOLMTest.sh new file mode 100755 index 0000000..bf7efd1 --- /dev/null +++ b/test/cmd/redisClusterOLMTest.sh @@ -0,0 +1,326 @@ +#!/bin/bash +# +# Allows to execute differents funtional test for RedisCluster deployments. +# Arguments: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 + +set -e + +namespace=$1 +test=$2 +newRedisCluster=$3 +typeRedisCluster=$4 + +readonly name="redis-cluster" + +####################################### +# Initialize a new RedisCluster validating if exist one installed in the k8 cluster. +# Globals: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 +# Arguments: +# None +####################################### +initializeRedisCluster() { + REDIS_POD=$(kubectl get po -n $namespace -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + # validate if exists an instance of redisCluster installed + if [ -z "$REDIS_POD" ]; then + installRedisCluster + fi +} + +####################################### +# Allows to install RedisCluster. +# Globals: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 +# Arguments: +# None +####################################### +installRedisCluster() { + local result=0 + local resultMessage="INFO:: RedisCluster created and run correctly" + rm -f config/samples/kustomization.yaml + cat <config/samples/kustomization.yaml +resources: + - TYPE_REDISCLUSTER +EOF + if [[ "$typeRedisCluster" == "storage" ]]; then + sed -i "s|TYPE_REDISCLUSTER|redis_v1alpha1_rediscluster-storage.yaml|g" "config/samples/kustomization.yaml" + elif [[ "$typeRedisCluster" == "ephemeral" ]]; then + sed -i "s|TYPE_REDISCLUSTER|redis_v1alpha1_rediscluster-ephemeral.yaml|g" "config/samples/kustomization.yaml" + elif [[ "$typeRedisCluster" == "repmaster" ]]; then + sed -i "s|TYPE_REDISCLUSTER|redis_v1alpha1_rediscluster-repmaster.yaml|g" "config/samples/kustomization.yaml" + fi + + # build and apply redis cluster in the cluster + make dev-apply-rdcl + + echo 'INFO::waiting for Initializing status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Initializing 20 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + else + echo 'INFO::waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + fi + fi + echo $resultMessage + kubectl get all,rdcl -n $namespace + if [[ "$result" != "0" ]]; then + exit $result + fi +} + +####################################### +# Test for Scale up RedisCluster. +# Globals: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 +# Arguments: +# None +####################################### +scaleUpCluster() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: Scale cluster with scale --replicas=6' + kubectl scale rdcl -n $namespace $name --replicas=6 + echo 'INFO::waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + else + echo 'INFO::waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + fi + fi + echo '##########################################' + kubectl get all,rdcl -n $namespace + echo $resultMessage + exit $result +} + +####################################### +# Test for Scale Down RedisCluster. +# Globals: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 +# Arguments: +# None +####################################### +scaleDownCluster() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: Scale cluster with scale --replicas=6' + kubectl scale rdcl -n $namespace $name --replicas=6 + echo 'INFO:: waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: Scale down cluster with scale --replicas=3' + kubectl scale rdcl -n $namespace $name --replicas=3 + echo 'INFO:: waiting for ScalingDown status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingDown 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + fi + fi + fi + fi + kubectl get all,rdcl -n $namespace + echo $resultMessage + exit $result +} + + + +####################################### +# Allow to validate if RedisCluster master-slave works properly +# Globals: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 +# Arguments: +# None +####################################### +validateRedisMasterSlave() { + local minReplicas=3 + local minReplicasPerMaster=1 + local minRepStatefulSet + local nodes + local totalMasters=0 + local totalSlaves=0 + local resultMessage="0" + # get replicas for RedisCluster + local rdclReplicas=$(kubectl -n $namespace get rdcl $name -o custom-columns=':spec.replicas' | sed 's/ *$//g' | tr -d $'\r') + # get replicas per master for RedisCluster + local rdclReplicasPerMaster=$(kubectl -n $namespace get rdcl $name -o custom-columns=':spec.replicasPerMaster' | sed 's/ *$//g' | tr -d $'\r') + # get replicas for statefulset associate to RedisCluster + local stsReplicas=$(kubectl -n $namespace get sts $name -o custom-columns=':spec.replicas' | sed 's/ *$//g' | tr -d $'\r') + # get minimum replicas calculate for StateFulSet + minRdclRepSlaves=$((rdclReplicas * rdclReplicasPerMaster)) + minRepStatefulSet=$((rdclReplicas + minRdclRepSlaves)) + + # validate if rediscluster has the minimum replicas + if [[ $rdclReplicas -lt $minReplicas ]]; then + resultMessage="ERROR:: Minimum configuration required RedisCluster minReplicas" + # validate if rediscluster has the minimum replicas per master + elif [[ $rdclReplicasPerMaster -lt $minReplicasPerMaster ]]; then + resultMessage="ERROR:: Minimum configuration required RedisCluster minReplicasPerMaster" + # validate if statefulset creates the minimum replicas per replicas per master (redisCluster.spec.replicas + (redisCluster.spec.replicas*replicasPerMaster)) + elif [[ $minRepStatefulSet -lt $stsReplicas ]]; then + resultMessage="ERROR:: Minimum configuration required StateFulSet minRepStatefulSet" + else + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + # get and parse the info about nodes configured in the Redis Cluster + nodes=$(kubectl -n $namespace exec -i $POD -- redis-cli CLUSTER NODES | tr " " "&" | tr "\r" ";") + break + done + # Convert to array the nodes info + nodeList="$(echo $nodes)" + IFS=";" read -a nodeArray <<<$nodeList + for node in ${nodeArray[@]}; do + set -f # avoid globbing (expansion of *). + array=(${node//"&"/ }) # convert to array the specific info about the node + podType="${array[2]}" # get the position that have the info about the pod type + # validate if the pod is master + if [[ "$podType" == *"master"* ]]; then + ((totalMasters = totalMasters + 1)) + fi + # validate if the pod is slave + if [[ "$podType" == *"slave"* ]]; then + ((totalSlaves = totalSlaves + 1)) + fi + done + # validate if exists the minimum pods master configured + if (($rdclReplicas != $totalMasters)); then + resultMessage="ERROR:: Minimum configuration required - pods master" + fi + # validate if exists the minimum pods slave configured + if (($minRdclRepSlaves != $totalSlaves)); then + resultMessage="ERROR:: Minimum configuration required - pods slaves" + fi + fi + echo $resultMessage +} + +####################################### +# Allow to validate if the basic configuration of RedisCluster +# master-slave works properly +# Globals: +# namespace=$1 +# test=$2 +# newRedisCluster=$3 +# typeRedisCluster=$4 +# Arguments: +# None +####################################### +validateBasicRedisMasterSlave() { + local result=0 + local resultMessage="INFO:: RedisCluster configured correctly for Redis master slave configuration" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo "INFO:: Validating basic configuration in Redis Cluster with master-slave configuration" + message=$(validateRedisMasterSlave) + if [[ "$message" != "0" ]]; then + resultMessage=$message + result=1 + else + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + # get and parse the info about nodes configured in the Redis Cluster + kubectl -n $namespace exec -i $POD -- redis-cli CLUSTER NODES + echo '##########################################' + break + done + fi + echo $resultMessage + exit $result +} + +echo "##### NAMESPACE=$namespace, NAME=$name, IMAGE=$image TEST=$test NEW_REDISCLUSTER=$newRedisCluster TYPE_REDISCLUSTER=$typeRedisCluster #####" + +case "${test}" in +Initialize) + initializeRedisCluster + ;; +ScalingUp) + scaleUpCluster + ;; +ScalingDown) + scaleDownCluster + ;; +ValidateBasicRedisMasterSlave) + validateBasicRedisMasterSlave + ;; +*) + echo "please select a correct test" + ;; +esac + +# ./test/cmd/redisClusterTest.sh "default" "Initialize" "false" "false" +# ./test/cmd/redisClusterTest.sh test-${{ github.event.pull_request.head.sha }} "Initialize" "false" "false" +# ./test/cmd/redisClusterTest.sh "redis-system" "ScalingUp" "false" "ephemeral" +# ./test/cmd/redisClusterTest.sh "redis-system" "ScalingDown" "false" "ephemeral" +# ./test/cmd/redisClusterTest.sh "redis-system" "ValidateBasicRedisMasterSlave" "false" "repmaster" diff --git a/test/cmd/redisClusterTest.sh b/test/cmd/redisClusterTest.sh new file mode 100755 index 0000000..1127483 --- /dev/null +++ b/test/cmd/redisClusterTest.sh @@ -0,0 +1,1553 @@ +#!/bin/bash +# +# Allows to execute differents funtional test for RedisCluster deployments. +# Arguments: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 + +set -e + +namespace=$1 +image=$2 +test=$3 +newRedisCluster=$4 +typeRedisCluster=$5 + +readonly name="redis-cluster" + +####################################### +# Initialize a new RedisCluster validating if exist one installed in the k8 cluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +initializeRedisCluster() { + REDIS_POD=$(kubectl get po -n $namespace -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + # validate if exists an instance of redisCluster installed + if [ -z "$REDIS_POD" ]; then + installRedisCluster + else + set +e + deleteRedisCluster + cleanAllEnvironment + set -e + sleep 10 # wait for terminating status in kubernetes objects + installRedisCluster + fi +} + +####################################### +# Allows to install RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +installRedisCluster() { + local result=0 + local resultMessage="INFO:: RedisCluster created and run correctly" + rm -f config/samples/kustomization.yaml + cat <config/samples/kustomization.yaml +resources: + - TYPE_REDISCLUSTER +EOF + if [[ "$typeRedisCluster" == "storage" ]]; then + sed -i "s|TYPE_REDISCLUSTER|redis_v1alpha1_rediscluster-storage.yaml|g" "config/samples/kustomization.yaml" + elif [[ "$typeRedisCluster" == "ephemeral" ]]; then + sed -i "s|TYPE_REDISCLUSTER|redis_v1alpha1_rediscluster-ephemeral.yaml|g" "config/samples/kustomization.yaml" + elif [[ "$typeRedisCluster" == "repmaster" ]]; then + sed -i "s|TYPE_REDISCLUSTER|redis_v1alpha1_rediscluster-repmaster.yaml|g" "config/samples/kustomization.yaml" + fi + + make IMG=$image NAMESPACE=$namespace int-test + echo 'INFO::waiting for Initializing status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Initializing 20 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + else + echo 'INFO::waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + if [[ "$result" != "0" ]]; then + exit $result + fi + fi +} + +####################################### +# Test for Scale up RedisCluster with patch command. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +scaleUpClusterPatch() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO::patch cluster with {"spec":{"replicas":6}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":6}}' --type=merge + echo 'INFO::waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + else + echo 'INFO::waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + fi + fi + echo '##########################################' + kubectl get all,rdcl -n $namespace + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for Scale Down RedisCluster with patch command. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +scaleDownClusterPatch() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":6}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":6}}' --type=merge + echo 'INFO:: waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":3}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":3}}' --type=merge + echo 'INFO:: waiting for ScalingDown status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingDown 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + fi + fi + fi + fi + kubectl get all,rdcl -n $namespace + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for Scale up RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +scaleUpCluster() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: Scale cluster with scale --replicas=6' + kubectl scale rdcl -n $namespace $name --replicas=6 + echo 'INFO::waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + else + echo 'INFO::waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure: Script failed" + result=1 + fi + fi + echo '##########################################' + kubectl get all,rdcl -n $namespace + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for Scale Down RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +scaleDownCluster() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: Scale cluster with scale --replicas=6' + kubectl scale rdcl -n $namespace $name --replicas=6 + echo 'INFO:: waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: Scale down cluster with scale --replicas=3' + kubectl scale rdcl -n $namespace $name --replicas=3 + echo 'INFO:: waiting for ScalingDown status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingDown 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + fi + fi + fi + fi + kubectl get all,rdcl -n $namespace + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for change the storage in the RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +changeStorage() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$typeRedisCluster" == "storage" ]]; then + + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"storage":"1Gi"}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"storage":"1Gi"}}' --type=merge + echo 'INFO:: waiting for Error status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Error 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"storage":"500Mi"}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"storage":"500Mi"}}' --type=merge + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + fi + fi + kubectl get all,rdcl -n $namespace + else + resultMessage='INFO:: this test is for RedisCluster with Storage enabled' + result=0 + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for change the storage and replicas in the RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +changeStorageAndReplicas() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$typeRedisCluster" == "storage" ]]; then + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"storage":"1Gi","replicas":6}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"storage":"1Gi","replicas":6}}' --type=merge + echo 'INFO:: waiting for Error status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Error 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster solving the error with {"spec":{"storage":"500Mi"}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"storage":"500Mi"}}' --type=merge + echo 'INFO:: waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + fi + fi + fi + kubectl get all,rdcl -n $namespace + else + echo 'INFO:: this test is for RedisCluster with Storage enabled' + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for Add a new label in the RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +addLabel() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + echo '############ RedisCluster ############' + kubectl get rdcl $name -n $namespace -o custom-columns=':spec.labels' + echo '############ StateFulSet ############' + kubectl get sts $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ Service ############' + kubectl get svc $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ ConfigMap ############' + kubectl get cm $name -n $namespace -o custom-columns=':metadata.labels' + echo '##########################################' + echo 'INFO:: patch cluster with {"op": "add", "path": "/spec/labels/change", "value": "test"}' + kubectl patch rdcl -n $namespace $name --type=json -p='[{"op": "add", "path": "/spec/labels/change", "value": "test"}]' + echo 'INFO:: waiting for Upgrading status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Upgrading 60 + # ./test/cmd/waitforstatus.sh $namespace $name Ready 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Error:: Script failed validating the proper status in RedisCluster [Upgrading]" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Error:: Script failed validating the proper status in RedisCluster [Ready]" + result=1 + else + echo '##########################################' + echo 'INFO:: Validating Labels' + result=$(validateLabels) + if [[ "$result" != "0" ]]; then + resultMessage="Error:: Script failed found differences in labels" + result=1 + else + echo '############ RedisCluster ############' + kubectl get rdcl $name -n $namespace -o custom-columns=':spec.labels' + echo '############ StateFulSet ############' + kubectl get sts $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ Service ############' + kubectl get svc $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ ConfigMap ############' + kubectl get cm $name -n $namespace -o custom-columns=':metadata.labels' + fi + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Test for Delete a existing label in the RedisCluster. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +deleteLabel() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + echo '############ RedisCluster ############' + kubectl get rdcl $name -n $namespace -o custom-columns=':spec.labels' + echo '############ StateFulSet ############' + kubectl get sts $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ Service ############' + kubectl get svc $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ ConfigMap ############' + kubectl get cm $name -n $namespace -o custom-columns=':metadata.labels' + echo '##########################################' + echo 'INFO:: patch cluster with {"op": "remove", "path": "/spec/labels/team"}' + kubectl patch rdcl -n $namespace $name --type=json -p='[{"op": "remove", "path": "/spec/labels/team"}]' + echo 'INFO:: waiting for Upgrading status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Upgrading 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Error:: Script failed validating the proper status in RedisCluster [Upgrading]" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Error:: Script failed validating the proper status in RedisCluster [Ready]" + result=1 + else + echo '##########################################' + echo 'INFO:: Validating Labels' + result=$(validateLabels) + if [[ "$result" != "0" ]]; then + resultMessage="Error:: Script failed found differences in labels" + result=1 + else + echo '############ RedisCluster ############' + kubectl get rdcl $name -n $namespace -o custom-columns=':spec.labels' + echo '############ StateFulSet ############' + kubectl get sts $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ Service ############' + kubectl get svc $name -n $namespace -o custom-columns=':metadata.labels' + echo '############ ConfigMap ############' + kubectl get cm $name -n $namespace -o custom-columns=':metadata.labels' + fi + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allows to validate if labels were changed properly +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +validateLabels() { + local defaultRedisClusterNameLabel="redis-cluster-name" + local defaultRedisClusterOperatorLabel="redis.rediscluster.operator/component" + # get RedisCluster labels + local rdclLabels=$(getLabels "kubectl get rdcl redis-cluster -o custom-columns=':spec.labels' -n $namespace") + # get ConfigMap labels + local cmLabels=$(getLabels "kubectl get cm redis-cluster -o custom-columns=':metadata.labels' -n $namespace") + # get Service labels + local svcLabels=$(getLabels "kubectl get svc redis-cluster -o custom-columns=':metadata.labels' -n $namespace") + # get StateFulSet labels + local stsLabels=$(getLabels "kubectl get sts redis-cluster -o custom-columns=':metadata.labels' -n $namespace") + + local existLabel=0 + local result=0 + + # validate when was added a new label + for rdclLabel in $rdclLabels; do + existLabel=0 + # validate differences with configmap + for cmLabel in $cmLabels; do + if [[ "$rdclLabel" == "$cmLabel" ]]; then + existLabel=1 + break + fi + done + if [[ "$existLabel" != "1" ]]; then + # Failure: Script failed, Error:: ConfigMap labels are diferents + result=1 + break + fi + # validate differences with service + for svsLabel in $svcLabels; do + if [[ "$rdclLabel" == "$svsLabel" ]]; then + existLabel=1 + break + fi + done + if [[ "$existLabel" != "1" ]]; then + # Failure: Script failed, Error:: Service labels are diferents + result=1 + break + fi + # validate differences with StateFulSet + for stsLabel in $stsLabels; do + if [[ "$rdclLabel" == "$stsLabel" ]]; then + existLabel=1 + break + fi + done + if [[ "$existLabel" != "1" ]]; then + # Failure: Script failed, Error:: statefulSet labels are diferents + result=1 + break + fi + done + + # validate when was deleted a label + # validate statefulset labels + if [[ "$result" == "0" ]]; then + for stsLabel in $stsLabels; do + existLabel=0 + set -f # avoid globbing (expansion of *). + array=(${stsLabel//:/ }) + # don't check the default labels + if [[ "${array[0]}" == "$defaultRedisClusterNameLabel" ]]; then + existLabel=1 + elif [[ "${array[0]}" == "$defaultRedisClusterOperatorLabel" ]]; then + existLabel=1 + else + for rdclLabel in $rdclLabels; do + if [[ "$stsLabel" == "$rdclLabel" ]]; then + existLabel=1 + break + fi + done + fi + if [[ "$existLabel" != "1" ]]; then + # Failure: Script failed, Error:: statefulSet labels are diferents + result=1 + break + fi + done + fi + + # validate service labels + if [[ "$result" == "0" ]]; then + for svsLabel in $svcLabels; do + existLabel=0 + set -f # avoid globbing (expansion of *). + array=(${svsLabel//:/ }) + # don't check the default labels + if [[ "${array[0]}" == "$defaultRedisClusterNameLabel" ]]; then + existLabel=1 + elif [[ "${array[0]}" == "$defaultRedisClusterOperatorLabel" ]]; then + existLabel=1 + else + for rdclLabel in $rdclLabels; do + if [[ "$svsLabel" == "$rdclLabel" ]]; then + existLabel=1 + break + fi + done + fi + if [[ "$existLabel" != "1" ]]; then + # Failure: Script failed, Error:: statefulSet labels are diferents + result=1 + break + fi + done + fi + + # validate configmap labels + if [[ "$result" == "0" ]]; then + for cmLabel in $cmLabels; do + existLabel=0 + set -f # avoid globbing (expansion of *). + array=(${cmLabel//:/ }) + # don't check the default labels + if [[ "${array[0]}" == "$defaultRedisClusterNameLabel" ]]; then + existLabel=1 + elif [[ "${array[0]}" == "$defaultRedisClusterOperatorLabel" ]]; then + existLabel=1 + else + for rdclLabel in $rdclLabels; do + if [[ "$cmLabel" == "$rdclLabel" ]]; then + existLabel=1 + break + fi + done + fi + if [[ "$existLabel" != "1" ]]; then + # Failure: Script failed, Error:: statefulSet labels are diferents + result=1 + break + fi + done + fi + + echo $result +} + +####################################### +# # Allows to get the labels associated to a specific object in k8 +# Globals: +# none +# Arguments: +# query +####################################### +getLabels() { + local query=$1 + local labelsList + labels="$(eval $query | sed 's/map\[//g' | sed 's/\]//g')" + labelsList=$(echo $labels | tr " " "\n") + echo $labelsList +} + +####################################### +# Remove all object in a cluster +# Globals: +# None +# Arguments: +# None +####################################### +cleanAllEnvironment() { + make int-test-clean +} + +####################################### +# Remove a existing RedisCluster +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +deleteRedisCluster() { + local result=0 + local resultMessage="INFO:: RedisCluster was deleted correctly" + echo '##########################################' + echo 'INFO:: getting data and objects to delete in the current cluster' + pvcsToDelete=$(kubectl get pvc -l='redis-cluster-name=redis-cluster' -o custom-columns=':metadata.name' -n $namespace) + rdclPersistent=$(kubectl get rdcl -l='app=redis' -o custom-columns=':metadata.name' -n $namespace) + rdclEphemeral=$(kubectl get rdcl -l='tier=redis-cluster' -o custom-columns=':metadata.name' -n $namespace) + + if [ -z "$rdclPersistent" ] && [ -z "$rdclEphemeral" ]; then + echo "INFO:: No rdcl to delete." + else + kubectl delete rdcl redis-cluster + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + fi + fi + + if [ -z "$pvcsToDelete" ]; then + echo "INFO:: No pvc to delete." + else + for PVC in $pvcsToDelete; do + echo $PVC + kubectl delete pvc/$PVC + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + break + fi + done + fi + echo $resultMessage +} + +####################################### +# Allows to validate if is posible to insert data into the Redis Cluster +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +insertData() { + # make redis-insert + local result=0 + local resultMessage="INFO:: RedisCluster insert data correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + if [ -z "$REDIS_POD" ]; then + result=0 + resultMessage="ERROR:: No pods running to insert data, starts your cluster to use this feature." + else + rm -f /tmp/data.txt + for ((i = 1; i <= 100; i++)); do echo "set ${RANDOM}${RANDOM} ${RANDOM}${RANDOM}" >>/tmp/data.txt; done + cat /tmp/data.txt | kubectl -n $namespace exec -i $REDIS_POD -- redis-cli -c + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allows to validate if is posible to insert data while scaling up event is executing into the Redis Cluster +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +insertDataWhileScaling() { + local result=0 + local inserts=0 + local keysByLoop=10 + local totalKeysInPods=0 + local totalKeys=0 + local resultMessage="INFO:: RedisCluster insert data correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo 'INFO::patch cluster with {"spec":{"replicas":3}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":3}}' --type=merge + sleep 3s + for ((i = 1; i <= 560; i++)); do + ((inserts = inserts + 1)) + echo '##########################################' + echo $inserts + status=$(kubectl get rediscluster -n $namespace $name --template='{{.status.status}}') + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + if [ -z "$REDIS_POD" ]; then + result=1 + resultMessage="ERROR:: No pods running to insert data." + break + else + echo 'INFO::Insert data while execute the scaling event' + rm -f /tmp/data.txt + for ((i = 1; i <= $keysByLoop; i++)); do + echo "set ${RANDOM}${RANDOM} ${RANDOM}${RANDOM}" >>/tmp/data.txt + done + cat /tmp/data.txt | kubectl -n $namespace exec -i $REDIS_POD -- redis-cli -c + fi + if [[ "$status" == "Ready" ]]; then + break + fi + sleep 2s + done + if [[ "$result" == "0" ]]; then + kubectl get all,rdcl -n $namespace + echo '##########################################' + totalKeys=$((inserts * keysByLoop)) + echo "INFO:: total keys inserted while the scale up process was executed $totalKeys" + # REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + if [ -z "$REDIS_POD" ]; then + result=1 + resultMessage="ERROR:: No pods running to get data." + else + for POD in $REDIS_POD; do + count=$(kubectl -n $namespace exec -i $POD -- redis-cli DBSIZE) + countKeys=$(echo $count | sed 's/ *$//g') # clear white space in the string + countKeys=$(echo "$countKeys" | tr -d $'\r') # clear special characteres in the string + echo "INFO:: redis dbsize pod: $POD count-keys: $countKeys" + totalKeysInPods=$(expr $countKeys + $totalKeysInPods) + echo "INFO:: summary redis dbsize $totalKeysInPods" + done + echo '##########################################' + echo "INFO:: total keys inserted in RedisCluster: $totalKeys" + echo "INFO:: total keys in pods RedisCluster: $totalKeysInPods" + if [[ "$totalKeys" != "$totalKeysInPods" ]]; then + resultMessage="ERROR:: the insert keys process don't work properly REDIS-CHECK" + result=1 + fi + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allows to validate if is posible to insert data while scaling down event is executing into the Redis Cluster +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +insertDataWhileScalingDown() { + local result=0 + local keysByLoop=10 + local inserts=0 + local totalKeysInPods=0 + local totalKeys=0 + local resultMessage="INFO:: RedisCluster insert data correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":6}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":6}}' --type=merge + echo 'INFO:: waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":2}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":2}}' --type=merge + sleep 3s + for ((i = 1; i <= 560; i++)); do + ((inserts = inserts + 1)) + echo '##########################################' + echo $inserts + status=$(kubectl get rediscluster -n $namespace $name --template='{{.status.status}}') + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + if [ -z "$REDIS_POD" ]; then + result=1 + resultMessage="ERROR:: No pods running to insert data." + break + else + echo 'INFO::Insert data while execute the scaling event' + rm -f /tmp/data.txt + for ((i = 1; i <= $keysByLoop; i++)); do + echo "set ${RANDOM}${RANDOM} ${RANDOM}${RANDOM}" >>/tmp/data.txt + done + cat /tmp/data.txt | kubectl -n $namespace exec -i $REDIS_POD -- redis-cli -c + fi + if [[ "$status" == "Ready" ]]; then + break + fi + sleep 2s + done + fi + fi + + if [[ "$result" == "0" ]]; then + kubectl get all,rdcl -n $namespace + echo '##########################################' + totalKeys=$((inserts * keysByLoop)) + echo "INFO:: total keys inserted while the scale up process was executed $totalKeys" + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + if [ -z "$REDIS_POD" ]; then + result=1 + resultMessage="ERROR:: No pods running to get data." + else + for POD in $REDIS_POD; do + count=$(kubectl -n $namespace exec -i $POD -- redis-cli DBSIZE) + countKeys=$(echo $count | sed 's/ *$//g') # clear white space in the string + countKeys=$(echo "$countKeys" | tr -d $'\r') # clear special characteres in the string + echo "INFO:: redis dbsize pod: $POD count-keys: $countKeys" + totalKeysInPods=$(expr $countKeys + $totalKeysInPods) + echo "INFO:: summary redis dbsize $totalKeysInPods" + done + echo '##########################################' + echo "INFO:: total keys inserted in RedisCluster: $totalKeys" + echo "INFO:: total keys in pods RedisCluster: $totalKeysInPods" + if [[ "$totalKeys" != "$totalKeysInPods" ]]; then + resultMessage="ERROR:: the insert keys process don't work properly REDIS-CHECK" + result=1 + fi + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allows to get a specific key inserted into the Redis Cluster +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +getSpecificKey() { + local result=0 + local key="foo" + local value="bar" + local getValue + local resultMessage="INFO:: Get Specific key test run correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name' --no-headers | head) + if [ -z "$REDIS_POD" ]; then + result=1 + resultMessage="ERROR:: No pods running to insert data, starts your cluster to use this feature." + else + # Adding a specific key + echo "INFO:: set $key $value" + kubectl -n $namespace exec -i $REDIS_POD -- redis-cli set $key $value + + # Adding randoms keys + rm -f /tmp/data.txt + for ((i = 1; i <= 100; i++)); do echo "set ${RANDOM}${RANDOM} ${RANDOM}${RANDOM}" >>/tmp/data.txt; done + cat /tmp/data.txt + echo "INFO kubectl -n $namespace exec -i $REDIS_POD -- redis-cli -c" + cat /tmp/data.txt | kubectl -n $namespace exec -i $REDIS_POD -- redis-cli -c + + # loop through the redis Cluster pods looking for the key. + for POD in $REDIS_POD; do + getValue=$(kubectl -n $namespace exec -i $POD -- redis-cli get $key) + if [ -n "$getValue" ]; then + break + fi + done + + if [ -z "$getValue" ]; then + result=1 + resultMessage="ERROR:: no key value data found." + elif [[ "$value" == "$getValue" ]]; then + resultMessage="INFO:: Get Specific key test run correctly key: $key - value: $getValue" + fi + fi + echo '##########################################' + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Convert the label info to Array info +# Globals: +# None +# Arguments: +# None +####################################### +getLabels() { + local query=$1 + local labelsList + labels="$(eval $query | sed 's/map\[//g' | sed 's/\]//g')" + labelsList=$(echo $labels | tr " " "\n") + echo $labelsList +} + +####################################### +# Allow to validate if RedisCluster master-slave works properly +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +validateRedisMasterSlave() { + local minReplicas=3 + local minReplicasPerMaster=1 + local minRepStatefulSet + local nodes + local totalMasters=0 + local totalSlaves=0 + local resultMessage="0" + # get replicas for RedisCluster + local rdclReplicas=$(kubectl -n $namespace get rdcl $name -o custom-columns=':spec.replicas' | sed 's/ *$//g' | tr -d $'\r') + # get replicas per master for RedisCluster + local rdclReplicasPerMaster=$(kubectl -n $namespace get rdcl $name -o custom-columns=':spec.replicasPerMaster' | sed 's/ *$//g' | tr -d $'\r') + # get replicas for statefulset associate to RedisCluster + local stsReplicas=$(kubectl -n $namespace get sts $name -o custom-columns=':spec.replicas' | sed 's/ *$//g' | tr -d $'\r') + # get minimum replicas calculate for StateFulSet + minRdclRepSlaves=$((rdclReplicas * rdclReplicasPerMaster)) + minRepStatefulSet=$((rdclReplicas + minRdclRepSlaves)) + + # validate if rediscluster has the minimum replicas + if [[ $rdclReplicas -lt $minReplicas ]]; then + resultMessage="ERROR:: Minimum configuration required RedisCluster minReplicas" + # validate if rediscluster has the minimum replicas per master + elif [[ $rdclReplicasPerMaster -lt $minReplicasPerMaster ]]; then + resultMessage="ERROR:: Minimum configuration required RedisCluster minReplicasPerMaster" + # validate if statefulset creates the minimum replicas per replicas per master (redisCluster.spec.replicas + (redisCluster.spec.replicas*replicasPerMaster)) + elif [[ $minRepStatefulSet -lt $stsReplicas ]]; then + resultMessage="ERROR:: Minimum configuration required StateFulSet minRepStatefulSet" + else + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + # get and parse the info about nodes configured in the Redis Cluster + nodes=$(kubectl -n $namespace exec -i $POD -- redis-cli CLUSTER NODES | tr " " "&" | tr "\r" ";") + break + done + # Convert to array the nodes info + nodeList="$(echo $nodes)" + IFS=";" read -a nodeArray <<<$nodeList + for node in ${nodeArray[@]}; do + set -f # avoid globbing (expansion of *). + array=(${node//"&"/ }) # convert to array the specific info about the node + podType="${array[2]}" # get the position that have the info about the pod type + # validate if the pod is master + if [[ "$podType" == *"master"* ]]; then + ((totalMasters = totalMasters + 1)) + fi + # validate if the pod is slave + if [[ "$podType" == *"slave"* ]]; then + ((totalSlaves = totalSlaves + 1)) + fi + done + # validate if exists the minimum pods master configured + if (($rdclReplicas != $totalMasters)); then + resultMessage="ERROR:: Minimum configuration required - pods master" + fi + # validate if exists the minimum pods slave configured + if (($minRdclRepSlaves != $totalSlaves)); then + resultMessage="ERROR:: Minimum configuration required - pods slaves" + fi + fi + echo $resultMessage +} + +####################################### +# Allow to validate if the basic configuration of RedisCluster +# master-slave works properly +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +validateBasicRedisMasterSlave() { + local result=0 + local resultMessage="INFO:: RedisCluster configured correctly for Redis master slave configuration" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo "INFO:: Validating basic configuration in Redis Cluster with master-slave configuration" + message=$(validateRedisMasterSlave) + if [[ "$message" != "0" ]]; then + resultMessage=$message + result=1 + else + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + # get and parse the info about nodes configured in the Redis Cluster + kubectl -n $namespace exec -i $POD -- redis-cli CLUSTER NODES + echo '##########################################' + break + done + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allow to validate if the configuration of RedisCluster master-slave works properly, +# while this one is Scaling Up +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +scalingUpRedisMasterSlave() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":4,"replicasPerMaster":2}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":4,"replicasPerMaster":2}}' --type=merge + echo 'INFO::waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 60 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR:: Failure process the scaling up of the RedisCluster" + result=1 + else + echo 'INFO::waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="ERROR::Failure process the wait for RedisCluster Ready" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo "INFO:: Validating configuration in Redis Cluster with master-slave configuration" + message=$(validateRedisMasterSlave) + if [[ "$message" != "0" ]]; then + resultMessage=$message + result=1 + else + # show the configuration + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + # get and parse the info about nodes configured in the Redis Cluster + kubectl -n $namespace exec -i $POD -- redis-cli CLUSTER NODES + echo '##########################################' + break + done + fi + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allow to validate if the configuration of RedisCluster master-slave works properly, +# while this one is Scaling Down +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +scalingDownRedisMasterSlave() { + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":4,"replicasPerMaster":2}}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":4,"replicasPerMaster":2}}' --type=merge + echo 'INFO:: waiting for ScalingUp status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingUp 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: patch cluster with {"spec":{"replicas":3},"replicasPerMaster":1}' + kubectl patch rdcl -n $namespace $name -p '{"spec":{"replicas":3,"replicasPerMaster":1}}' --type=merge + echo 'INFO:: waiting for ScalingDown status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name ScalingDown 180 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo "INFO:: Validating configuration in Redis Cluster with master-slave configuration" + sleep 50 + message=$(validateRedisMasterSlave) + if [[ "$message" != "0" ]]; then + resultMessage=$message + result=1 + else + # show the configuration + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + # get and parse the info about nodes configured in the Redis Cluster + kubectl -n $namespace exec -i $POD -- redis-cli CLUSTER NODES + echo '##########################################' + break + done + fi + fi + fi + fi + fi + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allow to validate if RedisCluster master-slave works properly, +# while a pod is not working well +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +killPodRedisMasterSlave() { + + local result=0 + local resultMessage="INFO:: Test runs correctly" + if [[ "$newRedisCluster" == "true" ]]; then + initializeRedisCluster + fi + kubectl get all,rdcl -n $namespace + echo '##########################################' + REDIS_POD=$(kubectl get po -n $namespace --field-selector=status.phase=Running -l='redis.rediscluster.operator/component=redis' -o custom-columns=':metadata.name') + for POD in $REDIS_POD; do + set +e + # kill one pod that is allocated to RedisCluster + echo 'INFO:: Killing one pod' + error=$(kubectl -n $namespace exec -i $POD -- redis-cli debug segfault 30) + set -e + break + done + kubectl get all,rdcl -n $namespace + echo '##########################################' + echo 'INFO:: waiting for Ready status in redisCluster' + ./test/cmd/waitforstatus.sh $namespace $name Ready 540 + result=$? + if [[ "$result" != "0" ]]; then + resultMessage="Failure: Script failed" + result=1 + else + echo "INFO:: Validating configuration in Redis Cluster with master-slave configuration" + sleep 40 + kubectl get all,rdcl -n $namespace + echo '##########################################' + message=$(validateRedisMasterSlave) + if [[ "$message" != "0" ]]; then + resultMessage=$message + result=1 + fi + fi + + echo $resultMessage + if [[ "$test" != "All" ]]; then + exit $result + fi +} + +####################################### +# Allow to execute all funtional test +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +allTest() { + scaleUpCluster + scaleDownCluster + changeStorage + changeStorageAndReplicas + addLabel + deleteLabel + InsertData + InsertDataWhileScaling +} + +####################################### +# Initialize a new redis operator in local environment. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# newRedisCluster=$4 +# typeRedisCluster=$5 +# Arguments: +# None +####################################### +initializeOperator() { + make docker-build docker-push IMG="$image" + set +e + deleteRedisCluster + cleanAllEnvironment + set -e + sleep 10 # wait for terminating status in kubernetes objects + make IMG=$image NAMESPACE=$namespace int-test + deleteRedisCluster +} + +####################################### +# Delete all environment. +# Globals: +# namespace=$1 +# image=$2 +# test=$3 +# Arguments: +# None +####################################### +deleteAll() { + echo '################# Delete objects #########################' + set +e + deleteRedisCluster + echo '##########################################' + cleanAllEnvironment + set -e + sleep 10 + echo '################# end delete objects #########################' +} + +echo "##### NAMESPACE=$namespace, NAME=$name, IMAGE=$image TEST=$test NEW_REDISCLUSTER=$newRedisCluster TYPE_REDISCLUSTER=$typeRedisCluster #####" + +case "${test}" in +ScalingUpPatch) + scaleUpClusterPatch + ;; +ScalingDownPatch) + scaleDownClusterPatch + ;; +ScalingUp) + scaleUpCluster + ;; +ScalingDown) + scaleDownCluster + ;; +ChangeStorage) + changeStorage + ;; +ChangeStorageReplicas) + changeStorageAndReplicas + ;; +AddLabel) + addLabel + ;; +DeleteLabel) + deleteLabel + ;; +InsertData) + insertData + ;; +InsertDataWhileScaling) + insertDataWhileScaling + ;; +InsertDataWhileScalingDown) + insertDataWhileScalingDown + ;; +GetSpecificKey) + getSpecificKey + ;; +ValidateBasicRedisMasterSlave) + validateBasicRedisMasterSlave + ;; +ScalingUpRedisMasterSlave) + scalingUpRedisMasterSlave + ;; +ScalingDownRedisMasterSlave) + scalingDownRedisMasterSlave + ;; +KillPodRedisMasterSlave) + killPodRedisMasterSlave + ;; +DeleteRedisCluster) + deleteRedisCluster + ;; +DeleteAll) + deleteAll + ;; +InitializeOperator) + initializeOperator + ;; +All) + allTest + ;; +*) + echo "please select a correct test" + ;; +esac + +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "Initialize" "true" "storage" +# ./test/cmd/redisClusterTest.sh test-${{ github.event.pull_request.head.sha }} ${{env.JFROG_SNAPSHOT_REGISTRY}}/redis-operator:sha-${{ github.event.pull_request.head.sha }} "Initialize" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:1.0.2" "ScalingUpPatch" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ScalingDownPatch" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:1.0.2" "ScalingUp" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ScalingDown" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ChangeStorage" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ChangeStorageReplicas" "false" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "AddLabel" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "AddLabel" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "DeleteLabel" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "DeleteLabel" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ChangeLabels" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ChangeLabels" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "InsertData" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "InsertData" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "InsertDataWhileScaling" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "InsertDataWhileScalingDown" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "GetSpecificKey" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ValidateBasicRedisMasterSlave" "true" "repmaster" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ScalingUpRedisMasterSlave" "true" "repmaster" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "ScalingDownRedisMasterSlave" "true" "repmaster" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "KillPodRedisMasterSlave" "true" "repmaster" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "MasterSlave" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "All" "true" "storage" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "DeleteRedisCluster" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "InitializeOperator" "false" "false" +# ./test/cmd/redisClusterTest.sh "redis-system" "localhost:5001/redis-inditext-operator:v0.2.8" "DeleteAll" "false" "false" diff --git a/test/cmd/waitforstatus.sh b/test/cmd/waitforstatus.sh new file mode 100755 index 0000000..1ded5f0 --- /dev/null +++ b/test/cmd/waitforstatus.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# set -e + +getStatus() +{ + local namespace=$1 + local name=$2 + local status=$(kubectl get rediscluster -n $namespace $name --template='{{.status.status}}') + echo "$status" +} + +waitForStatus() +{ + local namespace=$1 + local name=$2 + local waitstatus=$3 + local timeout=$4 + local status="" + for ((i=1;i<=timeout;i++)); do + status=$(getStatus $namespace $name) + if [[ "$status" == "$waitstatus" ]]; then break; fi + sleep 1s + done + + # echo "Status=$status" + if [[ "$waitstatus" != "$status" ]]; then + # echo "Error getting expected status in RedisCluster, Status: $status" + exit 1 + else + exit 0 + fi +} + +namespace=$1 +name=$2 +expectedStatus=$3 +timeout=$4 + +# echo "Namespace=$namespace,Name=$name,Status=$status,Timeout=$timeout" +waitForStatus "$namespace" "$name" "$expectedStatus" "$timeout" diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go new file mode 100644 index 0000000..c712bcb --- /dev/null +++ b/test/e2e/e2e_suite_test.go @@ -0,0 +1,119 @@ +package e2e + +import ( + "context" + "path/filepath" + "testing" + "time" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/test/e2e/internal/config" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kubectl/pkg/scheme" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/envtest" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/log/zap" +) + +const ( + metricsAddr = ":8080" + CrdFileName = "deployment" +) + +var ( + testEnv *envtest.Environment + crdDirectoryPath = filepath.Join("..", "..", CrdFileName) + k8sClient client.Client + k8sManagerCancelFn context.CancelFunc + ctx context.Context +) + +func TestE2e(t *testing.T) { + RunSpecs(t, "E2e Suite") +} + +var _ = BeforeSuite(func() { + logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true))) + + RegisterFailHandler(Fail) + + SetDefaultEventuallyTimeout(time.Second * 10) + + useCluster := true + By("configuring test environment") + testEnv = &envtest.Environment{ + UseExistingCluster: &useCluster, + AttachControlPlaneOutput: true, + CRDDirectoryPaths: []string{crdDirectoryPath}, + ErrorIfCRDPathMissing: true, + } + + By("starting test environment") + time.Sleep(10 * time.Second) + cfg, err := testEnv.Start() + Expect(err).ToNot(HaveOccurred()) + Expect(cfg).ToNot(BeNil()) + + By("updating scheme") + err = redisv1.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + err = metav1.AddMetaToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + err = corev1.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + err = apiextensions.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + + By("creating manager") + k8sManager, err := ctrl.NewManager(testEnv.Config, ctrl.Options{ + NewClient: config.NewClient(), + Scheme: scheme.Scheme, + Cache: cache.Options{ + DefaultNamespaces: map[string]cache.Config{ + RedisNamespace: {}, + }, + }, + Metrics: server.Options{ + BindAddress: metricsAddr, + }, + }) + Expect(err).ToNot(HaveOccurred()) + + k8sClient = k8sManager.GetClient() + Expect(err).NotTo(HaveOccurred()) + Expect(k8sClient).ToNot(BeNil()) + + go func() { + ctx, k8sManagerCancelFn = context.WithCancel(ctrl.SetupSignalHandler()) + err = k8sManager.Start(ctx) + Expect(err).ToNot(HaveOccurred()) + }() +}) + +var _ = AfterSuite(func() { + redisClusterOperator, err := createOperator() + Expect(err).NotTo(HaveOccurred()) + + By("tearing down the test environment") + Expect(k8sClient.Delete(context.Background(), &redisClusterOperator)).Should(Succeed()) + + if k8sManagerCancelFn != nil { + k8sManagerCancelFn() + } + k8sManagerCancelFn = nil + By("tearing down the test environment") + Expect(testEnv).ToNot(BeNil()) + err = testEnv.Stop() + Expect(err).ToNot(HaveOccurred()) +}) diff --git a/test/e2e/framework/kubeclient.go b/test/e2e/framework/kubeclient.go new file mode 100644 index 0000000..4b3c6bf --- /dev/null +++ b/test/e2e/framework/kubeclient.go @@ -0,0 +1,113 @@ +package framework + +import ( + "bytes" + "context" + "fmt" + "os" + "path/filepath" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/scheme" + + typeCoreV1 "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/tools/remotecommand" + "k8s.io/client-go/util/homedir" +) + +// Get the clientSet for kubernetes conection +func getClientSet() (*kubernetes.Clientset, *rest.Config, error) { + // Get the KUBECONFIG environment variable + kubeconfig := os.Getenv("KUBECONFIG") + if kubeconfig == "" { + // Get config file of kubernetes + kubeconfig = filepath.Join(homedir.HomeDir(), ".kube", "config") + } + + // Create the rest.Config for kubernetes conection + config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) + if err != nil { + return nil, nil, fmt.Errorf("error loading config file of kubernetes: %v", err) + } + // Create the client for kubernetes conection + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, nil, fmt.Errorf("error creating client of kubernetes: %v", err) + } + return clientset, config, nil +} + +// Execute a command with exec by pod +func remoteCommand(namespace string, podName string, command string) (string, string, error) { + ctx := context.Background() + buf := &bytes.Buffer{} + errBuf := &bytes.Buffer{} + executor, err := remoteCommandExecutor(namespace, podName, command) + if err != nil { + return "", "", err + } + + // Connect this process' std{in,out,err} to the remote shell process. + err = executor.StreamWithContext(ctx, remotecommand.StreamOptions{ + Stdin: nil, + Stdout: buf, + Stderr: errBuf, + Tty: false, + }) + if err != nil { + return "", "", err + } + return buf.String(), errBuf.String(), nil +} + +// Create the executor that allow execute commands in pods in a cluster of kubernetes +func remoteCommandExecutor(namespace, podName, command string) (remotecommand.Executor, error) { + _, config, err := getClientSet() + if err != nil { + return nil, fmt.Errorf("error creating client of kubernetes: %v", err) + } + + coreV1Client, err := typeCoreV1.NewForConfig(config) + if err != nil { + return nil, err + } + + request := coreV1Client.RESTClient(). + Post(). + Namespace(namespace). + Resource("pods"). + Name(podName). + SubResource("exec"). + VersionedParams(&corev1.PodExecOptions{ + TypeMeta: metav1.TypeMeta{}, + Stdout: true, + Stderr: true, + TTY: false, + Command: []string{"/bin/sh", "-c", command}, + }, scheme.ParameterCodec) + + executor, err := remotecommand.NewSPDYExecutor(config, "POST", request.URL()) + if err != nil { + return nil, err + } + return executor, nil +} + +func newLimits() corev1.ResourceList { + return corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("50m"), + corev1.ResourceMemory: resource.MustParse("50Mi"), + } +} + +func newRequests() corev1.ResourceList { + return corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("50m"), + corev1.ResourceMemory: resource.MustParse("50Mi"), + } +} diff --git a/test/e2e/framework/redisclient.go b/test/e2e/framework/redisclient.go new file mode 100644 index 0000000..5bca2f9 --- /dev/null +++ b/test/e2e/framework/redisclient.go @@ -0,0 +1,961 @@ +package framework + +import ( + "context" + "fmt" + "reflect" + "regexp" + "strconv" + "strings" + "time" + + "math/rand" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/internal/redis" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/util/wait" + "sigs.k8s.io/controller-runtime/pkg/client" + + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/util/retry" + ctrl "sigs.k8s.io/controller-runtime" +) + +const ( + DBSIZECMD string = "redis-cli DBSIZE" + FLUSHCMD string = "redis-cli FLUSHALL" + CLUSTERINFOCMD string = "redis-cli cluster info" + CLUSTERNODESCMD string = "redis-cli cluster nodes" + EXPECTEDKEYS int = 30 + WAIT_FOR_RDCL_DELETION int = 180 +) + +type ClusterStatus struct { + State string + SlotsOk string + ClusterSize string + KnownNodes string + StatsMessagesSent string + StatsMessagesReceived string + NodeIps string +} + +var ( + version = "6.0.2" +) + +func EnsureClusterExistsOrCreate(client client.Client, nsName types.NamespacedName, replicas int32, storage string, replicasPerMaster int32, purgeKeys bool, ephemeral bool, pdb redisv1.Pdb, override redisv1.RedisClusterOverrideSpec) error { + rc := &redisv1.RedisCluster{} + err := client.Get(context.TODO(), nsName, rc) + if rc.Status.Status != "Ready" && err == nil { + if err := client.Delete(context.TODO(), rc); err != nil { + return err + } + newCluster := createRedisCluster(nsName, replicas, storage, replicasPerMaster, purgeKeys, ephemeral, pdb, override) + if err := client.Create(context.TODO(), newCluster); err != nil { + return err + } + } else if err != nil { + newCluster := createRedisCluster(nsName, replicas, storage, replicasPerMaster, purgeKeys, ephemeral, pdb, override) + if err := client.Create(context.TODO(), newCluster); err != nil { + return err + } + } + return nil +} + +func ChangeRedisClusterConfiguration(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName, labels map[string]string, status string, replicas int32, replicasPerMaster int32, ephemeral bool, resources *corev1.ResourceRequirements, expectedImage string, pdb redisv1.Pdb, override redisv1.RedisClusterOverrideSpec) (*redisv1.RedisCluster, error) { + // Wait for ready status of redis-cluster + fetched := &redisv1.RedisCluster{} + err := k8sClient.Get(ctx, nsName, fetched) + if err != nil { + return nil, err + } + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(500)) + if err != nil { + return nil, err + } + + // Update labels of redis-cluster + err = updateRedisCluster(ctx, k8sClient, fetched, "", replicas, labels, replicasPerMaster, ephemeral, resources, expectedImage, pdb, override) + if err != nil { + return nil, err + } + + err = waitForObjectStatus(ctx, k8sClient, nsName, status, int32(800)) + if err != nil { + return nil, err + } + + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return nil, err + } + + return fetched, nil +} + +func ChangeRedisClusterStorage(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName, initialStorage string, desiredStorage string, replicas int32) (*redisv1.RedisCluster, error) { + fetched := &redisv1.RedisCluster{} + err := k8sClient.Get(ctx, nsName, fetched) + if err != nil { + return nil, err + } + // Wait for ready status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return nil, err + } + // Update the storage with the desired value + err = updateRedisCluster(ctx, k8sClient, fetched, desiredStorage, replicas, nil, 0, false, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + if err != nil { + return nil, err + } + // Wait for scaling-up status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Error", int32(800)) + if err != nil { + return nil, err + } + // Update the storage with initial value of redis-cluster + err = updateRedisCluster(ctx, k8sClient, fetched, initialStorage, replicas, nil, 0, false, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + if err != nil { + return nil, err + } + // Wait for ready status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return nil, err + } + + return fetched, nil +} +func WaitForReadyRdcl(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName) (*redisv1.RedisCluster, error) { + fetched := &redisv1.RedisCluster{} + err := k8sClient.Get(ctx, nsName, fetched) + if err != nil { + return nil, err + } + // Wait for ready status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(1200)) + if err != nil { + return nil, err + } + + return fetched, nil +} + +func ChangeRedisClusterEphemeral(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName, storage string, replicas int32) (*redisv1.RedisCluster, error) { + fetched := &redisv1.RedisCluster{} + err := k8sClient.Get(ctx, nsName, fetched) + if err != nil { + return nil, err + } + // Wait for ready status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return nil, err + } + // Update the storage with the desired value + err = updateRedisCluster(ctx, k8sClient, fetched, storage, replicas, nil, 0, false, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + if err != nil { + return nil, err + } + // Wait for Error status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Error", int32(800)) + if err != nil { + return nil, err + } + + return fetched, nil +} + +func ForceRedisClusterEphemeral(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName, storage string, replicas int32) (*redisv1.RedisCluster, error) { + fetched := &redisv1.RedisCluster{} + err := k8sClient.Get(ctx, nsName, fetched) + if err != nil { + return nil, err + } + // Wait for ready status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return nil, err + } + // Update the storage with the desired value + err = updateRedisCluster(ctx, k8sClient, fetched, storage, replicas, nil, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + if err != nil { + return nil, err + } + // Wait for Error status of redis-cluster + err = waitForObjectStatus(ctx, k8sClient, nsName, "Error", int32(800)) + if err != nil { + return nil, err + } + + return fetched, nil +} + +func CheckRedisCluster(k8Client client.Client, ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, error) { + allPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + k8Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + + rdclStatus, err := inspectRedisClusterStatus(allPods) + + if err != nil { + return false, err + } + + isOkStatus := checkRedisClusterConditions(rdclStatus) + + return isOkStatus, nil +} + +func CheckRedisClusterIfError(k8Client client.Client, ctx context.Context, redisCluster *redisv1.RedisCluster) (bool, error) { + allPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + k8Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + + rdclStatus, err := inspectRedisClusterStatus(allPods) + + if err != nil { + return false, err + } + + return rdclStatus.State == "Error", nil +} + +func GetPods(k8Client client.Client, ctx context.Context, redisCluster *redisv1.RedisCluster) *corev1.PodList { + allPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + k8Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + + return allPods +} + +func RedisStsContainsOverride(sts appsv1.StatefulSet, override redisv1.RedisClusterOverrideSpec) bool { + // Labels and annotations in override must exist and have the same content in sts + for k, v := range override.StatefulSet.Spec.Template.Labels { + if sts.Spec.Template.Labels[k] != v { + ctrl.Log.Error(fmt.Errorf("label %v not equal in sts: %v and override: %v", k, sts.Spec.Template.Labels[k], v), "Error") + return false + } + } + + for k, v := range override.StatefulSet.Spec.Template.Annotations { + if sts.Spec.Template.Annotations[k] != v { + ctrl.Log.Error(fmt.Errorf("annotation %v not equal in sts: %v and override: %v", k, sts.Spec.Template.Annotations[k], v), "Error") + return false + } + } + + if !reflect.DeepEqual(sts.Spec.Template.Spec.Tolerations, override.StatefulSet.Spec.Template.Spec.Tolerations) { + ctrl.Log.Error(fmt.Errorf("taints not equal in sts: %v and override: %v", sts.Spec.Template.Spec.Tolerations, override.StatefulSet.Spec.Template.Spec.Tolerations), "Error") + return false + } + + if !reflect.DeepEqual(sts.Spec.Template.Spec.TopologySpreadConstraints, override.StatefulSet.Spec.Template.Spec.TopologySpreadConstraints) { + ctrl.Log.Error(fmt.Errorf("topology not equal in sts: %v and override: %v", sts.Spec.Template.Spec.TopologySpreadConstraints, override.StatefulSet.Spec.Template.Spec.TopologySpreadConstraints), "Error") + return false + } + + return true +} + +func createRedisCluster(nsName types.NamespacedName, replicas int32, storage string, replicasPerMaster int32, purgeKeys bool, ephemeral bool, pdb redisv1.Pdb, override redisv1.RedisClusterOverrideSpec) *redisv1.RedisCluster { + cluster := &redisv1.RedisCluster{ + TypeMeta: metav1.TypeMeta{ + Kind: "RedisCluster", + APIVersion: "redis.inditex.com/v1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: nsName.Name, + Namespace: nsName.Namespace, + Finalizers: []string{"redis.inditex.com/configmap-cleanup"}, + Labels: map[string]string{"team": "team-a"}, + }, + Spec: redisv1.RedisClusterSpec{ + Auth: redisv1.RedisAuth{}, + Pdb: pdb, + Version: version, + Replicas: replicas, + Ephemeral: true, + Image: "redis/redis-stack-server:7.4.0-v3", + Config: ` + maxmemory 70mb + maxmemory-samples 5 + maxmemory-policy allkeys-lru + appendonly no + protected-mode no + rdbcompression no + rdbchecksum no + `, + Resources: &corev1.ResourceRequirements{ + Limits: newLimits(), + Requests: newRequests(), + }, + PurgeKeysOnRebalance: purgeKeys, + Override: &override, + }, + } + + if storage != "" { + cluster.Spec.DeletePVC = true + cluster.Spec.Ephemeral = false + cluster.Spec.Storage = storage + accessModesTypes := make([]corev1.PersistentVolumeAccessMode, 0, 3) + accessModesTypes = append(accessModesTypes, corev1.ReadWriteOnce) + cluster.Spec.AccessModes = accessModesTypes + } + + if replicasPerMaster > 0 { + cluster.Spec.ReplicasPerMaster = replicasPerMaster + } + + cluster.Spec.Ephemeral = ephemeral + + return cluster +} + +func updateRedisCluster(context context.Context, client client.Client, redisCluster *redisv1.RedisCluster, storage string, replicas int32, expectedLabels map[string]string, expectedReplicasPerMaster int32, ephemeral bool, resources *corev1.ResourceRequirements, image string, pdb redisv1.Pdb, override redisv1.RedisClusterOverrideSpec) error { + err := retry.RetryOnConflict(retry.DefaultRetry, func() error { + copyRedisCluster := &redisv1.RedisCluster{} + err := client.Get(context, types.NamespacedName{Namespace: redisCluster.Namespace, Name: redisCluster.Name}, copyRedisCluster) + if err != nil { + return err + } + + copyRedisCluster.Spec.Ephemeral = ephemeral + copyRedisCluster.Spec.Replicas = replicas + + if expectedReplicasPerMaster > 0 { + copyRedisCluster.Spec.ReplicasPerMaster = expectedReplicasPerMaster + } + + if storage != "" { + copyRedisCluster.Spec.Storage = storage + } + if image != "" { + copyRedisCluster.Spec.Image = image + } + + if expectedLabels != nil { + copyRedisCluster.Spec.Labels = &expectedLabels + } + + if resources != nil { + copyRedisCluster.Spec.Resources = resources + } + + copyRedisCluster.Spec.Pdb = pdb + copyRedisCluster.Spec.Override = &override + + // Update the object + err = client.Update(context, copyRedisCluster) + if err != nil { + return err + } + + return nil + }) + + return err +} + +func createAndInsertDataIntoCluster(pods *corev1.PodList) error { + var cmd string + if len(pods.Items) == 0 { + return fmt.Errorf("no pods found") + } + + pod := pods.Items[0] + + err := waitForContainerReady(pod) + if err != nil { + return err + } + + for i := 0; i < EXPECTEDKEYS; i++ { + key := fmt.Sprintf("%v-%v", randomValue(), randomValue()) + value := fmt.Sprintf("%v-%v", randomValue(), randomValue()) + cmd = fmt.Sprintf("redis-cli -c set %v %v", key, value) + _, _, err := remoteCommand(pod.Namespace, pod.Name, cmd) + if err != nil { + continue + } + time.Sleep(1 * time.Second) + } + + return nil +} + +// waitForContainerReady checks if the container in a pod is ready within a specified timeout period. +func waitForContainerReady(pod corev1.Pod) error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + return wait.PollImmediateWithContext(ctx, 1*time.Second, 300*time.Second, func(ctx context.Context) (bool, error) { + if isContainerReady(pod) { + return true, nil + } + return false, nil + }) +} + +// isContainerReady checks if any container in the pod is ready. +func isContainerReady(pod corev1.Pod) bool { + for _, containerStatus := range pod.Status.ContainerStatuses { + if containerStatus.Ready { + return true + } + } + return false +} + +func CheckClusterKeys(pods *corev1.PodList) (bool, error) { + if len(pods.Items) == 0 { + return false, fmt.Errorf("no pods found") + } + var totalKeys int + + for _, pod := range pods.Items { + time.Sleep(5 * time.Second) + value, _, err := remoteCommand(pod.Namespace, pod.Name, DBSIZECMD) + if err != nil { + return false, err + } + time.Sleep(1 * time.Second) + + formatValue := strings.TrimSpace(value) + intValue, err := strconv.Atoi(formatValue) + if err != nil { + return false, err + } + fmt.Printf("") + totalKeys += intValue + } + return totalKeys == EXPECTEDKEYS, nil +} + +func FlushClusterKeys(pods *corev1.PodList) (bool, error) { + if len(pods.Items) == 0 { + return false, fmt.Errorf("no pods found") + } + var totalKeys int + + for _, pod := range pods.Items { + time.Sleep(1 * time.Second) + _, _, err := remoteCommand(pod.Namespace, pod.Name, FLUSHCMD) + if err != nil { + return false, err + } + time.Sleep(1 * time.Second) + + value, _, err := remoteCommand(pod.Namespace, pod.Name, DBSIZECMD) + if err != nil { + return false, err + } + time.Sleep(1 * time.Second) + + formatValue := strings.TrimSpace(value) + intValue, err := strconv.Atoi(formatValue) + if err != nil { + return false, err + } + + totalKeys += intValue + } + return totalKeys == 0, nil +} + +func randomValue() string { + // Create a private random number generator with a specific seed + randomGenerator := rand.New(rand.NewSource(time.Now().UnixNano())) + // Generate a random number between 0 and 100 + randomNumber := fmt.Sprintf("%v", randomGenerator.Intn(100)) + return randomNumber +} + +func inspectRedisClusterStatus(pods *corev1.PodList) (ClusterStatus, error) { + var cmd string + if len(pods.Items) == 0 { + return ClusterStatus{}, fmt.Errorf("no pods found") + } + + pod := pods.Items[0] + cmd = fmt.Sprintf("%s; %s", CLUSTERINFOCMD, CLUSTERNODESCMD) + stdOut, _, err := remoteCommand(pod.Namespace, pod.Name, cmd) + if err != nil { + return ClusterStatus{}, err + } + + clusterStatus := getStatusFromStdOut(stdOut) + return clusterStatus, nil +} + +func checkRedisClusterConditions(clusterStatus ClusterStatus) bool { + statusOK := true + + if strings.ToLower(clusterStatus.State) != "ok" { + return false + } + + return statusOK +} + +// getStatusFromStdOut parses the output string and apply regex to get information about the cluster status, +// number of slots ok, known nodes, cluster size, messages sent and messages received +func getStatusFromStdOut(stdOut string) ClusterStatus { + var clusterState string + re := regexp.MustCompile(`(?m)^[a-zA-Z0-9\n_: .\-,\t\[\]\r]*cluster_state:(?P[a-zA-Z]*)[a-zA-Z0-9\n_: .\-,\t\[\]\r]*cluster_slots_ok:(?P[0-9]*)[a-zA-Z0-9\n_: .\-,\t\[\]\r]*cluster_known_nodes:(?P[0-9]*)[a-zA-Z0-9\n_: .\-,\t\[\]\r]*cluster_size:(?P[0-9]*)[a-zA-Z0-9\n_: .\-,\t\[\]\r]*cluster_stats_messages_sent:(?P[0-9]*)[a-zA-Z0-9\n_: .\-,\t\[\]\r]*cluster_stats_messages_received:(?P[0-9]*)[a-zA-Z0-9\n_: .\-,\t\[\]\r]*$`) + match := re.FindStringSubmatch(stdOut) + result := make(map[string]string) + if len(match) != 0 { + for i, name := range re.SubexpNames() { + if i != 0 && name != "" && len(match) != 0 { + result[name] = match[i] + } + } + clusterState = result["clusterState"] + } else { + if strings.Contains(stdOut, "cluster support disabled") { + clusterState = "disabled" + } + } + + nodeIps := getNodeIPsFromStdOut(stdOut) + + var clusterStatus = ClusterStatus{ + State: clusterState, + SlotsOk: result["clusterSlotsOk"], + ClusterSize: result["clusterSize"], + KnownNodes: result["clusterKnownNodes"], + NodeIps: nodeIps, + StatsMessagesSent: result["clusterStatsMessagesSent"], + StatsMessagesReceived: result["clusterStatsMessagesReceived"], + } + return clusterStatus +} + +// getNodeIPsFromStdOut parses the output string and apply regex to get the ips of the nodes +func getNodeIPsFromStdOut(stdOut string) string { + var nodeIPs string + + var re = regexp.MustCompile(`(?m)([\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})`) + for _, match := range re.FindAllString(stdOut, -1) { + if len(nodeIPs) == 0 { + nodeIPs = match + } else { + nodeIPs = fmt.Sprintf("%s; %s", nodeIPs, match) + } + } + return nodeIPs +} + +func waitForObjectStatus(ctx context.Context, client client.Client, nsName types.NamespacedName, desiredStatus string, timeoutSeconds int32) error { + interval := 3 * time.Second + duration := time.Duration(timeoutSeconds) * time.Second + var lastKnownStatus string + + err := wait.PollImmediateWithContext(ctx, interval, duration, func(ctx context.Context) (bool, error) { + redisCluster := &redisv1.RedisCluster{} + err := client.Get(ctx, nsName, redisCluster) + if err != nil { + if !errors.IsNotFound(err) { // Continue polling if object is not found + return false, nil + } + return false, err + } + + lastKnownStatus = redisCluster.Status.Status + return lastKnownStatus == desiredStatus, nil + }) + + if err != nil { + return fmt.Errorf("timeout after %s waiting for status '%s', last known status: '%s': %w", duration, desiredStatus, lastKnownStatus, err) + } + return nil +} + +func ValidateRedisClusterMasterSlave(ctx context.Context, k8Client client.Client, nsName types.NamespacedName, replicas int32, replicasPerMaster int32, redisCluster *redisv1.RedisCluster) (bool, error) { + isValid := true + stsReplicas := int32(0) + rdclReplicas := int32(0) + rdclReplicasPerMaster := int32(0) + minRdclRepSlaves := int32(0) + minRepStatefulSet := int32(0) + fetchedStatefulset := &appsv1.StatefulSet{} + // Wait for ready status of redis-cluster + err := waitForObjectStatus(ctx, k8Client, nsName, "Ready", int32(180)) + if err != nil { + return false, err + } + rdclReplicas = redisCluster.Spec.Replicas + rdclReplicasPerMaster = redisCluster.Spec.ReplicasPerMaster + + // validate initial replicas values + if rdclReplicas < 3 || replicas < 3 { + return false, fmt.Errorf("redis-cluster replicas must be greater than 3") + } + if rdclReplicasPerMaster < 1 || replicasPerMaster < 1 { + return false, fmt.Errorf("redis-cluster replicasPerMaster must be greater than 3") + } + + // Calculate the number of replicas for the statefulset + minRdclRepSlaves = rdclReplicas * rdclReplicasPerMaster + minRepStatefulSet = rdclReplicas + minRdclRepSlaves + // get statefulset associated to redis-cluster + err = k8Client.Get(ctx, nsName, fetchedStatefulset) + if err != nil { + return false, err + } + + // get the actual number of replicas from statefulset + stsReplicas = *fetchedStatefulset.Spec.Replicas + if rdclReplicas != replicas { + return false, fmt.Errorf("redis-cluster replicas must be equal to replicas") + } + if rdclReplicasPerMaster != replicasPerMaster { + return false, fmt.Errorf("redis-cluster replicasPerMaster must be equal to replicasPerMaster") + } + if minRepStatefulSet != stsReplicas { + return false, fmt.Errorf("statefulset replicas must be equal to calculated number of replicas with replicas and replicasPerMaster") + } + return isValid, nil +} + +func InsertDataIntoCluster(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName, redisCluster *redisv1.RedisCluster) (bool, error) { + selectedPods := &corev1.PodList{} + // Wait for ready status of redis-cluster + err := waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return false, err + } + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + err = k8sClient.List(ctx, selectedPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + if err != nil { + return false, err + } + + err = createAndInsertDataIntoCluster(selectedPods) + if err != nil { + return false, err + } + + isOk, err := CheckClusterKeys(selectedPods) + if err != nil { + return false, err + } + + return isOk, nil +} + +func InsertDataAndScaleIntoCluster(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName, redisCluster *redisv1.RedisCluster, status string, replicas int32) (bool, error) { + fetched := &redisv1.RedisCluster{} + err := k8sClient.Get(ctx, nsName, fetched) + if err != nil { + return false, err + } + + selectedPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + return false, err + } + + err = k8sClient.List(ctx, selectedPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + if err != nil { + return false, err + } + + err = createAndInsertDataIntoCluster(selectedPods) + if err != nil { + fmt.Printf("%v,error in create data", err) + return false, err + } + + // Update labels of redis-cluster + err = updateRedisCluster(ctx, k8sClient, fetched, "", replicas, nil, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + if err != nil { + fmt.Printf("%v,error in update", err) + return false, err + } + + err = waitForObjectStatus(ctx, k8sClient, nsName, status, int32(800)) + if err != nil { + fmt.Printf("%v,error in status scale", err) + return false, err + } + + err = waitForObjectStatus(ctx, k8sClient, nsName, "Ready", int32(800)) + if err != nil { + fmt.Printf("%v,error in status ready", err) + return false, err + } + + err = k8sClient.List(ctx, selectedPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + if err != nil { + return false, err + } + + isOk, err := CheckClusterKeys(selectedPods) + if err != nil { + fmt.Printf("%v,error in create data", err) + return false, err + } + + return isOk, nil +} + +func RemoveServicePorts(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName) error { + var ports []corev1.ServicePort + fetchedService := &corev1.Service{} + err := k8sClient.Get(ctx, nsName, fetchedService) + if err != nil { + fmt.Printf("Error getting service %s", nsName) + return err + } + fetchedService.Spec.Ports = ports + err = k8sClient.Update(ctx, fetchedService) + if err != nil { + fmt.Printf("Error updateing service %s", nsName) + return err + } + return nil +} + +func AddServicePorts(ctx context.Context, k8sClient client.Client, nsName types.NamespacedName) error { + var ports []corev1.ServicePort + fetchedService := &corev1.Service{} + err := k8sClient.Get(ctx, nsName, fetchedService) + if err != nil { + fmt.Printf("Error getting service %s", nsName) + return err + } + targetPort := intstr.IntOrString{IntVal: redis.RedisGossPort} + port := corev1.ServicePort{Name: "gossip", Port: redis.RedisGossPort, Protocol: "TCP", TargetPort: targetPort} + ports = append(ports, port) + targetPort = intstr.IntOrString{IntVal: redis.RedisCommPort} + port = corev1.ServicePort{Name: "comm", Port: redis.RedisCommPort, Protocol: "TCP", TargetPort: targetPort} + ports = append(ports, port) + fetchedService.Spec.Ports = ports + err = k8sClient.Update(ctx, fetchedService) + if err != nil { + fmt.Printf("Error updateing service %s", nsName) + return err + } + return nil +} + +func ForgetANode(k8Client client.Client, ctx context.Context, redisCluster *redisv1.RedisCluster) error { + allPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + k8Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + + err := forgetFirstNode(allPods) + + if err != nil { + return err + } + + return nil +} + +func ForgetANodeFixAndMeet(k8Client client.Client, ctx context.Context, redisCluster *redisv1.RedisCluster) error { + allPods := &corev1.PodList{} + + labelSelector := labels.SelectorFromSet( + map[string]string{ + "redis-cluster-name": redisCluster.Name, + "redis.rediscluster.operator/component": "redis", + }, + ) + + k8Client.List(ctx, allPods, &client.ListOptions{ + Namespace: redisCluster.Namespace, + LabelSelector: labelSelector, + }) + + err := forgetFirstNode(allPods) + if err != nil { + return err + } + + err = fixCluster(allPods.Items[1]) + if err != nil { + return err + } + + err = meetNode(allPods.Items[0], allPods.Items[1]) + if err != nil { + return err + } + + err = meetNode(allPods.Items[0], allPods.Items[2]) + if err != nil { + return err + } + + return nil +} + +// Choose the first node represented by the first pod in the list and executes the +// forget command on the other nodes. +func forgetFirstNode(pods *corev1.PodList) error { + var cmd string + if len(pods.Items) == 0 { + return fmt.Errorf("no pods found") + } + if len(pods.Items) < 2 { + return fmt.Errorf("only one node, no nodes to forget") + } + + pod := pods.Items[0] + + cmd = "redis-cli cluster nodes | grep myself | awk '{ print $1 }'" + podID, _, err := remoteCommand(pod.Namespace, pod.Name, cmd) + if err != nil { + return err + } + for i := 1; i < len(pods.Items); i++ { + pod = pods.Items[i] + cmd = fmt.Sprintf("%s %s", "redis-cli cluster forget", podID) + _, _, err := remoteCommand(pod.Namespace, pod.Name, cmd) + if err != nil { + return err + } + } + + return nil +} + +// Launches the command redis-cli --cluster fix to fix the cluster auto responding yes +// if prompted to reshard the slots not covered. +func fixCluster(pod corev1.Pod) error { + cmd := "echo \"yes\" | redis-cli --cluster fix localhost:6379" + _, _, err := remoteCommand(pod.Namespace, pod.Name, cmd) + if err != nil { + return err + } + + return nil +} + +// Meets pod1 into the cluster launching the command cluster meet on node pod2. +func meetNode(pod1 corev1.Pod, pod2 corev1.Pod) error { + cmd := "redis-cli cluster nodes | grep myself | awk '{ print $2 }' | awk -F ':' '{ print $1 }'" + IPPod1, _, err := remoteCommand(pod1.Namespace, pod1.Name, cmd) + if err != nil { + return err + } + cmd = fmt.Sprintf("redis-cli cluster meet %s 6379", strings.TrimSuffix(IPPod1, "\n")) + _, _, err = remoteCommand(pod2.Namespace, pod2.Name, cmd) + if err != nil { + return err + } + + return nil +} + +func EnsureClusterIsDeleted(client client.Client, nsName types.NamespacedName, fetchedRedisCluster *redisv1.RedisCluster) error { + ctx, cancel := context.WithTimeout(context.Background(), 300*time.Second) + defer cancel() + err := client.Delete(ctx, fetchedRedisCluster) + if err != nil { + return err + } + err = waitForRedisClusterDeletion(ctx, client, nsName, int32(WAIT_FOR_RDCL_DELETION)) + if err != nil { + return err + } + return nil +} + +func waitForRedisClusterDeletion(ctx context.Context, client client.Client, nsName types.NamespacedName, timeoutSeconds int32) error { + interval := 3 * time.Second + duration := time.Duration(timeoutSeconds) * time.Second + + err := wait.PollImmediateWithContext(ctx, interval, duration, func(ctx context.Context) (bool, error) { + redisCluster := &redisv1.RedisCluster{} + err := client.Get(ctx, nsName, redisCluster) + if err != nil { + if !errors.IsNotFound(err) { // Continue polling if object is not yet deleted + return false, err + } + return true, nil + } + return false, nil + }) + + if err != nil { + return fmt.Errorf("timeout after %s waiting for RedisCluster being deleted: %w", duration, err) + } + return nil +} diff --git a/test/e2e/internal/config/client.go b/test/e2e/internal/config/client.go new file mode 100644 index 0000000..8191a23 --- /dev/null +++ b/test/e2e/internal/config/client.go @@ -0,0 +1,23 @@ +package config + +import ( + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// newCachingClient is an alternative implementation of controller-runtime's +// default client for manager.Manager. +// The only difference is that this implementation sets `CacheUnstructured` to `true` to +// cache unstructured objects. +func newCachingClient(config *rest.Config, options client.Options) (client.Client, error) { + options.Cache.Unstructured = true + return client.New(config, options) +} + +func NewClient() client.NewClientFunc { + return func(config *rest.Config, options client.Options) (client.Client, error) { + c, err := newCachingClient(config, options) + return c, err + } +} + diff --git a/test/e2e/namespace_test.go b/test/e2e/namespace_test.go new file mode 100644 index 0000000..be687ee --- /dev/null +++ b/test/e2e/namespace_test.go @@ -0,0 +1,27 @@ +package e2e + +import ( + "context" + + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" +) + +const ( + RedisNamespace = "redis-e2e-test" +) + +func ensureNamespaceExistsOrCreate(nsName types.NamespacedName) error { + err := k8sClient.Create(context.Background(), &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: RedisNamespace, + }, + }) + // ignore failure if namespace already exists, fail for any other errors + if err != nil && !errors.IsAlreadyExists(err) { + return err + } + return nil +} diff --git a/test/e2e/operator_test.go b/test/e2e/operator_test.go new file mode 100644 index 0000000..57b952b --- /dev/null +++ b/test/e2e/operator_test.go @@ -0,0 +1,367 @@ +package e2e + +import ( + "context" + "os" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" +) + +var ( + // Define a default value for the OPERATOR_IMAGE in case the environment variable is not set. + defaultOperatorImageLocal = "redis-operator:0.1.0" +) + +func getOperatorImageFromEnv() string { + operatorImage := os.Getenv("OPERATOR_IMAGE") + if operatorImage == "" { + // Use the default value if the environment variable is not set. + operatorImage = defaultOperatorImageLocal + } + return operatorImage +} + +func ensureOperatorExistsOrCreate(nsName types.NamespacedName) error { + // rc := &appsv1.Deployment{} + rcOperator, err := createOperator() + if err != nil { + return err + } + err = k8sClient.Get(context.TODO(), nsName, &rcOperator) + if err != nil { + if err := k8sClient.Create(context.TODO(), &rcOperator); err != nil { + return err + } + } + return nil +} + +func ensureServiceAccountExistsOrCreate(nsName types.NamespacedName) error { + serviceAccount := createServiceAccount() + + sa := &corev1.ServiceAccount{} + err := k8sClient.Get(context.TODO(), nsName, sa) + if err != nil { + if err := k8sClient.Create(context.TODO(), &serviceAccount); err != nil { + return err + } + } + + return nil +} + +func ensureLeaderElectionRoleExistsOrCreate(nsName types.NamespacedName) error { + r := &rbacv1.Role{} + leaderElectionRole := createLeaderElectionRole() + err := k8sClient.Get(context.TODO(), nsName, r) + + if err != nil { + if err := k8sClient.Create(context.TODO(), &leaderElectionRole); err != nil { + return err + } + } + return nil +} + +func ensureRedisOperatorRoleExistsOrCreate(nsName types.NamespacedName) error { + r := &rbacv1.Role{} + redisOperatorRole := createRedisOperatorRole() + err := k8sClient.Get(context.TODO(), nsName, r) + + if err != nil { + if err := k8sClient.Create(context.TODO(), &redisOperatorRole); err != nil { + return err + } + } + return nil +} + +func ensureLeaderElectionRoleBindingExistsOrCreate(nsName types.NamespacedName) error { + rb := &rbacv1.RoleBinding{} + leaderElectionRoleBinding := createLeaderElectionRoleBinding() + err := k8sClient.Get(context.TODO(), nsName, rb) + + if err != nil { + if err := k8sClient.Create(context.TODO(), &leaderElectionRoleBinding); err != nil { + return err + } + } + return nil +} + +func ensureRedisOperatorRoleBindingExistsOrCreate(nsName types.NamespacedName) error { + rb := &rbacv1.RoleBinding{} + redisOperatorRoleBinding := createRedisOperatorRoleBinding() + err := k8sClient.Get(context.TODO(), nsName, rb) + + if err != nil { + if err := k8sClient.Create(context.TODO(), &redisOperatorRoleBinding); err != nil { + return err + } + } + return nil +} + +func ensureConfigMapExistsOrCreate(nsName types.NamespacedName) error { + cm := &corev1.ConfigMap{} + configMap := createConfigMap() + err := k8sClient.Get(context.TODO(), nsName, cm) + if err != nil { + if err := k8sClient.Create(context.TODO(), &configMap); err != nil { + return err + } + } + return nil +} + +func createOperator() (appsv1.Deployment, error) { + + toCreate := appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-operator", + Namespace: RedisNamespace, + Labels: map[string]string{ + "control-plane": "redis-operator", + }, + }, + Spec: appsv1.DeploymentSpec{ + Replicas: func() *int32 { i := int32(1); return &i }(), + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "control-plane": "redis-operator", + }, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "control-plane": "redis-operator", + "domain": "DOMAIN", + "environment": "ENVIRONMENT", + "layer": "middleware-redisoperator", + "slot": "default", + "tenant": "TENANT", + "type": "middleware", + }, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "redis-operator", + Image: getOperatorImageFromEnv(), + Args: []string{ + "--leader-elect", + "--max-concurrent-reconciles", + "10", + }, + Command: []string{"/manager"}, + Env: []corev1.EnvVar{ + { + Name: "WATCH_NAMESPACE", + Value: RedisNamespace, + }, + }, + ImagePullPolicy: corev1.PullIfNotPresent, + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("300m"), + corev1.ResourceMemory: resource.MustParse("300Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("200m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + }, + SecurityContext: &corev1.SecurityContext{ + AllowPrivilegeEscalation: func() *bool { b := false; return &b }(), + }, + }, + }, + SecurityContext: &corev1.PodSecurityContext{ + RunAsNonRoot: func() *bool { b := true; return &b }(), + }, + ServiceAccountName: "redis-operator-sa", + TerminationGracePeriodSeconds: func() *int64 { i := int64(10); return &i }(), + }, + }, + }, + } + + return toCreate, nil +} + +func createServiceAccount() corev1.ServiceAccount { + serviceAccount := corev1.ServiceAccount{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-operator-sa", + Namespace: RedisNamespace, + }, + } + + return serviceAccount +} + +func createLeaderElectionRole() rbacv1.Role { + role := rbacv1.Role{ + ObjectMeta: metav1.ObjectMeta{ + Name: "leader-election-role", + Namespace: RedisNamespace, + }, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{"", "coordination.k8s.io"}, + Resources: []string{"configmaps", "leases"}, + Verbs: []string{"get", "list", "watch", "create", "update", "patch", "delete"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"events"}, + Verbs: []string{"create", "patch"}, + }, + }, + } + + return role +} + +func createRedisOperatorRole() rbacv1.Role { + role := rbacv1.Role{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-operator-role", + Namespace: RedisNamespace, + Labels: map[string]string{ + "rbac.authorization.k8s.io/aggregate-to-admin": "true", + }, + }, + Rules: []rbacv1.PolicyRule{ + { + APIGroups: []string{""}, + Resources: []string{"configmaps", "pods", "services"}, + Verbs: []string{"get", "list", "watch"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"configmaps", "services"}, + Verbs: []string{"create", "update", "delete", "get", "list"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"events"}, + Verbs: []string{"create", "patch"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"secrets"}, + Verbs: []string{"get"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"persistentvolumeclaims"}, + Verbs: []string{"get", "list", "watch", "delete", "deletecollection"}, + }, + { + APIGroups: []string{"apps"}, + Resources: []string{"deployments", "statefulsets"}, + Verbs: []string{"create", "delete", "get", "list", "patch", "update", "watch"}, + }, + { + APIGroups: []string{"policy"}, + Resources: []string{"poddisruptionbudgets"}, + Verbs: []string{"create", "delete", "get", "list", "patch", "update", "watch"}, + }, + { + APIGroups: []string{"redis.inditex.com"}, + Resources: []string{"redisclusters"}, + Verbs: []string{"create", "delete", "get", "list", "patch", "update", "watch"}, + }, + { + APIGroups: []string{"redis.inditex.com"}, + Resources: []string{"redisclusters/finalizers"}, + Verbs: []string{"update"}, + }, + { + APIGroups: []string{"redis.inditex.com"}, + Resources: []string{"redisclusters/status"}, + Verbs: []string{"get", "patch", "update"}, + }, + }, + } + + return role +} + +func createLeaderElectionRoleBinding() rbacv1.RoleBinding { + roleBinding := rbacv1.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: "leader-election-rolebinding", + Namespace: RedisNamespace, + }, + RoleRef: rbacv1.RoleRef{ + APIGroup: "rbac.authorization.k8s.io", + Kind: "Role", + Name: "leader-election-role", + }, + Subjects: []rbacv1.Subject{ + { + Kind: "ServiceAccount", + Name: "redis-operator-sa", + Namespace: RedisNamespace, + }, + }, + } + + return roleBinding +} + +func createRedisOperatorRoleBinding() rbacv1.RoleBinding { + roleBinding := rbacv1.RoleBinding{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-operator-rolebinding", + Namespace: RedisNamespace, + }, + RoleRef: rbacv1.RoleRef{ + APIGroup: "rbac.authorization.k8s.io", + Kind: "Role", + Name: "redis-operator-role", + }, + Subjects: []rbacv1.Subject{ + { + Kind: "ServiceAccount", + Name: "redis-operator-sa", + Namespace: RedisNamespace, + }, + }, + } + + return roleBinding +} + +func createConfigMap() corev1.ConfigMap { + configMap := corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "redis-operator-config", + Namespace: RedisNamespace, + }, + Data: map[string]string{ + "redis_operator_config.yaml": ` + apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 + kind: ControllerManagerConfig + health: + healthProbeBindAddress: :8081 + metrics: + bindAddress: 127.0.0.1:8080 + webhook: + port: 9443 + leaderElection: + leaderElect: true + resourceName: db95d8a6.inditex.com + `, + }, + } + + return configMap +} diff --git a/test/e2e/rediscluster_test.go b/test/e2e/rediscluster_test.go new file mode 100644 index 0000000..bbb7ce8 --- /dev/null +++ b/test/e2e/rediscluster_test.go @@ -0,0 +1,1538 @@ +package e2e + +import ( + "fmt" + "strings" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + + pv1 "k8s.io/api/policy/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + "github.com/inditextech/redisoperator/controllers" + "github.com/inditextech/redisoperator/internal/redis" + "github.com/inditextech/redisoperator/test/e2e/framework" +) + +const ( + RedisClusterName = "rediscluster-test" + version = "6.0.2" + redisOperator = "redis-operator" + Timeout = 10 * time.Second + PollingInterval = 1 * time.Second +) + +var _ = Describe("Redisclusters", func() { + fetchedRedisClusterOperator := &appsv1.Deployment{} + fetchedRedisCluster := &redisv1.RedisCluster{} + namespacedName := types.NamespacedName{Name: RedisNamespace, Namespace: RedisNamespace} + + var _ = AfterEach(func() { + if !CurrentSpecReport().Failure.IsZero() { + // Test failed, clean up resources here + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + } + + }) + + Context("redis operator", func() { + It("Should create redis operator correctly", func() { + err := ensureNamespaceExistsOrCreate(types.NamespacedName{ + Name: RedisNamespace, + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + err = ensureServiceAccountExistsOrCreate(types.NamespacedName{ + Name: "redis-operator-sa", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + err = ensureRedisOperatorRoleExistsOrCreate(types.NamespacedName{ + Name: "redis-operator-role", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + err = ensureLeaderElectionRoleExistsOrCreate(types.NamespacedName{ + Name: "leader-election-role", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + err = ensureLeaderElectionRoleBindingExistsOrCreate(types.NamespacedName{ + Name: "leader-election-rolebinding", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + err = ensureRedisOperatorRoleBindingExistsOrCreate(types.NamespacedName{ + Name: "redis-operator-rolebinding", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + err = ensureConfigMapExistsOrCreate(types.NamespacedName{ + Name: "redis-operator-config", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + redisClusterOperator, err := createOperator() + Expect(err).NotTo(HaveOccurred()) + + err = ensureOperatorExistsOrCreate(types.NamespacedName{ + Name: "redis-operator", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, types.NamespacedName{Name: redisClusterOperator.Name, Namespace: RedisNamespace}, fetchedRedisClusterOperator) + return err == nil + }).Should(BeTrue()) + }) + }) + Context("redis cluster", func() { + It("Should create redisCluster with 0 replicas correctly", func() { + initialReplicas := int32(0) + rdclName := fmt.Sprintf("%s-%s", "properly-redis-no-replicas", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Kind).To(Equal("RedisCluster")) + Expect(fetchedRedisCluster.APIVersion).To(Equal("redis.inditex.com/v1")) + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(initialReplicas)) + Expect(fetchedRedisCluster.Spec.Auth).To(Equal(redisv1.RedisAuth{})) + Expect(fetchedRedisCluster.Name).To(Equal(rdclName)) + Expect(fetchedRedisCluster.Spec.Version).To(Equal(version)) + }) + + It("Should scale up redisCluster correctly from 0 replicas", func() { + initialReplicas := int32(0) + expectedReplicas := int32(1) + rdclName := fmt.Sprintf("%s-%s", "properly-redis-no-replicas", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", expectedReplicas, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(int32(expectedReplicas))) + + time.Sleep(30 * time.Second) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + }) + + It("Should scale down redisCluster to 0 replicas correctly", func() { + initialReplicas := int32(1) + expectedReplicas := int32(0) + rdclName := fmt.Sprintf("%s-%s", "properly-redis-no-replicas", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Ready", expectedReplicas, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + time.Sleep(30 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(int32(expectedReplicas))) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should add labels, tolerations and topology from spec.override", func() { + initialReplicas := int32(1) + rdclName := fmt.Sprintf("%s-%s", "override", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + override := redisv1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "testLabel": "testLabel", + }, + }, + Spec: corev1.PodSpec{ + Tolerations: []corev1.Toleration{ + { + Key: "testToleration", + Operator: "Exists", + Effect: "NoSchedule", + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "kubernetes.io/hostname", + WhenUnsatisfiable: corev1.DoNotSchedule, + LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"testLabel": "testLabel"}}, + }, + }, + }, + }, + }, + }, + } + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, override) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Override.StatefulSet).To(Equal(override.StatefulSet)) + + Eventually(func() bool { + sts := &appsv1.StatefulSet{} + err := k8sClient.Get(ctx, namespacedName, sts) + return err == nil && framework.RedisStsContainsOverride(*sts, override) + }).Should(BeTrue()) + }) + + It("Should remove tolerations, add sidecar and update labels and topology in spec.override", func() { + initialReplicas := int32(1) + rdclName := fmt.Sprintf("%s-%s", "override", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + originalOverride := redisv1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "testLabel": "testLabel", + }, + }, + Spec: corev1.PodSpec{ + Tolerations: []corev1.Toleration{ + { + Key: "testToleration", + Operator: "Exists", + Effect: "NoSchedule", + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "kubernetes.io/hostname", + WhenUnsatisfiable: corev1.DoNotSchedule, + LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"testLabel": "testLabel"}}, + }, + }, + }, + }, + }, + }, + } + + override := redisv1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "testLabel": "testLabel", + "testLabel2": "testLabel2", + }, + }, + Spec: corev1.PodSpec{ + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "kubernetes.io/hostname", + WhenUnsatisfiable: corev1.DoNotSchedule, + LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"testLabel": "testLabel2"}}, + }, + }, + Containers: []corev1.Container{ + { + Name: "test-sidecar", + Image: "nginx", + }, + }, + }, + }, + }, + }, + } + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, originalOverride) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Upgrading", initialReplicas, 0, true, nil, "", redisv1.Pdb{}, override) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Override.StatefulSet).To(Equal(override.StatefulSet)) + + Eventually(func() bool { + sts := &appsv1.StatefulSet{} + err := k8sClient.Get(ctx, namespacedName, sts) + return err == nil && framework.RedisStsContainsOverride(*sts, override) + }).Should(BeTrue()) + }) + + It("Should remove sidecar", func() { + initialReplicas := int32(1) + rdclName := fmt.Sprintf("%s-%s", "override", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + originalOverride := redisv1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "testLabel": "testLabel", + }, + }, + Spec: corev1.PodSpec{ + Tolerations: []corev1.Toleration{ + { + Key: "testToleration", + Operator: "Exists", + Effect: "NoSchedule", + }, + }, + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "kubernetes.io/hostname", + WhenUnsatisfiable: corev1.DoNotSchedule, + LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"testLabel": "testLabel"}}, + }, + }, + Containers: []corev1.Container{ + { + Name: "test-sidecar", + Image: "nginx", + }, + }, + }, + }, + }, + }, + } + + override := redisv1.RedisClusterOverrideSpec{ + StatefulSet: &appsv1.StatefulSet{ + Spec: appsv1.StatefulSetSpec{ + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "testLabel": "testLabel", + "testLabel2": "testLabel2", + }, + }, + Spec: corev1.PodSpec{ + TopologySpreadConstraints: []corev1.TopologySpreadConstraint{ + { + MaxSkew: 1, + TopologyKey: "kubernetes.io/hostname", + WhenUnsatisfiable: corev1.DoNotSchedule, + LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"testLabel": "testLabel2"}}, + }, + }, + }, + }, + }, + }, + } + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, originalOverride) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Upgrading", initialReplicas, 0, true, nil, "", redisv1.Pdb{}, override) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Override.StatefulSet).To(Equal(override.StatefulSet)) + + Eventually(func() bool { + sts := &appsv1.StatefulSet{} + err := k8sClient.Get(ctx, namespacedName, sts) + return err == nil && framework.RedisStsContainsOverride(*sts, override) + }).Should(BeTrue()) + + time.Sleep(30 * time.Second) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should create redisCluster correctly", func() { + initialReplicas := int32(3) + rdclName := fmt.Sprintf("%s-%s", "properly-redis-installation", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Kind).To(Equal("RedisCluster")) + Expect(fetchedRedisCluster.APIVersion).To(Equal("redis.inditex.com/v1")) + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(initialReplicas)) + Expect(fetchedRedisCluster.Spec.Auth).To(Equal(redisv1.RedisAuth{})) + Expect(fetchedRedisCluster.Name).To(Equal(rdclName)) + Expect(fetchedRedisCluster.Spec.Version).To(Equal(version)) + + }) + + It("Should scale up redisCluster correctly", func() { + initialReplicas := int32(3) + expectedReplicas := int32(5) + rdclName := fmt.Sprintf("%s-%s", "properly-redis-installation", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", expectedReplicas, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(int32(expectedReplicas))) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + }) + + It("Should scale down redisCluster correctly", func() { + initialReplicas := int32(5) + expectedReplicas := int32(3) + rdclName := fmt.Sprintf("%s-%s", "properly-redis-installation", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingDown", expectedReplicas, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(int32(expectedReplicas))) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should manage service ports correctly", func() { + objectsTestName := "service-ports" + rdclName := fmt.Sprintf("%s-%s", objectsTestName, RedisClusterName) + initialReplicas := int32(1) + + namespacedName := types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + fetchedService := &corev1.Service{} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + // Only comm port is set at Redis creation. + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedService) + return err == nil + }).Should(BeTrue()) + + Expect(len(fetchedService.Spec.Ports)).To(Equal(1)) + Expect(fetchedService.Spec.Ports[0].Port).To(Equal(int32(redis.RedisCommPort))) + + // Comm port is restablished if all ports removed from service. + Eventually(func() bool { + err := framework.RemoveServicePorts(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + time.Sleep((controllers.DEFAULT_REQUEUE_TIMEOUT + 20) * time.Second) + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedService) + return err == nil + }).Should(BeTrue()) + + Expect(len(fetchedService.Spec.Ports)).To(Equal(1)) + Expect(fetchedService.Spec.Ports[0].Port).To(Equal(int32(redis.RedisCommPort))) + + // Only comm port is set if service ports are altered. + Eventually(func() bool { + err := framework.AddServicePorts(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + time.Sleep((controllers.DEFAULT_REQUEUE_TIMEOUT + 20) * time.Second) + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedService) + return err == nil + }).Should(BeTrue()) + + Expect(len(fetchedService.Spec.Ports)).To(Equal(1)) + Expect(fetchedService.Spec.Ports[0].Port).To(Equal(int32(redis.RedisCommPort))) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("should add the labels added to RedisCluster spec.labels to the StatefulSet and the Pods", func() { + objectsTestName := "labels-management" + rdclName := fmt.Sprintf("%s-%s", objectsTestName, RedisClusterName) + expectedLabels := map[string]string{"team": "teamA", "testSpecLabel": "testSpec"} + expectedLabelsSts := map[string]string{"redis-cluster-name": rdclName, "redis.rediscluster.operator/component": "redis", "team": "teamA", "testSpecLabel": "testSpec"} + initialReplicas := int32(1) + + namespacedName := types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + fetchedStatefulSet := &appsv1.StatefulSet{} + fetchedConfigMap := &corev1.ConfigMap{} + fetchedPod := &corev1.Pod{} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, expectedLabels, "Upgrading", 1, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Labels).To(Equal(&expectedLabels)) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedStatefulSet) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedStatefulSet.Spec.Template.Labels).To(Equal(expectedLabelsSts)) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedConfigMap) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedConfigMap.Labels).To(Equal(expectedLabelsSts)) + + Eventually(func() bool { + rdclName = fmt.Sprintf("%s-%s-%d", objectsTestName, RedisClusterName, 0) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + err := k8sClient.Get(ctx, namespacedName, fetchedPod) + return err == nil + }).Should(BeTrue()) + + for k, v := range expectedLabelsSts { + Expect(fetchedPod.Labels[k]).To(Equal(v)) + } + + }) + + It("should delete the labels added to RedisCluster spec.labels to the StatefulSet and the Pods", func() { + objectsTestName := "labels-management" + rdclName := fmt.Sprintf("%s-%s", objectsTestName, RedisClusterName) + expectedLabelsSts := map[string]string{"redis-cluster-name": rdclName, "redis.rediscluster.operator/component": "redis"} + expectedLabels := map[string]string{} + initialReplicas := int32(1) + namespacedName := types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + fetchedStatefulSet := &appsv1.StatefulSet{} + fetchedConfigMap := &corev1.ConfigMap{} + fetchedPod := &corev1.Pod{} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, expectedLabels, "Upgrading", 1, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Labels).To(Equal(&expectedLabels)) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedStatefulSet) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedStatefulSet.Spec.Template.Labels).To(Equal(expectedLabelsSts)) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedConfigMap) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedConfigMap.Labels).To(Equal(expectedLabelsSts)) + + Eventually(func() bool { + rdclName = fmt.Sprintf("%s-%s-%d", objectsTestName, RedisClusterName, 0) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + err := k8sClient.Get(ctx, namespacedName, fetchedPod) + return err == nil + }).Should(BeTrue()) + + for k, v := range expectedLabelsSts { + Expect(fetchedPod.Labels[k]).To(Equal(v)) + } + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should handle the storage in redisCluster correctly", func() { + initialStorage := string("500Mi") + desiredStorage := string("1Gi") + rdclName := fmt.Sprintf("%s-%s", "storage-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + initialReplicas := int32(3) + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, initialStorage, 0, true, false, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + // Try to change the storage in redis-cluster + Eventually(func() bool { + _, err := framework.ChangeRedisClusterStorage(ctx, k8sClient, namespacedName, initialStorage, desiredStorage, initialReplicas) + return err != nil && strings.Contains(err.Error(), "Changing the storage size is not allowed") + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Storage).To(Equal((initialStorage))) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + }) + + It("Should scaleup with storage in redisCluster correctly", func() { + initialStorage := string("500Mi") + initialReplicas := int32(3) + expectedReplicas := int32(6) + rdclName := fmt.Sprintf("%s-%s", "storage-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, initialStorage, 0, true, false, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + // Try to scaleUp in redis-cluster + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", expectedReplicas, 0, false, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + time.Sleep(30 * time.Second) + + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(int32(expectedReplicas))) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + }) + + It("Should scaledown with storage in redisCluster correctly", func() { + initialStorage := string("500Mi") + initialReplicas := int32(3) + expectedReplicas := int32(1) + rdclName := fmt.Sprintf("%s-%s", "storage-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, initialStorage, 0, true, false, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingDown", expectedReplicas, 0, false, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedRedisCluster.Spec.Replicas).To(Equal(int32(expectedReplicas))) + + time.Sleep(60 * time.Second) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should creates a new redisCluster in master-slave configuration correctly", func() { + replicas := int32(3) + replicasPerMaster := int32(1) + rdclName := fmt.Sprintf("%s-%s", "master-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, replicas, "", replicasPerMaster, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.ValidateRedisClusterMasterSlave(ctx, k8sClient, namespacedName, replicas, replicasPerMaster, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + }) + + It("Should scale up a redisCluster in master-slave configuration correctly", func() { + replicas := int32(3) + replicasPerMaster := int32(1) + expectedReplicas := int32(4) + expectedReplicasPerMaster := int32(2) + rdclName := fmt.Sprintf("%s-%s", "master-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, replicas, "", replicasPerMaster, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", expectedReplicas, expectedReplicasPerMaster, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.ValidateRedisClusterMasterSlave(ctx, k8sClient, namespacedName, expectedReplicas, expectedReplicasPerMaster, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + }) + It("Should scale down a redisCluster in master-slave configuration correctly", func() { + replicas := int32(4) + replicasPerMaster := int32(2) + expectedReplicas := int32(3) + expectedReplicasPerMaster := int32(1) + rdclName := fmt.Sprintf("%s-%s", "master-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, replicas, "", replicasPerMaster, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingDown", expectedReplicas, expectedReplicasPerMaster, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.ValidateRedisClusterMasterSlave(ctx, k8sClient, namespacedName, expectedReplicas, expectedReplicasPerMaster, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should insert data inside the cluster correctly", func() { + rdclName := fmt.Sprintf("%s-%s", "data-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + replicas := int32(3) + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, replicas, "", 0, false, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.InsertDataIntoCluster(ctx, k8sClient, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + allPods := framework.GetPods(k8sClient, ctx, fetchedRedisCluster) + + Eventually(func() bool { + isOk, err := framework.FlushClusterKeys(allPods) + return isOk && err == nil + }).Should(BeTrue()) + + }) + + It("Should insert data & scaleUp the cluster correctly", func() { + rdclName := fmt.Sprintf("%s-%s", "data-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + initialReplicas := int32(3) + expectedReplicas := int32(5) + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, false, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.InsertDataIntoCluster(ctx, k8sClient, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", expectedReplicas, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + allPods := framework.GetPods(k8sClient, ctx, fetchedRedisCluster) + + Eventually(func() bool { + isOk, err := framework.CheckClusterKeys(allPods) + return isOk && err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.FlushClusterKeys(allPods) + return isOk && err == nil + }).Should(BeTrue()) + + }) + + It("Should insert data & scaleDown the cluster correctly", func() { + rdclName := fmt.Sprintf("%s-%s", "data-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + initialReplicas := int32(5) + expectedReplicas := int32(3) + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, false, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.InsertDataIntoCluster(ctx, k8sClient, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingDown", expectedReplicas, 0, true, nil, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + time.Sleep(40 * time.Second) + + allPods := framework.GetPods(k8sClient, ctx, fetchedRedisCluster) + + Eventually(func() bool { + isOk, err := framework.CheckClusterKeys(allPods) + return isOk && err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should change Resources from RedisCluster to StatefulSet", func() { + objectsTestName := "resources-management" + rdclName := fmt.Sprintf("%s-%s", objectsTestName, RedisClusterName) + namespacedName := types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + initialReplicas := int32(1) + expectedResources := corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("51m"), + corev1.ResourceMemory: resource.MustParse("51Mi"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("51m"), + corev1.ResourceMemory: resource.MustParse("51Mi"), + }, + } + fetchedStatefulSet := &appsv1.StatefulSet{} + + framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Upgrading", 1, 0, true, &expectedResources, "", redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedStatefulSet) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedStatefulSet.Spec.Template.Spec.Containers[0].Resources).To(Equal(expectedResources)) + + }) + It("Should change Image from RedisCluster to StatefulSet", func() { + objectsTestName := "resources-management" + rdclName := fmt.Sprintf("%s-%s", objectsTestName, RedisClusterName) + namespacedName := types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + initialReplicas := int32(1) + expectedImage := "redis/redis-stack-server:7.2.0-v6" + + fetchedStatefulSet := &appsv1.StatefulSet{} + + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + Expect(err).NotTo(HaveOccurred()) + + Eventually(func() error { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Upgrading", 1, 0, true, nil, expectedImage, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err + }, Timeout, PollingInterval).Should(Succeed()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedStatefulSet) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedStatefulSet.Spec.Template.Spec.Containers[0].Image).To(Equal(expectedImage)) + + }) + It("Should not allow to change from ephemeral to storage", func() { + initialStorage := string("1Gi") + initialReplicas := int32(1) + rdclName := fmt.Sprintf("%s-%s", "resources-management", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + // Try to scaleUp in redis-cluster + Eventually(func() bool { + _, err := framework.ChangeRedisClusterEphemeral(ctx, k8sClient, namespacedName, initialStorage, initialReplicas) + return err == nil + }).Should(BeFalse()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + return fetchedRedisCluster.Status.Status == "Ready" + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should Create and delete pdb from rediscluster", func() { + // Creating redis cluster with PDB enabled should create it + fetchedPDB := &pv1.PodDisruptionBudget{} + pdb := redisv1.Pdb{ + Enabled: true, + } + pdb.PdbSizeAvailable.IntVal = int32(1) + rdclName := fmt.Sprintf("%s-%s", "poddisruptionbudget", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + namespacedNameForPdb := types.NamespacedName{Name: rdclName + "-pdb", Namespace: RedisNamespace} + initialReplicas := int32(2) + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, initialReplicas, "", 0, true, true, pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedPDB.Spec.MinAvailable.IntVal).To(Equal(int32(1))) + + // Disabling PDB should delete it + pdb = redisv1.Pdb{ + Enabled: false, + } + pdb.PdbSizeAvailable.IntVal = int32(1) + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Ready", 2, 0, true, nil, "", pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeFalse()) + + // Re-enabling PDB should create it + Expect(fetchedPDB.Spec.MinAvailable.IntVal).To(Equal(int32(1))) + pdb = redisv1.Pdb{ + Enabled: true, + } + pdb.PdbSizeAvailable.IntVal = int32(1) + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Ready", 2, 0, true, nil, "", pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedPDB.Spec.MinAvailable.IntVal).To(Equal(int32(1))) + + // Scaling down Redis cluster to 0 from 2 should delete the PDB + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "Ready", 0, 0, true, nil, "", pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeFalse()) + + // Scaling up Redis cluster to 2 from 0 should create the PDB + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", 2, 0, true, nil, "", pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedPDB.Spec.MinAvailable.IntVal).To(Equal(int32(1))) + + // Scaling down Redis cluster to 1 from 2 should delete the PDB + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingDown", 1, 0, true, nil, "", pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeFalse()) + + // Scaling up Redis cluster to 2 from 1 should create the PDB + Eventually(func() bool { + _, err := framework.ChangeRedisClusterConfiguration(ctx, k8sClient, namespacedName, nil, "ScalingUp", 2, 0, true, nil, "", pdb, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + time.Sleep(20 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedNameForPdb, fetchedPDB) + return err == nil + }).Should(BeTrue()) + + Expect(fetchedPDB.Spec.MinAvailable.IntVal).To(Equal(int32(1))) + + // Cleanup + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should meet cluster nodes", func() { + replicas := int32(3) + rdclName := fmt.Sprintf("%s-%s", "cluster-meet", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, replicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + // wait for Ready status once cluster creation is completed + time.Sleep(30 * time.Second) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + // forget the first cluster node + Eventually(func() bool { + err := framework.ForgetANode(k8sClient, ctx, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + // wait for the operator next reconciliation loop + time.Sleep(100 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + err := k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should balance cluster", func() { + replicas := int32(3) + rdclName := fmt.Sprintf("%s-%s", "cluster-balance", RedisClusterName) + namespacedName = types.NamespacedName{Name: rdclName, Namespace: RedisNamespace} + + Eventually(func() bool { + err := framework.EnsureClusterExistsOrCreate(k8sClient, namespacedName, replicas, "", 0, true, true, redisv1.Pdb{}, redisv1.RedisClusterOverrideSpec{}) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + // Delete redis operator + err := k8sClient.Delete(ctx, fetchedRedisClusterOperator) + Expect(err).NotTo(HaveOccurred()) + + // forget the first cluster node + Eventually(func() bool { + err := framework.ForgetANodeFixAndMeet(k8sClient, ctx, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + err = ensureOperatorExistsOrCreate(types.NamespacedName{ + Name: "redis-operator", + Namespace: RedisNamespace, + }) + Expect(err).ToNot(HaveOccurred()) + + redisClusterOperator, err := createOperator() + Expect(err).NotTo(HaveOccurred()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, types.NamespacedName{Name: redisClusterOperator.Name, Namespace: RedisNamespace}, fetchedRedisClusterOperator) + return err == nil + }).Should(BeTrue()) + + // wait for the operator next reconciliation loop and cluster rebalance + time.Sleep(240 * time.Second) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + _, err := framework.WaitForReadyRdcl(ctx, k8sClient, namespacedName) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + err := k8sClient.Get(ctx, namespacedName, fetchedRedisCluster) + return err == nil + }).Should(BeTrue()) + + Eventually(func() bool { + isOk, err := framework.CheckRedisCluster(k8sClient, ctx, fetchedRedisCluster) + return isOk && err == nil + }).Should(BeTrue()) + + err = k8sClient.Delete(ctx, fetchedRedisCluster) + Expect(err).NotTo(HaveOccurred()) + }) + }) +}) diff --git a/v1alpha1client/client.go b/v1alpha1client/client.go new file mode 100644 index 0000000..768d0fa --- /dev/null +++ b/v1alpha1client/client.go @@ -0,0 +1,95 @@ +package v1alpha1client + +import ( + "context" + v1alpha1 "github.com/inditextech/redisoperator/api/v1alpha1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" +) + +// RdclInterface defines the methods to be implemented by Redis Clients +type RdclInterface interface { + List(ctx context.Context, opts metav1.ListOptions) (*v1alpha1.RedisClusterList, error) + Get(ctx context.Context, name string, options metav1.GetOptions) (*v1alpha1.RedisCluster, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) +} + +type rdclClient struct { + restClient rest.Interface + ns string +} + +func (c *rdclClient) List(ctx context.Context, opts metav1.ListOptions) (*v1alpha1.RedisClusterList, error) { + result := v1alpha1.RedisClusterList{} + err := c.restClient. + Get(). + AbsPath("/apis/redis.inditex.com/v1alpha1"). + Namespace(c.ns). + Resource("redisclusters"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *rdclClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1alpha1.RedisCluster, error) { + result := v1alpha1.RedisCluster{} + err := c.restClient. + Get(). + AbsPath("/apis/redis.inditex.com/v1alpha1"). + Namespace(c.ns). + Resource("redisclusters"). + Name(name). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + return &result, err +} + +func (c *rdclClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.restClient.Get(). + AbsPath("/apis/redis.inditex.com/v1alpha1"). + Namespace(c.ns). + Resource("redisclusters"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch(ctx) +} + +// V1Alpha1Interface defines the interface to communicate with all GroupVersion. It now just bears a client fdr Redis Clusters +type V1Alpha1Interface interface { + RedisClusters(namespace string) RdclInterface +} + +// V1Alpha1Client is the struct that bears the rest Interface. It implements RedisClusters method, which satisfies the V1Alpha1Interface +type V1Alpha1Client struct { + restClient rest.Interface +} + +// NewForConfig creates V1Alpha1Client by using the given rest.Config. Returns error if something is amiss in the config. +func NewForConfig(c *rest.Config) (*V1Alpha1Client, error) { + config := *c + config.ContentConfig.GroupVersion = &schema.GroupVersion{Group: v1alpha1.GroupVersion.Group, Version: v1alpha1.GroupVersion.Version} + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.UserAgent = rest.DefaultKubernetesUserAgent() + + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + + return &V1Alpha1Client{restClient: client}, nil +} + +// RedisClusters returns the interface which will allow the caller to access the implemented methods of the interface +func (c *V1Alpha1Client) RedisClusters(namespace string) RdclInterface { + return &rdclClient{ + restClient: c.restClient, + ns: namespace, + } +} diff --git a/v1client/client.go b/v1client/client.go new file mode 100644 index 0000000..181aaad --- /dev/null +++ b/v1client/client.go @@ -0,0 +1,95 @@ +package redisv1client + +import ( + "context" + redisv1 "github.com/inditextech/redisoperator/api/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" +) + +// RdclInterface defines the methods to be implemented by Redis Clients +type RdclInterface interface { + List(ctx context.Context, opts metav1.ListOptions) (*redisv1.RedisClusterList, error) + Get(ctx context.Context, name string, options metav1.GetOptions) (*redisv1.RedisCluster, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) +} + +type rdclClient struct { + restClient rest.Interface + ns string +} + +func (c *rdclClient) List(ctx context.Context, opts metav1.ListOptions) (*redisv1.RedisClusterList, error) { + result := redisv1.RedisClusterList{} + err := c.restClient. + Get(). + AbsPath("/apis/redis.inditex.com/redisv1"). + Namespace(c.ns). + Resource("redisclusters"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *rdclClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*redisv1.RedisCluster, error) { + result := redisv1.RedisCluster{} + err := c.restClient. + Get(). + AbsPath("/apis/redis.inditex.com/v1"). + Namespace(c.ns). + Resource("redisclusters"). + Name(name). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + return &result, err +} + +func (c *rdclClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.restClient.Get(). + AbsPath("/apis/redis.inditex.com/v1"). + Namespace(c.ns). + Resource("redisclusters"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch(ctx) +} + +// V1Interface defines the interface to communicate with all GroupVersion. It now just bears a client fdr Redis Clusters +type V1Interface interface { + RedisClusters(namespace string) RdclInterface +} + +// V1Client is the struct that bears the rest Interface. It implements RedisClusters method, which satisfies the redisv1Interface +type V1Client struct { + restClient rest.Interface +} + +// NewForConfig creates V1Client by using the given rest.Config. Returns error if something is amiss in the config. +func NewForConfig(c *rest.Config) (*V1Client, error) { + config := *c + config.ContentConfig.GroupVersion = &schema.GroupVersion{Group: redisv1.GroupVersion.Group, Version: redisv1.GroupVersion.Version} + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.UserAgent = rest.DefaultKubernetesUserAgent() + + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + + return &V1Client{restClient: client}, nil +} + +// RedisClusters returns the interface which will allow the caller to access the implemented methods of the interface +func (c *V1Client) RedisClusters(namespace string) RdclInterface { + return &rdclClient{ + restClient: c.restClient, + ns: namespace, + } +} diff --git a/webhook/Dockerfile b/webhook/Dockerfile new file mode 100644 index 0000000..aa2a097 --- /dev/null +++ b/webhook/Dockerfile @@ -0,0 +1,37 @@ +# Build the manager binary +FROM golang:1.24.0 as builder + +WORKDIR /workspace + +# Copy the Go Modules manifests +COPY webhook/go.mod webhook/go.mod +COPY webhook/go.sum webhook/go.sum + +COPY go.mod go.mod + +WORKDIR /workspace/webhook + +# cache deps before building and copying source so that we don't need to re-download as much +# and so that source changes don't invalidate our downloaded layer +RUN go mod download + +# Copy the go source +COPY webhook/main.go main.go +COPY ../ /workspace/ + + +# Build +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o webhook . + +# Use Red Hat Universal Base Image 9 Minimal to package the manager binary. +# Refer to https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image for more details. +FROM redhat/ubi9-minimal:9.1.0 + +LABEL org.opencontainers.image.source="https://github.com/inditextech/redisoperator" + +RUN microdnf update -y && microdnf install procps -y + +WORKDIR / +COPY --from=builder /workspace/webhook . +USER 65532:65532 +ENTRYPOINT ["/webhook"] diff --git a/webhook/go.mod b/webhook/go.mod new file mode 100644 index 0000000..7452c51 --- /dev/null +++ b/webhook/go.mod @@ -0,0 +1,70 @@ +module github.com/inditextech/redisoperator/webhook + +go 1.24.0 + +replace github.com/inditextech/redisoperator => ../ + +require ( + github.com/inditextech/redisoperator v1.3.0 + github.com/joho/godotenv v1.5.1 + k8s.io/api v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/client-go v0.32.2 + sigs.k8s.io/controller-runtime v0.20.2 +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/x448/float16 v0.8.4 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/oauth2 v0.27.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/term v0.29.0 // indirect + golang.org/x/text v0.22.0 // indirect + golang.org/x/time v0.7.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apiextensions-apiserver v0.32.2 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect + sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/webhook/go.sum b/webhook/go.sum new file mode 100644 index 0000000..8c7fc08 --- /dev/null +++ b/webhook/go.sum @@ -0,0 +1,192 @@ +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= +golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= +k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro= +k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/webhook/main.go b/webhook/main.go new file mode 100644 index 0000000..4c6e871 --- /dev/null +++ b/webhook/main.go @@ -0,0 +1,122 @@ +package main + +import ( + "flag" + "os" + + "github.com/joho/godotenv" + + corev1 "k8s.io/api/core/v1" + _ "k8s.io/client-go/plugin/pkg/client/auth" + + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/controller-runtime/pkg/webhook" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/healthz" + "sigs.k8s.io/controller-runtime/pkg/log/zap" + + redisv1 "github.com/inditextech/redisoperator/api/v1" + redisv1alpha1 "github.com/inditextech/redisoperator/api/v1alpha1" + webhookredisv1 "github.com/inditextech/redisoperator/webhook/v1" + //+kubebuilder:scaffold:imports +) + +const ( + USER_AGENT_NAME = "redis-cluster-operator-webhook" + USER_AGENT_VERSION = "1.3.0" +) + +var ( + scheme = runtime.NewScheme() + setupLog = ctrl.Log.WithName("setup") +) + +func init() { + utilruntime.Must(clientgoscheme.AddToScheme(scheme)) + + utilruntime.Must(redisv1alpha1.AddToScheme(scheme)) + utilruntime.Must(redisv1.AddToScheme(scheme)) + //+kubebuilder:scaffold:scheme +} + +func main() { + var metricsAddr string + var enableLeaderElection bool + var probeAddr string + var maxConcurrentReconciles int + var concurrentMigrates int + + // NOTE: This is needed to enable RSA again after update to go v1.22 + // https://tip.golang.org/doc/go1.22 (crypto/tls) + os.Setenv("GODEBUG", "tlsrsakex=1") + + flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") + flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") + flag.IntVar(&maxConcurrentReconciles, "max-concurrent-reconciles", 10, "Maximum number of concurrent events.") + flag.IntVar(&concurrentMigrates, "concurrent-migrates", 3, "Number of concurrent migrate operations.") + flag.BoolVar(&enableLeaderElection, "leader-elect", false, + "Enable leader election for controller manager. "+ + "Enabling this will ensure there is only one active controller manager.") + opts := zap.Options{ + Development: true, + } + opts.BindFlags(flag.CommandLine) + flag.Parse() + + ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) + godotenv.Load("./.env") + ctrlOptions := ctrl.Options{ + Scheme: scheme, + Metrics: server.Options{ + BindAddress: metricsAddr, + }, + WebhookServer: webhook.NewServer(webhook.Options{ + Port: 9443, + }), + HealthProbeBindAddress: probeAddr, + LeaderElection: enableLeaderElection, + LeaderElectionID: "db95d8a6-webhook.inditex.com", + Client: client.Options{ + Cache: &client.CacheOptions{ + DisableFor: []client.Object{ + &corev1.ConfigMap{}, + &corev1.Secret{}, + }, + }, + }, + } + + config := ctrl.GetConfigOrDie() + config.UserAgent = USER_AGENT_NAME + "/" + USER_AGENT_VERSION + mgr, err := ctrl.NewManager(config, ctrlOptions) + if err != nil { + setupLog.Error(err, "unable to start manager") + os.Exit(1) + } + + // nolint:goconst + if err = webhookredisv1.SetupRedisClusterWebhookWithManager(mgr); err != nil { + setupLog.Error(err, "unable to create webhook", "webhook", "RedisCluster") + os.Exit(1) + } + //+kubebuilder:scaffold:builder + + if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { + setupLog.Error(err, "unable to set up health check") + os.Exit(1) + } + if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { + setupLog.Error(err, "unable to set up ready check") + os.Exit(1) + } + + setupLog.Info("Starting manager") + if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { + setupLog.Error(err, "problem running manager") + os.Exit(1) + } +} diff --git a/webhook/v1/rediscluster_webhook.go b/webhook/v1/rediscluster_webhook.go new file mode 100644 index 0000000..99449a1 --- /dev/null +++ b/webhook/v1/rediscluster_webhook.go @@ -0,0 +1,19 @@ +package v1 + +import ( + ctrl "sigs.k8s.io/controller-runtime" + logf "sigs.k8s.io/controller-runtime/pkg/log" + + redisv1 "github.com/inditextech/redisoperator/api/v1" +) + +// nolint:unused +// log is for logging in this package. +var redisclusterlog = logf.Log.WithName("rediscluster-resource") + +// SetupRedisClusterWebhookWithManager registers the webhook for RedisCluster in the manager. +func SetupRedisClusterWebhookWithManager(mgr ctrl.Manager) error { + redisclusterlog.Info("Setting up RedisCluster webhook with manager") + return ctrl.NewWebhookManagedBy(mgr).For(&redisv1.RedisCluster{}). + Complete() +} From 50dbbb7256ff4f6665b8ddb23624c5327081a5b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Mon, 7 Apr 2025 18:39:03 +0200 Subject: [PATCH 02/64] Formatting code, updating Makefile goals to check the code and update deprecated function calls --- Makefile | 13 ++++--- api/v1/rediscluster_types.go | 44 +++++++++++------------ api/v1alpha1/rediscluster_types.go | 48 +++++++++++++------------- cmd/main.go | 10 +++--- controllers/rediscluster_reconciler.go | 2 +- controllers/resource_manager.go | 4 +-- controllers/suite_test.go | 2 +- go.mod | 2 +- internal/utils/pods.go | 3 +- test/e2e/e2e_suite_test.go | 8 ++--- test/e2e/framework/redisclient.go | 6 ++-- test/e2e/internal/config/client.go | 1 - webhook/main.go | 10 +++--- 13 files changed, 76 insertions(+), 77 deletions(-) diff --git a/Makefile b/Makefile index 94ac91b..357f376 100644 --- a/Makefile +++ b/Makefile @@ -137,12 +137,11 @@ help: ## Display this help. ##@ General .PHONY: verify -verify: deps tidy checkfmt fmt lint vet build test-sonar ## Check the code - $(info $(M) checking code...) +verify: deps tidy checkfmt lint vet build test-cov ## Check the code deps: ## Installs dependencies - $(info $(M) Installing dependencies...) - GONOSUMDB=honnef.co/go/* GONOPROXY=honnef.co/go/* $(GO) install honnef.co/go/tools/cmd/staticcheck@v0.5.1 + $(info $(M) installing dependencies...) + GONOSUMDB=honnef.co/go/* GONOPROXY=honnef.co/go/* $(GO) install honnef.co/go/tools/cmd/staticcheck@v0.6.1 .PHONY: version version:: ## Print the current version of the project. @@ -223,7 +222,7 @@ tidy: ## Run go mod tidy .PHONY: run run: ## Execute the program locally - $(info $(M) Running app...) + $(info $(M) running app...) CONFIGMAP_PATH=./config_test/configmap.local.yml SECRET_PATH=./config_test/secrets.local.yml $(GO) run ./cmd/main.go dev-build: ## Build manager binary. @@ -557,7 +556,7 @@ test-e2e-cov: process-manifests-crd ginkgo ## Execute e2e application test .PHONY: test-sonar test-sonar: ## Execute the application test for Sonar (coverage + test report) - $(info $(M) generating sonar report...) + $(info $(M) running tests and generating sonar report...) $(eval TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME=$(shell dirname $(TEST_COVERAGE_PROFILE_OUTPUT))) $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT))) mkdir -p $(TEST_COVERAGE_PROFILE_OUTPUT_DIRNAME) $(TEST_REPORT_OUTPUT_DIRNAME) @@ -565,7 +564,7 @@ test-sonar: ## Execute the application test for Sonar (coverage + test report) .PHONY: test-cov test-cov: ## Execute the application test with coverage - $(info $(M) generating coverage report...) + $(info $(M) running tests and generating coverage report...) $(eval TEST_REPORT_OUTPUT_DIRNAME=$(shell dirname $(TEST_REPORT_OUTPUT))) mkdir -p $(TEST_REPORT_OUTPUT_DIRNAME) $(GO) test ./controllers/ ./internal/*/ ./api/*/ -coverprofile=$(TEST_COVERAGE_PROFILE_OUTPUT) -covermode=count diff --git a/api/v1/rediscluster_types.go b/api/v1/rediscluster_types.go index 0000ac7..4a5527b 100644 --- a/api/v1/rediscluster_types.go +++ b/api/v1/rediscluster_types.go @@ -80,83 +80,83 @@ var ConditionScalingDown = metav1.Condition{ type RedisClusterSpec struct { // +kubebuilder:validation:Optional // RedisAuth - Auth RedisAuth `json:"auth,omitempty"` + Auth RedisAuth `json:"auth,omitempty"` // +kubebuilder:validation:Optional // Redis version - Version string `json:"version,omitempty"` + Version string `json:"version,omitempty"` // Replicas specifies the number of Redis nodes in the cluster. // +kubebuilder:validation:Required - Replicas int32 `json:"replicas"` + Replicas int32 `json:"replicas"` // +kubebuilder:validation:Optional // ReplicasPerMaster specifies how many replicas should be attached to each Redis Master //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Number of replicas per Master Node" - ReplicasPerMaster int32 `json:"replicasPerMaster,omitempty"` + ReplicasPerMaster int32 `json:"replicasPerMaster,omitempty"` // +kubebuilder:validation:Optional // Image is the Redis image to use. - Image string `json:"image,omitempty"` + Image string `json:"image,omitempty"` // +kubebuilder:validation:Optional // DeletePVC specifies if the PVC should be deleted when the RedisCluster is deleted. - DeletePVC bool `json:"deletePVC,omitempty"` + DeletePVC bool `json:"deletePVC,omitempty"` // +kubebuilder:validation:Optional // Backup specifies if the RedisCluster should be backed up. - Backup bool `json:"backup,omitempty"` + Backup bool `json:"backup,omitempty"` // +kubebuilder:validation:Optional // Monitoring specifies the monitoring configuration for the RedisCluster. - Monitoring *MonitoringSpec `json:"monitoring,omitempty"` + Monitoring *MonitoringSpec `json:"monitoring,omitempty"` // +kubebuilder:validation:Optional // PurgeKeysOnRebalance specifies if keys should be purged on rebalance. - PurgeKeysOnRebalance bool `json:"purgekeysonrebalance,omitempty"` + PurgeKeysOnRebalance bool `json:"purgekeysonrebalance,omitempty"` // +kubebuilder:validation:Optional // Config is the Redis configuration to use. - Config string `json:"config,omitempty"` + Config string `json:"config,omitempty"` // +kubebuilder:validation:Optional // Resources is the resource requirements for the RedisCluster. - Resources *v1.ResourceRequirements `json:"resources,omitempty"` + Resources *v1.ResourceRequirements `json:"resources,omitempty"` // +kubebuilder:validation:Optional // Labels is the labels to add to the RedisCluster. - Labels *map[string]string `json:"labels,omitempty"` + Labels *map[string]string `json:"labels,omitempty"` // +kubebuilder:validation:Optional // Pdb is the PodDisruptionBudget configuration for the RedisCluster. - Pdb Pdb `json:"pdb,omitempty"` + Pdb Pdb `json:"pdb,omitempty"` // +kubebuilder:validation:Optional - Override *RedisClusterOverrideSpec `json:"override,omitempty"` + Override *RedisClusterOverrideSpec `json:"override,omitempty"` // +kubebuilder:validation:Optional // +kubebuilder:default=true - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the ephemeral field is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the ephemeral field is not allowed" // Ephemeral storage is not persisted across pod restarts. - Ephemeral bool `json:"ephemeral"` + Ephemeral bool `json:"ephemeral"` // +kubebuilder:validation:Optional - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage size is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage size is not allowed" // Storage is the amount of persistent storage to request for each Redis node. - Storage string `json:"storage,omitempty"` + Storage string `json:"storage,omitempty"` // +kubebuilder:validation:Optional // +kubebuilder:default="" - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage class name is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage class name is not allowed" // StorageClassName is the name of the StorageClass to use for the PVC. - StorageClassName string `json:"storageClassName"` + StorageClassName string `json:"storageClassName"` // +kubebuilder:validation:Optional // +kubebuilder:default={ReadWriteOnce} - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage access modes is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage access modes is not allowed" // +kubebuilder:validation:items:Enum={ReadWriteOnce,ReadOnlyMany,ReadWriteMany} // AccessModes is the list of access modes for the PVC. - AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` + AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` } func (redisClusterSpec RedisClusterSpec) NodesNeeded() int { diff --git a/api/v1alpha1/rediscluster_types.go b/api/v1alpha1/rediscluster_types.go index 0d66f24..78874c8 100644 --- a/api/v1alpha1/rediscluster_types.go +++ b/api/v1alpha1/rediscluster_types.go @@ -84,80 +84,80 @@ var ConditionScalingDown = metav1.Condition{ type RedisClusterSpec struct { // +kubebuilder:validation:Optional // RedisAuth - Auth RedisAuth `json:"auth,omitempty"` + Auth RedisAuth `json:"auth,omitempty"` // +kubebuilder:validation:Optional // Redis version - Version string `json:"version,omitempty"` + Version string `json:"version,omitempty"` // Replicas specifies the number of Redis nodes in the cluster. // +kubebuilder:validation:Required - Replicas int32 `json:"replicas,omitempty"` + Replicas int32 `json:"replicas,omitempty"` // +kubebuilder:validation:Optional // ReplicasPerMaster specifies how many replicas should be attached to each Redis Master //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Number of replicas per Master Node" - ReplicasPerMaster int32 `json:"replicasPerMaster,omitempty"` + ReplicasPerMaster int32 `json:"replicasPerMaster,omitempty"` // +kubebuilder:validation:Optional // Image is the Redis image to use. - Image string `json:"image,omitempty"` - + Image string `json:"image,omitempty"` + // +kubebuilder:validation:Optional // DeletePVC specifies if the PVC should be deleted when the RedisCluster is deleted. - DeletePVC bool `json:"deletePVC,omitempty"` + DeletePVC bool `json:"deletePVC,omitempty"` // +kubebuilder:validation:Optional // Backup specifies if the RedisCluster should be backed up. - Backup bool `json:"backup,omitempty"` - + Backup bool `json:"backup,omitempty"` + // +kubebuilder:validation:Optional // Monitoring specifies the monitoring configuration for the RedisCluster. - Monitoring *v1.PodTemplateSpec `json:"monitoring,omitempty"` + Monitoring *v1.PodTemplateSpec `json:"monitoring,omitempty"` // +kubebuilder:validation:Optional // PurgeKeysOnRebalance specifies if keys should be purged on rebalance. - PurgeKeysOnRebalance bool `json:"purgekeysonrebalance,omitempty"` + PurgeKeysOnRebalance bool `json:"purgekeysonrebalance,omitempty"` // +kubebuilder:validation:Optional // Config is the Redis configuration to use. - Config string `json:"config,omitempty"` + Config string `json:"config,omitempty"` // +kubebuilder:validation:Optional // Resources is the resource requirements for the RedisCluster. - Resources *v1.ResourceRequirements `json:"resources,omitempty"` + Resources *v1.ResourceRequirements `json:"resources,omitempty"` // +kubebuilder:validation:Optional // Labels is the labels to add to the RedisCluster. - Labels *map[string]string `json:"labels,omitempty"` + Labels *map[string]string `json:"labels,omitempty"` // +kubebuilder:validation:Optional // Pdb is the PodDisruptionBudget configuration for the RedisCluster. - Pdb Pdb `json:"pdb,omitempty"` - + Pdb Pdb `json:"pdb,omitempty"` + // +kubebuilder:validation:Optional // +kubebuilder:default=true - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the ephemeral field is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the ephemeral field is not allowed" // Ephemeral storage is not persisted across pod restarts. - Ephemeral bool `json:"ephemeral"` + Ephemeral bool `json:"ephemeral"` // +kubebuilder:validation:Optional - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage size is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage size is not allowed" // Storage is the amount of persistent storage to request for each Redis node. - Storage string `json:"storage,omitempty"` + Storage string `json:"storage,omitempty"` // +kubebuilder:validation:Optional // +kubebuilder:default="" - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage class name is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage class name is not allowed" // StorageClassName is the name of the StorageClass to use for the PVC. - StorageClassName string `json:"storageClassName"` + StorageClassName string `json:"storageClassName"` // +kubebuilder:validation:Optional // +kubebuilder:default={ReadWriteOnce} - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage access modes is not allowed" + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Changing the storage access modes is not allowed" // +kubebuilder:validation:items:Enum={ReadWriteOnce,ReadOnlyMany,ReadWriteMany} // AccessModes is the list of access modes for the PVC. - AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` + AccessModes []v1.PersistentVolumeAccessMode `json:"accessModes,omitempty"` } func (redisClusterSpec RedisClusterSpec) NodesNeeded() int { diff --git a/cmd/main.go b/cmd/main.go index 8341c86..5668856 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -97,8 +97,8 @@ func main() { // Controller options ctrlOptions := ctrl.Options{ - Scheme: scheme, - Metrics: server.Options{ + Scheme: scheme, + Metrics: server.Options{ BindAddress: metricsAddr, }, WebhookServer: webhook.NewServer(webhook.Options{ @@ -107,7 +107,7 @@ func main() { HealthProbeBindAddress: probeAddr, LeaderElection: enableLeaderElection, LeaderElectionID: "db95d8a6.inditex.com", - Client: client.Options{ + Client: client.Options{ Cache: &client.CacheOptions{ DisableFor: []client.Object{ &corev1.ConfigMap{}, @@ -161,12 +161,12 @@ func getWatchNamespace() (map[string]cache.Config, error) { if !found { return nil, fmt.Errorf("%s must be set", watchNamespaceEnvVar) } - + watchNamespaces := make(map[string]cache.Config) for _, ns := range strings.Split(namespaces, ",") { setupLog.Info("manager set up with namespace", "namespace", ns) watchNamespaces[ns] = cache.Config{} } - + return watchNamespaces, nil } diff --git a/controllers/rediscluster_reconciler.go b/controllers/rediscluster_reconciler.go index a2a7c30..a7d455d 100644 --- a/controllers/rediscluster_reconciler.go +++ b/controllers/rediscluster_reconciler.go @@ -24,8 +24,8 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - finalizer "github.com/inditextech/redisoperator/internal/finalizers" redisv1 "github.com/inditextech/redisoperator/api/v1" + finalizer "github.com/inditextech/redisoperator/internal/finalizers" ) // RedisClusterReconciler reconciles a RedisCluster object diff --git a/controllers/resource_manager.go b/controllers/resource_manager.go index 0355208..bff4b44 100644 --- a/controllers/resource_manager.go +++ b/controllers/resource_manager.go @@ -37,7 +37,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/utils/pointer" ) const ( @@ -1274,6 +1273,7 @@ func (r *RedisClusterReconciler) CreateConfigMap(req ctrl.Request, spec redisv1. } func (r *RedisClusterReconciler) CreateMonitoringDeployment(ctx context.Context, req ctrl.Request, rediscluster *redisv1.RedisCluster, labels map[string]string) *v1.Deployment { + var replicas = int32(1) d := &v1.Deployment{ ObjectMeta: metav1.ObjectMeta{ Name: req.Name + "-monitoring", @@ -1285,7 +1285,7 @@ func (r *RedisClusterReconciler) CreateMonitoringDeployment(ctx context.Context, Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{redis.RedisClusterLabel: req.Name, r.GetStatefulSetSelectorLabel(rediscluster): "monitoring"}, }, - Replicas: pointer.Int32(1), + Replicas: &replicas, }, } d.Spec.Template.Labels = make(map[string]string) diff --git a/controllers/suite_test.go b/controllers/suite_test.go index f9c8d15..9dad2c5 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -50,7 +50,7 @@ var _ = BeforeSuite(func() { Expect(err).NotTo(HaveOccurred()) k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{ - Scheme: scheme.Scheme, + Scheme: scheme.Scheme, }) Expect(err).ToNot(HaveOccurred()) diff --git a/go.mod b/go.mod index bfafdc7..63ad8a9 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,6 @@ require ( k8s.io/apimachinery v0.32.2 k8s.io/client-go v0.32.2 k8s.io/kubectl v0.32.2 - k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 sigs.k8s.io/controller-runtime v0.20.2 ) @@ -75,6 +74,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/internal/utils/pods.go b/internal/utils/pods.go index 275f876..bfb11f2 100644 --- a/internal/utils/pods.go +++ b/internal/utils/pods.go @@ -76,7 +76,8 @@ type PodReadyWait struct { } func (prw PodReadyWait) WaitForPodsToBecomeReady(ctx context.Context, interval, timeout time.Duration, listOptions *client.ListOptions, expectedReadyReplicas int) error { - return wait.Poll(interval, timeout, func() (bool, error) { + + return wait.PollUntilContextTimeout(ctx, interval, timeout, false, func(ctx context.Context) (bool, error) { pods := &corev1.PodList{} if err := prw.Client.List(ctx, pods, listOptions); err != nil { return false, err diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index c712bcb..29aa122 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -15,12 +15,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubectl/pkg/scheme" ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" ) const ( @@ -77,14 +77,14 @@ var _ = BeforeSuite(func() { By("creating manager") k8sManager, err := ctrl.NewManager(testEnv.Config, ctrl.Options{ - NewClient: config.NewClient(), - Scheme: scheme.Scheme, + NewClient: config.NewClient(), + Scheme: scheme.Scheme, Cache: cache.Options{ DefaultNamespaces: map[string]cache.Config{ RedisNamespace: {}, }, }, - Metrics: server.Options{ + Metrics: server.Options{ BindAddress: metricsAddr, }, }) diff --git a/test/e2e/framework/redisclient.go b/test/e2e/framework/redisclient.go index 5bca2f9..948d8fe 100644 --- a/test/e2e/framework/redisclient.go +++ b/test/e2e/framework/redisclient.go @@ -428,7 +428,7 @@ func createAndInsertDataIntoCluster(pods *corev1.PodList) error { func waitForContainerReady(pod corev1.Pod) error { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - return wait.PollImmediateWithContext(ctx, 1*time.Second, 300*time.Second, func(ctx context.Context) (bool, error) { + return wait.PollUntilContextTimeout(ctx, 1*time.Second, 300*time.Second, true, func(ctx context.Context) (bool, error) { if isContainerReady(pod) { return true, nil } @@ -591,7 +591,7 @@ func waitForObjectStatus(ctx context.Context, client client.Client, nsName types duration := time.Duration(timeoutSeconds) * time.Second var lastKnownStatus string - err := wait.PollImmediateWithContext(ctx, interval, duration, func(ctx context.Context) (bool, error) { + err := wait.PollUntilContextTimeout(ctx, interval, duration, true, func(ctx context.Context) (bool, error) { redisCluster := &redisv1.RedisCluster{} err := client.Get(ctx, nsName, redisCluster) if err != nil { @@ -942,7 +942,7 @@ func waitForRedisClusterDeletion(ctx context.Context, client client.Client, nsNa interval := 3 * time.Second duration := time.Duration(timeoutSeconds) * time.Second - err := wait.PollImmediateWithContext(ctx, interval, duration, func(ctx context.Context) (bool, error) { + err := wait.PollUntilContextTimeout(ctx, interval, duration, true, func(ctx context.Context) (bool, error) { redisCluster := &redisv1.RedisCluster{} err := client.Get(ctx, nsName, redisCluster) if err != nil { diff --git a/test/e2e/internal/config/client.go b/test/e2e/internal/config/client.go index 8191a23..2574a8f 100644 --- a/test/e2e/internal/config/client.go +++ b/test/e2e/internal/config/client.go @@ -20,4 +20,3 @@ func NewClient() client.NewClientFunc { return c, err } } - diff --git a/webhook/main.go b/webhook/main.go index 4c6e871..7984f76 100644 --- a/webhook/main.go +++ b/webhook/main.go @@ -13,11 +13,11 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/metrics/server" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" + "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/controller-runtime/pkg/webhook" redisv1 "github.com/inditextech/redisoperator/api/v1" redisv1alpha1 "github.com/inditextech/redisoperator/api/v1alpha1" @@ -70,8 +70,8 @@ func main() { ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) godotenv.Load("./.env") ctrlOptions := ctrl.Options{ - Scheme: scheme, - Metrics: server.Options{ + Scheme: scheme, + Metrics: server.Options{ BindAddress: metricsAddr, }, WebhookServer: webhook.NewServer(webhook.Options{ @@ -80,7 +80,7 @@ func main() { HealthProbeBindAddress: probeAddr, LeaderElection: enableLeaderElection, LeaderElectionID: "db95d8a6-webhook.inditex.com", - Client: client.Options{ + Client: client.Options{ Cache: &client.CacheOptions{ DisableFor: []client.Object{ &corev1.ConfigMap{}, From cc99f443f9801ca7f423706c18ceeeca54f30ef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 8 Apr 2025 11:09:01 +0200 Subject: [PATCH 03/64] Add GitHub workflow for static code analysis and unit testing --- .github/workflows/code-verify.yml | 23 ++++++++++++++ .../workflows/{test_e2e.yml => e2e-tests.yml} | 21 ++++++------- .github/workflows/stale.yml | 31 ++++++++++--------- Makefile | 11 ++----- 4 files changed, 52 insertions(+), 34 deletions(-) create mode 100644 .github/workflows/code-verify.yml rename .github/workflows/{test_e2e.yml => e2e-tests.yml} (72%) diff --git a/.github/workflows/code-verify.yml b/.github/workflows/code-verify.yml new file mode 100644 index 0000000..1bce78d --- /dev/null +++ b/.github/workflows/code-verify.yml @@ -0,0 +1,23 @@ +name: Static code analysis and unit testing +on: + push: + paths-ignore: + - 'docs/**' + workflow_dispatch: + +jobs: + code-verify: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - id: parse-gomod + name: Extract Go version from go.mod file + uses: Arthur1/parse-gomod-action@v0 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ steps.parse-gomod.outputs.go}} + - name: Run code checks and unit tests + run: | + make verify diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/e2e-tests.yml similarity index 72% rename from .github/workflows/test_e2e.yml rename to .github/workflows/e2e-tests.yml index 4021d86..d1d06d5 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/e2e-tests.yml @@ -1,17 +1,17 @@ -name: Build, Push and run E2E test +# Runs E2E tests on a Kind cluster building and deploying on it. +name: Run E2E tests on: pull_request: branches: - - 'develop*' + - 'main*' paths-ignore: - 'docs/**' - '.github/**' - - '_local_tools/**' + workflow_dispatch: env: KUBECONFIG: /tmp/kubeconfig.yaml - GO_VER: 1.24.0 OPERATOR_NAME: redis-operator jobs: @@ -19,23 +19,22 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - - uses: actions/setup-go@v4 + - id: parse-gomod + name: Extract Go version from go.mod file + uses: Arthur1/parse-gomod-action@v0 + - name: Setup Go + uses: actions/setup-go@v5 with: - go-version: ${{ env.GO_VER }} - + go-version: ${{ steps.parse-gomod.outputs.go}} - name: Setup kubectl run: | curl -sLO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o kubectl chmod +x kubectl sudo mv kubectl /usr/local/bin/kubectl - - name: Setup e2e environment run: chmod +x ${GITHUB_WORKSPACE}/test/cmd/create_local_cluster_testing.sh && ${GITHUB_WORKSPACE}/test/cmd/create_local_cluster_testing.sh ${{ env.OPERATOR_NAME }} - - name: Install ginkgo run: go install github.com/onsi/ginkgo/v2/ginkgo - - name: Run tests for Kubernetes run: | make test-e2e-cov OPERATOR_IMAGE=${{ env.OPERATOR_NAME }}:0.1.0 diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index b452528..116804c 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,27 +1,28 @@ -# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. -# -# You can adjust the behavior by modifying this file. -# For more information, see: -# https://github.com/actions/stale -name: Mark stale issues and pull requests +# Warns and then closes issues and PRs that have had no activity for a specified amount of time. +name: Close stale issues on: schedule: - - cron: '24 23 * * *' + - cron: '0 0 * * *' jobs: stale: - - runs-on: ubuntu-22.04 + name: Stale + runs-on: ubuntu-latest permissions: issues: write pull-requests: write - steps: - - uses: actions/stale@v3 + - uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: 'Stale issue message' - stale-pr-message: 'Stale pull request message' - stale-issue-label: 'no-issue-activity' - stale-pr-label: 'no-pr-activity' + stale-issue-message: 'Issue is stale and will be closed in 30 days unless there is new activity' + stale-pr-message: 'PR is stale and will be closed in 30 days unless there is new activity' + stale-issue-label: 'stale' + exempt-issue-labels: 'stale-exempt,kind/feature-request' + stale-pr-label: 'stale' + exempt-pr-labels: 'stale-exempt' + remove-stale-when-updated: 'True' + operations-per-run: 500 + days-before-stale: 180 + days-before-close: 30 diff --git a/Makefile b/Makefile index 357f376..9bdb02c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,3 @@ - - .DEFAULT_GOAL := help SHELL := /bin/bash @@ -92,13 +90,10 @@ CHANNELS ?= alpha,beta # Can be overwritten with make bundle IMAGE_REF=/: IMAGE_REF ?= $(IMG) -# Namespace to deploy to. -# Takes the active namespace. If no namespace active, then `redis-operator` is used by default. -NAMESPACE ?= $(shell kubectl config view --minify --output 'jsonpath={..namespace}'; echo) -ifeq ($(NAMESPACE), ) - NAMESPACE := redis-operator -endif +# Namespace in which the manager will be deployed. +NAMESPACE ?= redis-operator +# Namespace in which the webhook will be deployed. WEBHOOK_NAMESPACE := redis-operator-webhook # Allowed deploying profiles. From 2c73421c4be67a599ade51f5a32b36c673e8cc52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Tue, 8 Apr 2025 17:48:07 +0200 Subject: [PATCH 04/64] Fix webhook build --- .github/workflows/e2e-tests.yml | 1 - Dockerfile | 2 +- Makefile | 2 +- webhook/Dockerfile | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index d1d06d5..11e26a7 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -7,7 +7,6 @@ on: - 'main*' paths-ignore: - 'docs/**' - - '.github/**' workflow_dispatch: env: diff --git a/Dockerfile b/Dockerfile index fdeb75a..dfb1c92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.24.0 as builder +FROM golang:1.24.0 AS builder WORKDIR /workspace # Copy the Go Modules manifests diff --git a/Makefile b/Makefile index 9bdb02c..598e97c 100644 --- a/Makefile +++ b/Makefile @@ -224,7 +224,7 @@ dev-build: ## Build manager binary. CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o bin/manager ./cmd/main.go dev-build-webhook: ## Build webhook binary. - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o bin/webhook ./cmd/webhook/main.go + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -C webhook -o ../bin/webhook main.go docker-build: test ## Build docker image with the manager (uses `${IMG}` image name). docker build -t ${IMG} . diff --git a/webhook/Dockerfile b/webhook/Dockerfile index aa2a097..b9d1c9a 100644 --- a/webhook/Dockerfile +++ b/webhook/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM golang:1.24.0 as builder +FROM golang:1.24.0 AS builder WORKDIR /workspace From f0c95dfafe30bc58a6115f26d6d8d8541ef8ef92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Wed, 9 Apr 2025 09:29:32 +0200 Subject: [PATCH 05/64] Initial version of the release GH workflow --- .../actions/check-version/action.yml | 43 ++++++++ .../get-version-from-makefile/action.yml | 16 +++ .github/workflows/release.yml | 98 +++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 .github/workflows/actions/check-version/action.yml create mode 100644 .github/workflows/actions/get-version-from-makefile/action.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/actions/check-version/action.yml b/.github/workflows/actions/check-version/action.yml new file mode 100644 index 0000000..fed8e6c --- /dev/null +++ b/.github/workflows/actions/check-version/action.yml @@ -0,0 +1,43 @@ +name: Check if new version is greater than last repository released version + +inputs: + new_version: + required: true + +runs: + using: composite + steps: + - id: get_latest_release + name: Get latest released version from GitHub + uses: actions/github-script@v7 + with: + script: | + const repo = { + owner: context.repo.owner, + repo: context.repo.repo, + }; + let release + try { + release = await github.rest.repos.getLatestRelease(repo); + } catch(e) { + console.log(e); + } + if (release.status === '404') { + return 'v0.0.0'; + } + return release.data.tag_name; + result-encoding: string + - name: Check new version is coherent + shell: bash + run: | + CURRENT_VERSION=${{ steps.get_latest_release.outputs.result }} + EXTRACTED_VERSION=v${{ inputs.new_version }} # Prepending 'v' to match GitHub format + if [ "$EXTRACTED_VERSION" = "$CURRENT_VERSION" ]; then + echo "New version ($EXTRACTED_VERSION) is equal to the current release ($CURRENT_VERSION). Failing the job." + exit 1 + elif [ "$(printf '%s\n' "$CURRENT_VERSION" "$EXTRACTED_VERSION" | sort -V | head -n1)" != "$CURRENT_VERSION" ]; then + echo "New version ($EXTRACTED_VERSION) is less than the current release ($CURRENT_VERSION). Failing the job." + exit 1 + else + echo "Version check passed. New version ($EXTRACTED_VERSION) is greater than the current release ($CURRENT_VERSION)." + fi diff --git a/.github/workflows/actions/get-version-from-makefile/action.yml b/.github/workflows/actions/get-version-from-makefile/action.yml new file mode 100644 index 0000000..2a443ab --- /dev/null +++ b/.github/workflows/actions/get-version-from-makefile/action.yml @@ -0,0 +1,16 @@ +name: Get version from Makefile + +outputs: + version: + description: Current makefile version + value: ${{ steps.makefile_version.outputs.version }} + +runs: + using: composite + steps: + - name: Extract version + id: makefile_version + shell: bash + run: | + VERSION=$(make version) + echo "version=$VERSION" >> $GITHUB_OUTPUT diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..823fbfa --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,98 @@ +name: Release and publish a new version + +on: + pull_request: + types: [closed] + branches: ['main', 'hotfix/*'] + +env: + REGISTRY: ghcr.io + OWNER: InditexTech + OPERATOR_NAME: redis-operator + WEBHOOK_NAME: redis-operator-webhook + +jobs: + create-release: + name: Create release + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Get version from Makefile + id: makefile_version + uses: ./.github/workflows/actions/get-version-from-makefile + - name: Check version + uses: ./.github/workflows/actions/check-version + with: + new_version: ${{ steps.makefile_version.outputs.version }} + - name: Create release + uses: ncipollo/release-action@v1.16.0 + id: github-release + continue-on-error: true + with: + tag: v${{ steps.makefile_version.outputs.version }} + commit: main + body: | + Check out the [changelog](CHANGELOG.md) for version v${{ steps.makefile_version.outputs.version }} + publish-operator-image: + name: Publish Redis Operator image to the registry + needs: create-release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Get version from Makefile + id: makefile_version + uses: ./.github/workflows/actions/get-version-from-makefile + - name: Login to registry ${{ env.REGISTRY }} + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.OPERATOR_NAME }}:${{ steps.makefile_version.outputs.version }} + publish-operator-webhook-image: + name: Publish Redis Operator Webhook image to the registry + needs: create-release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Get version from Makefile + id: makefile_version + uses: ./.github/workflows/actions/get-version-from-makefile + - name: Login to registry ${{ env.REGISTRY }} + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + file: webhook/Dockerfile + push: true + tags: ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.WEBHOOK_NAME }}:${{ steps.makefile_version.outputs.version }} +# publish-operator: +# name: Publish Redis Operator to OperatorHub.io +# needs: [create-release, publish-operator-image, publish-operator-webhook-image] +# runs-on: ubuntu-latest +# steps: +# - name: checkout code +# uses: actions/checkout@v4 From 1bc36dac3531fb0926199eaa7f739aa98412e51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Wed, 9 Apr 2025 10:15:24 +0200 Subject: [PATCH 06/64] Add header Copyright and License info to all files containing code --- Dockerfile | 4 ++++ Makefile | 4 ++++ api/v1/groupversion_info.go | 4 ++++ api/v1/rediscluster_conversion.go | 4 ++++ api/v1/rediscluster_types.go | 4 ++++ api/v1/zz_generated.deepcopy.go | 4 ++++ api/v1alpha1/groupversion_info.go | 4 ++++ api/v1alpha1/rediscluster_conversion.go | 4 ++++ api/v1alpha1/rediscluster_conversion_test.go | 4 ++++ api/v1alpha1/rediscluster_types.go | 4 ++++ api/v1alpha1/zz_generated.deepcopy.go | 4 ++++ cmd/main.go | 18 +++--------------- controllers/assert.go | 4 ++++ controllers/conditions.go | 4 ++++ controllers/mock_factory.go | 4 ++++ controllers/redis_manager.go | 4 ++++ controllers/redis_manager_test.go | 4 ++++ controllers/rediscluster_reconciler.go | 4 ++++ controllers/resource_manager.go | 4 ++++ controllers/resource_manager_test.go | 4 ++++ controllers/suite_test.go | 4 ++++ internal/finalizers/backup.go | 4 ++++ internal/finalizers/configmap.go | 4 ++++ internal/finalizers/delete_pvc.go | 4 ++++ internal/finalizers/finalizer.go | 4 ++++ internal/kubernetes/cluster_nodes.go | 4 ++++ internal/kubernetes/redis.go | 4 ++++ internal/kubernetes/redis_test.go | 4 ++++ internal/redis/node.go | 4 ++++ internal/redis/redis.go | 4 ++++ internal/redis/redis_test.go | 4 ++++ internal/redis/utils.go | 4 ++++ internal/utils/pods.go | 4 ++++ internal/utils/range.go | 4 ++++ internal/utils/range_test.go | 4 ++++ test/e2e/e2e_suite_test.go | 4 ++++ test/e2e/framework/kubeclient.go | 4 ++++ test/e2e/framework/redisclient.go | 4 ++++ test/e2e/internal/config/client.go | 4 ++++ test/e2e/namespace_test.go | 4 ++++ test/e2e/operator_test.go | 4 ++++ test/e2e/rediscluster_test.go | 4 ++++ v1alpha1client/client.go | 4 ++++ v1client/client.go | 4 ++++ webhook/Dockerfile | 4 ++++ webhook/main.go | 4 ++++ webhook/v1/rediscluster_webhook.go | 4 ++++ 47 files changed, 187 insertions(+), 15 deletions(-) diff --git a/Dockerfile b/Dockerfile index dfb1c92..816df6e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + # Build the manager binary FROM golang:1.24.0 AS builder diff --git a/Makefile b/Makefile index 598e97c..94594e3 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + .DEFAULT_GOAL := help SHELL := /bin/bash diff --git a/api/v1/groupversion_info.go b/api/v1/groupversion_info.go index d0b00ab..8217564 100644 --- a/api/v1/groupversion_info.go +++ b/api/v1/groupversion_info.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + // Package v1 contains API Schema definitions for the redis v1 API group. // +kubebuilder:object:generate=true // +groupName=redis.inditex.com diff --git a/api/v1/rediscluster_conversion.go b/api/v1/rediscluster_conversion.go index 5df2b1a..2d7fb13 100644 --- a/api/v1/rediscluster_conversion.go +++ b/api/v1/rediscluster_conversion.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1 // Hub marks this type as a conversion hub. diff --git a/api/v1/rediscluster_types.go b/api/v1/rediscluster_types.go index 4a5527b..0c44be3 100644 --- a/api/v1/rediscluster_types.go +++ b/api/v1/rediscluster_types.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1 import ( diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go index 7d8a810..4fd75c8 100644 --- a/api/v1/zz_generated.deepcopy.go +++ b/api/v1/zz_generated.deepcopy.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + //go:build !ignore_autogenerated // +build !ignore_autogenerated diff --git a/api/v1alpha1/groupversion_info.go b/api/v1alpha1/groupversion_info.go index b1822f4..4cea2fb 100644 --- a/api/v1alpha1/groupversion_info.go +++ b/api/v1alpha1/groupversion_info.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + // Package v1alpha1 contains API Schema definitions for the redis v1alpha1 API group // +kubebuilder:object:generate=true // +groupName=redis.inditex.com diff --git a/api/v1alpha1/rediscluster_conversion.go b/api/v1alpha1/rediscluster_conversion.go index 50cb618..b7e9655 100644 --- a/api/v1alpha1/rediscluster_conversion.go +++ b/api/v1alpha1/rediscluster_conversion.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1alpha1 import ( diff --git a/api/v1alpha1/rediscluster_conversion_test.go b/api/v1alpha1/rediscluster_conversion_test.go index 71a4aee..cd9d0f9 100644 --- a/api/v1alpha1/rediscluster_conversion_test.go +++ b/api/v1alpha1/rediscluster_conversion_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1alpha1 import ( diff --git a/api/v1alpha1/rediscluster_types.go b/api/v1alpha1/rediscluster_types.go index 78874c8..d717520 100644 --- a/api/v1alpha1/rediscluster_types.go +++ b/api/v1alpha1/rediscluster_types.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1alpha1 import ( diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index ee2dcc0..7100d5e 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + //go:build !ignore_autogenerated // +build !ignore_autogenerated diff --git a/cmd/main.go b/cmd/main.go index 5668856..12492d8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,18 +1,6 @@ -/* -Copyright 2021. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/controllers/assert.go b/controllers/assert.go index 34e39ea..c141602 100644 --- a/controllers/assert.go +++ b/controllers/assert.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/conditions.go b/controllers/conditions.go index 236f1a2..37d12c9 100644 --- a/controllers/conditions.go +++ b/controllers/conditions.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/mock_factory.go b/controllers/mock_factory.go index c7ec71d..6c35bfd 100644 --- a/controllers/mock_factory.go +++ b/controllers/mock_factory.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/redis_manager.go b/controllers/redis_manager.go index 431aa50..ef34817 100644 --- a/controllers/redis_manager.go +++ b/controllers/redis_manager.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/redis_manager_test.go b/controllers/redis_manager_test.go index 620bf2d..897c5dd 100644 --- a/controllers/redis_manager_test.go +++ b/controllers/redis_manager_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/rediscluster_reconciler.go b/controllers/rediscluster_reconciler.go index a7d455d..31d989c 100644 --- a/controllers/rediscluster_reconciler.go +++ b/controllers/rediscluster_reconciler.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/resource_manager.go b/controllers/resource_manager.go index bff4b44..936ac14 100644 --- a/controllers/resource_manager.go +++ b/controllers/resource_manager.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/resource_manager_test.go b/controllers/resource_manager_test.go index 720af16..346209e 100644 --- a/controllers/resource_manager_test.go +++ b/controllers/resource_manager_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/controllers/suite_test.go b/controllers/suite_test.go index 9dad2c5..fedbcb3 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package controllers import ( diff --git a/internal/finalizers/backup.go b/internal/finalizers/backup.go index a0fa9de..fd45921 100644 --- a/internal/finalizers/backup.go +++ b/internal/finalizers/backup.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package finalizer import ( diff --git a/internal/finalizers/configmap.go b/internal/finalizers/configmap.go index 53ee353..76176cc 100644 --- a/internal/finalizers/configmap.go +++ b/internal/finalizers/configmap.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package finalizer import ( diff --git a/internal/finalizers/delete_pvc.go b/internal/finalizers/delete_pvc.go index 84e747e..b22098e 100644 --- a/internal/finalizers/delete_pvc.go +++ b/internal/finalizers/delete_pvc.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package finalizer import ( diff --git a/internal/finalizers/finalizer.go b/internal/finalizers/finalizer.go index db54639..91cee58 100644 --- a/internal/finalizers/finalizer.go +++ b/internal/finalizers/finalizer.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package finalizer import ( diff --git a/internal/kubernetes/cluster_nodes.go b/internal/kubernetes/cluster_nodes.go index dd38e88..3807d0b 100644 --- a/internal/kubernetes/cluster_nodes.go +++ b/internal/kubernetes/cluster_nodes.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package kubernetes import ( diff --git a/internal/kubernetes/redis.go b/internal/kubernetes/redis.go index b441674..b251b32 100644 --- a/internal/kubernetes/redis.go +++ b/internal/kubernetes/redis.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package kubernetes import ( diff --git a/internal/kubernetes/redis_test.go b/internal/kubernetes/redis_test.go index 286b23d..af36462 100644 --- a/internal/kubernetes/redis_test.go +++ b/internal/kubernetes/redis_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package kubernetes_test import ( diff --git a/internal/redis/node.go b/internal/redis/node.go index 4564ea3..9eae880 100644 --- a/internal/redis/node.go +++ b/internal/redis/node.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package redis import ( diff --git a/internal/redis/redis.go b/internal/redis/redis.go index 235c80e..2b9af11 100644 --- a/internal/redis/redis.go +++ b/internal/redis/redis.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package redis import ( diff --git a/internal/redis/redis_test.go b/internal/redis/redis_test.go index de3d46d..0b4102b 100644 --- a/internal/redis/redis_test.go +++ b/internal/redis/redis_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package redis import ( diff --git a/internal/redis/utils.go b/internal/redis/utils.go index 96fbb64..2cc8880 100644 --- a/internal/redis/utils.go +++ b/internal/redis/utils.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package redis import ( diff --git a/internal/utils/pods.go b/internal/utils/pods.go index bfb11f2..c942dd7 100644 --- a/internal/utils/pods.go +++ b/internal/utils/pods.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package utils import ( diff --git a/internal/utils/range.go b/internal/utils/range.go index 3d6f718..03d20ac 100644 --- a/internal/utils/range.go +++ b/internal/utils/range.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package utils func MakeRangeMap(min int, max int) map[int]interface{} { diff --git a/internal/utils/range_test.go b/internal/utils/range_test.go index 550e8b1..281be24 100644 --- a/internal/utils/range_test.go +++ b/internal/utils/range_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package utils import ( diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index 29aa122..907bc0a 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package e2e import ( diff --git a/test/e2e/framework/kubeclient.go b/test/e2e/framework/kubeclient.go index 4b3c6bf..1ed52c0 100644 --- a/test/e2e/framework/kubeclient.go +++ b/test/e2e/framework/kubeclient.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package framework import ( diff --git a/test/e2e/framework/redisclient.go b/test/e2e/framework/redisclient.go index 948d8fe..859d4ac 100644 --- a/test/e2e/framework/redisclient.go +++ b/test/e2e/framework/redisclient.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package framework import ( diff --git a/test/e2e/internal/config/client.go b/test/e2e/internal/config/client.go index 2574a8f..bbad8f3 100644 --- a/test/e2e/internal/config/client.go +++ b/test/e2e/internal/config/client.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package config import ( diff --git a/test/e2e/namespace_test.go b/test/e2e/namespace_test.go index be687ee..8f15391 100644 --- a/test/e2e/namespace_test.go +++ b/test/e2e/namespace_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package e2e import ( diff --git a/test/e2e/operator_test.go b/test/e2e/operator_test.go index 57b952b..b54ff7d 100644 --- a/test/e2e/operator_test.go +++ b/test/e2e/operator_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package e2e import ( diff --git a/test/e2e/rediscluster_test.go b/test/e2e/rediscluster_test.go index bbb7ce8..c0a7876 100644 --- a/test/e2e/rediscluster_test.go +++ b/test/e2e/rediscluster_test.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package e2e import ( diff --git a/v1alpha1client/client.go b/v1alpha1client/client.go index 768d0fa..fe2fbc4 100644 --- a/v1alpha1client/client.go +++ b/v1alpha1client/client.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1alpha1client import ( diff --git a/v1client/client.go b/v1client/client.go index 181aaad..80561e3 100644 --- a/v1client/client.go +++ b/v1client/client.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package redisv1client import ( diff --git a/webhook/Dockerfile b/webhook/Dockerfile index b9d1c9a..43cf3e1 100644 --- a/webhook/Dockerfile +++ b/webhook/Dockerfile @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +# +# SPDX-License-Identifier: Apache-2.0 + # Build the manager binary FROM golang:1.24.0 AS builder diff --git a/webhook/main.go b/webhook/main.go index 7984f76..2e60f73 100644 --- a/webhook/main.go +++ b/webhook/main.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package main import ( diff --git a/webhook/v1/rediscluster_webhook.go b/webhook/v1/rediscluster_webhook.go index 99449a1..1ea5adb 100644 --- a/webhook/v1/rediscluster_webhook.go +++ b/webhook/v1/rediscluster_webhook.go @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2025 INDUSTRIA DE DISEÑO TEXTIL, S.A. (INDITEX, S.A.) +// +// SPDX-License-Identifier: Apache-2.0 + package v1 import ( From 6e91fb8bb73b92b5394f5f13e5f39380fa936108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Wed, 23 Apr 2025 09:27:08 +0200 Subject: [PATCH 07/64] Do not add innecesunnecessary log messages --- controllers/conditions.go | 6 ++++-- controllers/resource_manager.go | 3 --- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/controllers/conditions.go b/controllers/conditions.go index 37d12c9..01bff6f 100644 --- a/controllers/conditions.go +++ b/controllers/conditions.go @@ -12,7 +12,9 @@ import ( ) func SetConditionFalse(log logr.Logger, redisCluster *redisv1.RedisCluster, condition metav1.Condition) { - log.Info("Condition set to false", "condition", condition) condition.Status = metav1.ConditionFalse - meta.SetStatusCondition(&redisCluster.Status.Conditions, condition) + changed := meta.SetStatusCondition(&redisCluster.Status.Conditions, condition) + if changed { + log.Info("Condition set to false", "condition", condition) + } } diff --git a/controllers/resource_manager.go b/controllers/resource_manager.go index 936ac14..6ad3c65 100644 --- a/controllers/resource_manager.go +++ b/controllers/resource_manager.go @@ -194,9 +194,6 @@ func (r *RedisClusterReconciler) ReconcileClusterObject(ctx context.Context, req r.checkClusterNodesIntegrity(ctx, redisCluster) - // check the cluster state and slots allocated. if states is ok, we can reset the status - r.LogInfo(redisCluster.NamespacedName(), "ReconcileClusterObject", "state", redisCluster.Status.Status) - readyNodes, err := r.GetReadyNodes(ctx, redisCluster) if err != nil { r.LogError(redisCluster.NamespacedName(), err, "Error getting redis cluster nodes") From 2f3b5127349d3b0298cefa5b75248d14df639032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Mart=C3=ADnez=20P=C3=A9rez?= Date: Wed, 30 Apr 2025 15:54:10 +0200 Subject: [PATCH 08/64] update docs with status codes and status transitions --- .gitignore | 1 - README.md | 25 +- .../redis-cluster-status-transitions.drawio | 360 ++++++++++++++++++ .../redis-status-creation-meet-rebalance.png | Bin 0 -> 76125 bytes docs/images/redis-status-error.png | Bin 0 -> 73230 bytes docs/images/redis-status-scale.png | Bin 0 -> 30345 bytes docs/images/redis-status-upgrade.png | Bin 0 -> 46266 bytes docs/redis-cluster-status.md | 39 ++ 8 files changed, 414 insertions(+), 11 deletions(-) create mode 100644 docs/files/redis-cluster-status-transitions.drawio create mode 100644 docs/images/redis-status-creation-meet-rebalance.png create mode 100644 docs/images/redis-status-error.png create mode 100644 docs/images/redis-status-scale.png create mode 100644 docs/images/redis-status-upgrade.png create mode 100644 docs/redis-cluster-status.md diff --git a/.gitignore b/.gitignore index 60b40b7..835bb90 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ bin testbin/* config/test/tests.yaml -/iac-redisoperator target/ .local/ diff --git a/README.md b/README.md index fa836fb..a2fa083 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,16 @@ Redis operator is built using [kubebuilder](https://github.com/kubernetes-sigs/k ## Features -* Redis cluster creation -* Redis cluster fixing -* Slots allocation -* PVC -* Sidecar pods support (e.g. custom metrics applications) -* Persistence -* RedisGraph support +- Redis cluster creation +- Cluster scaling up and down +- CLuster upgrading + - Update node pods image + - Update Redis configuration + - Update node pods resources +- Ensure cluster health +- Slots allocation +- Persistence +- RedisGraph support ## Documentation @@ -22,15 +25,17 @@ Refer to [operator guide](./docs/operator-guide/toc.md) to have an overview of t If you are a developer, you'll find interesting information in the [developer guide](./docs/developer-guide.md). +Learn about [Redis cluster status](./docs/redis-cluster-status.md) + ## Versions -* Go version: v1.24.0 -* Operator SDK version: v1.37.0 +- Go version: v1.24.0 +- Operator SDK version: v1.37.0 ## License Copyright 2025 Inditex. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. diff --git a/docs/files/redis-cluster-status-transitions.drawio b/docs/files/redis-cluster-status-transitions.drawio new file mode 100644 index 0000000..8ab0e69 --- /dev/null +++ b/docs/files/redis-cluster-status-transitions.drawio @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/redis-status-creation-meet-rebalance.png b/docs/images/redis-status-creation-meet-rebalance.png new file mode 100644 index 0000000000000000000000000000000000000000..171b392d0ff4c1cda22074205cd8be93723f3397 GIT binary patch literal 76125 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 literal 0 HcmV?d00001 diff --git a/docs/images/redis-status-error.png b/docs/images/redis-status-error.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa5a3441625aa06d687a05f90f6777eadd80dfa GIT binary patch literal 73230 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