From afdb099bfa34824be16be30fb87a3d03ae784b56 Mon Sep 17 00:00:00 2001 From: AFUL <1053165986@qq.com> Date: Thu, 8 Dec 2022 21:48:46 +0800 Subject: [PATCH 01/36] =?UTF-8?q?[New=20Feature]=20=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=89=AB=E7=A0=81=E6=9B=B4=E6=96=B0=E7=AC=AC=E4=B8=80=E4=B8=AA?= =?UTF-8?q?cookie=20(#353)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通过将B站登录二维码打印到日志文件中,手机B站app扫描二维码,自动更新第一个Cookie Co-authored-by: aful --- qinglong/DefaultTasks/bili_task_get_cookie.py | 87 +++++++++++++++++++ qinglong/extra.sh | 4 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 qinglong/DefaultTasks/bili_task_get_cookie.py diff --git a/qinglong/DefaultTasks/bili_task_get_cookie.py b/qinglong/DefaultTasks/bili_task_get_cookie.py new file mode 100644 index 000000000..9243a6387 --- /dev/null +++ b/qinglong/DefaultTasks/bili_task_get_cookie.py @@ -0,0 +1,87 @@ +''' +1 9 11 11 1 bili_task_get_cookie.py +手动运行,查看日志,并使用手机B站app扫描日志中二维码,注意,只能修改第一个cookie +如果产生错误,重新运行并用手机扫描二维码 +有可能识别不出来二维码,我测试了几次都能识别 + +默认环境变量存放位置为/ql/data/config/env.sh +可以自己通过docker命令进入容器查找这个文件位置。docker exec -it qinglong /bin/bash,进入青龙容器,然后查找一下这个文件位置 +filename = '../config/env.sh' +''' + +import qrcode +import requests +import json +import time +import os + +filename = '/ql/data/config/env.sh' + +url_get = 'http://passport.bilibili.com/x/passport-login/web/qrcode/generate' +headers = { + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42" + } +session = requests.session() +response = session.get(url_get, headers=headers) +json_data = json.loads(response.text) +qr_data = json_data['data']['url'] +qr_code = json_data['data']['qrcode_key'] +# print(qr_data) +# img = qrcode.make(qr_data) +# img.save('../upload/B.png') +# 生成二维码,并且打印,只有invert是True手机才能识别,默认的打印识别不出来 +qr = qrcode.QRCode() +qr.add_data(qr_data) +qr.print_ascii(invert=True) + +url_get_2 = f'http://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key={qr_code}&source=main_mini' +refresh_token = '' +# 尝试次数 +try_time = 8 +while True: + try_time -= 1 + if not try_time: + print('一直没有扫码,退出登录!') + exit(1) + response = session.get(url_get_2, headers=headers) + json_data = json.loads(response.text) + response_data_2 = json_data['data'] + if response_data_2['code'] == 0: + try_time += 5 + refresh_token = response_data_2['refresh_token'] + print(response_data_2, end='') + if response_data_2['message'] == '二维码已失效': + print(response_data_2['message']) + print('-' * 20) + break + print(response_data_2['message']) + print('-' * 20) + time.sleep(5) +session.get('https://api.bilibili.com/x/web-interface/nav') +cookies = requests.utils.dict_from_cookiejar(session.cookies) +lst = [] +for item in cookies.items(): + lst.append(f"{item[0]}={item[1]}") + +cookie_str = ';'.join(lst) +print('=' * 20) +print(cookie_str) +print('=' * 20) +# 修改环境变量 +with open(filename, 'r') as f: + lines = f.readlines() + +flag = True +with open(filename, 'w') as f: + for l in lines: + if 'Ray_BiliBiliCookies__1' in l: + flag = False + l = f'export Ray_BiliBiliCookies__1="{cookie_str}"\n' + print(l) + f.write(l) + if flag: + flag = False + l = f'export Ray_BiliBiliCookies__1="{cookie_str}"\n' + print(l) + f.write(l) +os.popen(f'source {filename}') diff --git a/qinglong/extra.sh b/qinglong/extra.sh index c5f16c828..9d3840a3e 100644 --- a/qinglong/extra.sh +++ b/qinglong/extra.sh @@ -5,4 +5,6 @@ # 安装 dotnet 环境 # curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/ray-dotnet-install.sh | bash /dev/stdin --no-official curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/ray-dotnet-install.sh | bash /dev/stdin -# 其他代码... \ No newline at end of file +# 安装需要用到的包 +pip3 install requests qrcode pillow +# 其他代码... From 2d78d54a2936987b6bb2ab0177d599937b4cdc05 Mon Sep 17 00:00:00 2001 From: OceanJiang Date: Thu, 8 Dec 2022 21:55:12 +0800 Subject: [PATCH 02/36] fix: update the header of refer in the video query api -401 (#350) #346 #347 #287 --- .../BiliBiliAgent/Interfaces/IVideoApi.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs index 2651d4325..d86cd0d84 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IVideoApi.cs @@ -103,7 +103,7 @@ public interface IVideoWithoutCookieApi : IVideoApi /// /// /// - [Header("Referer", "https://space.bilibili.com/")] + [Header("Referer", "https://www.bilibili.com/")] [Header("Origin", "https://space.bilibili.com")] [HttpGet("/x/space/arc/search?mid={upId}&ps={pageSize}&tid=0&pn={pageNumber}&keyword={keyword}&order=pubdate&jsonp=jsonp")] Task> SearchVideosByUpId(long upId, int pageSize = 30, int pageNumber = 1, string keyword = ""); From 90629652c0f75ae72b32c2bc63d6ff81ae549ac9 Mon Sep 17 00:00:00 2001 From: jexjws <65129712+jexjws@users.noreply.github.com> Date: Thu, 8 Dec 2022 21:57:20 +0800 Subject: [PATCH 03/36] Update README.md (#348) --- docker/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker/README.md b/docker/README.md index 120cc892a..bffcc89c3 100644 --- a/docker/README.md +++ b/docker/README.md @@ -63,7 +63,7 @@ docker logs -f bili ### 2.2. 修改bili下的docker-compose.yml,填入cookie -根据 docker-compose.yaml 里面的注释编辑所需配置,`environment` 下可以通过环境变量自由添加自定义配置,其中Cookie是必填的,所以请至少填入Cookie并保存。 +根据 docker-compose.yml 里面的注释编辑所需配置,`environment` 下可以通过环境变量自由添加自定义配置,其中Cookie是必填的,所以请至少填入Cookie并保存。 保存后,重新运行下`docker compose up -d` @@ -125,6 +125,9 @@ docker start bili # 停止容器 docker stop bili +# 重启容器 +docker restart bili + # 删除容器 docker rm bili From 876fbf5e902fcacabb25618af4af6c87da5c3d3f Mon Sep 17 00:00:00 2001 From: chenliu1993 Date: Thu, 8 Dec 2022 22:15:20 +0800 Subject: [PATCH 04/36] Add krew (#341) Add krew support for bilibili tool Signed-off-by: chenliu1993 --- .gitignore | 7 + krew/Makefile | 34 ++ krew/README.md | 68 +++ krew/cmd/kubectl-bilipro.go | 20 + krew/config.yaml | 5 + krew/go.mod | 68 +++ krew/go.sum | 517 ++++++++++++++++++ krew/pkg/cmd/cmd.go | 39 ++ krew/pkg/cmd/delete.go | 165 ++++++ krew/pkg/cmd/get.go | 88 +++ krew/pkg/cmd/init.go | 255 +++++++++ krew/pkg/cmd/version.go | 52 ++ krew/pkg/options/deployment.go | 10 + krew/pkg/resources/asset.go | 13 + .../base/bilibiliPro/deployment.yaml | 18 + .../base/bilibiliPro/kustomization.yaml | 2 + krew/pkg/resources/base/kustomization.yaml | 2 + krew/pkg/resources/base/ns/kustomization.yaml | 2 + krew/pkg/resources/base/ns/namespace.yaml | 5 + krew/pkg/resources/kustomization.yaml | 7 + krew/pkg/utils/utils.go | 82 +++ 21 files changed, 1459 insertions(+) create mode 100644 krew/Makefile create mode 100644 krew/README.md create mode 100644 krew/cmd/kubectl-bilipro.go create mode 100644 krew/config.yaml create mode 100644 krew/go.mod create mode 100644 krew/go.sum create mode 100644 krew/pkg/cmd/cmd.go create mode 100644 krew/pkg/cmd/delete.go create mode 100644 krew/pkg/cmd/get.go create mode 100644 krew/pkg/cmd/init.go create mode 100644 krew/pkg/cmd/version.go create mode 100644 krew/pkg/options/deployment.go create mode 100644 krew/pkg/resources/asset.go create mode 100644 krew/pkg/resources/base/bilibiliPro/deployment.yaml create mode 100644 krew/pkg/resources/base/bilibiliPro/kustomization.yaml create mode 100644 krew/pkg/resources/base/kustomization.yaml create mode 100644 krew/pkg/resources/base/ns/kustomization.yaml create mode 100644 krew/pkg/resources/base/ns/namespace.yaml create mode 100644 krew/pkg/resources/kustomization.yaml create mode 100644 krew/pkg/utils/utils.go diff --git a/.gitignore b/.gitignore index 3da785e80..17c609976 100644 --- a/.gitignore +++ b/.gitignore @@ -358,3 +358,10 @@ tencentScf/.env # vs code .vscode + +# krew +krew/bilipro +krew/cmd/kubectl-bilipro +krew/kustomization.yaml +bilipro +kustomization.yaml \ No newline at end of file diff --git a/krew/Makefile b/krew/Makefile new file mode 100644 index 000000000..bd1bf7be1 --- /dev/null +++ b/krew/Makefile @@ -0,0 +1,34 @@ +.DEFAULT_GOAL:=help +SHELL := /usr/bin/env bash + +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GOOS ?= $(shell go env GOOS) +GOARCH ?= $(shell go env GOARCH) +BIN_NAME ?= kubectl-bilipro +KUBECTL_DIR ?= $(shell which kubectl | awk -F 'kubectl' '{printf "%s\n", $$1 }') + + + +GITCOMMIT ?= `git rev-parse HEAD` + +help: #### display help + @awk 'BEGIN {FS = ":.*## "; printf "\nTargets:\n"} /^[a-zA-Z_-]+:.*?#### / { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + @awk 'BEGIN {FS = ":.* ## "; printf "\n \033[1;32mBuild targets\033[36m\033[0m\n \033[0;37mTargets for building and/or installing CLI plugins on the system.\n Append \"ENVS=\" to the end of these targets to limit the binaries built.\n e.g.: make build-all-tanzu-cli-plugins ENVS=linux-amd64 \n List available at https://github.com/golang/go/blob/master/src/go/build/syslist.go\033[36m\033[0m\n\n"} /^[a-zA-Z_-]+:.*? ## / { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) +##### GLOBAL + +.PHONY: deploy +deploy: build install #### build + install + + +.PHONY: build +build: #### build the plugin + @go vet ./... && \ + go fmt ./... && \ + cd ${ROOT_DIR}/krew/cmd && \ + GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 go build -ldflags "-X github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/cmd.Version=${GITCOMMIT}" -o $(BIN_NAME) kubectl-bilipro.go + + +.PHONY: install +install: #### install the plugin + @cd ${ROOT_DIR}/krew/cmd && \ + sudo install ./$(BIN_NAME) ${KUBECTL_DIR}/$(BIN_NAME) \ No newline at end of file diff --git a/krew/README.md b/krew/README.md new file mode 100644 index 000000000..af6acd696 --- /dev/null +++ b/krew/README.md @@ -0,0 +1,68 @@ +# BiliBiliPro Kubectl Plugin + +## Prerequisites + +- Kubernetes >= v1.23.0. +- go >= v1.18 +- kubectl installed on your local machine, configured to an existing healthy Kubernetes cluster. +- [krew](https://krew.sigs.k8s.io/docs/user-guide/setup/install/) plugin installed + +## Install Plugin + +Command: `cd ./krew && make deploy` +The binary will be generated in cmd/ install it alonside the kubectl binary. + +For example: the kubectl is installed under `/usr/bin`, then put the bilibilipro plugin under `/usr/bin` too. + +## Plugin Commands + +### Deployment && Update + +Command: `kubectl bilipro init --config config.yaml` + +Creates Deployment with the needed environments. + + +Optional Options: + +- `--image=zai7lou/bilibili_tool_pro:0.2.1` +- `--namespace=bilipro` +- `--image-pull-secret=` + +Required Options: + +- `--config=` + +The content of is a yaml array, please refer to the example config yaml under the krew directory. + +For example +````yaml +- name: Ray_BiliBiliCookies__2 + value: "cookie" + # DailyTrigger - required +- name: Ray_DailyTaskConfig__Cron + value: "11 11 * * *" +```` + + +Suggestions: Deploy this workload in namespace other than default or kube-* namespace, because the delete logic should be improved + + +### Deletion + +Command: `kubectl bilipro delete [options]` + +Deletes Deployment. +v +Optional Options: + +- `--namespace=` +- `--name=` + +### Version + +Command: `kubectl bilipro version` + +Output the plugin version. + + diff --git a/krew/cmd/kubectl-bilipro.go b/krew/cmd/kubectl-bilipro.go new file mode 100644 index 000000000..8132bd0ec --- /dev/null +++ b/krew/cmd/kubectl-bilipro.go @@ -0,0 +1,20 @@ +package main + +import ( + "os" + + "github.com/spf13/pflag" + + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/cmd" + "k8s.io/cli-runtime/pkg/genericclioptions" +) + +func main() { + flags := pflag.NewFlagSet("kubectl-bilipro", pflag.ExitOnError) + pflag.CommandLine = flags + + cmd := cmd.NewExecutor(genericclioptions.IOStreams{In: os.Stdin, Out: os.Stdout, ErrOut: os.Stderr}) + if err := cmd.Execute(); err != nil { + os.Exit(1) + } +} diff --git a/krew/config.yaml b/krew/config.yaml new file mode 100644 index 000000000..d19b59a8a --- /dev/null +++ b/krew/config.yaml @@ -0,0 +1,5 @@ +- name: Ray_BiliBiliCookies__2 + value: "cookie" + # DailyTrigger - required +- name: Ray_DailyTaskConfig__Cron + value: "11 11 * * *" \ No newline at end of file diff --git a/krew/go.mod b/krew/go.mod new file mode 100644 index 000000000..cf9f7d3fe --- /dev/null +++ b/krew/go.mod @@ -0,0 +1,68 @@ +module github.com/RayWangQvQ/BiliBiliToolPro/krew + +go 1.18 + +require ( + github.com/spf13/cobra v1.4.0 + github.com/spf13/pflag v1.0.5 + k8s.io/api v0.25.4 + k8s.io/cli-runtime v0.25.4 + k8s.io/klog/v2 v2.70.1 + sigs.k8s.io/kustomize/api v0.12.1 + sigs.k8s.io/kustomize/kyaml v0.13.9 + sigs.k8s.io/yaml v1.2.0 +) + +require ( + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.8.0 // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/go-errors/errors v1.0.1 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/btree v1.0.1 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/gofuzz v1.1.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.1.2 // indirect + github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/xlab/treeprint v1.1.0 // indirect + go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apimachinery v0.25.4 // indirect + k8s.io/client-go v0.25.4 // indirect + k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 // indirect + k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect +) + +replace github.com/RayWangQvQ/BiliBiliToolPro/krew => ../krew diff --git a/krew/go.sum b/krew/go.sum new file mode 100644 index 000000000..2f58a67d1 --- /dev/null +++ b/krew/go.sum @@ -0,0 +1,517 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +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.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +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/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/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/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +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/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +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/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +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= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/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= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.25.4 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= +k8s.io/api v0.25.4/go.mod h1:IG2+RzyPQLllQxnhzD8KQNEu4c4YvyDTpSMztf4A0OQ= +k8s.io/apimachinery v0.25.4 h1:CtXsuaitMESSu339tfhVXhQrPET+EiWnIY1rcurKnAc= +k8s.io/apimachinery v0.25.4/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/cli-runtime v0.25.4 h1:GTSBN7aKBrc2LqpdO30CmHQqJtRmotxV7XsMSP+QZIk= +k8s.io/cli-runtime v0.25.4/go.mod h1:JGOw1CR8v4Mcz6cEKA7bFQe0bPrNn1l5sGAX1/Ke4Eg= +k8s.io/client-go v0.25.4 h1:3RNRDffAkNU56M/a7gUfXaEzdhZlYhoW8dgViGy5fn8= +k8s.io/client-go v0.25.4/go.mod h1:8trHCAC83XKY0wsBIpbirZU4NTUpbuhc2JnI7OruGZw= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= +k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= +k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= +sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= +sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/krew/pkg/cmd/cmd.go b/krew/pkg/cmd/cmd.go new file mode 100644 index 000000000..5066f7a04 --- /dev/null +++ b/krew/pkg/cmd/cmd.go @@ -0,0 +1,39 @@ +package cmd + +import ( + "log" + + "github.com/spf13/cobra" + "k8s.io/cli-runtime/pkg/genericclioptions" +) + +const ( + biliproDesc = `Manage and deploy bilibili pro tools on k8s` + kubeconfig = "kubeconfig" +) + +var ( + confPath string + rootCmd = &cobra.Command{ + Use: "bilipro", + Long: biliproDesc, + SilenceUsage: true, + } +) + +func init() { + rootCmd.PersistentFlags().StringVar(&confPath, kubeconfig, "", "Custom kubeconfig path") + + log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) +} + +// New creates a new root command for kubectl-bilipro +func NewExecutor(streams genericclioptions.IOStreams) *cobra.Command { + cobra.EnableCommandSorting = false + rootCmd.AddCommand(newInitCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) + // If you want to update, just init again + rootCmd.AddCommand(newGetCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) + rootCmd.AddCommand(newDeleteCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) + rootCmd.AddCommand(newVersionCmd(rootCmd.OutOrStdout(), rootCmd.ErrOrStderr())) + return rootCmd +} diff --git a/krew/pkg/cmd/delete.go b/krew/pkg/cmd/delete.go new file mode 100644 index 000000000..9483ae248 --- /dev/null +++ b/krew/pkg/cmd/delete.go @@ -0,0 +1,165 @@ +package cmd + +import ( + "bufio" + "fmt" + "io" + "os" + "os/exec" + "strings" + + "sigs.k8s.io/kustomize/api/krusty" + "sigs.k8s.io/kustomize/api/types" + "sigs.k8s.io/yaml" + + "k8s.io/klog/v2" + + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options" + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils" + "github.com/spf13/cobra" +) + +const ( + deleteDesc = ` +'delete' command delete bilibilipro tool.` + deleteExample = ` kubectl bilipro delete <--name deployment_name>` +) + +type deleteCmd struct { + out io.Writer + errOut io.Writer + output bool + deployOpts options.DeployOptions +} + +func newDeleteCmd(out io.Writer, errOut io.Writer) *cobra.Command { + o := &deleteCmd{out: out, errOut: errOut} + + cmd := &cobra.Command{ + Use: "delete", + Short: "Delete bilibilipro", + Long: deleteDesc, + Example: deleteExample, + Args: cobra.MaximumNArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + + err := o.run(out) + if err != nil { + klog.Warning(err) + return err + } + return nil + }, + } + + f := cmd.Flags() + f.StringVarP(&o.deployOpts.Namespace, "namespace", "n", "bilipro", "namespace scope for this request") + f.StringVarP(&o.deployOpts.Name, "name", "", "bilibilipro", "name of deployment to delete") + return cmd +} + +func (o *deleteCmd) run(writer io.Writer) error { + inDiskSys, err := utils.GetResourceFileSys() + if err != nil { + klog.Error(err) + return err + } + + // if the bilibili tool is deployed under system/pre-defined namespace, ignore the namespace file + resources := []string{} + if o.deployOpts.Namespace == "default" || o.deployOpts.Namespace == "kube-system" || o.deployOpts.Namespace == "kube-public" { + resources = []string{"bilipro/bilibiliPro"} + } else { + resources = []string{"bilipro/bilibiliPro", "bilipro/ns"} + } + + // write the kustomization file + + kustomizationYaml := types.Kustomization{ + TypeMeta: types.TypeMeta{ + Kind: "Kustomization", + APIVersion: "kustomize.config.k8s.io/v1beta1", + }, + Resources: resources, + } + + if o.deployOpts.Namespace != "" { + kustomizationYaml.Namespace = o.deployOpts.Namespace + } + + // Compile the kustomization to a file and create on the in memory filesystem + kustYaml, err := yaml.Marshal(kustomizationYaml) + if err != nil { + klog.Error(err) + return err + } + + kustFile, err := inDiskSys.Create("kustomization.yaml") + if err != nil { + klog.Error(err) + return err + } + + _, err = kustFile.Write(kustYaml) + if err != nil { + klog.Error(err) + return err + } + + // kustomize build the target location + k := krusty.MakeKustomizer( + krusty.MakeDefaultOptions(), + ) + + m, err := k.Run(inDiskSys, "./bilipro") + if err != nil { + klog.Error(err) + return err + } + + yml, err := m.AsYaml() + if err != nil { + klog.Error(err) + return err + } + + if o.output { + _, err = writer.Write(yml) + klog.Error(err) + return err + } + + // do kubectl delete + cmd := exec.Command("kubectl", "delete", "-f", "-") + + cmd.Stdin = strings.NewReader(string(yml)) + + stdoutReader, _ := cmd.StdoutPipe() + stdoutScanner := bufio.NewScanner(stdoutReader) + go func() { + for stdoutScanner.Scan() { + fmt.Println(stdoutScanner.Text()) + } + }() + stderrReader, _ := cmd.StderrPipe() + stderrScanner := bufio.NewScanner(stderrReader) + go func() { + for stderrScanner.Scan() { + fmt.Println(stderrScanner.Text()) + } + }() + err = cmd.Start() + if err != nil { + fmt.Printf("Error : %v \n", err) + os.Exit(1) + } + + // stuck here to wait for the completion + err = cmd.Wait() + if err != nil { + fmt.Printf("Error: %v \n", err) + os.Exit(1) + } + + return nil +} diff --git a/krew/pkg/cmd/get.go b/krew/pkg/cmd/get.go new file mode 100644 index 000000000..226183caa --- /dev/null +++ b/krew/pkg/cmd/get.go @@ -0,0 +1,88 @@ +package cmd + +import ( + "bufio" + "fmt" + "io" + "os" + "os/exec" + + "k8s.io/klog/v2" + + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options" + "github.com/spf13/cobra" +) + +const ( + getDesc = ` +'get' command get bilibilipro tool deployment.` + getExample = ` kubectl bilipro get <--name deployment_name --namespace namespace_name>` +) + +type getCmd struct { + out io.Writer + errOut io.Writer + + deployOpts options.DeployOptions +} + +func newGetCmd(out io.Writer, errOut io.Writer) *cobra.Command { + o := &getCmd{out: out, errOut: errOut} + + cmd := &cobra.Command{ + Use: "get", + Short: "Get bilibilipro", + Long: getDesc, + Example: getExample, + Args: cobra.MaximumNArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + + err := o.run(out) + if err != nil { + klog.Warning(err) + return err + } + return nil + }, + } + + f := cmd.Flags() + f.StringVarP(&o.deployOpts.Namespace, "namespace", "n", "bilipro", "namespace scope for this request") + f.StringVarP(&o.deployOpts.Name, "name", "", "bilibilipro", "name of deployment to get") + return cmd +} + +func (o *getCmd) run(writer io.Writer) error { + // do kubectl get + cmd := exec.Command("kubectl", "get", "deploy", o.deployOpts.Name, "-n", o.deployOpts.Namespace) + + stdoutReader, _ := cmd.StdoutPipe() + stdoutScanner := bufio.NewScanner(stdoutReader) + go func() { + for stdoutScanner.Scan() { + fmt.Println(stdoutScanner.Text()) + } + }() + stderrReader, _ := cmd.StderrPipe() + stderrScanner := bufio.NewScanner(stderrReader) + go func() { + for stderrScanner.Scan() { + fmt.Println(stderrScanner.Text()) + } + }() + + err := cmd.Start() + if err != nil { + fmt.Printf("Error : %v \n", err) + os.Exit(1) + } + + // stuck here to wait for the completion + err = cmd.Wait() + if err != nil { + fmt.Printf("Error: %v \n", err) + os.Exit(1) + } + + return nil +} diff --git a/krew/pkg/cmd/init.go b/krew/pkg/cmd/init.go new file mode 100644 index 000000000..69c8a5564 --- /dev/null +++ b/krew/pkg/cmd/init.go @@ -0,0 +1,255 @@ +package cmd + +import ( + "bufio" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "strings" + + corev1 "k8s.io/api/core/v1" + + "sigs.k8s.io/kustomize/kyaml/resid" + + "sigs.k8s.io/yaml" + + "sigs.k8s.io/kustomize/api/types" + + "k8s.io/klog/v2" + + "github.com/spf13/cobra" + + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/options" + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/utils" + "sigs.k8s.io/kustomize/api/krusty" +) + +const ( + initDesc = ` + 'init' command creates BilibiliPro deployment along with all the dependencies.` + initExample = ` kubectl bilipro init --config ` +) + +type initCmd struct { + out io.Writer + errOut io.Writer + output bool + deployOpts options.DeployOptions +} + +func newInitCmd(out io.Writer, errOut io.Writer) *cobra.Command { + o := &initCmd{out: out, errOut: errOut} + + cmd := &cobra.Command{ + Use: "init", + Short: "Initialize bilipro", + Long: initDesc, + Example: initExample, + Args: cobra.MaximumNArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + err := o.run(out) + if err != nil { + klog.Warning(err) + return err + } + return nil + }, + } + + f := cmd.Flags() + f.StringVarP(&o.deployOpts.Image, "image", "i", "zai7lou/bilibili_tool_pro:0.2.1", "bilibilipro image") + f.StringVarP(&o.deployOpts.Namespace, "namespace", "n", "bilipro", "namespace scope for this request") + f.StringVar(&o.deployOpts.ImagePullSecret, "image-pull-secret", "", "image pull secret to be used for pulling bilibilipro image") + f.StringVarP(&o.deployOpts.ConfigFilePath, "config", "c", "", "the config file contanis the environment variables") + f.BoolVarP(&o.output, "output", "o", false, "dry run this command and generate requisite yaml") + return cmd +} + +type opStr struct { + Op string `json:"op"` + Path string `json:"path"` + Value string `json:"value"` +} + +type opInterface struct { + Op string `json:"op"` + Path string `json:"path"` + Value interface{} `json:"value"` +} + +type normalEnvVars struct { + Name string `json:"name"` + Value string `json:"value"` +} + +// run initializes local config and installs BiliBiliPro tool to Kubernetes Cluster. +func (o *initCmd) run(writer io.Writer) error { + inDiskSys, err := utils.GetResourceFileSys() + if err != nil { + return err + } + + // if the bilibili tool is deployed under system/pre-defined namespace, ignore the namespace file + resources := []string{} + if o.deployOpts.Namespace == "default" || o.deployOpts.Namespace == "kube-system" || o.deployOpts.Namespace == "kube-public" { + resources = []string{"bilipro/bilibiliPro"} + } else { + resources = []string{"bilipro/ns", "bilipro/bilibiliPro"} + } + + // write the kustomization file + kustomizationYaml := types.Kustomization{ + TypeMeta: types.TypeMeta{ + Kind: "Kustomization", + APIVersion: "kustomize.config.k8s.io/v1beta1", + }, + Resources: resources, + PatchesJson6902: []types.Patch{}, + } + + var deployDepPatches []interface{} + // create patches for the supplied arguments + if o.deployOpts.Image != "" { + deployDepPatches = append(deployDepPatches, opStr{ + Op: "replace", + Path: "/spec/template/spec/containers/0/image", + Value: o.deployOpts.Image, + }) + } + // create patches for the env + content, err := ioutil.ReadFile(o.deployOpts.ConfigFilePath) + if err != nil { + klog.Error(err) + return err + } + + envs := []normalEnvVars{} + err = yaml.Unmarshal(content, &envs) + if err != nil { + klog.Error(err) + return err + } + + deployDepPatches = append(deployDepPatches, opInterface{ + Op: "add", + Path: "/spec/template/spec/containers/0/env", + Value: envs, + }) + + if o.deployOpts.ImagePullSecret != "" { + deployDepPatches = append(deployDepPatches, opInterface{ + Op: "add", + Path: "/spec/template/spec/imagePullSecrets", + Value: []corev1.LocalObjectReference{{Name: o.deployOpts.ImagePullSecret}}, + }) + } + + // attach the patches to the kustomization file + if len(deployDepPatches) > 0 { + kustomizationYaml.PatchesJson6902 = append(kustomizationYaml.PatchesJson6902, types.Patch{ + Patch: o.serializeJSONPatchOps(deployDepPatches), + Target: &types.Selector{ + ResId: resid.ResId{ + Gvk: resid.Gvk{ + Group: "apps", + Version: "v1", + Kind: "Deployment", + }, + Name: "bilibilipro", + }, + }, + }) + } + + // Not deploying in kube-* namespace + if o.deployOpts.Namespace == "kube-system" || o.deployOpts.Namespace == "kube-public" { + fmt.Println("better not deployed under system namesapce") + } + + if o.deployOpts.Namespace != "" { + kustomizationYaml.Namespace = o.deployOpts.Namespace + } + // Compile the kustomization to a file and create on the in memory filesystem + kustYaml, err := yaml.Marshal(kustomizationYaml) + if err != nil { + klog.Error(err) + return err + } + + kustFile, err := inDiskSys.Create("kustomization.yaml") + if err != nil { + klog.Error(err) + return err + } + + _, err = kustFile.Write(kustYaml) + if err != nil { + klog.Error(err) + return err + } + + // kustomize build the target location + k := krusty.MakeKustomizer( + krusty.MakeDefaultOptions(), + ) + + m, err := k.Run(inDiskSys, "./bilipro") + if err != nil { + klog.Error(err) + return err + } + + yml, err := m.AsYaml() + if err != nil { + klog.Error(err) + return err + } + + if o.output { + _, err = writer.Write(yml) + klog.Error(err) + return err + } + + // do kubectl apply + cmd := exec.Command("kubectl", "apply", "-f", "-") + + cmd.Stdin = strings.NewReader(string(yml)) + + stdoutReader, _ := cmd.StdoutPipe() + stdoutScanner := bufio.NewScanner(stdoutReader) + go func() { + for stdoutScanner.Scan() { + fmt.Println(stdoutScanner.Text()) + } + }() + stderrReader, _ := cmd.StderrPipe() + stderrScanner := bufio.NewScanner(stderrReader) + go func() { + for stderrScanner.Scan() { + fmt.Println(stderrScanner.Text()) + } + }() + err = cmd.Start() + if err != nil { + fmt.Printf("Error : %v \n", err) + os.Exit(1) + } + + // Stuck here until there are out and err + err = cmd.Wait() + if err != nil { + fmt.Printf("Error: %v \n", err) + os.Exit(1) + } + + return nil +} + +func (o *initCmd) serializeJSONPatchOps(jp []interface{}) string { + jpJSON, _ := json.Marshal(jp) + return string(jpJSON) +} diff --git a/krew/pkg/cmd/version.go b/krew/pkg/cmd/version.go new file mode 100644 index 000000000..f7b05283a --- /dev/null +++ b/krew/pkg/cmd/version.go @@ -0,0 +1,52 @@ +package cmd + +import ( + "fmt" + "io" + + "k8s.io/klog/v2" + + "github.com/spf13/cobra" +) + +// version provides the version of this plugin +var version = "NO.VERSION" + +const ( + versionDesc = ` +'version' command displays the kubectl plugin version.` + versionExample = ` kubectl bilipro version` +) + +type versionCmd struct { + out io.Writer + errOut io.Writer +} + +func newVersionCmd(out io.Writer, errOut io.Writer) *cobra.Command { + o := &versionCmd{out: out, errOut: errOut} + + cmd := &cobra.Command{ + Use: "version", + Short: "Display plugin version", + Long: versionDesc, + Example: versionExample, + Args: cobra.MaximumNArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + err := o.run() + if err != nil { + klog.Warning(err) + return err + } + return nil + }, + } + + return cmd +} + +// run initializes local config and installs BilibiliPro Plugin to Kubernetes cluster. +func (o *versionCmd) run() error { + fmt.Println(version) + return nil +} diff --git a/krew/pkg/options/deployment.go b/krew/pkg/options/deployment.go new file mode 100644 index 000000000..4382e85cb --- /dev/null +++ b/krew/pkg/options/deployment.go @@ -0,0 +1,10 @@ +package options + +// DeployOptions encapsulates the CLI options for a BiliBiliPro +type DeployOptions struct { + Name string + Image string + Namespace string + ImagePullSecret string + ConfigFilePath string +} diff --git a/krew/pkg/resources/asset.go b/krew/pkg/resources/asset.go new file mode 100644 index 000000000..20cea3136 --- /dev/null +++ b/krew/pkg/resources/asset.go @@ -0,0 +1,13 @@ +package resources + +import ( + "embed" +) + +//go:embed * +var fs embed.FS + +// GetStaticResources returns the fs with the embedded assets +func GetStaticResources() embed.FS { + return fs +} diff --git a/krew/pkg/resources/base/bilibiliPro/deployment.yaml b/krew/pkg/resources/base/bilibiliPro/deployment.yaml new file mode 100644 index 000000000..df8c8008e --- /dev/null +++ b/krew/pkg/resources/base/bilibiliPro/deployment.yaml @@ -0,0 +1,18 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: bilibilipro +spec: + selector: + matchLabels: + app: bilibilipro + template: + metadata: + labels: + app: bilibilipro + spec: + containers: + - name: bilibilipro + image: zai7lou/bilibili_tool_pro:0.2.1 + imagePullPolicy: IfNotPresent + \ No newline at end of file diff --git a/krew/pkg/resources/base/bilibiliPro/kustomization.yaml b/krew/pkg/resources/base/bilibiliPro/kustomization.yaml new file mode 100644 index 000000000..991a8834e --- /dev/null +++ b/krew/pkg/resources/base/bilibiliPro/kustomization.yaml @@ -0,0 +1,2 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization \ No newline at end of file diff --git a/krew/pkg/resources/base/kustomization.yaml b/krew/pkg/resources/base/kustomization.yaml new file mode 100644 index 000000000..991a8834e --- /dev/null +++ b/krew/pkg/resources/base/kustomization.yaml @@ -0,0 +1,2 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization \ No newline at end of file diff --git a/krew/pkg/resources/base/ns/kustomization.yaml b/krew/pkg/resources/base/ns/kustomization.yaml new file mode 100644 index 000000000..991a8834e --- /dev/null +++ b/krew/pkg/resources/base/ns/kustomization.yaml @@ -0,0 +1,2 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization \ No newline at end of file diff --git a/krew/pkg/resources/base/ns/namespace.yaml b/krew/pkg/resources/base/ns/namespace.yaml new file mode 100644 index 000000000..6057bc06d --- /dev/null +++ b/krew/pkg/resources/base/ns/namespace.yaml @@ -0,0 +1,5 @@ + +apiVersion: v1 +kind: Namespace +metadata: + name: bilipro \ No newline at end of file diff --git a/krew/pkg/resources/kustomization.yaml b/krew/pkg/resources/kustomization.yaml new file mode 100644 index 000000000..b929f13d0 --- /dev/null +++ b/krew/pkg/resources/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - base/ns/namespace.yaml + - base/bilibiliPro/deployment.yaml + \ No newline at end of file diff --git a/krew/pkg/utils/utils.go b/krew/pkg/utils/utils.go new file mode 100644 index 000000000..504d02de2 --- /dev/null +++ b/krew/pkg/utils/utils.go @@ -0,0 +1,82 @@ +package utils + +import ( + "io" + "io/fs" + "log" + "path" + "strings" + + "github.com/RayWangQvQ/BiliBiliToolPro/krew/pkg/resources" + "sigs.k8s.io/kustomize/kyaml/filesys" +) + +var assetFS = resources.GetStaticResources() + +// GetResourceFileSys file +func GetResourceFileSys() (filesys.FileSystem, error) { + inDiskSys := filesys.MakeFsOnDisk() + // copy from the resources into the target folder on the in memory FS + if err := copyDirtoDiskFS(".", "bilipro", inDiskSys); err != nil { + log.Println(err) + return nil, err + } + return inDiskSys, nil +} + +func copyFileToDiskFS(src, dst string, diskFS filesys.FileSystem) error { + // skip all .go files + if strings.HasSuffix(src, ".go") { + return nil + } + var err error + var srcFileDesc fs.File + var dstFileDesc filesys.File + + if srcFileDesc, err = assetFS.Open(src); err != nil { + return err + } + defer srcFileDesc.Close() + + if dstFileDesc, err = diskFS.Create(dst); err != nil { + return err + } + defer dstFileDesc.Close() + + // Note: I had to read the whole string, for some reason io.Copy was not copying the whole content + input, err := io.ReadAll(srcFileDesc) + if err != nil { + return err + } + + _, err = dstFileDesc.Write(input) + return err +} + +func copyDirtoDiskFS(src string, dst string, diskFS filesys.FileSystem) error { + var err error + var fds []fs.DirEntry + + if err = diskFS.MkdirAll(dst); err != nil { + return err + } + + if fds, err = assetFS.ReadDir(src); err != nil { + return err + } + for _, fd := range fds { + srcfp := path.Join(src, fd.Name()) + dstfp := path.Join(dst, fd.Name()) + + if fd.IsDir() { + if err = copyDirtoDiskFS(srcfp, dstfp, diskFS); err != nil { + return err + } + } else { + if err = copyFileToDiskFS(srcfp, dstfp, diskFS); err != nil { + return err + } + } + } + return nil +} From 61056452857a05223749fd3a7039fd4da81664f5 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 01:02:48 +0800 Subject: [PATCH 05/36] feat: add login task --- qinglong/DefaultTasks/bili_task_login.sh | 9 +++ .../{ => dev}/bili_dev_task_base.sh | 0 .../{ => dev}/bili_dev_task_daily.sh | 0 .../{ => dev}/bili_dev_task_liveLottery.sh | 0 .../DefaultTasks/dev/bili_dev_task_login.sh | 9 +++ .../{ => dev}/bili_dev_task_test.sh | 0 .../{ => dev}/bili_dev_task_tryFix.sh | 0 .../bili_dev_task_unfollowBatched.sh | 0 .../{ => dev}/bili_dev_task_vipBigPoint.sh | 0 .../ILoginTaskAppService.cs | 15 ++++ .../LoginTaskAppService.cs | 76 +++++++++++++++++++ .../Ray.BiliBiliTool.Application.csproj | 1 + 12 files changed, 110 insertions(+) create mode 100644 qinglong/DefaultTasks/bili_task_login.sh rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_base.sh (100%) rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_daily.sh (100%) rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_liveLottery.sh (100%) create mode 100644 qinglong/DefaultTasks/dev/bili_dev_task_login.sh rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_test.sh (100%) rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_tryFix.sh (100%) rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_unfollowBatched.sh (100%) rename qinglong/DefaultTasks/{ => dev}/bili_dev_task_vipBigPoint.sh (100%) create mode 100644 src/Ray.BiliBiliTool.Application.Contracts/ILoginTaskAppService.cs create mode 100644 src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs diff --git a/qinglong/DefaultTasks/bili_task_login.sh b/qinglong/DefaultTasks/bili_task_login.sh new file mode 100644 index 000000000..21746b3a2 --- /dev/null +++ b/qinglong/DefaultTasks/bili_task_login.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# new Env("bili测试ck") +# cron 0 8 * * * bili_task_login.sh +. bili_task_base.sh + +cd ./src/Ray.BiliBiliTool.Console +export ENVIRONMENT=Production && \ +export Ray_RunTasks=Login && \ +dotnet run diff --git a/qinglong/DefaultTasks/bili_dev_task_base.sh b/qinglong/DefaultTasks/dev/bili_dev_task_base.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_base.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_base.sh diff --git a/qinglong/DefaultTasks/bili_dev_task_daily.sh b/qinglong/DefaultTasks/dev/bili_dev_task_daily.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_daily.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_daily.sh diff --git a/qinglong/DefaultTasks/bili_dev_task_liveLottery.sh b/qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_liveLottery.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_login.sh b/qinglong/DefaultTasks/dev/bili_dev_task_login.sh new file mode 100644 index 000000000..9c33eeaab --- /dev/null +++ b/qinglong/DefaultTasks/dev/bili_dev_task_login.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# new Env("bili扫码登录[dev先行版]") +# cron 0 9 * * * bili_dev_task_login.sh +. bili_dev_task_base.sh + +cd ./src/Ray.BiliBiliTool.Console +export ENVIRONMENT=Production && \ +export Ray_RunTasks=Login && \ +dotnet run diff --git a/qinglong/DefaultTasks/bili_dev_task_test.sh b/qinglong/DefaultTasks/dev/bili_dev_task_test.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_test.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_test.sh diff --git a/qinglong/DefaultTasks/bili_dev_task_tryFix.sh b/qinglong/DefaultTasks/dev/bili_dev_task_tryFix.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_tryFix.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_tryFix.sh diff --git a/qinglong/DefaultTasks/bili_dev_task_unfollowBatched.sh b/qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_unfollowBatched.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh diff --git a/qinglong/DefaultTasks/bili_dev_task_vipBigPoint.sh b/qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh similarity index 100% rename from qinglong/DefaultTasks/bili_dev_task_vipBigPoint.sh rename to qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh diff --git a/src/Ray.BiliBiliTool.Application.Contracts/ILoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application.Contracts/ILoginTaskAppService.cs new file mode 100644 index 000000000..6cdc8fb3b --- /dev/null +++ b/src/Ray.BiliBiliTool.Application.Contracts/ILoginTaskAppService.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; + +namespace Ray.BiliBiliTool.Application.Contracts +{ + /// + /// 登录任务 + /// + [Description("Login")] + public interface ILoginTaskAppService : IAppService + { + } +} diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs new file mode 100644 index 000000000..59fa7d6dc --- /dev/null +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using QRCoder; +using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; +using Ray.BiliBiliTool.Application.Attributes; +using Ray.BiliBiliTool.Application.Contracts; +using Ray.BiliBiliTool.Config.Options; +using Ray.BiliBiliTool.DomainService.Interfaces; +using Ray.BiliBiliTool.Infrastructure.Enums; + +namespace Ray.BiliBiliTool.Application +{ + public class LoginTaskAppService : AppService, ILoginTaskAppService + { + private readonly ILogger _logger; + private readonly IConfiguration _configuration; + + public LoginTaskAppService( + IConfiguration configuration, + ILogger logger + ) + { + _configuration = configuration; + _logger = logger; + } + + [TaskInterceptor("扫码登录", TaskLevel.One)] + public override void DoTask() + { + var url = "https://passport.bilibili.com/h5-app/passport/login/scan?navhide=1&qrcode_key=929388ca6339f01b725c415f0ba0ef5b&from="; + GenerateQrCode(url); + } + + private void GenerateQrCode(string str) + { + var qrGenerator = new QRCodeGenerator(); + QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.L); + + var qrCode = new AsciiQRCode(qrCodeData); + var qrCodeStr = qrCode.GetGraphic(1); + _logger.LogInformation(qrCodeStr); + + Print(qrCodeData); + } + + private void Print(QRCodeData qrCodeData) + { + Console.BackgroundColor = ConsoleColor.White; + for (int i = 0; i < qrCodeData.ModuleMatrix.Count + 2; i++) Console.Write(" ");//中文全角的空格符 + Console.WriteLine(); + for (int j = 0; j < qrCodeData.ModuleMatrix.Count; j++) + { + for (int i = 0; i < qrCodeData.ModuleMatrix.Count; i++) + { + //char charToPoint = qrCode.Matrix[i, j] ? '█' : ' '; + Console.Write(i == 0 ? " " : "");//中文全角的空格符 + Console.BackgroundColor = qrCodeData.ModuleMatrix[i][j] ? ConsoleColor.Black : ConsoleColor.White; + Console.Write(' ');//中文全角的空格符 + Console.BackgroundColor = ConsoleColor.White; + Console.Write(i == qrCodeData.ModuleMatrix.Count - 1 ? " " : "");//中文全角的空格符 + } + Console.WriteLine(); + } + for (int i = 0; i < qrCodeData.ModuleMatrix.Count + 2; i++) Console.Write(" ");//中文全角的空格符 + + Console.WriteLine(); + } + } +} diff --git a/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj b/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj index 9de70e91c..714d064cb 100644 --- a/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj +++ b/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj @@ -8,6 +8,7 @@ + From b4e876a6d39107550c7ddc3df0d62301122f78aa Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 01:09:43 +0800 Subject: [PATCH 06/36] feat: update --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 59fa7d6dc..4d51f671a 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -43,10 +43,12 @@ private void GenerateQrCode(string str) var qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.L); + _logger.LogInformation("Graphic:"); var qrCode = new AsciiQRCode(qrCodeData); var qrCodeStr = qrCode.GetGraphic(1); _logger.LogInformation(qrCodeStr); + Console.WriteLine("Console:"); Print(qrCodeData); } From 14f27666621d21b87fb1f02ce5c0240819982cf3 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 01:17:08 +0800 Subject: [PATCH 07/36] feat: update --- .../BiliBiliToolHostedService.cs | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs index 048e3b2f5..81168c318 100644 --- a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs +++ b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs @@ -57,26 +57,34 @@ public Task StartAsync(CancellationToken cancellationToken) var tasks = _configuration["RunTasks"] .Split("&", options: StringSplitOptions.RemoveEmptyEntries); - for (int i = 0; i < _cookieStrFactory.Count; i++) + if (tasks.Contains("Login")) { - _cookieStrFactory.CurrentNum = i + 1; - _logger.LogInformation("######### 账号 {num} #########{newLine}", _cookieStrFactory.CurrentNum, Environment.NewLine); + DoTasks(tasks); + } - try + else + { + for (int i = 0; i < _cookieStrFactory.Count; i++) { - DoTasks(tasks); - if (isNotifySingle) - { - LogAppInfo(); + _cookieStrFactory.CurrentNum = i + 1; + _logger.LogInformation("######### 账号 {num} #########{newLine}", _cookieStrFactory.CurrentNum, Environment.NewLine); - var accountName = _cookieStrFactory.Count > 1 ? $"账号【{_cookieStrFactory.CurrentNum}】" : ""; - _logger.LogInformation("·开始推送·{task}·{user}", $"{_configuration["RunTasks"]}任务", accountName); + try + { + DoTasks(tasks); + if (isNotifySingle) + { + LogAppInfo(); + + var accountName = _cookieStrFactory.Count > 1 ? $"账号【{_cookieStrFactory.CurrentNum}】" : ""; + _logger.LogInformation("·开始推送·{task}·{user}", $"{_configuration["RunTasks"]}任务", accountName); + } + } + catch (Exception e) + { + //ignore + _logger.LogWarning("异常:{msg}", e); } - } - catch (Exception e) - { - //ignore - _logger.LogWarning("异常:{msg}", e); } } } From f8afb27b978dc4f7cb4ddeadbf85336faa1f28ad Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 01:20:28 +0800 Subject: [PATCH 08/36] feat: update --- src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs index 81168c318..9ba463522 100644 --- a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs +++ b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs @@ -121,7 +121,7 @@ private bool PreCheck() //Cookie _logger.LogInformation("【账号个数】{count}个{newLine}", _cookieStrFactory.Count, Environment.NewLine); - if (_cookieStrFactory.Count == 0) return false; + if (_cookieStrFactory.Count == 0 && !tasks.Contains("Login")) return false; //是否跳过 if (_securityOptions.IsSkipDailyTask) From 1569b33bcd374257d9fc909c305bba5b7320f47f Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:21:19 +0800 Subject: [PATCH 09/36] feat: add qrcode login --- .../BiliBiliAgent/Dtos/Passport/QrCodeDto.cs | 15 +++++ .../BiliBiliAgent/Dtos/Passport/TokenDto.cs | 18 ++++++ .../BiliBiliAgent/Interfaces/IPassportApi.cs | 17 ++++++ .../Extensions/ServiceCollectionExtension.cs | 2 + .../LoginTaskAppService.cs | 60 ++++++++++++++++++- 5 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/QrCodeDto.cs create mode 100644 src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/TokenDto.cs create mode 100644 src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IPassportApi.cs diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/QrCodeDto.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/QrCodeDto.cs new file mode 100644 index 000000000..b89250338 --- /dev/null +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/QrCodeDto.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.Passport +{ + public class QrCodeDto + { + public string Qrcode_key { get; set; } + + public string Url { get; set; } + } +} diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/TokenDto.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/TokenDto.cs new file mode 100644 index 000000000..e8153df40 --- /dev/null +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Dtos/Passport/TokenDto.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.Passport +{ + public class TokenDto + { + public string Url { get; set; } + public string Refresh_token { get; set; } + public long Timestamp { get; set; } + public int Code { get; set; } + public string Message { get; set; } + } + +} diff --git a/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IPassportApi.cs b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IPassportApi.cs new file mode 100644 index 000000000..8ce564a70 --- /dev/null +++ b/src/Ray.BiliBiliTool.Agent/BiliBiliAgent/Interfaces/IPassportApi.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; +using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; +using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos.Passport; +using WebApiClientCore.Attributes; + +namespace Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces +{ + [Header("Host", "passport.bilibili.com")] + public interface IPassportApi : IBiliBiliApi + { + [HttpGet("/x/passport-login/web/qrcode/generate")] + Task> GenerateQrCode(); + + [HttpGet("/x/passport-login/web/qrcode/poll?qrcode_key={qrcode_key}&source=main_mini")] + Task> CheckQrCodeHasScaned(string qrcode_key); + } +} diff --git a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs index e7eaf0fd6..70a63a920 100644 --- a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs +++ b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs @@ -69,6 +69,8 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection se services.AddBiliBiliClientApi("https://api.bilibili.com"); + services.AddBiliBiliClientApi("http://passport.bilibili.com", false); + return services; } diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 4d51f671a..402247d2c 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Encodings.Web; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; @@ -9,6 +10,7 @@ using Microsoft.Extensions.Options; using QRCoder; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; +using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Application.Attributes; using Ray.BiliBiliTool.Application.Contracts; using Ray.BiliBiliTool.Config.Options; @@ -20,22 +22,70 @@ namespace Ray.BiliBiliTool.Application public class LoginTaskAppService : AppService, ILoginTaskAppService { private readonly ILogger _logger; + private readonly IPassportApi _passportApi; private readonly IConfiguration _configuration; public LoginTaskAppService( IConfiguration configuration, - ILogger logger + ILogger logger, + IPassportApi passportApi ) { _configuration = configuration; _logger = logger; + _passportApi = passportApi; } [TaskInterceptor("扫码登录", TaskLevel.One)] public override void DoTask() { - var url = "https://passport.bilibili.com/h5-app/passport/login/scan?navhide=1&qrcode_key=929388ca6339f01b725c415f0ba0ef5b&from="; + var re = _passportApi.GenerateQrCode().Result; + if (re.Code != 0) + { + _logger.LogWarning("获取二维码失败:{msg}", re.ToJson()); + return; + } + + var url = re.Data.Url; GenerateQrCode(url); + + var online = GetOnlinePic(url); + _logger.LogInformation(Environment.NewLine + Environment.NewLine); + _logger.LogInformation("如果上方二维码显示异常,或扫描失败,请使用浏览器访问如下链接,查看高清在线二维码:"); + _logger.LogInformation(online + Environment.NewLine + Environment.NewLine); + + + for (int i = 0; i < 10; i++) + { + _logger.LogInformation("等待扫描..."); + Task.Delay(5 * 1000).Wait(); + + var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; + if (check.Code != 0) + { + _logger.LogWarning("调用检查接口异常:{msg}", check.ToJson()); + break; + } + + if (check.Data.Code == 86101)//未扫描 + { + _logger.LogInformation("[{num}]:{msg}", i + 1, check.Data.Message + Environment.NewLine); + continue; + } + + if (check.Data.Code == 86038)//已失效 + { + _logger.LogInformation(check.Data.Message); + break; + } + + if (check.Data.Code == 0) + { + _logger.LogInformation("扫描成功!"); + _logger.LogInformation(check.Data.Url); + break; + } + } } private void GenerateQrCode(string str) @@ -74,5 +124,11 @@ private void Print(QRCodeData qrCodeData) Console.WriteLine(); } + + private string GetOnlinePic(string str) + { + var encode = System.Web.HttpUtility.UrlEncode(str); ; + return $"https://tool.lu/qrcode/basic.html?text={encode}"; + } } } From 4bc61645d8be87138e6936a80ad99d7d8060ffa5 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:27:52 +0800 Subject: [PATCH 10/36] feat: test --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 402247d2c..69f8da747 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -58,7 +58,7 @@ public override void DoTask() for (int i = 0; i < 10; i++) { _logger.LogInformation("等待扫描..."); - Task.Delay(5 * 1000).Wait(); + Thread.Sleep(5 * 1000); var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; if (check.Code != 0) From 44163c6ebb2ce8c86736fb0fafd253d9b8e32118 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:31:40 +0800 Subject: [PATCH 11/36] feat: add py --- .../dev/bili_dev_task_get_cookie.py | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 qinglong/DefaultTasks/dev/bili_dev_task_get_cookie.py diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_get_cookie.py b/qinglong/DefaultTasks/dev/bili_dev_task_get_cookie.py new file mode 100644 index 000000000..7cf0e8304 --- /dev/null +++ b/qinglong/DefaultTasks/dev/bili_dev_task_get_cookie.py @@ -0,0 +1,87 @@ +''' +1 9 11 11 1 bili_dev_task_get_cookie.py +手动运行,查看日志,并使用手机B站app扫描日志中二维码,注意,只能修改第一个cookie +如果产生错误,重新运行并用手机扫描二维码 +有可能识别不出来二维码,我测试了几次都能识别 + +默认环境变量存放位置为/ql/data/config/env.sh +可以自己通过docker命令进入容器查找这个文件位置。docker exec -it qinglong /bin/bash,进入青龙容器,然后查找一下这个文件位置 +filename = '../config/env.sh' +''' + +import qrcode +import requests +import json +import time +import os + +filename = '/ql/data/config/env.sh' + +url_get = 'http://passport.bilibili.com/x/passport-login/web/qrcode/generate' +headers = { + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42" + } +session = requests.session() +response = session.get(url_get, headers=headers) +json_data = json.loads(response.text) +qr_data = json_data['data']['url'] +qr_code = json_data['data']['qrcode_key'] +# print(qr_data) +# img = qrcode.make(qr_data) +# img.save('../upload/B.png') +# 生成二维码,并且打印,只有invert是True手机才能识别,默认的打印识别不出来 +qr = qrcode.QRCode() +qr.add_data(qr_data) +qr.print_ascii(invert=True) + +url_get_2 = f'http://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key={qr_code}&source=main_mini' +refresh_token = '' +# 尝试次数 +try_time = 8 +while True: + try_time -= 1 + if not try_time: + print('一直没有扫码,退出登录!') + exit(1) + response = session.get(url_get_2, headers=headers) + json_data = json.loads(response.text) + response_data_2 = json_data['data'] + if response_data_2['code'] == 0: + try_time += 5 + refresh_token = response_data_2['refresh_token'] + print(response_data_2, end='') + if response_data_2['message'] == '二维码已失效': + print(response_data_2['message']) + print('-' * 20) + break + print(response_data_2['message']) + print('-' * 20) + time.sleep(5) +session.get('https://api.bilibili.com/x/web-interface/nav') +cookies = requests.utils.dict_from_cookiejar(session.cookies) +lst = [] +for item in cookies.items(): + lst.append(f"{item[0]}={item[1]}") + +cookie_str = ';'.join(lst) +print('=' * 20) +print(cookie_str) +print('=' * 20) +# 修改环境变量 +with open(filename, 'r') as f: + lines = f.readlines() + +flag = True +with open(filename, 'w') as f: + for l in lines: + if 'Ray_BiliBiliCookies__1' in l: + flag = False + l = f'export Ray_BiliBiliCookies__1="{cookie_str}"\n' + print(l) + f.write(l) + if flag: + flag = False + l = f'export Ray_BiliBiliCookies__1="{cookie_str}"\n' + print(l) + f.write(l) +os.popen(f'source {filename}') From 6fa153047b400ef983333a9ca3b80159626340e6 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:38:06 +0800 Subject: [PATCH 12/36] feat: test --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 69f8da747..865034fa5 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -58,7 +58,14 @@ public override void DoTask() for (int i = 0; i < 10; i++) { _logger.LogInformation("等待扫描..."); - Thread.Sleep(5 * 1000); + + //Task.Delay(5 * 1000).Wait(); + //Thread.Sleep(5 * 1000); + int j = 0; + while (j<(10^5)) + { + j++; + } var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; if (check.Code != 0) From 734e5863dbc098a9da669cad276f5f2ee2b2a818 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:41:40 +0800 Subject: [PATCH 13/36] feat: test --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 865034fa5..cf90948a7 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -65,6 +65,7 @@ public override void DoTask() while (j<(10^5)) { j++; + Console.Write(j); } var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; From d95607115cc8fd7d7ba695db02ce607ab85e8f3e Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:53:02 +0800 Subject: [PATCH 14/36] feat: test --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index cf90948a7..6e31555cb 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -62,10 +62,9 @@ public override void DoTask() //Task.Delay(5 * 1000).Wait(); //Thread.Sleep(5 * 1000); int j = 0; - while (j<(10^5)) + while (j<100000*10000) { j++; - Console.Write(j); } var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; From 55323f7f7a9710e47952dac65ba31c07baf7019e Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 02:55:44 +0800 Subject: [PATCH 15/36] feat: test --- .../LoginTaskAppService.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 6e31555cb..f3388a4a4 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -59,13 +59,13 @@ public override void DoTask() { _logger.LogInformation("等待扫描..."); - //Task.Delay(5 * 1000).Wait(); + Task.Delay(5 * 1000).Wait(); //Thread.Sleep(5 * 1000); - int j = 0; - while (j<100000*10000) - { - j++; - } + //int j = 0; + //while (j<100000*10000) + //{ + // j++; + //} var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; if (check.Code != 0) @@ -106,7 +106,7 @@ private void GenerateQrCode(string str) _logger.LogInformation(qrCodeStr); Console.WriteLine("Console:"); - Print(qrCodeData); + //Print(qrCodeData); } private void Print(QRCodeData qrCodeData) From 65ea88156c665249acad3250828a4019ebb5eaba Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 03:02:17 +0800 Subject: [PATCH 16/36] feat: update --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index f3388a4a4..626753049 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -60,12 +60,6 @@ public override void DoTask() _logger.LogInformation("等待扫描..."); Task.Delay(5 * 1000).Wait(); - //Thread.Sleep(5 * 1000); - //int j = 0; - //while (j<100000*10000) - //{ - // j++; - //} var check = _passportApi.CheckQrCodeHasScaned(re.Data.Qrcode_key).Result; if (check.Code != 0) @@ -106,7 +100,7 @@ private void GenerateQrCode(string str) _logger.LogInformation(qrCodeStr); Console.WriteLine("Console:"); - //Print(qrCodeData); + Print(qrCodeData); } private void Print(QRCodeData qrCodeData) From 1e5616814c8bf1e3e83833774e8c1a1a58cddfe4 Mon Sep 17 00:00:00 2001 From: Ray Wang Date: Fri, 9 Dec 2022 14:02:23 +0800 Subject: [PATCH 17/36] feat:test --- .../LoginTaskAppService.cs | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 626753049..f75e03e04 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -1,21 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Encodings.Web; -using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; using QRCoder; -using Ray.BiliBiliTool.Agent.BiliBiliAgent.Dtos; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Application.Attributes; using Ray.BiliBiliTool.Application.Contracts; -using Ray.BiliBiliTool.Config.Options; -using Ray.BiliBiliTool.DomainService.Interfaces; -using Ray.BiliBiliTool.Infrastructure.Enums; namespace Ray.BiliBiliTool.Application { @@ -94,13 +84,13 @@ private void GenerateQrCode(string str) var qrGenerator = new QRCodeGenerator(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.L); - _logger.LogInformation("Graphic:"); + _logger.LogInformation("AsciiQRCode:"); var qrCode = new AsciiQRCode(qrCodeData); - var qrCodeStr = qrCode.GetGraphic(1); - _logger.LogInformation(qrCodeStr); + var qrCodeStr = qrCode.GetGraphic(1, drawQuietZones: false); + _logger.LogInformation(Environment.NewLine + qrCodeStr); - Console.WriteLine("Console:"); - Print(qrCodeData); + //Console.WriteLine("Console:"); + //Print(qrCodeData); } private void Print(QRCodeData qrCodeData) From 45b2543900aaea0e902c8fddd36e9107ac99a03b Mon Sep 17 00:00:00 2001 From: Ray Wang Date: Fri, 9 Dec 2022 17:45:43 +0800 Subject: [PATCH 18/36] feat: test --- .../LoginTaskAppService.cs | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index f75e03e04..4b7dc822d 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -1,4 +1,7 @@ -using System; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; @@ -86,11 +89,12 @@ private void GenerateQrCode(string str) _logger.LogInformation("AsciiQRCode:"); var qrCode = new AsciiQRCode(qrCodeData); - var qrCodeStr = qrCode.GetGraphic(1, drawQuietZones: false); - _logger.LogInformation(Environment.NewLine + qrCodeStr); + //var qrCodeStr = qrCode.GetGraphic(1, drawQuietZones: false); + //_logger.LogInformation(Environment.NewLine + qrCodeStr); - //Console.WriteLine("Console:"); + Console.WriteLine("Console:"); //Print(qrCodeData); + PrintSmall(qrCodeData); } private void Print(QRCodeData qrCodeData) @@ -116,6 +120,44 @@ private void Print(QRCodeData qrCodeData) Console.WriteLine(); } + private void PrintSmall(QRCodeData qrCodeData) + { + //黑黑(" ") + //白白("█") + //黑白("▄") + //白黑("▀") + var dic = new Dictionary() + { + {"11", " "}, + {"00", "█"}, + {"10", "▄"}, + //{"01", "▀"}, + {"01", "▀"}, + }; + + var count = qrCodeData.ModuleMatrix.Count; + + var list = new List>(); + for (int rowNum = 0; rowNum < count; rowNum++) + { + var rowStr = new List(); + for (int colNum = 0; colNum < count; colNum++) + { + var num = qrCodeData.ModuleMatrix[colNum][rowNum] ? "1" : "0"; + var numDown = "1"; + if (rowNum + 1 < count) + numDown = qrCodeData.ModuleMatrix[colNum][rowNum + 1] ? "1" : "0"; + + rowStr.Add(dic[num + numDown]); + } + + _logger.LogInformation(string.Join("", rowStr)); + + rowNum++; + list.Add(rowStr); + } + } + private string GetOnlinePic(string str) { var encode = System.Web.HttpUtility.UrlEncode(str); ; From b186cc8f03a9100b577fcbf866e824ccb13716b3 Mon Sep 17 00:00:00 2001 From: Ray Wang Date: Fri, 9 Dec 2022 18:04:25 +0800 Subject: [PATCH 19/36] feat: test --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 4b7dc822d..e5d8f2571 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -131,7 +131,6 @@ private void PrintSmall(QRCodeData qrCodeData) {"11", " "}, {"00", "█"}, {"10", "▄"}, - //{"01", "▀"}, {"01", "▀"}, }; @@ -156,6 +155,13 @@ private void PrintSmall(QRCodeData qrCodeData) rowNum++; list.Add(rowStr); } + + _logger.LogInformation("Console:"); + foreach (var row in list) + { + Console.WriteLine(string.Join("", row)); + } + Console.WriteLine(); } private string GetOnlinePic(string str) From c48f1fad29bf86d969c3b0bf0f542b6a530498c4 Mon Sep 17 00:00:00 2001 From: Ray Wang Date: Fri, 9 Dec 2022 18:53:39 +0800 Subject: [PATCH 20/36] feat: finish generate qr code --- .../LoginTaskAppService.cs | 46 ++++++++----------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index e5d8f2571..1ef445723 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -47,8 +47,9 @@ public override void DoTask() _logger.LogInformation("如果上方二维码显示异常,或扫描失败,请使用浏览器访问如下链接,查看高清在线二维码:"); _logger.LogInformation(online + Environment.NewLine + Environment.NewLine); - - for (int i = 0; i < 10; i++) + var waitTimes = 10; + _logger.LogInformation("我数到{num},动作快点", waitTimes); + for (int i = 0; i < waitTimes; i++) { _logger.LogInformation("等待扫描..."); @@ -61,12 +62,6 @@ public override void DoTask() break; } - if (check.Data.Code == 86101)//未扫描 - { - _logger.LogInformation("[{num}]:{msg}", i + 1, check.Data.Message + Environment.NewLine); - continue; - } - if (check.Data.Code == 86038)//已失效 { _logger.LogInformation(check.Data.Message); @@ -79,6 +74,8 @@ public override void DoTask() _logger.LogInformation(check.Data.Url); break; } + + _logger.LogInformation("[{num}]:{msg}", i + 1, check.Data.Message + Environment.NewLine); } } @@ -92,7 +89,7 @@ private void GenerateQrCode(string str) //var qrCodeStr = qrCode.GetGraphic(1, drawQuietZones: false); //_logger.LogInformation(Environment.NewLine + qrCodeStr); - Console.WriteLine("Console:"); + //Console.WriteLine("Console:"); //Print(qrCodeData); PrintSmall(qrCodeData); } @@ -126,42 +123,35 @@ private void PrintSmall(QRCodeData qrCodeData) //白白("█") //黑白("▄") //白黑("▀") - var dic = new Dictionary() + var dic = new Dictionary() { - {"11", " "}, - {"00", "█"}, - {"10", "▄"}, - {"01", "▀"}, + {"11", ' '}, + {"00", '█'}, + {"10", '▄'}, + {"01", '▀'}, + //{"01", '^'},//▼▔ }; var count = qrCodeData.ModuleMatrix.Count; - var list = new List>(); + var list = new List(); for (int rowNum = 0; rowNum < count; rowNum++) { - var rowStr = new List(); + var rowStr = ""; for (int colNum = 0; colNum < count; colNum++) { var num = qrCodeData.ModuleMatrix[colNum][rowNum] ? "1" : "0"; - var numDown = "1"; + var numDown = "0"; if (rowNum + 1 < count) numDown = qrCodeData.ModuleMatrix[colNum][rowNum + 1] ? "1" : "0"; - rowStr.Add(dic[num + numDown]); + rowStr += dic[num + numDown]; } - - _logger.LogInformation(string.Join("", rowStr)); - - rowNum++; list.Add(rowStr); + rowNum++; } - _logger.LogInformation("Console:"); - foreach (var row in list) - { - Console.WriteLine(string.Join("", row)); - } - Console.WriteLine(); + _logger.LogInformation(Environment.NewLine + string.Join(Environment.NewLine, list)); } private string GetOnlinePic(string str) From 4cd6266fa8484d505e94c71bc1c92013bb01d10d Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Dec 2022 20:04:07 +0800 Subject: [PATCH 21/36] feat: update --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 1ef445723..f0eaff9b6 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -51,7 +51,7 @@ public override void DoTask() _logger.LogInformation("我数到{num},动作快点", waitTimes); for (int i = 0; i < waitTimes; i++) { - _logger.LogInformation("等待扫描..."); + _logger.LogInformation("[{num}]等待扫描...", i + 1); Task.Delay(5 * 1000).Wait(); @@ -75,7 +75,7 @@ public override void DoTask() break; } - _logger.LogInformation("[{num}]:{msg}", i + 1, check.Data.Message + Environment.NewLine); + _logger.LogInformation("{msg}", check.Data.Message + Environment.NewLine); } } @@ -128,7 +128,7 @@ private void PrintSmall(QRCodeData qrCodeData) {"11", ' '}, {"00", '█'}, {"10", '▄'}, - {"01", '▀'}, + {"01", '▀'},//todo:win平台的cmd会显示?,是已知问题,待想办法解决 //{"01", '^'},//▼▔ }; From e807070e66b6e78c43f5dd4956435595bdec0ade Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 02:12:28 +0800 Subject: [PATCH 22/36] feat: update json config after login --- .../LoginTaskAppService.cs | 122 +++++++++++++++++- .../Ray.BiliBiliTool.Application.csproj | 1 + src/Ray.BiliBiliTool.Console/appsettings.json | 2 +- .../Cookie/CookieInfo.cs | 13 ++ 4 files changed, 134 insertions(+), 4 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index f0eaff9b6..9c050b87b 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -1,14 +1,22 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Net; using System.Text; +using System.Text.Json; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Polly; using QRCoder; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Application.Attributes; using Ray.BiliBiliTool.Application.Contracts; +using Ray.BiliBiliTool.Infrastructure; namespace Ray.BiliBiliTool.Application { @@ -16,27 +24,46 @@ public class LoginTaskAppService : AppService, ILoginTaskAppService { private readonly ILogger _logger; private readonly IPassportApi _passportApi; + private readonly IHostingEnvironment _hostingEnvironment; private readonly IConfiguration _configuration; public LoginTaskAppService( IConfiguration configuration, ILogger logger, - IPassportApi passportApi + IPassportApi passportApi, + IHostingEnvironment hostingEnvironment ) { _configuration = configuration; _logger = logger; _passportApi = passportApi; + _hostingEnvironment = hostingEnvironment; } [TaskInterceptor("扫码登录", TaskLevel.One)] public override void DoTask() { + //扫码登录 + var suc = QrCodeLogin(out CookieInfo cookieInfo); + if (!suc) return; + + //更新cookie到json + AddOrUpdateCkToJson(cookieInfo); + + //更新cookie到青龙env + } + + [TaskInterceptor("二维码登录", TaskLevel.Two)] + protected bool QrCodeLogin(out CookieInfo cookieInfo) + { + var result = false; + cookieInfo = new CookieInfo(""); + var re = _passportApi.GenerateQrCode().Result; if (re.Code != 0) { _logger.LogWarning("获取二维码失败:{msg}", re.ToJson()); - return; + return result; } var url = re.Data.Url; @@ -71,12 +98,84 @@ public override void DoTask() if (check.Data.Code == 0) { _logger.LogInformation("扫描成功!"); - _logger.LogInformation(check.Data.Url); + cookieInfo = GetCookieStr(check.Data.Url); + result = true; break; } _logger.LogInformation("{msg}", check.Data.Message + Environment.NewLine); } + + return result; + } + + + [TaskInterceptor("添加到json", TaskLevel.Two)] + protected void AddOrUpdateCkToJson(CookieInfo ckInfo) + { + //读取json + var path = "appsettings.json"; + var fileProvider = new PhysicalFileProvider(_hostingEnvironment.ContentRootPath); + IFileInfo fileInfo = fileProvider.GetFileInfo(path); + + var json = ""; + using (var stream = new FileStream( + fileInfo.PhysicalPath, + FileMode.Open)) + { + using var reader = new StreamReader(stream); + json = reader.ReadToEnd(); + } + + + if (!json.Contains("BiliBiliCookies")) + { + _logger.LogInformation("不存在cookie,初始化并新增"); + + json = json.Remove(0); + var ck = @"{ + ""BiliBiliCookies"": [ + ""{0}"" + ], +"; + json = string.Format(ck, ckInfo.CookieStr) + json; + + using (var sw = new StreamWriter(fileInfo.PhysicalPath)) + { + sw.Write(json); + } + return; + } + + ckInfo.CookieItemDictionary.TryGetValue("DedeUserID", out string userId); + + if (!json.Contains($"DedeUserID={userId}")) + { + _logger.LogInformation("不存在cookie,新增"); + + var oldStr = "\"BiliBiliCookies\": ["; + json = json.Replace(oldStr, $"{oldStr}{Environment.NewLine}\"{ckInfo.CookieStr}\",{Environment.NewLine}"); + using (var sw = new StreamWriter(fileInfo.PhysicalPath)) + { + sw.Write(json); + } + return; + } + + //todo:update + _logger.LogInformation("已存在该用户,更新cookie"); + var listStr= SubstringSingle(json, "\"BiliBiliCookies\": \\[", "\\]"); + var list = listStr.Split(Environment.NewLine).ToList(); + var index= list.FindIndex(x => x.Contains(userId)); + list[index] = $"\"{ckInfo.CookieStr}\","; + var newList = string.Join(Environment.NewLine,list); + + json = json.Replace(listStr, newList); + using (var sw = new StreamWriter(fileInfo.PhysicalPath)) + { + sw.Write(json); + } + return; } private void GenerateQrCode(string str) @@ -159,5 +258,22 @@ private string GetOnlinePic(string str) var encode = System.Web.HttpUtility.UrlEncode(str); ; return $"https://tool.lu/qrcode/basic.html?text={encode}"; } + + private CookieInfo GetCookieStr(string url) + { + var ckStrList= url.Split('?')[1] + .Split("&gourl=")[0] + .Split('&') + .ToList(); + return new CookieInfo(ckStrList); + } + + public static string SubstringSingle(string source, string startStr, string endStr,string middleRegex="") + { + if (middleRegex.IsNullOrEmpty()) middleRegex = "[.\\s\\S]*?"; + var regexStr = $"(?<=({startStr})){middleRegex}(?=({endStr}))"; + Regex rg = new Regex(regexStr, RegexOptions.Multiline | RegexOptions.Singleline); + return rg.Match(source).Value; + } } } diff --git a/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj b/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj index 714d064cb..65607513b 100644 --- a/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj +++ b/src/Ray.BiliBiliTool.Application/Ray.BiliBiliTool.Application.csproj @@ -6,6 +6,7 @@ + diff --git a/src/Ray.BiliBiliTool.Console/appsettings.json b/src/Ray.BiliBiliTool.Console/appsettings.json index a9103aac4..6ad77d850 100644 --- a/src/Ray.BiliBiliTool.Console/appsettings.json +++ b/src/Ray.BiliBiliTool.Console/appsettings.json @@ -1,7 +1,7 @@ { //Cookie集合,取自浏览器,必填 "BiliBiliCookies": [ //Cookie字符串集合,登录bilibili后F12获取,形如"_uuid=abcd; buvid3=1234; sid=abc123" - "" + "", ], "RunTasks": "Daily", //要运行的任务名称[Daily,LiveLottery,UnfollowBatched,VipBigPoint,Test],多个使用&分隔,如“Daily&LiveLottery”,建议使用命令行参数指定 diff --git a/src/Ray.BiliBiliTool.Infrastructure/Cookie/CookieInfo.cs b/src/Ray.BiliBiliTool.Infrastructure/Cookie/CookieInfo.cs index 0021ad57c..ff9e25ac5 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Cookie/CookieInfo.cs +++ b/src/Ray.BiliBiliTool.Infrastructure/Cookie/CookieInfo.cs @@ -26,6 +26,19 @@ public CookieInfo(string cookieStr) } } + public CookieInfo(List cookieItemList) + { + CookieItemList=cookieItemList ?? new List(); + foreach (var item in CookieItemList) + { + var list = item.Split('='); + if (list.Length >= 2) + CookieItemDictionary.TryAdd(list[0].Trim(), list[1].Trim()); + } + + CookieStr = string.Join(';', CookieItemList); + } + public string CookieStr { get; set; } public List CookieItemList { get; set; } From e3e4bcd703048e6e56a840888f26c85bfb261121 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 13:31:23 +0800 Subject: [PATCH 23/36] feat: rebuild save json logic --- .../LoginTaskAppService.cs | 86 ++++++++----------- 1 file changed, 38 insertions(+), 48 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 9c050b87b..b43089117 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.FileSystemGlobbing.Internal; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Polly; @@ -24,14 +25,14 @@ public class LoginTaskAppService : AppService, ILoginTaskAppService { private readonly ILogger _logger; private readonly IPassportApi _passportApi; - private readonly IHostingEnvironment _hostingEnvironment; + private readonly IHostEnvironment _hostingEnvironment; private readonly IConfiguration _configuration; public LoginTaskAppService( IConfiguration configuration, ILogger logger, IPassportApi passportApi, - IHostingEnvironment hostingEnvironment + IHostEnvironment hostingEnvironment ) { _configuration = configuration; @@ -118,64 +119,51 @@ protected void AddOrUpdateCkToJson(CookieInfo ckInfo) var fileProvider = new PhysicalFileProvider(_hostingEnvironment.ContentRootPath); IFileInfo fileInfo = fileProvider.GetFileInfo(path); - var json = ""; - using (var stream = new FileStream( - fileInfo.PhysicalPath, - FileMode.Open)) + string json; + using (var stream = new FileStream(fileInfo.PhysicalPath, FileMode.Open)) { using var reader = new StreamReader(stream); json = reader.ReadToEnd(); } - + var lines = json.Split(Environment.NewLine).ToList(); - if (!json.Contains("BiliBiliCookies")) + var indexOfCkConfigKey = lines.FindIndex(x => x.TrimStart().StartsWith("\"BiliBiliCookies\"")); + if (indexOfCkConfigKey == -1) { - _logger.LogInformation("不存在cookie,初始化并新增"); + _logger.LogInformation("未配置过cookie,初始化并新增"); - json = json.Remove(0); - var ck = @"{ - ""BiliBiliCookies"": [ - ""{0}"" - ], -"; - json = string.Format(ck, ckInfo.CookieStr) + json; - - using (var sw = new StreamWriter(fileInfo.PhysicalPath)) + var indexOfInsert = lines.FindIndex(x => x.TrimStart().StartsWith("{")); + lines.InsertRange(indexOfInsert + 1, new List() { - sw.Write(json); - } + " \"BiliBiliCookies\":[", + $@" ""{ckInfo.CookieStr}"",", + " ]," + }); + + SaveJson(lines, fileInfo); + _logger.LogInformation("新增成功!"); return; } ckInfo.CookieItemDictionary.TryGetValue("DedeUserID", out string userId); + var indexOfCkConfigEnd = lines.FindIndex(indexOfCkConfigKey, x => x.TrimStart().StartsWith("]")); + var indexOfTargetCk = lines.FindIndex(indexOfCkConfigKey, + indexOfCkConfigEnd - indexOfCkConfigKey, + x => x.Contains(userId) && !x.TrimStart().StartsWith("//")); - if (!json.Contains($"DedeUserID={userId}")) + if (indexOfTargetCk == -1) { - _logger.LogInformation("不存在cookie,新增"); - - var oldStr = "\"BiliBiliCookies\": ["; - json = json.Replace(oldStr, $"{oldStr}{Environment.NewLine}\"{ckInfo.CookieStr}\",{Environment.NewLine}"); - using (var sw = new StreamWriter(fileInfo.PhysicalPath)) - { - sw.Write(json); - } + _logger.LogInformation("不存在该用户,新增cookie"); + lines.Insert(indexOfCkConfigEnd, $@" ""{ckInfo.CookieStr}"","); + SaveJson(lines, fileInfo); + _logger.LogInformation("新增成功!"); return; } - //todo:update _logger.LogInformation("已存在该用户,更新cookie"); - var listStr= SubstringSingle(json, "\"BiliBiliCookies\": \\[", "\\]"); - var list = listStr.Split(Environment.NewLine).ToList(); - var index= list.FindIndex(x => x.Contains(userId)); - list[index] = $"\"{ckInfo.CookieStr}\","; - var newList = string.Join(Environment.NewLine,list); - - json = json.Replace(listStr, newList); - using (var sw = new StreamWriter(fileInfo.PhysicalPath)) - { - sw.Write(json); - } - return; + lines[indexOfTargetCk] = $@" ""{ckInfo.CookieStr}"","; + SaveJson(lines, fileInfo); + _logger.LogInformation("更新成功!"); } private void GenerateQrCode(string str) @@ -261,19 +249,21 @@ private string GetOnlinePic(string str) private CookieInfo GetCookieStr(string url) { - var ckStrList= url.Split('?')[1] + var ckStrList = url.Split('?')[1] .Split("&gourl=")[0] .Split('&') .ToList(); return new CookieInfo(ckStrList); } - public static string SubstringSingle(string source, string startStr, string endStr,string middleRegex="") + private void SaveJson(List lines, IFileInfo fileInfo) { - if (middleRegex.IsNullOrEmpty()) middleRegex = "[.\\s\\S]*?"; - var regexStr = $"(?<=({startStr})){middleRegex}(?=({endStr}))"; - Regex rg = new Regex(regexStr, RegexOptions.Multiline | RegexOptions.Singleline); - return rg.Match(source).Value; + var newJson = string.Join(Environment.NewLine, lines); + + using (var sw = new StreamWriter(fileInfo.PhysicalPath)) + { + sw.Write(newJson); + } } } } From 173f73575c1eb8d73782f835154f2ed77d3f1990 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 14:58:55 +0800 Subject: [PATCH 24/36] feat: update source json when qrcode login --- src/Ray.BiliBiliTool.Agent/BiliCookie.cs | 11 ++---- .../LoginTaskAppService.cs | 37 ++++++++++--------- .../BiliBiliToolHostedService.cs | 7 +++- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/BiliCookie.cs b/src/Ray.BiliBiliTool.Agent/BiliCookie.cs index a8f9efea7..ab52c4ba6 100644 --- a/src/Ray.BiliBiliTool.Agent/BiliCookie.cs +++ b/src/Ray.BiliBiliTool.Agent/BiliCookie.cs @@ -1,14 +1,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; +using Microsoft.Extensions.Logging.Abstractions; using Ray.BiliBiliTool.Config; -using Ray.BiliBiliTool.Config.Options; using Ray.BiliBiliTool.Infrastructure; namespace Ray.BiliBiliTool.Agent @@ -35,8 +30,10 @@ public BiliCookie(ILogger logger, { SessData = sess; } + } - this.Check(); + public BiliCookie(List ckList) : this(NullLogger.Instance,new CookieStrFactory(ckList)) + { } [Description("DedeUserID")] diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index b43089117..8dd48d95d 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -2,18 +2,13 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Net; -using System.Text; -using System.Text.Json; -using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; -using Microsoft.Extensions.FileSystemGlobbing.Internal; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using Polly; using QRCoder; +using Ray.BiliBiliTool.Agent; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Application.Attributes; using Ray.BiliBiliTool.Application.Contracts; @@ -45,7 +40,7 @@ IHostEnvironment hostingEnvironment public override void DoTask() { //扫码登录 - var suc = QrCodeLogin(out CookieInfo cookieInfo); + var suc = QrCodeLogin(out BiliCookie cookieInfo); if (!suc) return; //更新cookie到json @@ -55,10 +50,10 @@ public override void DoTask() } [TaskInterceptor("二维码登录", TaskLevel.Two)] - protected bool QrCodeLogin(out CookieInfo cookieInfo) + protected bool QrCodeLogin(out BiliCookie cookieInfo) { var result = false; - cookieInfo = new CookieInfo(""); + cookieInfo = new BiliCookie(new List(){""}); var re = _passportApi.GenerateQrCode().Result; if (re.Code != 0) @@ -99,7 +94,7 @@ protected bool QrCodeLogin(out CookieInfo cookieInfo) if (check.Data.Code == 0) { _logger.LogInformation("扫描成功!"); - cookieInfo = GetCookieStr(check.Data.Url); + cookieInfo = GetCookie(check.Data.Url); result = true; break; } @@ -111,13 +106,16 @@ protected bool QrCodeLogin(out CookieInfo cookieInfo) } - [TaskInterceptor("添加到json", TaskLevel.Two)] + [TaskInterceptor("添加ck到json配置文件", TaskLevel.Two)] protected void AddOrUpdateCkToJson(CookieInfo ckInfo) { //读取json - var path = "appsettings.json"; - var fileProvider = new PhysicalFileProvider(_hostingEnvironment.ContentRootPath); - IFileInfo fileInfo = fileProvider.GetFileInfo(path); + var path = _hostingEnvironment.ContentRootPath; + var indexOfBin = path.LastIndexOf("bin"); + if (indexOfBin != -1) path = path.Substring(0, indexOfBin); + var fileProvider = new PhysicalFileProvider(path); + IFileInfo fileInfo = fileProvider.GetFileInfo("appsettings.json"); + _logger.LogInformation("目标json地址:{path}", fileInfo.PhysicalPath); string json; using (var stream = new FileStream(fileInfo.PhysicalPath, FileMode.Open)) @@ -146,6 +144,7 @@ protected void AddOrUpdateCkToJson(CookieInfo ckInfo) } ckInfo.CookieItemDictionary.TryGetValue("DedeUserID", out string userId); + userId ??= ckInfo.CookieStr; var indexOfCkConfigEnd = lines.FindIndex(indexOfCkConfigKey, x => x.TrimStart().StartsWith("]")); var indexOfTargetCk = lines.FindIndex(indexOfCkConfigKey, indexOfCkConfigEnd - indexOfCkConfigKey, @@ -247,13 +246,17 @@ private string GetOnlinePic(string str) return $"https://tool.lu/qrcode/basic.html?text={encode}"; } - private CookieInfo GetCookieStr(string url) + private BiliCookie GetCookie(string url) { - var ckStrList = url.Split('?')[1] + var ckItemList = url.Split('?')[1] .Split("&gourl=")[0] .Split('&') .ToList(); - return new CookieInfo(ckStrList); + var ckStr = string.Join(';', ckItemList); + var biliCk = new BiliCookie(new List() { ckStr }); + + biliCk.Check(); + return biliCk; } private void SaveJson(List lines, IFileInfo fileInfo) diff --git a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs index 9ba463522..885022e72 100644 --- a/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs +++ b/src/Ray.BiliBiliTool.Console/BiliBiliToolHostedService.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading; @@ -20,6 +19,7 @@ public class BiliBiliToolHostedService : IHostedService { private readonly IHostApplicationLifetime _applicationLifetime; private readonly IServiceProvider _serviceProvider; + private readonly IHostEnvironment _environment; private readonly IConfiguration _configuration; private readonly ILogger _logger; private readonly CookieStrFactory _cookieStrFactory; @@ -28,6 +28,7 @@ public class BiliBiliToolHostedService : IHostedService public BiliBiliToolHostedService( IHostApplicationLifetime applicationLifetime , IServiceProvider serviceProvider + , IHostEnvironment environment , IConfiguration configuration , ILogger logger , CookieStrFactory cookieStrFactory @@ -35,6 +36,7 @@ IHostApplicationLifetime applicationLifetime { _applicationLifetime = applicationLifetime; _serviceProvider = serviceProvider; + _environment = environment; _configuration = configuration; _logger = logger; _cookieStrFactory = cookieStrFactory; @@ -100,6 +102,9 @@ public Task StartAsync(CancellationToken cancellationToken) LogAppInfo(); _logger.LogInformation("·开始推送·{task}·{user}", $"{_configuration["RunTasks"]}任务", ""); } + //环境 + _logger.LogInformation("运行环境:{env}", _environment.EnvironmentName); + _logger.LogInformation("应用目录:{path}{newLine}", _environment.ContentRootPath, Environment.NewLine); _logger.LogInformation("运行结束"); _applicationLifetime.StopApplication(); } From db2e599dfa174b28680ebce787fe7dffa0c09178 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 15:06:12 +0800 Subject: [PATCH 25/36] feat: update codes --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 8dd48d95d..72c5ea28f 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -47,6 +47,7 @@ public override void DoTask() AddOrUpdateCkToJson(cookieInfo); //更新cookie到青龙env + //todo } [TaskInterceptor("二维码登录", TaskLevel.Two)] @@ -67,7 +68,7 @@ protected bool QrCodeLogin(out BiliCookie cookieInfo) var online = GetOnlinePic(url); _logger.LogInformation(Environment.NewLine + Environment.NewLine); - _logger.LogInformation("如果上方二维码显示异常,或扫描失败,请使用浏览器访问如下链接,查看高清在线二维码:"); + _logger.LogInformation("如果上方二维码显示异常,或扫描失败,请使用浏览器访问如下链接,查看高清二维码:"); _logger.LogInformation(online + Environment.NewLine + Environment.NewLine); var waitTimes = 10; @@ -171,7 +172,7 @@ private void GenerateQrCode(string str) QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.L); _logger.LogInformation("AsciiQRCode:"); - var qrCode = new AsciiQRCode(qrCodeData); + //var qrCode = new AsciiQRCode(qrCodeData); //var qrCodeStr = qrCode.GetGraphic(1, drawQuietZones: false); //_logger.LogInformation(Environment.NewLine + qrCodeStr); From d27f8ba57603187382f243dd3c7cc5b4f482802b Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 15:48:18 +0800 Subject: [PATCH 26/36] feat: add cookie config file single --- .gitignore | 5 ++++- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 7 ++++++- src/Ray.BiliBiliTool.Console/Program.cs | 3 +++ .../Ray.BiliBiliTool.Console.csproj | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 17c609976..c8f3ae875 100644 --- a/.gitignore +++ b/.gitignore @@ -364,4 +364,7 @@ krew/bilipro krew/cmd/kubectl-bilipro krew/kustomization.yaml bilipro -kustomization.yaml \ No newline at end of file +kustomization.yaml + +# cookie config +cookies.json \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 72c5ea28f..23a88e2bb 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -115,9 +115,11 @@ protected void AddOrUpdateCkToJson(CookieInfo ckInfo) var indexOfBin = path.LastIndexOf("bin"); if (indexOfBin != -1) path = path.Substring(0, indexOfBin); var fileProvider = new PhysicalFileProvider(path); - IFileInfo fileInfo = fileProvider.GetFileInfo("appsettings.json"); + IFileInfo fileInfo = fileProvider.GetFileInfo("cookies.json"); _logger.LogInformation("目标json地址:{path}", fileInfo.PhysicalPath); + if (!fileInfo.Exists) File.Create(fileInfo.PhysicalPath).Dispose(); + string json; using (var stream = new FileStream(fileInfo.PhysicalPath, FileMode.Open)) { @@ -262,6 +264,9 @@ private BiliCookie GetCookie(string url) private void SaveJson(List lines, IFileInfo fileInfo) { + lines.Insert(0,"{"); + lines.Add("}"); + var newJson = string.Join(Environment.NewLine, lines); using (var sw = new StreamWriter(fileInfo.PhysicalPath)) diff --git a/src/Ray.BiliBiliTool.Console/Program.cs b/src/Ray.BiliBiliTool.Console/Program.cs index 4dbb96baf..a0dddc171 100644 --- a/src/Ray.BiliBiliTool.Console/Program.cs +++ b/src/Ray.BiliBiliTool.Console/Program.cs @@ -85,6 +85,9 @@ internal static IHostBuilder CreateHostBuilder(string[] args) .GetSection("CommandLineMappings") .Get>()); } + + //本地cookie存储文件 + configurationBuilder.AddJsonFile("cookies.json", true, true); }); //日志: diff --git a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj index 7b01192d7..cc6d544eb 100644 --- a/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj +++ b/src/Ray.BiliBiliTool.Console/Ray.BiliBiliTool.Console.csproj @@ -90,6 +90,9 @@ PreserveNewest + + PreserveNewest + From 083b038b18edc1de6ec58e301c0484221911c06f Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 16:10:55 +0800 Subject: [PATCH 27/36] feat: update change log and qinglong scripts --- CHANGELOG.md | 7 ++++++- common.props | 2 +- qinglong/DefaultTasks/bili_task_daily.sh | 4 ++-- qinglong/DefaultTasks/bili_task_liveLottery.sh | 4 ++-- qinglong/DefaultTasks/bili_task_login.sh | 8 ++++---- qinglong/DefaultTasks/bili_task_test.sh | 4 ++-- qinglong/DefaultTasks/bili_task_unfollowBatched.sh | 4 ++-- qinglong/DefaultTasks/bili_task_vipBigPoint.sh | 4 ++-- qinglong/DefaultTasks/dev/bili_dev_task_daily.sh | 4 ++-- qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh | 3 +-- qinglong/DefaultTasks/dev/bili_dev_task_login.sh | 6 +++--- qinglong/DefaultTasks/dev/bili_dev_task_test.sh | 4 ++-- .../DefaultTasks/dev/bili_dev_task_unfollowBatched.sh | 4 ++-- qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh | 4 ++-- .../{DefaultTasks/dev => bak}/bili_dev_task_get_cookie.py | 0 qinglong/{DefaultTasks => bak}/bili_task_get_cookie.py | 0 16 files changed, 33 insertions(+), 29 deletions(-) rename qinglong/{DefaultTasks/dev => bak}/bili_dev_task_get_cookie.py (100%) rename qinglong/{DefaultTasks => bak}/bili_task_get_cookie.py (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index fce9a6529..3b5b367b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,5 +63,10 @@ - 合并PR(#309)新增lv6后开启白嫖模式的配置(多账号时可以实现不足lv6的继续投币,达到lv6的开始白嫖),感谢@cluom - 优化青龙安装dotnet的脚本,改为使用官方`dotnet-install.sh`脚本安装(之前测试网络不通,后发现--no-cdn可以) - 优化青龙的执行脚本,提取公共部分,并且在执行前会尝试安装一次dotnet,会清理一次缓存 -## 0.2.3 +## 0.3.0 - hotfix docker build error +- 合并PR(#341),新增krew部署,感谢@chenliu1993 +- 合并PR(##348),更新文档,感谢@jexjws +- 合并PR(#350),修改请求header错误的bug +- 合并PR(#353),新增python扫码登录的feature(仅针对青龙),感谢@AFUL1991 +- Feature(#351):重构并新增了扫码登录功能,使之适用于各种部署平台 diff --git a/common.props b/common.props index 8180db785..1ac4a8905 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ Ray - 0.2.3 + 0.3.0 $(NoWarn);CS1591;CS0436 diff --git a/qinglong/DefaultTasks/bili_task_daily.sh b/qinglong/DefaultTasks/bili_task_daily.sh index 55cef2f06..e9ebd6adc 100644 --- a/qinglong/DefaultTasks/bili_task_daily.sh +++ b/qinglong/DefaultTasks/bili_task_daily.sh @@ -4,6 +4,6 @@ . bili_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=Daily && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/bili_task_liveLottery.sh b/qinglong/DefaultTasks/bili_task_liveLottery.sh index b3caa3b0c..9c209094f 100644 --- a/qinglong/DefaultTasks/bili_task_liveLottery.sh +++ b/qinglong/DefaultTasks/bili_task_liveLottery.sh @@ -4,6 +4,6 @@ . bili_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=LiveLottery && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/bili_task_login.sh b/qinglong/DefaultTasks/bili_task_login.sh index 21746b3a2..3ff547614 100644 --- a/qinglong/DefaultTasks/bili_task_login.sh +++ b/qinglong/DefaultTasks/bili_task_login.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash -# new Env("bili测试ck") -# cron 0 8 * * * bili_task_login.sh +# new Env("bili扫码登录") +# cron 0 0 1 1 * bili_task_login.sh . bili_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=Login && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/bili_task_test.sh b/qinglong/DefaultTasks/bili_task_test.sh index 38e740aaa..bf18cf76e 100644 --- a/qinglong/DefaultTasks/bili_task_test.sh +++ b/qinglong/DefaultTasks/bili_task_test.sh @@ -4,6 +4,6 @@ . bili_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=Test && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/bili_task_unfollowBatched.sh b/qinglong/DefaultTasks/bili_task_unfollowBatched.sh index 7fa37a101..0db839f19 100644 --- a/qinglong/DefaultTasks/bili_task_unfollowBatched.sh +++ b/qinglong/DefaultTasks/bili_task_unfollowBatched.sh @@ -4,6 +4,6 @@ . bili_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=UnfollowBatched && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/bili_task_vipBigPoint.sh b/qinglong/DefaultTasks/bili_task_vipBigPoint.sh index f6f9792a2..da6baffec 100644 --- a/qinglong/DefaultTasks/bili_task_vipBigPoint.sh +++ b/qinglong/DefaultTasks/bili_task_vipBigPoint.sh @@ -4,6 +4,6 @@ . bili_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=VipBigPoint && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_daily.sh b/qinglong/DefaultTasks/dev/bili_dev_task_daily.sh index 574d3d0df..6b30dd4e5 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_daily.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_daily.sh @@ -4,6 +4,6 @@ . bili_dev_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=Daily && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh b/qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh index 521b03a48..eb2c20124 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_liveLottery.sh @@ -5,6 +5,5 @@ cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ export Ray_RunTasks=LiveLottery && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_login.sh b/qinglong/DefaultTasks/dev/bili_dev_task_login.sh index 9c33eeaab..933e05cfa 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_login.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_login.sh @@ -1,9 +1,9 @@ #!/usr/bin/env bash # new Env("bili扫码登录[dev先行版]") -# cron 0 9 * * * bili_dev_task_login.sh +# cron 0 0 1 1 * bili_dev_task_login.sh . bili_dev_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=Login && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_test.sh b/qinglong/DefaultTasks/dev/bili_dev_task_test.sh index a175c5bd5..19c6f798e 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_test.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_test.sh @@ -4,6 +4,6 @@ . bili_dev_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=Test && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh b/qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh index 71cd7be83..0f8311dba 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_unfollowBatched.sh @@ -4,6 +4,6 @@ . bili_dev_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=UnfollowBatched && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh b/qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh index 3dbcfbb8e..d6cc9d4de 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_vipBigPoint.sh @@ -4,6 +4,6 @@ . bili_dev_task_base.sh cd ./src/Ray.BiliBiliTool.Console -export ENVIRONMENT=Production && \ + export Ray_RunTasks=VipBigPoint && \ -dotnet run +dotnet run --ENVIRONMENT=Production diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_get_cookie.py b/qinglong/bak/bili_dev_task_get_cookie.py similarity index 100% rename from qinglong/DefaultTasks/dev/bili_dev_task_get_cookie.py rename to qinglong/bak/bili_dev_task_get_cookie.py diff --git a/qinglong/DefaultTasks/bili_task_get_cookie.py b/qinglong/bak/bili_task_get_cookie.py similarity index 100% rename from qinglong/DefaultTasks/bili_task_get_cookie.py rename to qinglong/bak/bili_task_get_cookie.py From 3283b03c0211074fd6ea0b199be1bab0a0c8e086 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 16:13:05 +0800 Subject: [PATCH 28/36] feat: bak py files --- ...ili_dev_task_get_cookie.py => bili_dev_task_get_cookie.py.bak} | 0 .../bak/{bili_task_get_cookie.py => bili_task_get_cookie.py.bak} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename qinglong/bak/{bili_dev_task_get_cookie.py => bili_dev_task_get_cookie.py.bak} (100%) rename qinglong/bak/{bili_task_get_cookie.py => bili_task_get_cookie.py.bak} (100%) diff --git a/qinglong/bak/bili_dev_task_get_cookie.py b/qinglong/bak/bili_dev_task_get_cookie.py.bak similarity index 100% rename from qinglong/bak/bili_dev_task_get_cookie.py rename to qinglong/bak/bili_dev_task_get_cookie.py.bak diff --git a/qinglong/bak/bili_task_get_cookie.py b/qinglong/bak/bili_task_get_cookie.py.bak similarity index 100% rename from qinglong/bak/bili_task_get_cookie.py rename to qinglong/bak/bili_task_get_cookie.py.bak From 8c113a12d94455200f30791a4aac9704b9285b15 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 19:56:01 +0800 Subject: [PATCH 29/36] feat: add ck to qinglong when login in qinglong --- .../Extensions/ServiceCollectionExtension.cs | 16 +++ .../QingLong/IQingLongApi.cs | 52 +++++++++ .../LoginTaskAppService.cs | 105 ++++++++++++++++-- ...iablesExcludeEmptyConfigurationProvider.cs | 6 +- ...ariablesExcludeEmptyConfigurationSource.cs | 4 +- .../ConfigurationBuilderExtension.cs | 7 +- src/Ray.BiliBiliTool.Console/Program.cs | 1 + .../Enums/PlateformType.cs | 3 +- 8 files changed, 180 insertions(+), 14 deletions(-) create mode 100644 src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs diff --git a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs index 70a63a920..36d17512e 100644 --- a/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs +++ b/src/Ray.BiliBiliTool.Agent/Extensions/ServiceCollectionExtension.cs @@ -11,6 +11,7 @@ using Polly.Extensions.Http; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; using Ray.BiliBiliTool.Agent.HttpClientDelegatingHandlers; +using Ray.BiliBiliTool.Agent.QingLong; using Ray.BiliBiliTool.Config.Options; using Ray.BiliBiliTool.Infrastructure; @@ -71,6 +72,21 @@ public static IServiceCollection AddBiliBiliClientApi(this IServiceCollection se services.AddBiliBiliClientApi("http://passport.bilibili.com", false); + //qinglong + var qinglongHost = configuration["QL_URL"]?? "http://localhost:5600"; + services + .AddHttpApi(o => + { + o.HttpHost = new Uri(qinglongHost); + o.UseDefaultUserAgent = false; + }) + .ConfigureHttpClient((sp, c) => + { + c.DefaultRequestHeaders.Add("User-Agent", + sp.GetRequiredService>().CurrentValue.UserAgent); + }) + .AddPolicyHandler(GetRetryPolicy()); + return services; } diff --git a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs new file mode 100644 index 000000000..2507feb43 --- /dev/null +++ b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Ray.BiliBiliTool.Agent.Attributes; +using WebApiClientCore.Attributes; + +namespace Ray.BiliBiliTool.Agent.QingLong +{ + [LogFilter] + public interface IQingLongApi + { + [HttpGet("/api/envs")] + Task>> GetEnvs(string searchValue, [Header("Authorization")] string token); + + [HttpPost("/api/envs")] + Task>> AddEnvs(AddQingLongEnv env, [Header("Authorization")] string token); + + [HttpPut("/api/envs")] + Task>> UpdateEnvs(UpdateQingLongEnv env, [Header("Authorization")] string token); + } + + public class QingLongGenericResponse + { + public int Code { get; set; } + + public T Data { get; set; } + } + + + public class QingLongEnv: UpdateQingLongEnv + { + public string timestamp { get; set; } + public int status { get; set; } + public long position { get; set; } + public DateTime createdAt { get; set; } + public DateTime updatedAt { get; set; } + } + + public class AddQingLongEnv + { + public string value { get; set; } + public string name { get; set; } + public string remarks { get; set; } + } + + public class UpdateQingLongEnv: AddQingLongEnv + { + public int id { get; set; } + } +} diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 23a88e2bb..cb75b6381 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -1,18 +1,23 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; +using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Newtonsoft.Json; using QRCoder; using Ray.BiliBiliTool.Agent; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; +using Ray.BiliBiliTool.Agent.QingLong; using Ray.BiliBiliTool.Application.Attributes; using Ray.BiliBiliTool.Application.Contracts; using Ray.BiliBiliTool.Infrastructure; +using Ray.BiliBiliTool.Infrastructure.Enums; namespace Ray.BiliBiliTool.Application { @@ -21,19 +26,22 @@ public class LoginTaskAppService : AppService, ILoginTaskAppService private readonly ILogger _logger; private readonly IPassportApi _passportApi; private readonly IHostEnvironment _hostingEnvironment; + private readonly IQingLongApi _qingLongApi; private readonly IConfiguration _configuration; public LoginTaskAppService( IConfiguration configuration, ILogger logger, IPassportApi passportApi, - IHostEnvironment hostingEnvironment + IHostEnvironment hostingEnvironment, + IQingLongApi qingLongApi ) { _configuration = configuration; _logger = logger; _passportApi = passportApi; _hostingEnvironment = hostingEnvironment; + _qingLongApi = qingLongApi; } [TaskInterceptor("扫码登录", TaskLevel.One)] @@ -43,18 +51,24 @@ public override void DoTask() var suc = QrCodeLogin(out BiliCookie cookieInfo); if (!suc) return; - //更新cookie到json - AddOrUpdateCkToJson(cookieInfo); + var plateformType = _configuration.GetSection("PlateformType").Get(); //更新cookie到青龙env - //todo + if (plateformType == PlateformType.QingLong) + { + AddOrUpdateCkToQingLong(cookieInfo); + return; + } + + //更新cookie到json + AddOrUpdateCkToJson(cookieInfo); } [TaskInterceptor("二维码登录", TaskLevel.Two)] protected bool QrCodeLogin(out BiliCookie cookieInfo) { var result = false; - cookieInfo = new BiliCookie(new List(){""}); + cookieInfo = new BiliCookie(new List() { "" }); var re = _passportApi.GenerateQrCode().Result; if (re.Code != 0) @@ -108,7 +122,7 @@ protected bool QrCodeLogin(out BiliCookie cookieInfo) [TaskInterceptor("添加ck到json配置文件", TaskLevel.Two)] - protected void AddOrUpdateCkToJson(CookieInfo ckInfo) + protected void AddOrUpdateCkToJson(BiliCookie ckInfo) { //读取json var path = _hostingEnvironment.ContentRootPath; @@ -168,6 +182,62 @@ protected void AddOrUpdateCkToJson(CookieInfo ckInfo) _logger.LogInformation("更新成功!"); } + [TaskInterceptor("添加ck到青龙环境变量", TaskLevel.Two)] + protected void AddOrUpdateCkToQingLong(BiliCookie ckInfo) + { + //拿token + var suc = GetToken(out string token); + + if (!suc) return; + + //查env + var re = _qingLongApi.GetEnvs("Ray_BiliBiliCookies__", $"Bearer {token}").Result; + + if (re.Code != 200) + { + _logger.LogInformation($"查询环境变量失败:{re}", re.ToJson()); + return; + } + + var list = re.Data.OrderBy(x => x.id); + QingLongEnv oldEnv = list.FirstOrDefault(x => x.value.Contains(ckInfo.UserId)); + + if (oldEnv != null) + { + _logger.LogInformation("用户已存在,更新cookie"); + var update=new UpdateQingLongEnv() + { + id = oldEnv.id, + name = oldEnv.name, + value = ckInfo.CookieStr, + remarks = oldEnv.remarks, + }; + + var updateRe = _qingLongApi.UpdateEnvs(update, token).Result; + if (updateRe.Code == 200) _logger.LogInformation("更新成功!"); + else _logger.LogInformation(updateRe.ToJson()); + + return; + } + + _logger.LogInformation("用户不存在,新增cookie"); + var lastNum = list.LastOrDefault()?.value.Split("__").LastOrDefault(); + var newNum = int.Parse(lastNum ?? "0") + 1; + var name = $"Ray_BiliBiliCookies__{newNum}"; + + var add = new AddQingLongEnv() + { + name = name, + value = ckInfo.CookieStr, + remarks = "" + }; + var addRe= _qingLongApi.AddEnvs(add, token).Result; + if(addRe.Code == 200) _logger.LogInformation("新增成功!"); + else _logger.LogInformation(addRe.ToJson()); + + return; + } + private void GenerateQrCode(string str) { var qrGenerator = new QRCodeGenerator(); @@ -264,7 +334,7 @@ private BiliCookie GetCookie(string url) private void SaveJson(List lines, IFileInfo fileInfo) { - lines.Insert(0,"{"); + lines.Insert(0, "{"); lines.Add("}"); var newJson = string.Join(Environment.NewLine, lines); @@ -274,5 +344,26 @@ private void SaveJson(List lines, IFileInfo fileInfo) sw.Write(newJson); } } + + #region qinglong + + private bool GetToken(out string token) + { + token = ""; + + var qlDir = _configuration["QL_DIR"] ?? "/ql"; + var authFile = Path.Combine(qlDir, "data/config/auth.json"); + + if (!File.Exists(authFile)) return false; + + var authJson = File.ReadAllText(authFile); + + var jb = JsonConvert.DeserializeObject(authJson); + token = jb["token"].ToString(); + + return true; + } + + #endregion } } diff --git a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs index d72123f42..e6aaa0064 100644 --- a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs +++ b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationProvider.cs @@ -13,13 +13,15 @@ namespace Ray.BiliBiliTool.Config /// public class EnvironmentVariablesExcludeEmptyConfigurationProvider : EnvironmentVariablesConfigurationProvider { + private readonly bool _removeKeyPrefix; private readonly string _prefix; private readonly Func, bool> _startsWith; private readonly Func, bool> _removeNullValue; private readonly Func, bool> _fifter; - public EnvironmentVariablesExcludeEmptyConfigurationProvider(string prefix = null) : base(prefix) + public EnvironmentVariablesExcludeEmptyConfigurationProvider(string prefix = null, bool removeKeyPrefix = true) : base(prefix) { + _removeKeyPrefix = removeKeyPrefix; _prefix = prefix ?? string.Empty; _startsWith = c => c.Key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase); @@ -44,7 +46,7 @@ public override void Load() /// private string NormalizeKey(string key) { - key = RemoveKeyPrefix(key); + if(_removeKeyPrefix) key = RemoveKeyPrefix(key); key = ReplaceKeyDelimiter(key); return key; } diff --git a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs index 263c0bf6f..fea853940 100644 --- a/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs +++ b/src/Ray.BiliBiliTool.Config/EnvironmentVariablesExcludeEmptyConfigurationSource.cs @@ -16,9 +16,11 @@ public class EnvironmentVariablesExcludeEmptyConfigurationSource : IConfiguratio { public string Prefix { get; set; } + public bool RemoveKeyPrefix { get; set; } + public IConfigurationProvider Build(IConfigurationBuilder builder) { - return new EnvironmentVariablesExcludeEmptyConfigurationProvider(Prefix); + return new EnvironmentVariablesExcludeEmptyConfigurationProvider(Prefix, RemoveKeyPrefix); } } } diff --git a/src/Ray.BiliBiliTool.Config/Extensions/ConfigurationBuilderExtension.cs b/src/Ray.BiliBiliTool.Config/Extensions/ConfigurationBuilderExtension.cs index 5264eba75..4271c1030 100644 --- a/src/Ray.BiliBiliTool.Config/Extensions/ConfigurationBuilderExtension.cs +++ b/src/Ray.BiliBiliTool.Config/Extensions/ConfigurationBuilderExtension.cs @@ -25,9 +25,10 @@ public static IConfigurationBuilder AddExcludeEmptyEnvironmentVariables(this ICo /// The . public static IConfigurationBuilder AddExcludeEmptyEnvironmentVariables( this IConfigurationBuilder configurationBuilder, - string prefix) + string prefix, + bool removeKeyPrefix = true) { - configurationBuilder.Add(new EnvironmentVariablesExcludeEmptyConfigurationSource { Prefix = prefix }); + configurationBuilder.Add(new EnvironmentVariablesExcludeEmptyConfigurationSource { Prefix = prefix, RemoveKeyPrefix = removeKeyPrefix }); return configurationBuilder; } @@ -40,4 +41,4 @@ public static IConfigurationBuilder AddExcludeEmptyEnvironmentVariables( public static IConfigurationBuilder AddExcludeEmptyEnvironmentVariables(this IConfigurationBuilder builder, Action configureSource) => builder.Add(configureSource); } -} \ No newline at end of file +} diff --git a/src/Ray.BiliBiliTool.Console/Program.cs b/src/Ray.BiliBiliTool.Console/Program.cs index a0dddc171..bb649ddad 100644 --- a/src/Ray.BiliBiliTool.Console/Program.cs +++ b/src/Ray.BiliBiliTool.Console/Program.cs @@ -76,6 +76,7 @@ internal static IHostBuilder CreateHostBuilder(string[] args) } //环境变量: + configurationBuilder.AddExcludeEmptyEnvironmentVariables("QL_", false); configurationBuilder.AddExcludeEmptyEnvironmentVariables("Ray_"); //命令行: diff --git a/src/Ray.BiliBiliTool.Infrastructure/Enums/PlateformType.cs b/src/Ray.BiliBiliTool.Infrastructure/Enums/PlateformType.cs index adac3bd13..47991555c 100644 --- a/src/Ray.BiliBiliTool.Infrastructure/Enums/PlateformType.cs +++ b/src/Ray.BiliBiliTool.Infrastructure/Enums/PlateformType.cs @@ -10,6 +10,7 @@ public enum PlateformType { Unknown, GitHubActions, - Docker + Docker, + QingLong } } From 93b620eacd5a44ea25c49ab057f876b4f95ef9c3 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 20:12:29 +0800 Subject: [PATCH 30/36] feat: fix bugs --- qinglong/DefaultTasks/bili_task_base.sh | 3 ++- qinglong/DefaultTasks/dev/bili_dev_task_base.sh | 3 ++- .../LoginTaskAppService.cs | 17 ++++++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/qinglong/DefaultTasks/bili_task_base.sh b/qinglong/DefaultTasks/bili_task_base.sh index 3b8d15d41..5dfeea189 100644 --- a/qinglong/DefaultTasks/bili_task_base.sh +++ b/qinglong/DefaultTasks/bili_task_base.sh @@ -18,4 +18,5 @@ echo -e "\nrepo目录: $dir_repo" bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" echo -e "bili仓库目录: $bili_repo_dir\n" -cd $bili_repo_dir \ No newline at end of file +cd $bili_repo_dir +export Ray_PlateformType=QingLong \ No newline at end of file diff --git a/qinglong/DefaultTasks/dev/bili_dev_task_base.sh b/qinglong/DefaultTasks/dev/bili_dev_task_base.sh index 6da1c3a65..40a6fa5a2 100644 --- a/qinglong/DefaultTasks/dev/bili_dev_task_base.sh +++ b/qinglong/DefaultTasks/dev/bili_dev_task_base.sh @@ -18,4 +18,5 @@ echo -e "\nrepo目录: $dir_repo" bili_repo_dir="$(find $dir_repo -type d -iname $bili_repo | head -1)" echo -e "bili仓库目录: $bili_repo_dir\n" -cd $bili_repo_dir \ No newline at end of file +cd $bili_repo_dir +export Ray_PlateformType=QingLong \ No newline at end of file diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index cb75b6381..161c07ab2 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using QRCoder; using Ray.BiliBiliTool.Agent; using Ray.BiliBiliTool.Agent.BiliBiliAgent.Interfaces; @@ -132,7 +133,16 @@ protected void AddOrUpdateCkToJson(BiliCookie ckInfo) IFileInfo fileInfo = fileProvider.GetFileInfo("cookies.json"); _logger.LogInformation("目标json地址:{path}", fileInfo.PhysicalPath); - if (!fileInfo.Exists) File.Create(fileInfo.PhysicalPath).Dispose(); + if (!fileInfo.Exists) + { + using (var stream= File.Create(fileInfo.PhysicalPath)) + { + using (var sw = new StreamWriter(stream)) + { + sw.Write($"\{{Environment.NewLine}\}"); + } + } + } string json; using (var stream = new FileStream(fileInfo.PhysicalPath, FileMode.Open)) @@ -334,9 +344,6 @@ private BiliCookie GetCookie(string url) private void SaveJson(List lines, IFileInfo fileInfo) { - lines.Insert(0, "{"); - lines.Add("}"); - var newJson = string.Join(Environment.NewLine, lines); using (var sw = new StreamWriter(fileInfo.PhysicalPath)) @@ -358,7 +365,7 @@ private bool GetToken(out string token) var authJson = File.ReadAllText(authFile); - var jb = JsonConvert.DeserializeObject(authJson); + var jb = JsonConvert.DeserializeObject(authJson); token = jb["token"].ToString(); return true; From 90168648a2b14ef0c163e925bfeb91ebdcd2efe3 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 20:15:15 +0800 Subject: [PATCH 31/36] fix: {{}} --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 161c07ab2..729732615 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -139,7 +139,7 @@ protected void AddOrUpdateCkToJson(BiliCookie ckInfo) { using (var sw = new StreamWriter(stream)) { - sw.Write($"\{{Environment.NewLine}\}"); + sw.Write($"{{{Environment.NewLine}}}"); } } } From c7821ce8704fb5b134f336de8f93ca5ccda6f298 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 20:21:41 +0800 Subject: [PATCH 32/36] fix: json content --- src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs | 8 ++++---- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs index 2507feb43..6a333dab1 100644 --- a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs +++ b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs @@ -15,10 +15,10 @@ public interface IQingLongApi Task>> GetEnvs(string searchValue, [Header("Authorization")] string token); [HttpPost("/api/envs")] - Task>> AddEnvs(AddQingLongEnv env, [Header("Authorization")] string token); + Task>> AddEnvs([JsonContent] AddQingLongEnv env, [Header("Authorization")] string token); [HttpPut("/api/envs")] - Task>> UpdateEnvs(UpdateQingLongEnv env, [Header("Authorization")] string token); + Task>> UpdateEnvs([JsonContent] UpdateQingLongEnv env, [Header("Authorization")] string token); } public class QingLongGenericResponse @@ -29,7 +29,7 @@ public class QingLongGenericResponse } - public class QingLongEnv: UpdateQingLongEnv + public class QingLongEnv : UpdateQingLongEnv { public string timestamp { get; set; } public int status { get; set; } @@ -45,7 +45,7 @@ public class AddQingLongEnv public string remarks { get; set; } } - public class UpdateQingLongEnv: AddQingLongEnv + public class UpdateQingLongEnv : AddQingLongEnv { public int id { get; set; } } diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 729732615..139078d1f 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -200,8 +200,10 @@ protected void AddOrUpdateCkToQingLong(BiliCookie ckInfo) if (!suc) return; + token = $"Bearer {token}"; + //查env - var re = _qingLongApi.GetEnvs("Ray_BiliBiliCookies__", $"Bearer {token}").Result; + var re = _qingLongApi.GetEnvs("Ray_BiliBiliCookies__", token).Result; if (re.Code != 200) { From 6ec3e9eddea325b60e4f14d8b8991eca0f9ebfe0 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 20:24:45 +0800 Subject: [PATCH 33/36] fix: update add api --- src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs | 2 +- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs index 6a333dab1..1eb78b15a 100644 --- a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs +++ b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs @@ -15,7 +15,7 @@ public interface IQingLongApi Task>> GetEnvs(string searchValue, [Header("Authorization")] string token); [HttpPost("/api/envs")] - Task>> AddEnvs([JsonContent] AddQingLongEnv env, [Header("Authorization")] string token); + Task>> AddEnvs([JsonContent] List envs, [Header("Authorization")] string token); [HttpPut("/api/envs")] Task>> UpdateEnvs([JsonContent] UpdateQingLongEnv env, [Header("Authorization")] string token); diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index 139078d1f..db548627a 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -135,7 +135,7 @@ protected void AddOrUpdateCkToJson(BiliCookie ckInfo) if (!fileInfo.Exists) { - using (var stream= File.Create(fileInfo.PhysicalPath)) + using (var stream = File.Create(fileInfo.PhysicalPath)) { using (var sw = new StreamWriter(stream)) { @@ -217,7 +217,7 @@ protected void AddOrUpdateCkToQingLong(BiliCookie ckInfo) if (oldEnv != null) { _logger.LogInformation("用户已存在,更新cookie"); - var update=new UpdateQingLongEnv() + var update = new UpdateQingLongEnv() { id = oldEnv.id, name = oldEnv.name, @@ -243,8 +243,8 @@ protected void AddOrUpdateCkToQingLong(BiliCookie ckInfo) value = ckInfo.CookieStr, remarks = "" }; - var addRe= _qingLongApi.AddEnvs(add, token).Result; - if(addRe.Code == 200) _logger.LogInformation("新增成功!"); + var addRe = _qingLongApi.AddEnvs(new List() { add }, token).Result; + if (addRe.Code == 200) _logger.LogInformation("新增成功!"); else _logger.LogInformation(addRe.ToJson()); return; From 36993477188089a821e26dc4305fb09b4c560c01 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 20:29:00 +0800 Subject: [PATCH 34/36] fix: fix update api response --- src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs index 1eb78b15a..b8c579b7b 100644 --- a/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs +++ b/src/Ray.BiliBiliTool.Agent/QingLong/IQingLongApi.cs @@ -18,7 +18,7 @@ public interface IQingLongApi Task>> AddEnvs([JsonContent] List envs, [Header("Authorization")] string token); [HttpPut("/api/envs")] - Task>> UpdateEnvs([JsonContent] UpdateQingLongEnv env, [Header("Authorization")] string token); + Task> UpdateEnvs([JsonContent] UpdateQingLongEnv env, [Header("Authorization")] string token); } public class QingLongGenericResponse From a15e58d5cf8f86493c01c8992493dbf63027ac37 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 22:14:58 +0800 Subject: [PATCH 35/36] feat: update docs --- README.md | 100 ++++++------------------------- docker/README.md | 31 +++++----- docker/sample/docker-compose.yml | 5 +- docs/imgs/docker-login.png | Bin 0 -> 90500 bytes docs/imgs/qinglong-login.png | Bin 0 -> 276794 bytes docs/runInLocal.md | 58 ++++++++++++++++++ podman/README.md | 17 ++++-- qinglong/README.md | 58 ++++++++---------- 8 files changed, 131 insertions(+), 138 deletions(-) create mode 100644 docs/imgs/docker-login.png create mode 100644 docs/imgs/qinglong-login.png create mode 100644 docs/runInLocal.md diff --git a/README.md b/README.md index 3cb5d732f..3457bb5cf 100644 --- a/README.md +++ b/README.md @@ -40,15 +40,14 @@ BiliBiliTool - [1. 如何使用](#1-如何使用) - - [1.1. 第一步:获取BiliBili的 Cookie](#11-第一步获取bilibili的-cookie) - - [1.2. 第二步:配置 Cookie 并运行 BiliBiliTool](#12-第二步配置-cookie-并运行-bilibilitool) - - [1.2.1. 方式一:青龙运行(推荐)](#121-方式一青龙运行推荐) - - [1.2.2. 方式二:Docker或Podman容器化运行](#122-方式二docker或podman容器化运行) - - [1.2.3. 方式三:下载程序包到本地或服务器运行](#123-方式三下载程序包到本地或服务器运行) - - [1.2.4. 方式四:腾讯云函数SCF](#124-方式四腾讯云函数scf) - - [1.2.5. 方式五:~~GitHub Actions~~](#125-方式五github-actions) - - [1.2.6. 方式六:Chart部署](#126-方式六chart部署) - - [1.3. 消息推动(可选)](#13-消息推动可选) + - [1.1. 部署 BiliBiliTool](#11-部署-bilibilitool) + - [1.1.1. 方式一:青龙(推荐)](#111-方式一青龙推荐) + - [1.1.2. 方式二:Docker或Podman容器化运行](#112-方式二docker或podman容器化运行) + - [1.1.3. 方式三:下载程序包到本地或服务器运行](#113-方式三下载程序包到本地或服务器运行) + - [1.1.4. 方式四:腾讯云函数SCF](#114-方式四腾讯云函数scf) + - [1.1.5. 方式五:~~GitHub Actions~~](#115-方式五github-actions) + - [1.1.6. 方式六:Chart部署](#116-方式六chart部署) + - [1.2. 消息推送(可选)](#12-消息推送可选) - [2. 功能任务说明](#2-功能任务说明) - [3. 个性化自定义配置](#3-个性化自定义配置) - [4. 多账号支持](#4-多账号支持) @@ -82,105 +81,44 @@ _(如果图片挂了,请自己架梯子,没有的也可以先参考 [我 BiliBiliTool 实现自动完成任务的原理,是通过调用一系列开放的api实现的。 -**要使用 BiliBiliTool,我们只需要做两步:获取自己的 Cookie 作为配置,然后将其输入 BiliBiliTool 并运行即可。** +**要使用 BiliBiliTool,很简单,按照下面教程部署完成,运行后扫码登录即可。** -### 1.1. 第一步:获取BiliBili的 Cookie +### 1.1. 部署 BiliBiliTool -- 浏览器打开并登录 [BiliBili 网站](https://www.bilibili.com/) -- 登录成功后,访问 `https://api.bilibili.com/x/web-interface/nav`,按 **F12** 打开"开发者工具",按 **F5** 刷新一下 -- 在"开发者工具"面板中,点击 **网络(Network)**,在左侧的请求列表中,找到名称为 `nav` 的接口,点击它 -- 依次查找 **Headers** ——> **RequestHeader** ——> **cookie**,可以看到很长一串以英文分号分隔的字符串,复制整个这个cookie字符串(不要使用右键复制,请使用 Ctrl+C 复制,部分浏览器右键可能会进行 UrlDecode ),保存它们到记事本,待会儿会用到。 +支持多种部署方式,以下选择任一适合自己的方式即可。 -![获取Cookie图示](docs/imgs/get-bilibili-web-cookie.jpg) - - -### 1.2. 第二步:配置 Cookie 并运行 BiliBiliTool - -#### 1.2.1. 方式一:青龙运行(推荐) +#### 1.1.1. 方式一:青龙(推荐) [>>青龙部署教程](qinglong/README.md) -#### 1.2.2. 方式二:Docker或Podman容器化运行 +#### 1.1.2. 方式二:Docker或Podman容器化运行 [>>Docker部署说明](docker/README.md) [>>Podman部署说明](podman/README.md) -#### 1.2.3. 方式三:下载程序包到本地或服务器运行 - -如果是 DotNet 开发者,直接 Clone 源码,然后 VS 打开解决方案,配置 Cookie 后即可直接本地进行运行和调试。 - -对于不是开发者的朋友,可以通过下载 Release 包到本地或任意服务器运行,步骤如下。 -
- -Ⅰ. **下载应用文件** - -点击 [BiliBiliTool/release](https://github.com/RayWangQvQ/BiliBiliToolPro/releases),下载已发布的最新版本。 - -* 如果本地已安装 `.NET 6.0` 环境: - -请下载 `net-dependent.zip` 文件,本文件依赖本地运行库(runtime-dependent),所以文件包非常小(不到1M)。 - -P.S.这里的运行环境指的是 `.NET Runtime 6.0.0` ,安装方法可详见 [常见问题](docs/questions.md) 中的 **本地或服务器如何安装.net环境** - -* 如果不希望安装或不知如何安装.net运行环境: - -请根据操作系统下载对应的 zip 文件,此文件已自包含(self-contained)运行环境,但相较不包含运行时的文件略大(20M 左右,Github 服务器在国外,下载可能比较慢)。 - -如,Windows系统请下载 `win-x86-x64.zip` ,其他以此类推。 - - -Ⅱ. **解压并填写配置** - -下载并解压后,找到 appsettings.json 文件,使用记事本编辑,将之前获取到的 Cookie 字符串填入指定位置,保存后关闭: - -![配置文件图示](docs/imgs/appsettings-cookie.png) - -Ⅲ. **运行** - -* Windows 系统 - -对于已安装.net环境,且使用的是依赖包,可在当前目录下执行命令:`dotnet Ray.BiliBiliTool.Console.dll`,或者直接双击运行名称为 start.bat 的批处理文件,均可运行。 - -对于使用自包含运行环境版本的,可直接双击运行名称为 Ray.BiliBiliTool.Console.exe 的可执行文件。 - -* Linux 系统 - -对于已安装.net环境,且使用的是依赖包,同上,可在终端中执行命令:`dotnet Ray.BiliBiliTool.Console.dll` - -对于使用独立包的,可在终端中执行命令: - -``` -chmod +x ./Ray.BiliBiliTool.Console -Ray.BiliBiliTool.Console -``` - -其他系统依此类推,运行结果图示如下: - -![运行图示](docs/imgs/run-exe.png) - -除了修改配置文件,也可以通过添加环境变量或在启动命令后附加参数来实现配置,详细方法可参考下面的**配置说明**章节。 +#### 1.1.3. 方式三:下载程序包到本地或服务器运行 -
+[>>本地部署说明](docs/runInLocal.md) -#### 1.2.4. 方式四:腾讯云函数SCF +#### 1.1.4. 方式四:腾讯云函数SCF 当前腾讯云函数已改为收费模式,不推荐。 [>>腾讯云函数部署说明](tencentScf/README.md) -#### 1.2.5. 方式五:~~GitHub Actions~~ +#### 1.1.5. 方式五:~~GitHub Actions~~ 暂时删掉该方式避避风头。 **建议所有使用该方式运行的朋友,暂时先替换其他运行方式,避免造成不必要的损失。** -#### 1.2.6. 方式六:Chart部署 +#### 1.1.6. 方式六:Chart部署 [>>Chart部署说明](helm/README.md) -### 1.3. 消息推动(可选) +### 1.2. 消息推送(可选) 如果配置了推送,执行成功后,指定的接收端会收到推送消息,推送效果如下所示: diff --git a/docker/README.md b/docker/README.md index bffcc89c3..140c2805c 100644 --- a/docker/README.md +++ b/docker/README.md @@ -6,14 +6,14 @@ - [1.2. 须知](#12-须知) - [2. 方式一:Docker Compose(推荐)](#2-方式一docker-compose推荐) - [2.1. 启动](#21-启动) - - [2.2. 修改bili下的docker-compose.yml,填入cookie](#22-修改bili下的docker-composeyml填入cookie) - - [2.3. 其他命令参考](#23-其他命令参考) + - [2.2. 其他命令参考](#22-其他命令参考) - [3. 方式二:Docker指令](#3-方式二docker指令) - [3.1. Docker启动](#31-docker启动) - [3.2. 其他指令参考](#32-其他指令参考) - [3.3. 使用Watchtower更新容器](#33-使用watchtower更新容器) -- [4. 自己构建镜像(非必须)](#4-自己构建镜像非必须) -- [5. 其他](#5-其他) +- [4. 登录](#4-登录) +- [5. 自己构建镜像(非必须)](#5-自己构建镜像非必须) +- [6. 其他](#6-其他) ## 1. 前期工作 @@ -52,6 +52,7 @@ docker pull zai7lou/bilibili_tool_pro # 下载 wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/src/Ray.BiliBiliTool.Console/appsettings.json +wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/sample/cookies.json wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/sample/docker-compose.yml # 启动 @@ -61,21 +62,16 @@ docker compose up -d docker logs -f bili ``` -### 2.2. 修改bili下的docker-compose.yml,填入cookie - -根据 docker-compose.yml 里面的注释编辑所需配置,`environment` 下可以通过环境变量自由添加自定义配置,其中Cookie是必填的,所以请至少填入Cookie并保存。 - -保存后,重新运行下`docker compose up -d` - 最终文件结构如下: ``` bili ├── appsettings.json +├── cookies.json └── docker-compose.yml ``` -### 2.3. 其他命令参考 +### 2.2. 其他命令参考 ``` # 启动 docker-compose @@ -103,7 +99,6 @@ docker compose pull && docker compose up -d docker pull zai7lou/bilibili_tool_pro docker run -d --name="bili" \ -v /bili/Logs:/app/Logs \ - -e Ray_BiliBiliCookies__1="cookie" \ -e Ray_DailyTaskConfig__Cron="0 15 * * *" \ -e Ray_LiveLotteryTaskConfig__Cron="0 22 * * *" \ -e Ray_UnfollowBatchedTaskConfig__Cron="0 6 1 * *" \ @@ -144,7 +139,15 @@ docker run --rm \ bili ``` -## 4. 自己构建镜像(非必须) +## 4. 登录 + +在宿主机运行`docker exec -it bili bash -c "dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login"` + +扫码进行登录。 + +![login](../docs/imgs/docker-login.png) + +## 5. 自己构建镜像(非必须) 目前我提供和维护的镜像:`[zai7lou/bilibili_tool_pro](https://hub.docker.com/repository/docker/zai7lou/bilibili_tool_pro)`; @@ -156,7 +159,7 @@ docker run --rm \ `TARGET_NAME`为镜像名称和版本,可以自己起个名字 -## 5. 其他 +## 6. 其他 代码编译和发布环境: mcr.microsoft.com/dotnet/sdk:6.0 diff --git a/docker/sample/docker-compose.yml b/docker/sample/docker-compose.yml index e87fd75f8..bca5efa0e 100644 --- a/docker/sample/docker-compose.yml +++ b/docker/sample/docker-compose.yml @@ -8,15 +8,12 @@ services: volumes: - ./Logs:/app/Logs - ./appsettings.json:/app/appsettings.json + - ./cookies.json:/app/cookies.json tty: true environment: - ASPNETCORE_ENVIRONMENT=Production - Ray_Security__IsSkipDailyTask=false - # Cookie字符串(必填): - - Ray_BiliBiliCookies__1= - - Ray_BiliBiliCookies__2= - # 定时任务 - Ray_DailyTaskConfig__Cron=0 15 * * * - Ray_LiveLotteryTaskConfig__Cron=0 22 * * * diff --git a/docs/imgs/docker-login.png b/docs/imgs/docker-login.png new file mode 100644 index 0000000000000000000000000000000000000000..07d4d1f3814fb8e0e3ef888f12b0451e1434f6e3 GIT binary patch literal 90500 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

P5L4U5Ew= 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ð@H_&BHwgPI<^ZQP8<;NS~!OeAXn z2!)id`j)pqDuY6CoieFCMhy*7Z0Ym;`w+_EJ0SjTf$o@+llUB`y_1tfrnb^6f&IJB z<|JR8NYQV!1mb`~3V`io2VsAm0Z{`$N8<%wDju^{aJc0n$+*(6K`Qc#nEZ>k(xp6j zYhTyYV07vEQklucn?RxohM)Wm4}lE^$te87TW=qH2fYK^sy*;N2b~TgS;&aLf=Zu; zR)-_8(uF+!#gebzrJ{_YH*Yq}tYL?!bb4u!U0Zc9sur=ciFj6h6~BA+JI=Rx9!E1E z(6IY7;vrP}m2NmbMYXxSSQL{;vz>67y==YFvZxw}H}fKE?7XF9z|0rrY(js%vqsPR z?xAZGF+v%Y~$dLSk045a zP60a4&;U*DP1)|#MA2eI+ik1B-h!5vR^S4*7I=RgEu@?CQb%C`L*)3Tjb0Cb!)WOs zwaka}oF3ipNoZn#_bzyV02BDlLkp0#gCKSBe!@UqCClrUI#@z(Kv94DQch6N3ASO3 zGsT$w6|8R00dl63a+iKef`=XV*afu>;QX!z~da`OYU`B z`64GR4Y*c zLRRqGg&-3HCUBj{+EXy+aB%4N`}h{LUP))iZkpd>{R;ajT-0a4`~k`r6yLbZ8n=zN zyUnW)K7r1b)Xsa@e*isz?*!6&o}h;TIvW_5L|4}jRuvevM+^Yh=WGMmxsQDB_Y2cW z7}ZlM@^kaedyZ|=|BW%2JBDc6QwFOfa&%MC^F5_OW*LewPT(Awsf&_8*LYBBiLHQ_ zN6DF&Q}`x?l|{x?(65t}z>n(|Rqe^TCEZJR1}6e(XC1wH<9BvT0*fba!>0&SPD9fF zNT<%Jr?gMJWVSJY)_p6>B_2{lp5y^V5AzWRf%$uN-sd45=(e?0RaUzE8r*%Y%KwJ0 zjB~^A3ObV~g*1vJ8KeV*qc1awN=tje&?|e%C~W~a45Zmhp4oIw^PWcl=)E8yK$|T9 z0(q2?dPUlcIJ7TtpwiH46VkqPsdcVB95ApUFX@fe_k19qgSkHpauFe}>}~IZp{a_G z3rTarU0|BT#>PU=)WN|4?zKoJiaEZJ`JIIjbd?^AX7B0Rk6nTDDcNi`3NxI!hkF1pwx@%JaF9y7=D+__Czru}uF7jvs7~#_UKP-3d)TK({Y%+2%0dhqr_5 zT0?{B?y$y(%`~8qh>0PK}_{c{#e%6^PvP8QirzL#_{EuzSd7 z=)N93xxIT;E9?oDlE7Sgt>s4B;;kxjpAW|yHeoVymI1Cf@t0%TAJV-7wyh#cDG^Ul zzr7^;-0UWL!rej-{dr(REi*LtAWwu5)oG2N9xlYxZig^0H8j9q-#PsDklS(Dde?wT ztnWyXE)M;Os8($@HfRY(vz#o0X#@4O7DLfHZz<+h^?tEGN$_l0Y^4(?KHK67baZWs zABz`^8RF1wtZ%u5m_j2i<>7_*>1N~LAv3$6yf+M4anN)+VvLxZk(rDB`WgD3@cr#0 zFGO-(&fRM<(as>utHCushuC~OEJqNGJ&5|SX=g@3>ooIZZ++93)n+Arb;0M+m0h*N z^V#Vr2Xlh$)PSW4FJ|jWkL;E2-{-!2U&i<3VC)9G%87D*lEgE;qQNDtM*pVI+&bB) z3m1&UN(5CHKTsn2GPi-)e|$J|ESHsd4Ej^$c7e8#dddg4Izxt3Ag}dNOh{NbaY~G} zngf7Ny~2Rif&&3;3Q(D2A_Zc2AJW1Gsb*(BH92Vn9xkL>i6thmSNT9CQ3?FyJ&0&&JljN(wNNg3RUI_cf0LP|>1cO!>U&!?8I%^0jQi0qobf%1BFw_YutD@GjOk&o<0PLIzquv@`ahI zJA+TB>sSJvS4Yj;iXasR_}k)_W+~OS zs|yS+_{JD|XFJJC$0OEuW5{bS&_`RzrQtrExL}OtJj3i}`&|3+M1=>V501*8{6~pAU%PyO9M*&4b&f0vsy zONJ9!b3FNCP}Nre(bMTs#~k{@DE=MCo3G%D7Bw6FwMk~UU#fSZoo1rM8z1nFv9V{c z12NIq+GbT20vDh-I4I{N0lou{FOU|V3=%##qI~?<-_QSoE(Ne7c7dVQdvOa;$txmm zf-|to0Ry*^U$-Rj{bfcd#(J}2#MX?X$pS6#!k(>;1_a2goB-&PAp<9df^2uk$45Ke5 zbKrMV+!iIKjkeIkYO&_o80J!j5qh5FcDjZCUG{8d^pF%G*L4Tq|7QYCTNMAmn|LBT zFLh35S@$Upg89u#S9l|SSDwbC6Ga@lU0yqMt;XI#P-9e+KD*1w%h?nE2A*NH-TU?y zYA^1JUgEWOstv_K4nt;sE)CU$s8vlI?1~Prrz$vWaiXz$wI|c=rdo00y^9i5*GRl6P<5^GTuG8GfLudqn|F`KNh5o zhVTgEk^wGoG*KVL93b~OK_m-T&bGB->2nI>?Hibt0h|3hRRZW!q6`v9)H*#ArS z90s{{^@%ZHF4n6V7#YE=0ji*!`f-ps2CC(=X$WyptpZdr#CgfI&7c(ElW}Oknkn?f zO1zw#v&I1oyu-IaD7WcHn5UVp51gREVbU z29q-^+XW0)&&0)LEoq!eC0`eD|NMHdOlT-62Fuw6JcsRVw^D<8sPQtj#bsrE=GxA{ zPCYe+A_le=G;!L#&?96AiTbuh%{T zD?KErhkMOK7pIpt__rP?J!D0|HR_NY5@jOhhW!sG{BPyl+n&H-3osKuetE2H1G8Vj z73)`m`q{xm+nX2nbr^Icb#GkQN}ZfNu6)a9i=Z?TP_N3yF{nVpSHgaBHkhL$o0iP;@PH!{%59QvwjFu=(#TL z^Sd%c!^RC7R;-NOEb6Q@a|NGHU<9M|F3$*?m$NRuai?@+*)}ZCcU~+HrLU$%=le}P z2~dp|k$d3!=J_1KpaWAzoYfG}{%yQEq)eIH<_|vG2mNaci5%vqSqxjctvi9t{=x!YPt@LT z_vS2@W%Ea<^mncp_}=KqNR{4S1fPP^STrbR?ChuiL9K^S%KLGkN8y>|a3VMqMEehu zmOS$^96k+CIo1k^>?HzZ8~A+la>VWUIT3ma$@n_}AjQ8|5;8Jy*zDX6EsUKVkOG`b zj$iecJ-|(E04NZ+A4mbzsiNfIX>BM2pzS=pt*t@VaW8Vf7QK`xyESt#FoPk@J+$9c zK=V2M4}JJY4!o$AOHFENnGB4Lqkd9)V~X6W$S>LQzJJ1@o%6K4@_2gdM{(H^_-Pqe z#}{;?_gcyP5(b$S^3IfqDd3yBK{!fN%nbS;;8yhLDt$C-6f6l4*^Q9-9*Ah}RKc z`YQPf`VG*-fhxUMiiW z@){4MVIoKTY_eLrk5d=K=3VzNB4qQ*0CuF01q9Z>;bkCN!S3VZBg;stRq(+fjQ@{u zDLtEn&`eW-Lv~hywPnuy`+&OJkaW#J(v|}zY!J|)B)-2-WnDs=VnD6&k)^yt%hL+K z#+~*RehQ|~G$b4a@6R74sg05~UmrhD??f!Hj7S*(8qtN{|Upv%)}pA zDr({kY`r)n{x)v>-Np2{GgH}4iYBTzQm_9-{DF# z)CVw(CwFH86oLXTfC6E*YWTb}i%W*eS+a%1vn;Q%zx#Sb%@}QCi6cDKo1%W% zs!qjm_P3;fbjwC0X&3n)|CV_!Y-Z(n$^U2xx}NNuVc9XyxPyPn z4%ULNoSWNM%Le)Xtbfe<@7MZ&e*5sAeYG^&>ZwgwFoqmZI9>G>s~)IJ$A8L>jUO07 zivnUeq{XyMnVe}hAd#DJV2ErNx?6A?#18=fLLD&!J&Y+=c2plQoAZZ}kt$x^-t}+a zVq6UX!9^P0_wL>L#>SG2?TN^5NpZ1v^(<5G7wAxcMj|t5cs#S*BOAJ}-5go>!Qcba zFMa#qE|g)w{M8Cur!%A$%y3%kXiLulQ*QbFpQ6x87%TI;xG&Iwou}H0eP8P;fPvwR zL4W_-gSW7S1h)!_iOoNd21QnPF#L$gj6XyBvk>H6?>?iH7Ug&L0fCtk$6niyK80q! zW@Qq$1@2oaonJ;}RYST4mVWHSiad^%@wO_423A&O_8 zCvhh93_9Y@gt&#g3=!3wLm>;PU{sCAcT1e#b9aS^zcP9}Q~xq;iEG6(tXyljnfd>s zgT}Nxc|(xlJ~zVBwZy!+<|Mh4@vC-cm@>&|Znv%{AO^S|==7)1d`DcC zhT`YXo37Gfwe?uD{$lS#w!(3Cf62`k*_N*9Bt>E6-eYWD#_8s+#O|Y>TfMr|pSMkW zd*`PD!KQ1*C``f0ulUHQJ)etzdVwX1!x z5=+-BqJ9@CAT0tqQ|)sOM{m+K3#iL6&{=WuG@F%~X2DcVm>Mk}c>?0uLEPlZmDn+R zem*`R*8%1maP@63m-dbx&w4gBHy=Zb4@z_x@jNfZiH{_Yl=t3t0C@-CdxT^+-mUye z+`vvN2YhcCu(KSn{oL$-41H0(8Ke?_Zp@|6(7pz%79ygNFB+4k^1$T*qg80*BYX~* z&7op4w~sN&$QoSA`s^gmNa`({4eAL%%HKEumWw>JejphE4hjC?S5H6K3P7VDWK%H& z=&8*tLzF?0K7?tIbNT(~!Q2^&BtoOB=YO$*N82?X5x09l^BWl%fplFdXWk*qWJ zub`lSD0~+LGGT>FOGsq;>am^p%G50!(Se+6(@x_GG@f3A0(O(IW9>dv0h5gXou_z9 zBG^xrZA71Aa9zXBron!Bb7Xw6j7o64ZSl&AXL;+fi*HFD0gtK7KPYR@_IW1 z54rb&3kFd$LBc*NBA$iVq3Tk09~pt;7~=KBFh-&Imb$9_llOBhOOc)QH`W zwyhCM)Z!UsR~No+V8m_g;JLwaCKA zPI_mUbJq~0n0>q+^QlZ;5-ufgDSNX%N*%IJP`X;#@a)3As#i4+RmqtR9)};f_xUrk z-Y(Z292$ZbH6vXpRF-NcYaRBR@ba8tx@4d@`;9{VaKy8ZF)bJ*78VhKV(u4@rPr@t zfB$aB&&0$&5xV|&0AP~E6b*4U?t9MYVqi>kG^8>+;;jjT=fAp?yc_umk%HW=CkCQu z;z=tj2M^UnVQLJL1}nBt)#q~IZU@xy=C%M`xUq~h-!8ByF9diDYhSy|efeqPua(*= zEb`H5rza|u!0_tc?@?ysCcCFj5^l~I?a0w@8vRN3j3_#N4$h6}2LSwZuqdw&))bq`> zzL&q%s}ST(?xo8-{SXx}l&HC9&)yr)-;G?9dS__eeBb%$!?Y$N!N~U89V}{+ysxzs z4`t8W9uaQiICv-cmv|#Vo|pbcx%jn{^m+7E)EV=?3_i|FUA8`tG{g<0i#%2|PM$Z*^-kXq9i;`dmqGk9-bQA8>^wH4dt( zzZLVo^j0+m4^BP(1sZ{&q3hp?mmQJKtwW-wx47Eb*}1tr&B@Ub*S9(`Iv)UJ1M-$P zT+ep7EQ0b0mz`1LtpMaP^DM-I5*>#Hv^@m1ue7wvU1MXWr>e%pOiVqr>f_K#UYTs6 zP6>y?#eVi2D^t4rm&R6z8m!o?FJ1&x5h@M#sSdwfRO6SFmHhXMn<4~0z-}g zxVNJ7g0t%?cQ56FvGaBkPM(Ih{+s3@hEdUUB%WeLScFour995-dWwVZHJRVh* zl@<1}IGkJ!#J;JCS&D(UXio0#np#A=la)5J;Q{978;6R~0?+DaUDi1~m!nwJdM+cSOY3vv?}92*rR6LjUW{4o zDdq#-X|cQu{S@`n52c-_X%k01_Lzb=X0sry{?FU@a>f}}V$Zq4fZRIV_|2Z?t#8`$ z+g^&Cd1I^m871;{0_V?T=$Mqzw!KfW&LH$SsA-=fosB6l!O`U=+_!% z3_HuWDIACnxR} zMn;Q3+1{VhIsrdKdaAO%y{uk3!A@RY$02%?yb0Yq?#BLC=ZO~UP(5{aax!^ujwyXJ zG4`@Po`gdurrgo1K5*b}TAIWrzo>@4+x-c1TkMspt~qn@@#$ZhJS1>ECui4KkRx10NtASOx4jLI6otbN1 z6&IGolTx{$T6Wk~mj4$!x>rYgP59kd<-3?WoyX||_em*Fh47BwRpTFFONujmO3^(0=5SzHSozPcwkq*_{ z`6k_;h5q8ZAG;Tp1(!$MExf_g$@*t6lcE=2IH$eCcGTwrq3+y^dV^+`%xkad%`WY* zpG)QivhAim61d8y_V#6A{u6x_VcIB|aRVenZR-ZbI&3^VIX4%VCyyVCii&=i@X>dS zAQ2$-^Q|T2fk>yNsg~_t>g+seWn~o{T-jvz?xzzxh=_j7=#oM7@OWQK;;j)M1!UO2 zaq@V^dZ+m8xYA&Y)&`OfqBX{Y$|PN3Xn*2p8S%>G>2WDRhnI-bEn#&b&wvdhSSnT_ zSB~TvbFi|0hUGz1Q|DhuoAi4~?ApZ~5)_%Y1=w9kwdyoA3Q6=OVY^(uxZ_rn9SVU$ zv%I0Xr%YFyM+*C4>t}3PUXQyyEvPg=Q2?k zL9FZ*^>DXi=rFfdhC!8qyl89f$Mah$nzG&Y6}VJ~YuFd9nYR|dPIQ|KwQnR}ei53r zO;7&H)xV%!{p7y6SHgIT28y-DR1c*Lxvc~nDrvxle>2oy@!|mab855mw*C>O30Xm+ zW3x<6KbK$dl{H!)*HB$oEYYOfN0GZ(J?k?^?S#tx=QypdsK;)*U-Ip0{UEP!qM%rQ zg(S~W)hi~EXN;U$E-FTr&4?%RzCDrtCRXy&)jvZa@`=OqjW)$wGMCssyF?pDTgts> z5J*bo^^BQ2r}}S~^OmSht-{L>$GNrmqZNkLyRHQaTQAi;Hc@AOlq1<2?XXB;lC>>H zjg`|hI)U!1WRT4^w*4~Ku@y2;{=iYe3ViBa5#KgqneuDG1Xy`#i47|HEI!!ot*jl=n%kU{`Swb(!{j+bI^h zkBw0o(z{<7RDL0s5LYGNcXG6)xCOk)k4&2Mzi$nG5>=UOd@G$=pnLzZ3ddsk-7O6Z zgXeX%_wi`u@D|9b-~H(xckT{#-9$`3#$Oca(r?wuBut1F7i!LK+A-C2EvBCNe#y{q z$o-O?fxMSDKS*>?DY3Y`RfhVtwcF@vx$mrco217aiKy86)=0c~N6k<@ zA8#0iANyX*eLDQCiivTj3MGE|u%^q$7jM7EYYzO{@QMBp(ZTTieLj~7VR8`?Zp(r0 zqsC2<*G?kmb#@JsrBAXaN#ERTvU?fR>9Y9JOrE6t^piSr{878p{bT}q%<$8Bm!;z% zx$PCSz5%zvdkyF6htHo6D^l_DCD})DN~DGSaelMuvR<~L&p7l>%|%W_e`;=dS-!b& zA=m`UF0RLpF@&K`fN2);H=_Cc`?fX|sG!|V`|&CGJkA$y-y_xBd`gs6-R>V)Fx$(1 zqt-y~kJ$)dida!t@ODdsm$7mDr+a--8(97O#sSa{BO#)pKIkXfJr{g#@(TM$jo%aP z@U^v&A(n{R!SV6O_+CNF&z|Mf%`O4cqld@{kUcX0>xVl(ew0#C2?2IDGviTd$#F6j|czP~4y}MvB+enk;9u+XyCP$G`&{)0V>O7jm`4;Z@7mSww>TUl9|m&ZVq{xd!oK?4ElpCeEKFQI!no@QR^G|b#f z0}A^U!|@T*TeGUFcODD>N;x)_!8NB)JQE^z$~cFyk9KZ?Kvijdz{&1&YRpA@I+<6k zR9j4<94HRNnLLw=Sc0CajrI=4B%2%Ct0!s~Z7x&JC;ZW>>#1YkM6eGG%4L2?c6syA zuQP9BsAInB{8ITc(d8CleB}s*M?%IxLLOz@q=veEDAngP2kjZ(Z~0csY7r8vC3+GB zhspE853UV1nEiW6chT}yN2Nianna_ON8QRnpM*2J>8)7t>r2RY)8x0UWS93usxyew z16Z>_@+mF#L#%G?+pquneFn+ND@H8u*i&XS?ld^;_hS|NbtEgkFxFdA{P}_KuvUvI ziR(=F`cijnt54a7k>1sV%p%LPJuSx0i~LzXkj+*3aOsd-(i`<_n`jbQb~Q=a z>y&23NuPZ4e9t|TBj3t(-q`CWNR>U(yr(m9DeIk#44+5lWTFn+9^b9n`_KG6Qke3Z zCB@K1>Gv)Bra}$Fn=dH%Ka5j4{fhXyG;;s%P#C{j1VNPC>Dl~xu=SAg>hFo{@IzaJ zQC1vsfm!sUV)N=k`TvSWU_5#bgp+iU%g6y4)evR@b zO-)T7ITzVvm-(&9?jw~exmJ5A4KPz-@xpVo<*tReoV+~IbqrQy=T={{LkSBy1`WxO zfnd`zRHVT2bTj4n*2TBy){%afW4~-G0}e8Qu;X6Tqw;UA9;_tOBpmX@RS0DQF3Xdy zDyt1cc`PijT{z8|hFBi=x_*o5t3dUmtPQBHUi8mwQT+!w#`ugESg3zzs|Tk2BobPk zqg(FP2SBg1-3$dms5Rw@zWeau!$(DxmG3t&>&_u=0l^B! zm|>`GA~3uh^7mA>dECcwuQjV}%>32EevkE2>yuWf&u6fU!_^>x_cu-?RUW^QVda*u zUY|;57Wvs%^KbAa3XJa|jk(m2RoL?b`XulsyVmNEXFP?C;!)O76K!yG)opdyLu1Kr z$BEiDjpg&yX|GRBDJi8?R-Lh4q-s#K=o_U<<*n@yq_bL2zI7p9Z2b9PThbV%>TLD7 zpjs>t!u;lB;E=FRq)|+&-Y?%e*N8r9vKNgP>1bYY)P^y{3H)MF zxGnUoLN~x+Juqz-p@MgPY&ADHlzl=-=|H4NjEB-%oul!cAJT(m+Q#xB6bS*%X;;Ww z*ygIUm|6}RKI@JPJy5J}&s*|mJ&5M|7xgwfLYHvJ_Jbuf6(Q4Ie+nb4*)yqLUZz{U zKR`zjW?1yp-1kJSCTAc`rQB+|lx_1!pp>O+qCI4F~G)fM=$(1m@6 zP6q^8m)tYd{5~Imc0=yN&jPIu`-w7h+kN5U2(>kSYIB44w_;;sol<`I{pDL5;`=&j ztdq!l;Rl3}FZ}S+H!tW$zWP2*6*K;pxm_ryPUtJkNJ$mCOYncq9v04RSuBWIeS^OHH*9x^s5`s>E&U&XE; z4yd%e-CUCT`CrKTWNRAP;Y4Y9;uVlfgN_B{^{ZE280RWODh$Q)tR(%z_GQSsoo^T> zYUdDL!tz7bhzknD2q+_Y<3vCfWi_q*pmeK=*wm&$@3g;PviIyH4v@YAU%l+53={R2 z$xlXsbOn&SW2L3c?dp9qn`t%P7{;)^$}PqAZ^?Vxv$`zpYBpJAHw9hC>pA>)8h(|e zedXh}wY8RUPv-i3vRz4v?Zq)k=lKPu5avTC-h^})zT8K}kh;CWd^nc<0rUK*{QJG- zpS!x_uDA~T-CSXK``p_igCpZA5`KN{XTtkl{M@~!vWM~foDHi;n;O}Vm$F}2_a`?F zBn>F8`e577Sfbr?Wq!iJ?;m?I>jD&+VmScr$o96|{ zx65CqtB_{DHTmLZnDOg_a#j9h9j4Uehwd-uDbuMM9Ni3zFoe18FY|qUHP-pep^B{4 znl_C9kywhEsk^1J*9yLMd1I<9#@f;(Z@*l9C^n^fcXm?odYXF z92^`%LM%^TM^w}7q+-=N0PdvX?5l^2pf@w&qfUT(=wIuluYXwgZKQM3Sq= z_4H}oX#q(E1+c#{xhj4egahMTqy9uG1%*F3$y@l81AX?J{T1)mc~B}~@{d~?Q8BrC zCAsfeL7YtmtQUp|;?VSjFESU>qxa5}_) zKs8G^q5u$K@A#Rb^Fa<@Iw+^kDP9<$9CXnQ)$yy@Q-NVBvuXgLtt+MhHvp-J#lo>}T&zBsq-T-p|g>BYzd zp_+_~^@IYN>q@`n4R2o;8!VK6hA(rprJ3V0 zjk?ERLGkXeW<6plXPib~?rcC$*LN>(DuN2033JL-O0vY=Hd4E_KW8m%w#aRdu z?V)zpaB&=LaIe#vyU^^E%qaFkS4*J~)YJkvPD^$gK=CCoho$-nAa4BU`_SpyjQZPt5<#n67nf~SpO%>n@W;{ZdCfQ3pi#-ij`ewa zN$loQdHq+KJx`hgM5qbIJXIlEip{G6HTHb#StTSHEta!YQl*(UE|qH375!~LY5i(K z@wc@c?+?r2nZ($}&Cecv=YQp(QDy=21m-c6P$tmu*ZkiR$GE$~ZjV`bl& z#_PwfuKzond+|l^RAoLWIy-fsP6Rxdk?(k-5X|RfeG7E+F7PH_XRA3f&2DC^Y#QDt zFsLVILR}LdS|ZMSDw*%8b8=8jS^0BmaiPK9{A8)z1Y_-Il}&~Jpjb=J=Os4!&Ty0EfR?xlZuIH~5QGty)m6GEHoB-f+r=H9RCi*V5qDbV9WH(W!ei;V1%7cM z!^a0%+Rrv@Ei=hDb^BZ(d$!~CJhCv2tJYvhVLF{zo6|<#+`UB= z;<^3Ac7)WD2Org*M1*duKS^c987*X+wl(cF)7uAM!fcwjbT!@t&?bgmP|n>+Mc5`i z-kJVMGn1^6isxh9!7f$HhNw-&Q7@mXFzK7p*(A$o)w|t!95*Lcxq9=L*S>8^jB*Rp)eOEI?WnF*-|#SFY8q6r>&cI z5X)NUk}Z)!I%r~+o<1YZX<8MBWG6Ou#t(B~CSq`k$=WQNoFN*eUh7a)qQLZ0@SpOI z-iaf=|CV?Elu;V2KTCgb54l=q_=&AAZd%9|?HW$YVtV_{yK*^by{^TLGE^>_?i_vJ zxtfGjy%)#sNbE4S@Y}0mT4%xQvGvcVNi#1ujw{o36*jN7zIMDYH~!P;pR97oSym0% z*gEyYs#Wp&w#$q3RZ`@HmE9riVS2A;f5cRK4_W3&(JtQN%l}w&RpeU!;DgPL(foNv zehp{psw+1~DZ0PYE7LZ-X$uD=l^GueObzw8dH8DjS2`5kB}xciR_KHnc%oWvmskI0 zVr*mX&&2eKkWS|D9OL1!->o}!68|t4c7=c7vGE9V%1%CPlOJ2js8s&_-3!Z$64QsO zqCIE+wA@t^7kSYRdHp+`s6+iCmu~sS(lVf_D(OF~jx3G0n zTHTq|=IF#&K}!oA0mDOhyOBXWx2V2k*&9W3Q++=5vbX2vd^I`s$g{q15vp!IdIMKj z0}}=7h@!vUQ@-UE7L!$m5b%ZGxbO`E{IzppcmqX!juC}CcIPo(BfU4L(~#`ydikkP zQ-HkY3!$B{`=sXq8p38}Im_+cu98mXNn9@y)lXa6WHk~VvM<=5(0S2*Wt8?W1B0fMie-YsYM(L6B00dZNa>nlH310eUMM&oC;&8NQkT4FHX_i zPL_;mA(T=JD-#pWV2~~bn)B#!9baPNR`8(?%MgXO<~}2)ghO!p%B2wcUzkvAz!$q> z>?&Y>(U2nBCd#~Fr)wdXl&zL1ZHVXjkrSrA*X#*%cLt026Dur@MJ+X@x1>?(4O6}T za*erV$F)OGE}Jk%aZXA-eHmrmFZ{!MSeJD``6{yr@65%<$mH&%Jv9=7FPOBgMAjBn z##bx@IG%J*?ccv213%>!Gq5DY4j$>f){1Pqw|04d+6sNxp@)#EgCj8fWo{i2QzHgJ zTt2tIElOta zk$u!PDk57c{N=O^Hw4r}mh1U`VsvI={<|QiqAE2@XzNw@=t)T-+GGMS#veY7_sp@DhrP z{$DEAg2>mcsAYLlxnE!7;bbOY-%X1&XT_1v%nydqZFT-9fM;CX!;nd7D;^-bGM<>2<_^z(Q^o5Uy z3@Q%gR?rIRc*%1EB*(Y5$bbLd=t9)ijhEjpe1;gR6u&i$2#E_1?Hh7xt0VvCMyblF zk^je6$U(^%b)I1MagTS7)HUtAop%3r zNAOv^nf+moxidyC5rd;77J-zKl0}~J*w`4+g)9Yrn(-M=gB@RcRO;H1h{M~ zuzH;-^yawdczce<(^y*`1)9ybZ~u_VsfXNHJp>c&Z@S2Tt6%=NsF<~Txz-*B_oVfHeoM`Cs*8~lzY2m5TCvQp zsIa=o^EH}p4e(R_@u#G|W4?011DWLi@&xFqBNpprpU62We8a{&V($se4H7T*ueL1? z-g(9sFa%4|lFsX%%44`n3emBTr)fZU3;jB|E%xzZR?)IEpni{rDcfs)!`zQb8_!GMrWrq5XG{yH~}P=kYUlyRqdZCm{vU5QA?nHmp8-U*Ft zkD>1?yDgPB6GDBcN3TR(B;_l$PrpeH_N+dexY-cE{?Ls3i51b=a%%ne$I}N5Z^F=_ zYIJmMlj`b(ei=V~^*}Y{RdVZqfB;usr*j203N#U*wRf&=!YXwrdTxl|RFVrl&q2W1 zUmtG;mPTKLz8M*0o~a}LLL9A%A#;#vQ$;`ioQRo}!-pcR?P7Vj z{*<3Lg&gFzSAs(P{A8J^A$e~nwNg17d{((2A1raAoch%HSl=p(Zs*oh-5KBpu9c6a z_PrM&O15MAxch$T`+*O-!VBLnNq7ui;P|v!tR$1yu0L$nC{HzCSGb47k=N z&8mH?)^pFsK_0X9?o?2D{z7D-7}#ERQstvGa{oq-C^C3caCuQ79{uq#;kXzZJANoW z12oo?yBFsGUqY&5F;MwN6Lkc%T4D9H=d0UJ$TSjz$lvjC(J*iT7AL!oWI{_7*qdyo4yNmbO*-Go~#|>d@A3uqA>_X1+;QXb<)xtz#%afv$b-TRIHceWPuwlFZ2lvh{#ri4}L{o<`*w>ot6);SmMTjtV1T}PLD4{kFH zoL{XM6@RjGQ=3WFYx5bg+J}UwFj4F3>*unamHoTx0|ToTF$L6p<58BY4et}=eee+AOfb$x zx>YKx{$JdWLl}}>O5=0(-PF8jGUvD@FQ|j3jO+6@tDZ{|vt;=VMccZ*c_zQsDa$kw z(>rzylU{J*;q5`g4jdj15rl@Go}RmR?-CC~P0+joX*bhEJSc4m9t_{ysSO|*whTG~E{7 zlQCT`02<*D=A!_5J6z)}Boi0${TTSw3f1zLVz;RmjX z3BwbV=oiT*yWets7r{@;k{9l_1p$CtD}V?d{EzxQ{N=fG2d>Ma8OybOJDKGE{S<0U zn@ZB3*IFA?Gig2lzq`Plmh?awZZ(g9L+NJOuuinB84Cih1KRNO=V2O}hlK&04oUUO!^~r7~sXAv$$P%30{tAO1?!1G9@@ zDPK4y+>z9vUv`{m-81>^*~5n#tQa|WLN#+p(EGr~>FKj%OL}t0wUkEof zDP&gA!Xe%^6&4TBr1%uAz41xKA=tpohUSoK0G^$9#r7`rqxbKBXk5J66Wl=L(g+OY z7LY7)DB9yElHcV5ox^SP4tZJ$5ZiP)&B+vh^(KIL{#P3jx)97)8s1Pl{SvDvE} z78v)%n)4DiikjGQ;{bac3%&2~=N|0$;!J^RX;I%o{5aLCj}c2wq4iX#_RC^Z{;Of zlb+uZ__X;_m$j0HdJDSgV50(uZQnCUypIXrKot>vbiGhagxDxJj|T`l``}@&0RXzs zO?2JQ-A9k-my*-=6umO^kHe9;XS37mgyz|C+j#L z^bAq_RcOs)c~9#Zim{)1^>AR;YD|Mjwj=7#d-wj)f6@B?VrEKS-(xdGBlz7qY100~ z!a{R*5FbSb&y{jA0Rb1jM4^&_u9wKvKw3xl*Y~rNG>#sD>jp)Xa&2;)2@s6IH3_SM z_pPl&$qx*Sx}AI$OdSCe1!DIDHR@sIL|x%7p@Zm+2d(_HJ>Iy1I?Zo>84rjGJRv`d zi$nn)qF^?I(vZS*Pth20JbuCdz>TI?uwmMJU`IdB*9$ZFhq<>IKNEZ$IZF9?H@;~s z2Q}hh@ZrSHNhVqNm|;2wE12ig)Z%RL>;+^Y(|#8)kloi0mlq$12Vh7HbPOO`p%U@1 z$34l#3F&swC}d6@??^(Q8Xy!`S!tf2P=*bX(MZCP7cR+g-_XqUt(*uh5X*1qSp;t^}qmh-~mDZ@Vjs+l`Ky! zyMrXv;Y${meWbDl@L2ZoCgF*~sYI4{b!j80-Va^u^AGQEary4{ov*{lGNP z1c0J95rC_RfCU=pR0j^^5Nnu$S)w}&1C@sG4Jh{HohL6&1dA8JJv@wvdK^7LX<6Ve z;&zYpnguc#UVkAVLAwgzbCRhvMV+WdO5jG0rdDERRK^HfG*o%I!W>(7uLP|jRKP$M z-3|h#Lr3pfh&R4!F8$~v4IvqMZsQo2C;T^>V8)t#JSTJee>;k8A1U@}B#pSqx|W!k z^Su3?`H30Ke4dSU?%?PsNL=SQDeopHo8NaP!W%Gn*g`N(T3C5?Pvk8Qji4%f{V?N< zELy_jY1+xfK(vv8QJ>tMq6c<_@#e!DF{zJ{bXFN#!Wg1KrIO3l+S+=*-UW&Thf8a& zA+wcBNsL{Q;TfW;D^2<^Me_Ie*Vn(=J!PcGbt&WVZ|RxY+06!d#*PjSaGHJTqnzBD z|5FY6u_w}EC*hRX8=*~xCe2IAt6pOTHfYH$1Cr6h+=c7RT+7B6=;S3Wi_%2BY`I-> z&$d!Wz=wv|i*8779+{k&Fn#KJR&pBwlOK@tPEX(AYo?NRYGKo4HNrjd25lv`q048R zm}Mb81`6hTJsG2#BNiLKTXE~g%|YuR=cE*8LLTEI9?|#=S&?PP@N@~{D0F^;kt^y5 zu=R-m=h*?3Me&7&g-honkcT9xP?&`y&)G(g_>NP#35xguN_f&NaXt#IZ&?2K8Jjjf zgH;Rmh6r8mzWmcV?gu>QziAQMq1eKBV4w!eb59ym+-~+=p0gp44y%nZcj&ZC_#Caz z<|0)9ZnAyY+Jv`-N~)>_qckSL8;9ZJ%8dmfe7kw)ji$`SPtG^cOG73DJ7QmWq6MoA ze0xIi@w+wwxI|1qfF{D&@O zFw~P4bUN^;O3Smd$yjjj5wVCSSWE^noC$Bn7I@@6)%tY?eH1`8B_%C^oiq)$`$AfO z{1D6Sag&SB0G9@%VvI^le8jV8JH3wo2NK2_3;tV4TR)$BhF^f3 zpk*jKOTXu|3>UXaz{*S45FJ^)D@5?_Qm0tYzGf;enPbFv>*{K{K$EI4eJEr}T zTeI5d)~no~z+I_y&j*(h%Yw3siawGLhfX4hqsaY8-dNv=M_A+Eyqr1qyP^Os|tT;1A&DdhOd z7v!C%cEtmSLmtRajV^RR!15)lf3^xKj8qrp#8k80Gb{^;ZDo0SHJs%%P}V97lrc8E zNs9Ckq3v8r6!Nur*f9ag`8^M_M{qpyGi~GJyDc;U@(M~zQY#9^1BhUYfy8a*BG=`@ zR`z+P=K}K#PCvl6*S~=ON5Su&6x|8=RDGSwy z?ilu^udAy29;AnU#LM{f{R+gYgG@x&#LVHwZc&MK z?W4=OeJ3sLtncOG%Ne4=Hzv@QvI3*-HPogyd2NH>t^ICSq75U%!5}5I-fxZg1-09#<{@qP%m>PWOlG>})T5gNEoL@0l0S`7J5pc+Tq-^Nr8tiXwfk`SI@5+^A^0 zPyC+V4ik4*w-U2*x{$wEzX&pJvJ`+b5T${E<3C+Wl0|ZJBCrGsx{>-Ln>#@{`G#C4 zu~aF@ES#Sj^FOxF(NTwIeJpsqM|~ zav|;sBrPCm-E~Zz`0)da3%vA}@r^P&?@HP|99Xi^qVc2*lK8@2eCm-$D>jFCpf=bp zb?(j(<%CI0EkP}51ofII>nAb#%=aK!#A$v@@&9^VNT-sJXL)hv#}7N_oN4sZF(-v9 zN293c)$$n^ck7M2>?57*n#p)O^AHQ@5{y!}*{6@D2~b5>!7oFahIo1|g5R*}0Q&B} zwfok)d;J~=Q!lOT=9Snl+0RQAw>q48Vyy@vdHgKIx5A8bgC{a?;|1fyk5Wffk~H#P zn$&4atlXI0nei?DD^K85 zgLXDC;{=kB-2ss2Qci@0c$sN?#~-9o(A|LYf-kV5f2pZ2y3YA3(d!g*UZl}6ozhXY{Cn-?t zf-kh~j zsul;x%!8>vMRRNB8Ulie7=9ZJ4RO}6U&1;D0M$TK_IDE9H5Zn{%Az{Qk%yf+MLaJQ zQXnjsnQ4Yc2!*r7K=iB*B2xrXD9lRBKu>=%*9gV2;aMwi5pW#d{&e4%6p5rcPkWCl z47hCIwN)lPZfyUOh=+v^~1ORNNq>bNm7)tlF$4k!X`Z!pZ8Ve@eE0T5+Hrgvj5NP7EnnvpJ*l5~`yve0%3-Pmq8e)F3#y|++eCNiMBs*Ga>VL zQ9r`I@C`$WFQ~&9LRk%2G3tY>^G!K22lh(y)(z;LT?z$veySVJ; zO!yh-L)TPjK@7DK3Z2NTZ%=`_i-ZZgu~4k+e-WT}2eA?q$lx-{?ILx;I&F~RBdWGK zoLFMVpBQVd_-GpbB0hX{Pk~jufBznFO=gQb_8EIKHYX}U3=l{vD(1@OpbpZ@hG8rF z6XRTDFI)r5(SH^(R=T{r{Q2`|R3o-Jq_u&1zL8iwFz2Nk=c2r_lgeR))g8uJR$p(` zhn=tQu0Xs1_eg&pBK2c}H~3e3kP7U_0W~2uy(8d&5x<>$|NbV_Sp6QTO@V|u6vbt{ zxK;Z>09!T`c-r5kT!eWdQ5t?*m;_T)?CbqZdV`N!NkFG&S$4YQb&d4YriP z^*e}Dm04(8E4-Kacu`RN@fZ@lX))D7%0WG$f~f zejewPir*5C>noTZCT24D_ghCGwYiIx*1hM-R?@w@oFcv6cAo1(O(fzDQoJpoAfN_z zNrXP9QLYivj6EB<4mHS%^M(_$FM0q9yrxkD1{{8HQK_r}E& z^C>m;Rjm^h=EzHzk$`S+rU5ratvUSh5GA_QB}3CDF8))%6v>c& z;s3d$@^dpfO5HWq-oRe{NezHlr>(o7XG2gCTCM6sv9PE2?K*tN5wmF+R4iEB>3OJZ%&? zT@dM^wC8Os1M?@xbI{*_Xd;qrTH@&kZWWP|jLol}{$Y~B+cWMzF2Hyx&+TSRh{z}_ z_xJTFLK9QM!LAU(Ff>JNuLpg5rg5)swx#i ziP^DZ@7XSCjna^oqth-@Jb7&Yzn0G^hF^&)$a%)e<-%CZ3NPI?lSYX4J5gvrnE8Ai z@+?+(%q5e2Oy;fsKrly`UN(f3jUMK8x%Al$)a!Mitdo_d0!D-r0%BzBm%tC}N+;d3 z;UyBR!KKUEa0J4FRdoRZpsaEkc<=!8V86FC8C0@4VaUEcy7u3Wu}0iVN6 zkur`|C{?H8=AcIfgVMH-f`I1W-3heH-yd^ci%OsL@C~3C;05+^c1Jmcq^k!cbP@wQ z{;O=a|9|byDhn*Fdm=$NW>H^(?>M5yk6Z~#xp_~vw2#6|O(Df&pFSRgreVw2Lf(~2 zq=#pAkyuy=^j3>$4chrseGGlP3qtY_rwcPe@N-0uy~NS%lFm zP7EZH*=yTMRw*@=H{p;VbzOg=Jb+MAA)BLts3%N=wcg`aWuB^a0oY=X8?=77!|I2| zr=}MEuF59ob)DN-#iOK*wUkH8Pz8L+vaf-At{;ASpl5jA?ciYoAdu{;S>&;(FP%!v zE;@hG`$8jf1#ux7;g1Y%J%j0l47OJyTkFQ^&0W8>cs2-(l7WN4b1v0q&yu5WfVQR zBpfjric&Wk{oCr@>t^}FuFySn7DTu4lvS{AVBpKHaJNSo`-l1jgkz02fAm0KbS228 z7j3AMyJh6$I4(6{&~oPGrC}}rxJsB@xvKp8Gxiz;Z7WS`#%2VlBL-%P`ijF>RT+`h z>mg?75if)<8P0@Kg&Lk6X>C@oNIfJNS%F*wR(r-`n zSzDBLpmkM3@7}4z-NT{xwM)Vs5AE~p_&A*vQC)F)o|SiT_OS%K>-HUV*e__ajsI5-8uQvu!bV$f_jK~nIh-Iam7g)35elGAe z^>z25^nn*;q6yTYBIM4I3r=r8#5Q{zW4&HLRui@X*`J)#&^^YCH)EH)cXZWA@O}kN4ZAVuUZyDkyg3Vr{tejk26<#CgXrA@m0L*>oawy{Du`dB(2m7FMnk?on760#Y+3y?(~z|V?Xa{g>y>_T;^nTJ#^*<8yEF1 zp7y(+qQM`t;X}?lfk1!L;1RiC-H6K?`89 zK-zr|2zvEH#6$Rl>}f~GF%0qJ8RFvM!Olh$FB07V6Xq2 zR;Ez%dk1yIOCBV9y1Kf^2GK*4?MnxUi{KQ3r|;t3xW2t-vaUOHVZM&Tsy_z0q@rEt z92m#G9lo_=&xiQWV<5#o6W^8kkkGOHpBpEU230H&s5t+f>7{O2& zk}XYBitTya{2^Y_={C>h@AJ9absY_z)d<{yO5YmEfG>w z`!D0`PlG6??C_fQ&O6)N!+#=uwlC}q*!%fRW0bsu*JD|Zcid#6o!9be9!2#P&-EX^ ziE*QXFJC({y1@U2j8=(4e4c|eCldEAm*q~g4ACdPD?|aXRtF?C=vXBuyUxmtf(*Ww z9fEtvZBq0c`>dLP;7x8Z<1yaNCZqpgt&g{Lo0;Cjc5sN&{(TqO=nptKy>+p7AvF`7 zl5xyDZZ%bSKxj~~qZHn&Nd{Ia;bd~aDofpgaT(9;4?3*#!@SS6e4jtdSoeg2K)I|% zJsZhS>p7m@ZC!O)jVkBoUT=ya?y69lTf$WzuD18-(i8492^xaLJC^wGbpY)^HN9b& z4qY0<1j})@R|l@Rv0eRjaL>0eu5fxpuMb5}Z+L3Fi4qbb6V#)wdBEd%=1!AD#UH+R z>0dOhM1t5&d=H<(Q}Ukf*%>b?{b8Woz{x2;Y}QIWFGXToshTM35h0emD;bp7!FRYm zdypVW*VPSLsuj;El z_tJ^GXF@g^l1UK0d0~-{P8oQw$k%@NZ=`i}NVPggt3o8691EHyXVFrs;8SkivwWdd zzLd^#e`oW=Eh@|ENNaY!#<}yVgqG3ygPZ(_q;fq948>U3>}d2X@&PYWyF5-}dES%H z!Hl1~@bx}eYQB&pNYE^sI?Yl{TZMH zj*Gj6)3`AzLg?MgCI_R5NdPAVEEbrJ^i6XztUIjTB%%KZm|H->`4)qu3jhmXPaWuB2M}%hV!pPy0l;5dSHy%s86`bz4FhVYy{b+Ov-}$-|hO2-}i2 zb^4U8b!pfQNA@c5Pwh8tW@lIh@>$%Ody|msD!v-fQQxrZkjL*Ja*`!`> zPrS_rg_)&;1!Q4*JYR%2eT*ID@S$!agVb$2;ux)ABg_rE9h8dgks6)r< zXexB)e!SS@knG{*RoJzIDen!Eke_b_k?MyocAer%h=$cix7J8}2DXlg*r=yGSTJCh z?}03rdit~CY&-%JUAAI{mlapVnuk1>(VZssKLYIR9(9pYIA&&I6up0XOJ(G73Wn{8 z_+XtHUEU@si|DQy6X!v`H%u+xQpJ__QR`TA*UQ*{f6^UuQC6vvwmnq6HP39HO-{sbw%>#cvm4RRMYP1D&$D;9tqjmon zREOLRkAA#;WTzo3$_nTrchf4N#eM4t!J*!1tPlpaGz#nl>`) zhl+XH=N45~(Vh3!RS^N_Z06T8Lb&{T_NCUXqq{R*r&0NA;*`A3iCWcT0(TmAYzgrW zsKikooU*)1@j>VCt@+~W zZD9QZG9J(_y1I78Plb3}K_>MtJPIofpSwpdY6rlk{Wkh=s9XqW?Vvg!;V|g(!6oLr zKRL=H;_3Noyd9huNQ2;nFBy>_E-CltptrYyUU9J}=u-UVVrDzjBztsk@SbE;U$^_c z!DPdGBlmA2C*-*xDdibYaWI7#k#TGeYbdkiXr;P zvi-J>@~AI0UD8jaek<_P804SsnU$)w(JZ}ua=RXdgO{YsV1?gKZISfst=E+te$L%x zdPksPS?*o0uKq22?)JCMJ42Q8D7lvTLNt6&;aO6p@@--Q@c;-c$q zI+BUNWLxyORT%wxn%MI23Z77-SU*w90J+Hh-g9@s$DX^#&i=RU`+WaGvxAEkPIAXU z&mC8m1n)GVK&VIZJoQQ?yD>t8_g@F=SMKWhti=x3xn;uI0G+(@rOGQ)6EP>ZgW#SS zF7azPWOgxLBQz8}IYJGYh{_dPr6|GEPH*oVuFY>8{Q2?&6~oKcST@NUF+%)C(e=;V z_G1UHi}By7joli@qI+*@m5nsi#Ilq7XV5*77xhhr+*cdxj}i^&`_4Nnwg1^GOar+! zJJWpQT=%43K)t~c0DS^}JHLKyqZcbFEyTdlKH^2D#@ayCae*EhH0@d9z}Xq?_kRio zTF3zEZltZK(2>pe`U|>nKr6%5ml}9(hH>t>#+oE%t>^7d#R{}91&O=UAXDMZn9W2@ zhhTI3M7O>4Ew<4qp)X_gm8X|YnW`@ju1bbDuB)4dc9F>)@qM+mZcD-7-Qe-HlQL|9 zV)BEvF^2!7A_jUZujRkEcd#n@VP&)IR%y1*WH~5zMmAm!Aj^?@a!lx`{I{r)EEY-) z*&yzEA1W3DmqBY0pQHJM<(DO0uk9ARr(H^ZoB5OL-HYYqiCXlg^AZ6v7lKike*SC% z^dzSK`r$}QK4%f8O$QSn*-7;PCz%oY{5f@V-p*z()a-{ILc*-9?DnF!F_d>K*Vl{u zvuoW`#`@>hH~&?KJgoSj_{<~GxLz^CTzm85LJe_S8}kQ7&zU)Xe50?R^Yzj2qr0Qd z$#=7-byYr}Ip?cU$u_eEIGRxv*Bw7@P`k)0m@hqX8Vr*aM3hnF!K7nw?CBFR`N zGG!)7h%$$4$y_1HJSIaSR8pywGL<0}GS49)WTsLg3MJlS(er$tKj2-T{n{(>g*t+wd=BvKCm!#uyN0smYY~1Ta;832)q5UY-#7b6bFIcoky? z6XDUAY1F$Weh&N2P*qN)+h0da8O5Z%#yJZS{`iqd%gS_1K*B>{T!odD-}9z|=cxPY zq&tjXjv^P(7%@%2<07m15y@%%S*$r*d3|MOnTWx0^uNIKN!V0L6JQ^Lc?z^dV~d9l z9m;-j{=dizaWGv$qzJI{)a2wNUIbFcE)u|x6%OT>8S?-q$~HdGv<#+s$){VLN0$tnB(hbir>V~bkus_x&6TzALYN(f~EHA3-mo?Ttei|6T`&?m4iE%-n?z# zOHbS#+Fm_!mL}}&f#8zzS@pl_ZzwE`UEAvW$SgTEvdCGge5^(l*Qss*`t^*gKC)9Y+_#@Bh$Pnn1>+N&D#ur%zD(?LA^%eB;6G zwl$k$IUMBZt7m;*VtzwMsHJ9s*;vjDxrLW_vlrWoQlA^fIX-*i+&_H#1$HBj&mGgmau^Ip`wVry{@yfUCRLM)~xCa`IOye04cbA@$l zw6J?dg%ySXE!4Ao7ra~sUXZ03Or9(MeCjZ5crTSv9^`M(PCK?XZpBq-H; zjf1!ZnSSl<^*BdhA-g6ZTEpr2hFdj-wLFHnSYg#tU!Ye?&Y3?_a?$s-o4>;)>+~OQ z_g&%NQ)P1dh2zohpK&G$9Bqwcq3riIhORKGxC3%65#E#7 zhbl(Q88pI1(X)}XE*DLIqri7?KWBZt7&ODU7r!`q{P!Mrmz3pHn5_C zq`ECXk!6I-i5CdYCg)>_KXgzg;r4=*AN;iOAP1J>uB7hRbF$Q~`M+&{8ulca#1`;# zWIu}3)0dzKWpE$7QJ!`@gyHztT^7F?g+=;!-GOg1AEVa*z?${;vcZT$*+9YY-EswU z8rQ6ukIx%GZ~K@JXm>)@S^TEF>41`mQ)+3r#o$Xx0>*+v3vaNjJ!hR<`;d} z_!ersKRv>Dr#5P{yhF%m=J`qWhcycBVYPJSy!)xHnDB81ipm)!haVB4 zm%CghJrk@Kb|}2p^qO;xjX-6W=~BBPeebN>B3ArX^{?+nLKRE*Ty8RO(3_p`zae+$ z6nW^m2Fl)}VfD0gYBo16ZoR#qPQJB)n6+QlkixKlR-K33?%JcVnntgCM$u9u!CKUQ zCORf9^;3^K_D4OPTej-hrWPFR=UG080c*|-m2NQU9*{<4@a2O&C;Vgb_y1_yL{0|l zX^==$Q&9zKM$2ArO|ZxpKfR7V!M=(xyG{>W$AW>4*?yuZ)6JwFck=EB!r=@I06*=8kLefpj0IqlXH0qSqdfiN|_tIp`MbUCYw0#&0uEEi8S% zF+ye-L7bMs6KC_RJv#J@bzSe2&-uAp8&Zcj9_*@|M zt;hO44mU@$e%&zGylUUP-72R1WKEr=Ys*ECV>_#+9?h0Liu|B-H1w2<(*gAY7MIVt z@hOjHn+)^k9!XFn(9J!+|5^LwhbXFEo0z}ZMLd43cPc9btX}#`6R!(P>A#N%2?>Ga zK;MKHP?bq|)mOJ>=o-lAUH~rd>)Y!f<5?RcD{U>3F6tw&!UmCzEyv^$Vt;E7q}JM#Y)UZTy_L+CXCR;}>K_r9Ln|!y zP`LNHA~zdn{-Gh~#W%JmW^{jNiz!*Lt!4E*t^88^(f)?4q4wTRex>~Pr+A+D@UvG` zgfhye$L3#3>FH{bW7tMmvf>TA#4*EHm`yNB4NZqppj6oVtk3>G3CU`@1tB8H@JBf~1(B4XPi5 ziUc7>iHZDI8{a#17|^``?0@K>1+c%s|=w`+$`=<^iREpo?h-=#n50 z-oAYslQH0ObE6fYtAM5W9TQlX>o#VdCTn%N)$CSs{@l4=KYymRIz?+3TUeBNj@6Z( zbw+~-_cQ?N;_Uj+;-56^P$+_7&fLC_ixC+G0TTS`26FJA^Ae9<%Wj!-$X zASXRO2uxkQvBBk-z>L#<@Wt85x95^tI}gFV5UzsbPr()8|Z&(P8%+ zDqsioOe1ya6;e?4aRC)zR+ZU(6~;6zw(_n`*5hU{_m}Ohkb+WDNeI;@GKqT{k=QEnV`C>-oG`J`Zdu_Xs%jp|AiLG z^0|NmHM#-QCxZrSMUM)`lT$bp94fVaCLlki*6mnGFDfM^3938{s2}WnDx`&^IFjZA z32b1$b$vTGROT(xec(9dfM~IC4n7`^J_{BFrEf;0IE3(I(N{M(6yk1&tCN<=n>*Wo!k(@&KE3klfh z&6{8_Vw>>5hr_Rb%1|2~1 zJvq5VX?IW0F)OQ^3LbFr0&xO#s}skMlW0B=3_)`Rk3o^%?A+Y1K!P57#pP7VadY;b zP^y3U;&=#0&*3TVFPs_H<_SA~C9CePa{tpQprl$5oE+CaY%YAoRN~&DSJbr3&%8Ku zndH)~IKA&`Z1(Jwj5FA*d@OwJv*uBr0JW8cZLY5^xR^f7F`Z#LGt$W}yyXa=gJH1L z@yLl&Kio;-j%00~>rA_=RgeoyIf{X>g!cBE!*%bBC7|1S*Lf=1HkIm;miTo~FEO zZ{-saTZ>|t-(77#l@R_vT!6#MWq9kXgOQV_^K~xIVWA4r;dbQ!1rd=*#Z}u{PjT@e9&s5H*DZT|L2N(e2B93z@niPXI8I>w;`%F|{qk;n{GQ>13nbe&c)#^A zl5kSfe4?M6rC3&6nQq*J$HGj9I&D_J)NJ+$j`5*kdOO_rp_U*lJL#}sIQo_F+9dYJ z^1Tpo<59_C)yhy=LO6}*rQiZ_OERgJgUME84dK_8!o@?1`7PzDcthl)>INd&s}h83 zrCPRaKYN@r!VaKVo=wHfPyeHX9EIdG;cw1PUHyaN=pU_exS7+}*778NYY0nwfi_&ZK3dyuQa%Bn9EqYE{faD}jWTRj9JS6mAHo2ZiqE zPcUtwxJ;*>o<@BJCkj|DD*1rz=_FG6E08$B$kAe?G+n-YdEmv_*b_BUQ{f)wDX);3 zf>Jo8ytvOzg9j3Z4+w^zot?$D3G3iei;n=C>p@pJE_xC=SxUA! zk0j;FNKGv{SMy}U|QqIAy*f)oWR!D%>>ySR+5YI8>H6chVU z>N$o-Y15`n;65a|rr~gAs2a1r<0}#)$#mKCh8s59P~Geu6xb;p)$>N3zWl_zp&;%GJ47vYDI3{Fh9yV6kIA$6FJy zhr{kX^U|KasC#L+jik$A@(2ax!3#-;aFFBi`p?DX#f3$;OP4B|C-lz7^XMKv+&=Vo zaH#wJ`@qloHn5z(OH*YWdrbzai-|d3*lGw0hMqW_@a5_5t2(|xT*S?k@Ip0KlAaGqO^3?UI6Y$%j?OrncC(}aRto|_(zj9cEPIo*n>e;KI`Ly z14c{Q!VMv)cu1J|@8AAVa>re0gW%lB$pb=b>@#3wkIl7QW&qBLlPMC^CMT73S`u5z zaN&n7QJrKn97$pWC%7kr+DW7dsk&{QhlW{n_wKmWE7Gzi$1?+6KuSnQKP;+R1vR#>Sl;9nyRE)-p5!tR@?l;nuVX zL4e@atvHK$o}_@dnmW`Dg;zS9h$#&;Bw%4K2OwZ$*{z0?hX?E#pvUn~>k)3))YJr6 z8Thh^si`oLCdoBr{Aw{h7R_a?lQ@4F*an?2Aa0Q|$}s^Zo7hc3r~G+#)&rsGVCR)R z2;rI-f;;F9HU;(|#Zv3M_&=bEy8riITG>Us{pYP-&hivdvaj3Y{+z!&Qv1^r^{pVR z#O;l3XjMuf|58-NE8?lU-E>B-K{bx^qYDK89YmUg0;-|ZoAh|~Qhq$P_PH{q|NLQV z+E2cYGZGnZ-RchPy7gGIN-%d~+u6~ck`cN?LxUDk-{$q7b8Moc@AGV60gak$FbSTZO#b zWHBlsxyGr8fsv7vH!ix_RxaaYM4CYO0kmDvrvZwCyRn0@_a1Qcj~?v;`xGNZGqd8- zn>MFWs9xuDTcj|AtK$i9TZ+sm2?XQfQ^9AU_Ps+AwFi0(vWyzOFUHo6>fFB##1CM4 z+TH#E7BaWqi*nJDD%(=|e5@M>5C#NlCz|+^)@w*ac-;N_Z{XwZCe3Z7yo}022OHA? z0QO8L>j(|ZpveL!1~YjOyC>O4p$n}T%Ik2p-(jtj-HBnQjuC&O8@Ry;l7_GiwO2jI z1jcq99Y-Wsws>2CVsy8|{KUt-ef8qijK%QC3LV z_|^Et39g%(->|u(rvr$z>kLCB<_o}=ta*2`5R01c_Lq8|6k@GPJJUy2a*_G)tEke- z%DRE2&_6DXK64|bbToRVqNY_?YUxeAl^^YWuG?Ky*iyc?`#-AA2?pKKZ9c<`=ZBfH zRLL&UoOH9~t~xL+7#FH?gw~zNeR3)Ogzt-Od+GijVznQct-7EhH_Wi(IY)Ebet$07 zv1-Mx?rK>L(QEc^LhVFmEXL}o&2Kvrr#A6#8J_QE<>WivtS|YBRsJRK-JG1yNHFp? zY-Wh8#=?P+oKAr+zW(li70mS24vvl!A2}9N=dlRq;3d-PC;HSd6+YiZ6Y>?yt=H(y zFG1%#^mpd`)&G{;6u-AvoR;u|H=^Rua+|>G)q>sw2G&WE5$WmaV2~tp3EOer&nLa! zx|J;AY*l{VU9;!uumB~-udZ@%wQu;Px%Sl`qTPzMzu()_n0@!YdNFzJ=FLI$t^)(0 ztD}iqmrU5UNY%JtY2!6da^&00!Vq3<_r$FE&?Q4xwwIhVx=9cZKsEqxT9$Vdy*TK| z*SzoPSVZ z$;iqICdXYJA%##M!@0KQJaO@HmCH>DDhqRS;6<&wGopOXB8(e5B(`qL@ygFW=?3=! zv!TSp=E_JEVZS(54QTE|?Zhqs2xZv~A1Sm7ks#P7aX6CVeAfR>EZJpJ7+$H#da&C? z-|wqrEz{chKy_w#m@jCYf}%9jvcY)|Qd^hVg(nLs$Q1k+oEP4zaBLptxd_p9*SWU9 zCWc;?1IHhQ=qXwqBg}O!rarXIZ}m*bE|!)zJmBD_c98anE8oR^6ic^xGv@P4DAjog zz9GIPTv}X)pXS21&2sG7UOzSBOr;Tkp~d&_e5bPLn$FU`EZl;cIs5Ui%|w>efLhIN zg~~Ctoe_hPs-lL8=Ijawg3ienW-qBT{P><1%;jm{xut@_YD__eW+!iZcb3$*m_DNV zd)oMVOoCYGscmqIsjJh{GgV88G|m}7yMnxxpZ*sSx-niqu2+*?3e7r>1Rc!eg-T)S z{2U(sxc^|20cpar(K~FFd{3uw`y(w?9huUKy@2*yT)s3V?}D|VTL}jnTlc$nfbKLd zQ2|z$oo@Xd@ESvk(a}*#{c~sp&@V!Yyb`EVOKoiL;80^L<=R*1==5dZQyCAiwGEom zvlGV4P@q6NfSS+Fj=w~hl@{JqrA4U%jT0;Z!y=_C&X82tO0lxDKkEMCAh~(=&tJl5 z#QV~?5s&MD>k2zi<&Z?fN?VK3il#sZI!v4rk#=+NAVrUPmJyN8Clzb*OvK1~zx^6N zA1(ANI+y->pVot}i+}oul)Wbn5SRp>V9Rex&mxLiA*#{$n_8y5%!qD;i%t{oqAp_m z6e>sFICrFCVK2Nbio4~BI_Y?k+$ zV!jhdlNtG-={Bn%@~w8(@vi=?KXv~gGo93zHD z?B|9AVq}<>4rwhYSVwGw#ASn3jnMvBSb))s`wuPPJ!3K0iuN8KJj*dB zM`qu?zRu31t5>&d4Z0#%L_621J822U6q>-IB5zD968TNsT$JQ}xDEnop71IkVw;UOPCp>H|vyh$beyFr-1y=-6Db+n^YGtO^bpbR74$ zTt&nb{0Bu@;)ds!2Y#!}xUG|EWYWaljN2p=MBdBK$ ze~HBr$sxUU*>X3Rgj@pO;SV?dwC&`izqQZ%{;OBqvMF>eLPVNdILqObQ-X#ZHmjE{ zR3YrESgMuOnjx9?Ax-$SOCnk71rbjzzUP#ZPqoXpPF*fo4u3bQp(qhv;?~wN{P~eW zH*?B6_dmAzYP+lCOO$(c3W67e$Fp{-6yI}!d`HjcuTf@8KU~q6B{f9X>jsUxWr!FJ= z5^4B_{GeRIppcx*Z9jcxd;CrtbaR0#W4zjduQc>*w0OhHr#%$pTzjSFSra=%C4P!5 z>K}aEU3X^76Br;PAl7c-^XM)4Nr`Hy%(a!NQ{^9PR2s^(p-Uj8Ztm}VtTR-~g^p(W z=ZitN`1-3T@U17+-w`YamNguzN^=%*>jKta6Fatv?IgW`F$}y}HaUOl8w*Kjs<3O< zE+UObyV~+r)i;kKgIRU(E_qR>Ek>lK>v!BrgF5rU!e^WD+LWBijIHtj46 zyE_XI0gf5f%)q|&(eRD5w0)?a$Yn-g0pb{I;sS)O=kt26jF&UV{n>eKcnMw-cGqEZ zeD2G{siMA8lc)1<{<1vlOKKvAStcsH)BQh(L9HkG$0(frVgfdS>lx6!Fuu6@ZSITx z&sOPMJbv%KTzn{e{z6~UpA)Y>muvCwFiUk6K;N4q4JbbdJS#RPRYQoO*WjFPc&XlCi(;9 z*4=OjAx%OQ`3Y`f?hml-v z^S(+r!lC=b6bqFjx?-QXcnb7Qtd&qXabML972oM5^c&&{sLn_u8JAymI)yT`cdpM{ zo-6;0|Bgc#8Xin&Vprd^OpwPYIyWCW(b(P|zZ`P2WrD)i;=QdDEO}TeN$&Zbot?{p zdnbN7mGqz8KiKlx;>mlA$53;q8VzqK9652K{8T%Sn`DY32AD9LBL$3+My4&3utar~ z>BG#mXZmK@p2!R8rMK0S2BZAIh}0EID(&8eLnpjv9(P;b9Ct_;{&Q{jE9|*72UpIV zIfKNA^s;=u<=g67T6N@;KM_L=?pWI|=k;)z<7#TbmJ+-?Jgb;LF(HCQ*>rmfDZz%rWBuudKYvAtfuS(A~w8WVO_t9Pz=#2YmHK>YK7hXb~p zmdhv6On_m$<0|3?8yc=(zmAYDOs2Vbcz*f6!Wk3yOhv@abJq1Dgd&zxRuVlJPhmE7?rSgePEx=o z+{Z9@8oIRh7r%fG?7ARO)GQ-~ew$q>jxe^6uin|{R)b9`K>1SfklMhO=0n+f_xoBR zjk6y z9AlPoitM$B74lvVsT+uD%&Q|PQS-A03)M-SW3QSy7`e6Lb==f6&rd(TFr_=TQrEvo zh|9+i@7;h$&pt^f)PJYu^z>~5l5OnV`=SQGi-)leB2@q=V=g@KeJf8q$MX5fxQWs? zns2flMa9K&>e$Z3bs}q@ogP{>ef^#43Ca*9uTI#kPCP03=;G?C1g&OB;6`dp{(3ygF|0R+u#=b)!{|M)ToO40p;v$Ik?uTh*>X)&*A+g^uE-z~J^ zSUhMx0o7p;`6xH{UUEot9WvgOFZx4vj)?&TX+;xhBVrUB92_E|vc={sH)0+8;6DHt zNH%u%HaXRH$Ch|Sccj;0Fuxal^y@YNbTEL&5gEgl(*W*VT#nDam6Kn*@%S_MNf#Gd z0tXv})v#wmnC|2#@}9OoF@qD$akz+dG0dD%03pfyfF~aj{9c#m>9Ko+`r)v-OuZeX7#2-94y#zuA2tf~P-Zt32Tzl>H+wP};K5YSk?oWqzJ$WogzmsnH1D1m= z_1EdddD4GKjvf@Q3t|v#D--k$ppI;^`)OYpF|;t^ZOY2SCzNdFc6?r&RdsxT`c4}^+?%={xf?3!>lARU&J}oWiX56G=^s>QK zLp$`Fukk$mykJN5#0>w!eB^*fWd7YLypOZfq|FM zz5)o${XOzhC$Q)`?XIv~W~^NTW+evcXWho7Wo3_wB{MQIq7B?5FR#sXS`UR@&}JQP zXTw6nu?@vNIXM|KyLqu0JswRdPS-PMxVLYI5u48FSJA|#%FRjdBvUA-z_Nl)<~TCy z@Fh-NxY;oAqou_lw)Ty%Uwj}bfK!M?)B2UJwK7NP3*0(zE>6{zOll%D%V$3ZON)Q* zR-|GMjcuAV9r!)D<9q$zv#%fB^Mcp^fdHw5o9^|-M+T>_}rPg{Y@4yd*B+&O?Kzdkg zO>ik~U3hpn$-bw>t6rMz^3YMY2-_ zzpcZv!*jC%+=Qs5SrPf&zLgP+?st{E-}eR?(-#ofC10xPP!T*%({J1Q%fZZaK|nUSsg$AyBnG9 zX(?z@1`M9=eTsu-ZtmssR$)DR&Pf!7L~7a8UT@Bb&)>csnq;+E``xqlwS86GlPkp$ zET&A~(P#(8-oe3}<2hra#_l5jRZ*}HtxU>KDNO>GEq1%vmeyqI7#}E^FV009-YKSE znKXJU1;K5IZ!=j8Pnf9A_JiURT~3GWC2q!gM6)5jJhm3RTdX%s8g&B&z<`JH2zTbQ z&kJmv?KeaZrLAvTG`~c$~0oYJb3-;r@+2JfMCN}D{;H}RK zV%By>?UvaWeXf|==jG%?mnWIt?OVu2ov9@(3*xF-c(8p7>>f7!8_F zIeZTLH1BWGT2nHVlDp}k5!uZ9+`N?lSW~oqySY3GX%FYX9kN-G078J3%{b9I)35=KC7SKzG^AdEi~`=Z!>6p_HJV! zgsUGhH9d=|#}l*ii+|3|=yw3K1499~AJEBEH$!IodAxsK&mY(tc$~qs5a%W|WALy- z@hXY=;JgQF&gU;)q)#9G(b}nf@#2Q*j4hrI*TQ2lN$eTp^@g5Y?W5KBEE5Y+Z|($NiLPAy34)4)@QRlGp`IkScgxy zeLr`yGGgt!7^{GTuJlN7m&)`B`D0hwkBtpV_*~{c8ZuaGl72nm9gHlb^_zS6B#zLB zZ=&IMU}$P>#fTd`q?{QVe*IXx>%fqJIRH`zXdyw6QdZ_+j0C@=)%404S6686z1!#* z!_~nxLf|c|g}Uw^A`PGDlJz_FL|I3@UapKVU5ZjEy^EI!m>J)8z>u(M;n! z0ERhY`OxeP2$v4JfsAA#hQm>1D=ln*ao&RkFqHB<^22RobMNzP5Z3k)XFCM<8Rw7( zSAxfGXowGU;f`X8fjo#*06AfvnU^-xwzT`|hrd5$AXjpF0oxR4V{`Tn<43?->- zgAYdnGm{}>d>U#Nv3)Bj!76SeZ}+=4>F=3rBlq7$nDtw-WYfF$=~iVFg_AsWE=|~+ zVULggW?n_wBR9jFt4sGrFdWYh5(%Pb)(9XNMbACp@;F0zOxt$u&E&xdniD@d_WbdB zC?L#uY*_xH!f8s?5i)gS5W?VERvNvthc&`(DIid$XdHa-Tp94ja&uihJft`cBsfI) zcY(|_0PX9MBh2!2Cvr^8%*;^wE$()B%mwXxe3?2_?SFYDJCmDmnl(Fi?7@h~$hMJn zHpr+lext5X{Mgn~pbC9Bp(ulyh&hobZ%oUQ6X*THLiip-8vneaLS;K6X}+iAn~z-T z9WHyPCbVbT*b`uMHZZ`4v?pcd*Vr0sn(2TC96fqf>uwo%tCf|6_{%a=<2^*Bkw_!wrKh}TU{evZAA zbh3-mlo=dOkp!Oh>E%HjKDFa{Uir;Wq6RJaUj*e06}S8CTjCZQ-9n4s!!figKT<2u z?0x(C6;Ry+z3dpF43OwR(S>|QF5^(PF}HGn@9Si03G0`=h+FNy>;EdSSbNJmc0)c+ zda%cm^^%JZFA09QPWPB&>axNqje7GtP1V%>p==b;k2Jv8`^`^DW$OIoo6|wZIsM# znCQ2aIAn88a(qOZn3zc@?tXCL^*>M_#=nK2R7 z8`43W-y~2oKluO5h^5ksrYFd ztmtp0rq*{)-zsvit*woYRiVHcyu&fY2~)34jN7l5S&6c`eR%dCs$G09Lz=;_g|5T( zgR8wKNrng~qvJCjiWahrb4Uin@U4FOi%>#EI&3}r&&|!+Tr3My1tA^EXSN-?HkTSx zV&X9{2;>ADw%pPD>DMgR9?iW!WDbtwq!0Bq7PfaR4{N1*ZE>=puKv6Bii2yXR6@g} zi&+VMly5$j5L9z$oj5*LFci_rkSW{5#r!D>+-m!Z-I(m-_t1p+BO)JXLKauWMI%T} z%Feo}M|NKLzw}18E1wEDJG|X_n^>Dimj8fLi>qy0ha9C1P53p_qy$qtFRvuWzM9Rd zJs~>F!6xS+R?wmKNIrgakWRfbw$Z^KUOiS49E5D+GVH>jRfMZ2nhEPR8vJJ*uJD&C zv45sG->uM10;Y@hWtY!j4_F&s&g#Ty|W*Z{hm#k$w4tuKn9K$4JG?&wV0mi?0}G* zH>dK2d8?#oS!W}MXVo55%I}egP zpnLnCQ~uG*m*$}6+TXISM>xi66no^3o|;L}iJSRB1%c0nl6P?>{e28aDYVZdNyscl zr3i3wdH$O@{vdlq{cVX&XZH~*$=4n;@9SLJvO=aqNl2)wwsEy+QD%KS`|ZqZ7~e#@ zze{0Mh+V+`%bpz0J7g_f;Bw&QntSI3G8e?UFX{>(->*u;e>z1&AZx`d4D>2=QibBX z*kiXwL}#po-7CY{f+Rd^OQFPA$x_Gv*cC)Nx4(80%tO#>) zCFlsj-2{_^zpL6x5RpQT@%Z_Ux~4aTvYmQNZBzWAcgVwXwdkt>=-~zD8jyr`9wbrC zEt=uV@adEDqYG*}V$$@or>yKr@}YYJN@nwz9hx}y2!s&}N8$X1DIHGcaas_Al-+;d zYrJYn`fX81T9Vj^#)A3N>0SJf2Og)|%^w#%w=MuM98={yW>9J$(#n*g8A0>B zPr-; z|CjLw*^D{fjG&$$e8yGTllt1rWz`2FD7xK889;>X?C-{&Q7J?eWt!43L+M^ zXb2pU;=H#vpt<_{VqOi)sL-}orZg54)*onWXx6%;JvnaWg&InOp|FF#_wB>lj;7DU zYNGV77~Vv3Fbr^N7PDR|@bk~Aytm2yyj^GL%;v9ecTXfIunBO|3cDfr0~iQiWI94D zcyGAG(^5fI|8lHJJs5Xo0KIv^6GA{!;p@rp$ruKWdC)!bdR*mX=>=1p z@rLSI=G-=8&Vz*Ycj6BdmyOnVGc}K^KlJ_ZSsSx`2pV{Cl`NNeSKw?ovCzD~hX$AJ>!_pP>7!DIi;0V_PU@r5j@tVXs$ zSRAA`Ny)@@&M|?$g?|@CEj0~)S26qT_K-GD`VR%=Gz=elS!!+!T<)zUQ=)!$JV>J) ztiR$j{X7#i5bjOQ!%2idUmaCzpJtGfm{=7~>-(}V^w__9g*On|%*w?VX3(5Gmd&tK zePF?2c7%I-MP%G@r6bgh)tOtAVki>IF2~1nu(Dn^xUacyTXUi17k&v7f~r`umO2%H z#<`iD;A$Tor22RD`NI-4MCDXz{8WXjywB$QcgS7NaI)m84cpY-QyZ~~Canvds|qZ5 zg!h*s!^2m}a_`9qJCdJ>h6o;+|G9@xM0Zp03#A+nY0s@*`xrt_MeX`2P3LT611(PX zt0dO2IJ@M}=uW98D$Rxe_3py&HAlqovXFj1fi0M{;Mv59x7t0j)x#c%6Y{&-PZaWD zOGLUQCbfsoYLk8rlj<_#|M}#TT6nI_RG4{bnFILg_wjrPyvVv%!uEi{HrST)z!r~9 zJW5{})ZM8v)m{gr{n0mLdSdnm#xvkeJ$ND59O-BwhHuS(+5#CL7uFz;$ zZXi8WQnz$(yc_#1N=g4K^^QS!n>04T^h!DIFeS_Fb(a>^B{YgzgQe=MXu=@$nwB|w zk<1}Nekee;+e*g_=m>`QT|+~cCYq9K9~s_g6O|&p*?`U8Zkq!Dga6O_^%D3`zwzHa zp!SSYdL+Vtz|W+v{NC}+C)JCL#Q$fou(tMK?!?<>un<$6@8e_xJsydcPyMy4kZbaq8STI zI5Dnw?b$io)Ta4G)S}x9#6NFukoy@c*N1nAK)Qf)tH~e)#>Rv7RCi2B)drP&X~`G$ zcjG+@NsEqOh^ofk)7tu$DqkrG=L=exdxBjdW;#B!z{I)!P$9YkK)-nN{TG58t4$~t zi-oA(8Qwl6OOhMyD-5^ejMgX&{QDb?&G_Ubi9a0|2fT%HlZBzBPLNgz&YQbWTD*5E z!m0hYH{KS%Z^pi^{?fG(Z}wN>DIdfM@K<4>j2m!YydPLAh$jLSsBb@J@hRUdN$<$p z3?20nXbTwBc3<3BFAg8qzlQ_3R69ULQ&a>f%(&-NCc2myxH7#MoIy_x{+g7*qw<66 zZ`|+_R~OADtyZ;kSgtd`K+9yWCuZ0b%i>6eNxSl1zL7GpvKqvpkCj%_MRA`bLLuNi zQE_2WBFIC*64ufE{ahuE3-vu5fcL+{#~D=3`>pT+F3G3)BpEmto4LC1z*`Qdij~Mq zOOZc*{77SJRr>y>Si^kA^TZ#zAkf7pz`C87!2Z22 zo{uQrCEt%*PZ@6p@vDgm2IME5ossOaUUjFR?#BStaeB2NG9QR5F`)ruG7Ez+q|Jt>t>)_){c=A-TZmbR{fQaknrB@V=G0 zUicD{H`b!r?g+c}y;W@YZYm;UWSJ2e$8H#$4lEd}>+I(wxfgAN;hs=XLBL;zXkCO%h!&=* zS>)=SVc1ZkN$hsQ8f2YdW4fyC_!9+eIi6jM{Y9w`>8;`qGI3G{GrX|k09NB!+7x{XgH#0}mp zzBkz&b*h0u4+YnvzK;MD;bsT#x(;XK{sZa_da3wGX=xV6j-4VI`3VYd`?p8jV_*L^ z2?}^KC#U;8(|;jdt{;SBN|Gq(*4aXGXvUZd%q?;7G&QXi-d1@0NzM%O#ydO2-9eQM zBg&L`D10Shlr};q6{@8y!?3GOj*mN>I)!zXU3@hxAvwg3bKO4_RzKExhtHm0f8-HWdmU#+YJ z6!j^|$RO|>ucpDFI?G_uz~Ga)-8-)})eaNc&Ug&&!`* z4D;;pR^7PjI+PpVzLq~xM{oUgM;>&x4p9JcT)ey-wBb2lg!qLRusG4+gF6O;R4GoL z1NTcI@PpFhe47(wPOwgXFL>*;U1vok$`NU8_^;ng^^^p2@hgm+FTqZR%iOkVDP&5Z zn_u%P?T7kHY%8%)PLqWJT_C&*Wzt}&_efE5M|#N|^QVQ9}syuNH?W5XL? z50${u$HmtVj6@L~1u;HioBmiz^!zw~9l$#rTL2m1+9^m$!7B;oQjacZ{QHC98-MU# zDsI){ACO?c7#~&s;#Fo(PW^f-6i`1FZx9Ph@ip|Y& z?yn_Yx~Od9zxMctE|ndRA3DZ4EDXDr>{m0T=}G}0zI_4Nv^{fU>*08#^@Vh+-VAk<=nUUr4Kw!VEI7>UJpYetyfa2t_5>Aeb4wm zUEM~=8W7Ib=%8mh)X>>Ta*}J=zIE&JH}^~BXs>X2K)&BtPD%IwU6aBcOW*%|J*9HO z%#0d|dDxj?wEJ3e#|>38(G*8X*Z{+}5r8C^)j;VVywLu4)1R#$NpS)8Vs!n8v~#fa zvCxK>ItLHB$!D~Zb|cyrp#ufta0$Z86hdFjK0bUn-n8rAa~pko<4a)OOwF&`PBk<) zV_rp$@e#7~)*o2L$WV2vU5OpeD|whrqXmRn5L9RuqOAA-_mjLkNg~`mc)=7#BqxYB zOAIoPDzg?zd!?2$|8-xmnyDix!L`5c#>Lj?$RbB2Sp0LfZ<<6vGCogV3HQpB5pe>* z=mI4XQ08I-4KSnnH=P1UIyTTly&<6Q+plbeuaEOy(*}WjV^_*G@at2#G?$?L%#L1# zse`)y3xcEz>tMHjPRmu2e6>I#zujmBTt^a{Otn8j+XGH)S67kwCdyfi?)U87+uG;K z;13&m>kHqW@5}IPtb&>BjoqNZyT67Q!&{Ez3;Y^BtUJ1@h1R|spRHtlZFzO2;&Dz6 z$)%~xb@j7frFOvCXwo$I#?`CUgRojcAf$&!f*mJlo{W)GO5(b^OZp)~|BOT08IX&i zUsPGDVgmL!HL$BOe%mYSwI}WuccoEaM7J}IsQ*KczE;4BTd`-|ZWFrUS#qu7{xmCHN!HX#p^i zK`fzjgRk34un1JQWk4QFzo+w%5(X6RU#-ifw9b?7zKBhp&uW^XW#GrBzd~UN&sBkX zIuv3*BalL-p4wEb!bfo5cE%i&^e;~n%}EyX;OhX{>LbnI3Kd|!?UW-SKD}C ziwA26=$_@J;iuH;>8*5q9))&KNOIS%(|{npznq5yD^q5Bd+FgFS344n(n)UR&}n*% zs6SF9eSS+}??;*jq-VZH^Z{}GNwh!_7fo_Te~*)YnPnT!x=PlME|lCq0A3@!VPFN> z&Asu=hKXIqeMW}->%X6L?#)R4 zdcMbi6+Z0M#!^ZRID@xOJt)5L_ypK)s1|1>|5Y{p*!Ltm2~t_(prORXrP1Nb_wN;8 zgd*6+I**Au)U8CZ+v-I4>(!qSuhIRh1;X0Xq&5!+0=+kd0KU(b529*;e~h+|L^=L} zxh^^yv&TmVtGe<0h%IlNUmCuU&c6+7?H_Ndlz84+zO!~tUe11#ZV+8*4C_vb<2kiS zxvf`r?@SV`ZxrG=Jn1_*er@_znfLS!gPS=k=iIwj$fgV)-FNG5Bgw7ZN>Ud2i~d1V`WBU$G?_!*>?_hNeg# zTuxez2wOlTgdy*X3?ArUQSRS`=JwU5(w(3*LAL*7QS{$cI=s<{;p-NW6#eTjy-ZLl z;d=HTP%DV{OGhePd>7(4ebj7ZI^H7g3*GdK!xHdzd8+E7j>)p1$ zr%SB4pYFdkwKnO#N@A1srR)p*hDTcQ`^%yj_XyMPQsDjOw%|m1=5WbeX&1ipu7BenH&`h7NwKJQ zpT}^dM7RhJ?j~ZH^G0NB0z1}!dOU4$Wi@o8=SeW3uWkvaCFF}g)|s;mr)7z*@n;I& zcr1SS9ME2SvvE0u@V!VL`$7U2#lmS3uVI~ss7>+ar{8C9iT&GWi9cE{q^#-wJHEOk zs#C!i=h?G8_%!NSIzn&e1C)3!{gRn&(frp0^0$k9kpH(#$6&ohr2LGTk$H+EXT+Go z=dqvMTpMp5CLXuZ{qTn=?L5Mot)w*PyPZ%iMaVUqhV4LeVa6^Kq|NkPpxL+@2@gn< z(e*EpD|3XEN)6#k05v+9<*2HqjAw06-U%a38gSi|nEq|i>J3LzQ-X8^!fCJRWk2h; z6@BykKCHt5*@}zGi^F>eai3F zRL?~A#t-wKzWi(BVJ8;0-SeU{t|f1A6CYN%;%M=C?ex{qD7kl-l8pgUBM)N2Uoc z3Wjy}$7=|HHJGfWxA8#rZU5gdy5nj}C=EdoJu19$7XPFUo~SI$RnNkl@~~h2zY7=_ z^*Ki27v^vwK8Q73cjB zg4CCTmO3iaaaCJGVh-N(y+HjxT!0+6WbJ>Q8R_~oytsXlB24MeD7jm&G#QzP}t zv zZM0;3HDhg*Gl#3VBly(Y?qm@qP2VIWDQQziD3$IBo8x049~W<0P$;9)OwX0v|Fu@z zDvH+k6=UmUGJ`p>iY}q3;i{y9!el*zV#Ld+nkvGw*!CRNqOIZ-)|H!>?B<7`KY>-% zN4r0i%HQf|1OiIf&35mg;9R(~YY?7zH3G`wvY&%#Zw*P<~T*OGaYQGlqOwcjGlRv>7RcQnhpcJcqNu{yOs)HHr| ze|8J_B=&?`<`U@S((I?pm!?R<*ISs^Kc87&1 z5s1Oj1oIv9&8-@`d)+<<9W_oI$lEu)oT(q$xyTT zKb#PKf4eJsjv!uCF5t=&CD63c_@h=llv`85s4$7^-!zw0tsO$M@N~CJ3P*l_FRpMW z$}F!?6NMs!!y$auO;D!XH|=wMG?&V$*1TB@cU87zUGR6V|@p9Isd7 z*-UnvD$pqYcL-Ihi@`(b-3rF1)uXAes+9`9-DTHwFq?X zQ?k@)+l;DGm91Pfby93$YSHR@Id69c8H#Kt`zo&YvBQVPi=FMaL!{<5^LP6O{+%B2 z6usZxK96RQ{lvFz5kge;p4;ouzdldDuOlZ#}b<%!(rrk_U5MK)6U!l6gPrB&W25u{YFZnZL8 zD9s-vzd}Z^Rvn^$C-bh=j3c2yw5Lig)Q~p-fBgS_Y;o*$$j%DciR=+VR+5#y zla;J&S=m{UA|oU_p==q2tc2{5olTVSd!EMU`}_(Pd_x{er#MPlRpqaN8vMZ@a@(bcgu4j zl<;x4X2d}&BCLMIygBWwF%}l$1x&!BgwV^;}COr@!-?IIlRHCO8exbHm2qyl7b=x>d1w zQzWPq*VUOk7$3n+E8?cRBDnU{`JC-mEABW-VHM>RH#c@B$zkj37c2Q^;uILsSgOR= zLO;lN@FZu3Us~BRzZ6zqb1^pO8{wy~bqB9Vgvk(Qw02ekMKduii8>-;nqe0>UdLE; zrbZL(_A+y4Ni)%7xq8?%s)YDntTV4^iFnJBsV5Rr~J)NnR+|kM=;mqK%!K-8%4z3zj5<(F2>jprUg%!a?L0K7G#C zPc&Y0{xLU9Lj5|aQcNf4SkGPK`8}kE%*i+DNk{ow|ArU{X{SCiCtbWhsQFEUy|wFx zS1Cm`LqTsQiA+uFfgcI0D}Cwv$=Snb1tu9o(zA#@g zacu8*dq8nu8aKTuvrzErvWOAse7~q@=GTHLtN`SFHP_d^(gN|M&71@Ly*FF4+jJ4@ z0xuL?!n9IJp0d`DQlCTNDlm@t;kTI&DSYV3yr8SV6Cx4qDpN=Hc-!o8481z`G}0mp zW2(@<`z+i4yj!bt`ppeNH_q=|vwn5PfS>hIZ3tU1!UWMJ+stP-xQLr6wbWH^$NPR_ z>(HX@E($liYdSW|lDu)XSu@?-(7Rn6*Xuc@6rX!-*+j4*1wwHaL9IT8wW&CbpKHoz zTRsu3DTUf@K8q9h^JrHT!Aoa1?-JTfXcn{*`i>r{O6ef5pioVbfUSCOCr*VRqqEkk z*z&*80LyWqu_cydFOX5I4DSe_p3Uz;m691BCK~cctwI8M0Q7}u1Zgw1AMK3#>r=Z? z3zH$e$|||iG*8#XoFtlZ)qP3sKY!Gm9ptW#jcY?nWu~XloYzR&G3!orfc-YZYlCId z!6#!=)}PT()x{eXKz}8TnA@O&&$aRFFV%QXEJOhE^h*?T=FGOL)UK-gwR3dJg-#9e zvfLr$HbhF2n@U;Nc?)!rvhCT%cu(+h{9TYQby)G-sOdwt5aVR%Y5dQnj^CS&%<>~| zHSx;cRD5)p9izI&+ftH!57o`@#6Q(t(4s*YdsF%t;~U5D2$To_qM>QBVD$A;mR^y< zb5d}F?Y`TxmmyA`k+t9M{O+ob>so+3tc>F(??@&quolzD9kuDgr;433!rM>g$oCOm zx!cOr>e2OaWmIXlMhIDnd;cN$C!gS5ZnLy$pE5>e@i9&C`QB-rIMa#BD3HG;?Lj&7 z#QeyJsRY@Y6#jwv0DC`WcJkn;O2NdKF-#S=9`iDLI~M*{XKyP6iq`<}Vy3DXe;c(w z>&rjsXuQ((wC9aGX(??wiznUx`b=nH&IjkoLC;F+tIR= z?_g7$mS{_xQu#1?N-O(Sp^R%;s}{pe!dDxWOvs9-C-v%b^ucEDkF6g(4Hy1gLX`oC zP6MF|6ann*m$!>y7amWkqdWak<)_^8DZEKqgVpl~EY2D|l4S1c7$aOWLB^clK|w*W zj#6o>aAYm#x_)psj%GTFV=!Muscy;B(vwW!?Ad9GB@g-1_x`IorjqBo<0a}bWt@UN zM0a;OLzPRc`9}2u@8IxwMb-octhSw_`6=a9DOmec;#y!ws;HR4Qf4#B%A)Wzf6;Kv z*ql}uYp+|<)zB#PuMBd26m@?1Ps=KkCZ2BT{Ng`11lYD9vaIF(47-T@A%>qpl0&whY6T3-uP@nnt$13gcjBdpW;(?DINyc4qhE`k#_+ z{9-uQ!+yKZ(7pyWmAX1)J3tn5x;o*>WjGCkLfjuRZ+;)NtgeLB9Sj}McPLT4M1tVZ z`hj*N3x8Ps&P-73`MP?k+Dx-Muxi%6?audiJ^Ktl_68eXSPU7X{$cRsP?PI8h*U<7 z5B9JgUp%N>*v(z++E(6j!b2RnbGm=b7krD%6=)^QcVud?dn->;3V0 zWcTz(floulYlc@F&oa4Nmoz^KvlOHn_btarX_n(5HXI~bFEa~guixq==?O5-Zi_pc zx-$CGsL#YgXXf9w1<)?I)QV0M>zQ^+h`sxZtRU*&C(4WcH2Zg zlDUugl4M6K&Fvp&&c#^GJ;3|IDY}W=QQ9)$JQ6&zzy8JQV(n`KDx02Q-Q`iqj4=MU z)18ERYv)@QvEWD;bB8Ofr;vPl%b#YKz_*dnbhIzg&pGH}mq4$R)~qrS%$6LOu#`Gq z?)d>T%`>d70*KZueXJPFYKF%I z9GQq#`3tR&NvM0~*gmk_=3vS8BS570q*eZF!s@Zn69)jD4qCRObkMfg@Y}fWQ!h

fc0C^W&1R>2$t~|!(%3nYd2;F}tNk$oWu3wmZh`fygu{Bjr8? zS`+ZhfIk;EQFZE+{A{EVKu^w5s*bpI_+1%df(3 z0r1`@KL_v}gVt*mgv;122b(k2jS_lRZf*lMl|a1*5w^={I{>@z;?=t7fj|i9dgBgN zB^H^tE%^krtea}z=80m%-l&8%W1}sehT(dFP`1Mm`K)9i5fx*W_$OP8OhiZUt=*iH z!3N{|Dn>1(^I7w-p-0di27f2!Z4&C^-fX?&)ks*P_0vD%LBy0tGg+r(kdw|#F$bK+ zj0hL5qs&F0kOmG`8O*WgNPA_cX=0FKi%@5)hcA=9P@tuQ1vDn@E-gmidDp&&B#hY& zq#YjiFdI4hU1Ut7TTM?cd^XNFQL9lm+v z#sz6`U_mMFgOyIv5UBmXS5M)R#&tmVX@1WKoKiZrhFC#O2M0BfJX$n#7w?KTgb_Cc zoSuNcdJk?-v@P4+jjDCp&{}x8dBFF9(Z6Lgw0(X>`8sO$QI5<#T z-0778-vf|39v8)mOGzEK(U<}V1(3gh=1^o6ynOlV@USNgEwowvBE+4dV*%mKw^<~l z$Hc_}djYU%pmdk=D82?w-tS+l0JaH@tqamm=AQCVM=ApRbiBWxWrDJI2c!h>Icz^= z6c!XbzD*t10hU{D_!rOwfqtS28+dKN83ZQ5(Z0SiMK3c8i&DIw69kSKn*fN{OOuN{9j~Ymy{Y8l?R7E;z6nVrRd}Xj?=qDw z>%lcn2X(J|+KkVbE@nMTp2ZeL4n~r z9%83TUicso@4A=3#Q-)w=Jz3%TggPGqYH8Q)bcgoWEb78PL5UP%ctMZZS)W9Tr<0z z-!J}D@)Cm9#bG$fpP#?i(L*?)HF0|H@zjF0o%4%@BYtSd;4lRUg~#1^@LhK)Ih;8 z&vHvbN~&0kYZADI+1aei5mOtdD@CP1QNFIDQ*m!qukccsIkYB07kQ~##J>bu23Ky~ zO0k+TPA+c0DRF@1Z~Er;KoJgKZ@F}$xss9YV?;P#Yc-fz_5#K1^EIfpKgKUq^!(k z-AL$%x#MM6LO~6HA@m&?Ke?zQ{~RnNV5BmsaWT)E34)}UUg=+sk+>TTzt(3%sH47B z4Vxrd;KFhX^XeE(wQW%}xA;|oN8LQ zbVFzcEU_~8=14-iJjoXp7q#Pty$+bO=0wvXY}P_?y6kmq>9+yohTSsnnoXH z_Ix^j3ao_45PUn5r|wqlyBJf5QZxO@5^o}JAX5JtbdWnZ+QahPay|K{&Qh!b? z6)B)d0n-m)deYUT%(W>YZc&|Ma8~>yOh?dWfeZO%Xvq2rj72A3-=pEilZ%1i`-DFP zu!sAo8mwQyuZQ(+@lD7$OsH`IM>(o_=xqz2n86{Ex*oK62<<4)y43zq2lh4m9i7w_ z8ft1rXptsrN&`iB;Fla_+sTQ4{-Ahj7=EDq^AWI|O*p}1T3A$+n4+@k{uV&Nxg{RM z%kDr%1}P3S$=<#-Bv2{PeF?&l&p}|dg;^2cSm1?#fk|aeoeuPufRiH#&x4@^+l)8i z@m){(7JmE!oH%3v0yg(t%tQ0XpbUh$6UGu4TV9u!lRnhrh=Ip#tcs)NCDxR@(9_!=FE@D7G0BUaD@-nQ?w6Hv5pwY9bkGCMC z5{MxV&|E_US0FacbJE-P3V*`o{>&&Cl`xF2GL3!T2f645fD=IR1!||Kw=2C9F{L7T z&LMxwZ#TF8goqf!cBG5q*#EGfpI9+=$ixN*2BWo-&?(J4ERfpSH^tYJV z5I%KmEz`i^RiRgp-V{`7B<0iX+Z1=wU7J1*U&f26e1}c2-9-5K3_t#z9!1iJIf@dQ zD}IrWDhDp4uHNO|t}6xCM8&h?iF018Bc^YU^dcJ_Fl<)Uh8O1W#z<*g{E(OE5u`L) zxy@CA2-Hppjf*w5gLtYCBo*_7_Y)9uG1v7(w;hv{wsb4r?9AMe)^5FWe%|J_Q@TL{CB2xh38@1_G4~J+* z2ml?dbqqgy+EZr2uq_ETHnfclzH!u3wk45Uy_)E$;yiqD)n#a^1c8?0S?@TKR@6ph zkBp72x?d(?lIFe806_Kl23KeS?(Vv?k%Nz>M1+F-+Jpu=xiY0~H41nzFqz>2O!4w% z5E;LAVWY}jFdxOe4B8;CE!q>xAZ9Y$|=;#V&)qJkEZm`OTg|5Jh}MJ^5!iQ5Xh(M1mu z$^9tEV*!jX04r5A)ziPpcx_G(gkENh`&`>&)8z#cW9tlk^zwDdtW)kIrA5Ytiy7?{ z&B<8LOk zj_=h_{F&objV0?teWF|YI*sD$G}Cprh^H^F`cKEqCNipH_vuG$49R^6q7e|lGC>4- zVNMl>8R8lcKVR3mK+fuDqSA=}*-e-B(L3sSUgFeq0itpSk2{i+c9n72ljvWx68fCo z3Tm6v#WGPoL*^%JK*6(DD}0L;QqC;B%jx-3Y-8O1ibnN@XRo0tvG#-NcSEJX8=u|3 z1PD+NC@)Z7%olpn1I(h^&d!kDSyWQu|22dY0c4cBqnm=Zz@V|STl$u2s`1o98Z;s6 zQux7rQ&Xing6V8@&I z;kB4x{p&b$8yh7$tJqery6`fSIuqyHw~JnLGIyxKM60B%42ti(3hY|r0XPb!U-=Hm z7LatpW*3U?58nX}8WwST(p<<$ z{SV!Tq0!u^8-X+oiL10{#crlPk6%fixfe_ASg|p7Z&*BrAGfKzK&a_#s6@0{D{6DP zr#(M;Ji|OIp?8=zr5rIGIc>_s+-Z4}tik9>w7R0#kvU>=ZOG@YZi%viaIR@6eTX5& ztIDFwN7}FRa!EyAW~EpPMbyO8>l-&&k<#IG^F$JL-c`%m-Q^NL>Ug@7x&LnKDoHn8 zr~ZiFh{1z*6eBkt+<7Q|=Z?sW_AszRp=w$czNBKl-*s|G9rC}g3*BR03%aS$`d#esYxR34nYJvMjSuZaW28GLH= z#8{}aXYXEq3TAXbNK|MDkhUH-cL+Eqtl9YqkX>l;yHFX zL;3c370nyJ*h->v@ie$Z%P`BaV{e!_fAHlv4wlR)Zo|8^F8)soFq?JHnqqcT zakl1CkQ0r`Sb7yv$Luck+Ev=C=}%&D2#-?pepm5s9`Km7XUmg3!Se_Z5{2$SV8_hS zVeN?uz3)Ev`x!CBW{Yp_Tr_3Hw<0phXF;?_AaVGxIrvn?1s00^tCaSeHkRA52!W;q z0y`?`&YdhuQQmgRrN4LB>#ubGZ$18l9Y~UZ8V__iSOvf93ZOEIqFZ((J6s7uEdVs` z==iF<+%+<}jlKg7Z=VxkH}H%qA}#$q%l)4AOmH9QltxFrA>*>Pw%<$u-)t+}3jyZ_ z>L_;bRgg!vjbSQk`$96qQwdMl0S#D@gJ(dZ>oLbv; zsoQ(fdx|a%o@t^wjJZ{8MCXe+gyA8T&2REh`|0i*Nlkqbno;4IT%yx)%?lWTXFX)U zt~`=jFnoDsCp#hc;d`u8=VO3Rh+xyojN2Guah~zS#acTbb|ZYJ9z`;p<3u?> zBjaeg`A>T{@6CK|JH2P2?FlXdYK&fz&!7^L+O-Ff0IKa#*wt z=<=*>sCF{%{5$t%*kAeIV|q+Pp37)zxww*Y=E^HqGelE4fidk>jq*>=N16!iD7E<0 zk8gf3(>3polU;ND8BKUF$F+X#6Mx1qcb`u5tt(xr=S>U^3lZIVgaTaU6Lnd664A|R z9llgixSN#le2!v zuUC9#YV2X$Tfqgqj#)(<4@#D2fif6~QoXq$2gHZcSi>-;OS1`t)eK^Wa{nB$ojaZ1 z+#o&|RH|)VF?nS{A`{fa;nj|#Zr{IN43&2UH`aM&RZ)n`f$|3ecJ8SuS3_RCi@p(Y zlP#6|y>#XVTpl>|K{0Q%F(66u)6ex-*pAaPON~Sij)S6*k^pj@AhHPV=?>Ni7mTcwXS1+cxuM=A}AYBblL2 z@BWIlelpOihk)$tjghLY2F}=!t_5hZ1sIgKax|L8h@Xjhz+Ir*yq@u8sarCAFnJH^fUzr=l+jmGt;XJpC-(a zQi#9@_?2{1g(eQ159aa4Hbd^DXF z4&>sblCE!Wy|%KuzWG3(3hcxwU5br*MN;ldP@DJJoR$Nkn)!^IFkzhasKm8akgT}s zTnvq_2jL2YR8+h&=Ic$_HKn`)rgvB22fO1Hx7hc31=M3(^=FktUqF!n1hJsFZez#$ z*wqF36B8in1z_ejq%{FC4rXabd0NX0YVkUVZvz7s<-CAy15_%Y3D8P>aDpa1vbgHJ z$IfT(?3}tymv@!trhx5*BB%LJ1(dKj9)^%0NXOz z^*bvCPsL%wy-Vpefm-zRm1gpio;nrjbIDw~a|skVJOvP|#U6g?&2u*EHow4*U$?l1 zX4QLwQ!dfhNSqw->t@EC^)RLl;>y+!DHbo?^b#O4rED{N;QdeYzk?_)|Zdg$=p?s?9aWf4AAwJMkt##Cvf`e{Z$fF6kcIXfI7>-fKF7~ zBM)xIxT(f~DM0N35Nd)r(0UZj+#rtx*7R#}ty*J~TemKNd{eFl+BeF|9Z(lX7lUbq z6D7xT!GJ(F~&ICt-`c4T0|iW zUU(}UE=>VbaB0%Z^2*hCP_+&@KnnzF`u=p~LB{JMF~)pQcOec3p?v-YWL%pCL}8*E z1FGkjPr(bLE5l5M)&%w1iSY3e1&=xq(O$yF4rwkdEL>QyiJfz!S1KW~XpNW01RH^+ z_$=(&VE~ZG9Bl&Z8m1P22@SZ~7d5N$pe~7s0)`?&X(*e=gbG4Qe9PAUF)VXi4+H|TD{7h zXDVR>9h7HBcI&hiXP2+IDoBpA6nqnqTHk+~&S^p=NUO*e>vp{2e7lo_x3}GeO z-T|gaYIw7tnC=^0hb&zRxp9v`%Pk%DaWY@Qh$scGO0t*vM=42_YB*;MWO*`s7uakE z9&+An4K8o$!0Ed{75f6R~%#~0Z zfKs6kY-L^#OuCt17E(L1jR~iV15+ zVCEWQKG^qETlm=6EWiYf8!`j6OEpSS{jb-3m=@gf?X83i09=3n{=42qH6tnjje|Gp z?%m2=*R4%Btwl>}xbPz3#}s9J*Gd70Q8X7#-}m=rG>sc=tM@deB+IZd@Hcldx8;8( z=v#cp`=^0C3tc?`B>*G9p0EjePb(_`@_SWO)aCj;fHk4!?xKc~(UTzubikZt@BE|u zMSEandpG3dwAzUR`$xRs;EhK3H6 zqv&Zk{pZw-3wUV3#Anrgn4`r7!geS(K_TMSgzxAV6*h~?Q8;J9;Yv>=x~C0*c7WBb zs@j7`4SGqRzVKdj>-+LWR7l7TMqJw!{AZ%zUxiRKs7dGboT%l7z+~d{$a#oJLzUXS z0lJtYH(r~~IKPpUC)dPYypQopgW$*bo$gzhQQD4XIH>7WmL)n zT(v}PS&m?tsObIB$V;$%heP#qULzxXu;wxWd-#Ju!earh)T>1EaWmBus67@L63&-R z<1P30S_>W>!0&;XZDDfq z51nw}MGEIDjf}acaLD-+xtSsD_tjAp3vw7?<4M9O3GWovKD3r!Oh{-OnywIMqIL%X zp~CQjXe=Y%6sU%(Bp~t!fxguP-vqiq;V4AaFJ=aq+`P&8&C>$);?0|VXdYa0o`gab zjN}0nED$iQy03gLtS!AC+dAU@r_2NpZ>Tg?erJ3P!DlcDLGycIo3J>|Ma=j3=N|lU zc5>1S8b-Tog+fgQs-O1qOFo|R|4MnQN`OS&Fz}?3TtuH-+YFbeyh;fTaR_#%k>^OU zu;@$Gl?b0PI%A(o2R6`Vj6a%rC4r0$dZ?zc`i}L(+)WyrH?tJ@9fAuT8~26XSuaka zRYH#mo=*|QhH8ge5OEU;+}6sLGj2Ma!l);Q^GaS+u z3|MzTEIkmChOf?jRDkhfw2@Dp8*~>;lJK0Lj>K-pXQapu#3?PpZ^ILIXTZaQ3nFWdgDQJfaAEY)l$H z}l31&wcf-uOX6Obm=6_^&F(x)4}n zC+i`60Db~2_K@=$tCT|=ZV74&G&OyU2yCiAP07#Chi(A6rzC*#dIo@bn6v;=yJRf? z9BMD%m5rT)Y`i>tP$L0Fx(PaSQvs)bQEjZLT|l-O`!4N&Pwv?mEuv%G~}?&@wi*6*Y$1o~5bY+TXW!AXL-FE*wA$ zAPl8@MOQsH-cFwE+Bp>37p?X+;V!>jIlAU?A1IK$y)bn^K$$Z1 z9E_c_xu8J;4f|IXw`Q$30EiDgwujj@)?G&*wGuzLgHsYl7c>BxY$_pLv;ih1m=Nr1 zBY`pbA(1oB?W5?E3o*$O2|k2-bLVy!xoe*oH+DyU{1`X-b|0G9&ZW+2j4#Yl$Mi)1~{)I9hCmM>8toi@3usG;3WbR**HQs>Qdb~9G+lFecVAgWOtS^ z+-R{FbAEMIJF56{u}4zgDM{B0)We5UqmnN?*~+BpyZrErpa9aORH2d2P~-~?se=~r{@Iob1c z1g?WYU9DZw1Wn2lT_V5jC5hGXq%;#ZF(*n6cU33tekK%7Z(ELhUh_ZtiP24WWN>%; z_UnVropYpZjqdW4TTE{h-W{%R|LI^|~xwexFt?B4vW0mOG!+dDg_ zXr^3h3Ao^cV5+AVD^ooCY;nTL)85{`ox6dDK_S+YJMjZrq}A3jSTCF`?Po4CrH%=$Pz{gE^@!5}-RTbSNs;>H7z{bSrXj9)ujV{ zeSzXHHiU6nPi}?#c}&cQM2^@BCP#11(uXjUgr$`lO)Q2@kRYl!GKxdxa1e$#4(bOU z^o`fjux(LmT)~{d0W~q5Zr%*_gG(7EFXd|e(+s9%k*DJrH&NWgi!0?9zTK4Um{q@k zf?rs@#x)4)T%QS2MFdy>tnsZc?h53|NN2}ZMv?~9dn?jJIXG0wJ$Mx2e^FHFAp2nB zQnLX5&UEN*5A}1{1m>DP@_4X9BzdPF8zz$e&{auy)is{>hJi&s>A%{i7Yi<8(txCb zill7mFq61jZeiio{J}fzAM<*X^KXTE%@N{;Xyjl2Sll>i$)fpG_ljA`QDE;PpjHJ@ z$N~RY=$cpYOY@c+7DE(Yz&rORz|@1-ocmWMoc7tS=(s)KzY2#&&ft9&A-4Dh{kF@W zQFfW#l8=dahDV@5Kke;bC7P?qO7@WxmJ?ju&5ow>k?RlIM+x|da8PAUxh+xO%xq5` zECO#3Z}z9h!A^n59G3`h<--4u?YblB)=kmit#*GDWN&FQrzB84>0XggSgi zku3-cz_G@pM83-PL@A{SF{D&ic~+E!kNEj>#C_E!1pg~9o*TF)TqR>OF_^ODxW81X zGp-d~DnkvO)fYx$#Yi58o!Qw`cC|-g!P;wn=y$>13xk1T$!+%6y}lBYmA^XU&I*|D zV2_IUJTwG#8p&2QgG@oqcLZDQ0A+xN@NC7{Jgp6EGiEWYLJ}PaH@IOzXGlZ{%wJ1k z65!Uh*AFjfvfR)Rc=_e7twKp-GH@HFHbA1F$;b$Z4G`*#zTE1KV(HZV>lfP7GT(6t3#<+_ZhVRKk8LX-z2;98S|BQa!PIpWks=p! z<|6GwDyam=Gfxp~{8tibLmfIR!<9Vr&4yTHoWXKOeZ2zCcX@`t9Ze_0=fLgc(9y+n zbjUcELOr}?J*aC_8*x)juzMH#Jy=?a9Ejnymr;c%wQkVm(kL< zVwU1^*pI_&j}eE(>bw$_N1;%6LJ8cP(_W6Fpw!!rvUxhL^Z;x@E3O;ZI$V`E2SVwU_6VAOY-{Sj-u^iYl+Ebd z_voU6fhW&M4*;}>dEQa8Jg}owyR-b){rg*^G9N2+OtxLOsl3%8=q^DPff1+|6edr9 zUX8yq3uSn;Tsd_%zAb)S zhL{%8Teb83Lfa)#0p5@9E@7k*GbABA_bvVwd%)xh;cr(Y8S^U^Z=a)%lJcl^tB~uf zCSd7p&}QP>#cE13TsyBpov?soOsn*Sp>d-*(>a`FaRMtr?9-1HDy2$VTZiY5Faq&+ zYh4@gZYpWThqucoEt%;wQ^+yneskPg5M)BHuKS1<*ZB_!=Jck=By`>t+nW|aD84xG zQAqIG8S1;dQ;E8Mk?RXb2!S~xlZWN|sQvTw7nBpIPrXTww2ub;B3Mu6i0!UB4N|pl zyd{gAbDZB&4EmF0n1uCYg6nMq8 z9wT!t5hO;@2PPA~vkbTeT^*h;!N1YK(DB6=9Dx1VgOMMY3APckU`mNE4K~3EXL^Re z{Te|U(M%C^1?&3cQIR6~LC5}~rZ_bx_m=$mnk0k!zm0&XC#qrf?5Hh^@wf*y%)hkg z$ZE`$13L)y=!-I@N||lT^RcrZZzFI%r>?laFvq6epK24}D!6OurLGB(~EnILZFp}&rpoNQwqizi* zrp2Z6c8gLlmW}9WV;O(iG+JC>Qo-@|Dh^e+3%x4_eQH&j%)@5dCCZUoNf#3m6wx+W zbs-T1f)0mwg}wB@x8CUkH~`$%M-+Gu;tc@uG*5epLMcKyk8DN#xp5+aDzO}+FQzfE z3>ds>TC}+4(`#Jd(g9W`@>;$c-^r}>WAO+l2I3$74u zGGTx#k3rq2Sf({sdJ~ZZw3Hv}W$vW%+XfhG#vQ>N_n_=3rsf>}7T2Icqp?t) zByBWd<)WYp?uGxxjXeHnE|?-Zg=1;rNuQ_mq;6izOIG;M%!HMxqDQQs&KyVsR^(5g z^_#&H=7Jf7LQu{>SCPn+E*K_a4;PYpO)$S`E*VHlLK{^`id21^Y8+WQ@A4Y+1huX) z9mY^P9DlL>Gb}(FtQurmLL%kNboSV zK<@oJ?VR?{FYM>+SM1Y0_I!TcN#B3<`uIiT{_7&C#a!{_Wdo_zC(mAU+TVWk;@UM4 zL7FXM6KzsOoMZ_sOe|pm8XKG5ljHIa0!S?4h~RDi3#qqlHf%Q*M=9EucD$eUcCcp+ z;}lz%2{!1&>bA=M%(7!hFOC>$EeO(ywZi)J#LPpsIB+z`VBig|V5iivPx~5IhO>gE zj4|eC0{YwU4@KD?%*~8GE)16^)>gdDbYkrNj){=$@2mefrpr8X{jRp*gY*5%ffEe# zj@1;$EfMbs!UoTi<%LYd@ZFEE)F9#2D4+~6A{~g<`k*}=;>6iaY^6-%F4Bb`M^o%) z_dRqXq`Sa~?U?D)y3!pQ*3Tp2cvs0nE!EAJnbsJ_IwP!n+vzO)&yQWph%e*lagZp{?Q-YR_Ae^kz{_sM z0$g0-NqW{?0L*z?- zP7UM6Ed^Jp**%y0{pKNKQE4+?B6xIdsCDX+mi&sX1#8`V({41`RRVUn1cbM#MiN5a zN3eXiy)xq~k-^voQE`o7Gc7Z9G{;Vy_c}&DE zcXwPz0`6K-TRE=ca-UO(QPU&Eq$gqHszr+FWEb>~_6RK8wLX@MQ=FN3Oc7G0LGRRr zcL_dw|K$kQ%ir;@vq(4~nehKz@qVfBa*XU>nMf{`mNhPVXT>|0=y>D1NQ)KZ$QL?r z7H|lzSYS82LD?F*J|}ug>^?$P(mtR_$$rjaggDSks^v!6JHaloc`rBY*97>i1JOaL z2+}LNwYXCb$(;}7wFxX*a7m~+S__)Dlpa4VdmB#~6fQhNhGmI`(94tGoUJ?aT~u)y zSDs90x|z*NaaRAFlY8rDyjrAit5$rpz}{mSihq|n`+me46bc@%36hdw1agIGDSFj; z;`?woHl2szof0u)d>>7VGd^ypYp|J>Z;5m93*m)Kd6+KyV?PnW-B!W*` zAaZ-MCinMW^i#I^U@0p8r~^eE^o|sjlrXi5hTspY>mIDjKqw`Mw_okPh0N3m 5 zTYrC3zi#^of~;T4xjmW|VDS2YoK+!$7)g*`fx7qZ_WaeTHXSXkO@MLT0U%xx=ndR! zjnN0l)#B<;nKC3+#W@u@$K+`;ii06*36nVK~yWx)Gw*#CMPBwZl*YivZx>r=`O%oQNjIZ*2$Nv{F3$Y-2}>t^bwyp#J#(zgycMqe0l?9^sy8J85(e%t1UC;4 zfUMm6tb~Aas|>}8!>_{))D#q0fF`?O+HiE+^jCV1jfBf|;E)5u6e9P`Pk18u0}i|7 zuJ5|vyNA9&!25ypIDXJ2i)#mA*jKiI5dE3|&*i$hI?__0*F&?>Nnd{iKJt9#ciR?r zHa5t8N=ixs7PiFjztvJ(>-Y1y2>ZhHi?=a_Fs*HEvFx0j_SLg5GVoUF=%_Iq6aVJbmPe3e|_g1jE-Z?xOiKyPt@Al8fv{iA>knr z_&y&gBD1}qty^___+%PS2091lE+&fdp!>Rz7z`-xBnd1qJDx&VX4J!n@+6$mM%voi zfVqPYweGI`XUHomVxZ14v!=(=6XOLwcz}K0ww~)Dlt2*+y_p-CQ|*qTXyPMiPFI(f z;HD}yT?5^~AzICvlQV}-BXn{i{@Q-MMVW)Z1qXj=?6`J zp^w=0Z5GSx>kaP91K`~Na8eC47a)2Mng{go_cKqHGeJ#r+%4RTjg7Fdw9NEgNCO9B zC?QRWe!0bgR7dKy&T4xz%qW&A9mrq&lc)(dUum>(^Vig=KXedIl*!4-(R0{YWSE4E z(!X5-33?V3sRuIE2~fyD^wBH16CGd=e2~&=xYOtv806Rp-@`6b|CPf0?3^6X?$GS& zL7@Wfk&eOK3_MSoek<3Zn?-LOJh{3@5FG#b@xfETM?Vi|+z!P+BLTm6_lJmahj|F7nG!IlDq(Sh@&D_^8Zgi_^3ia{ z?GKz7fU4X_({Ag$cYNOwARdH<#uT2j4?ckfL%#2|42DfldX>Wv_h|~ShQXz9v=tZN z3;rxXq6)nKcG}QGfG*8GN=c#q83^_qDDZ-@fzf+D;awdnpg;QxJP6QigJ7L=Ro)OY z`Nnz5|B~{RzYpAxOYOK35iggVau#wa0xY>DP2ir)E( zc0XLt<`TVl5hEfhim<*EoH~>=G`3b&M-U*p#{i{zowm7vlZyU zR^uqsqwD}P1k^EA)YY-e!1@L(-=COR2+*6s&rf;wjIZZ&xXM=tt()lAr6Wg(LJJhX zy8x_RSZ_t>z*_owc$lW|RdqE@pfMjwy-i@!^G=I$Xp#CH7)*IF`t53;&NW=a0uyqk zprulT-!)2@O5vtK)jK6ADf*FK#NU@4CVEJ?pWeQ6=NO(aH)yKZKJ#9H2M-?~sREzv zQCgZed=um}kVZPS1!a6tPB{Z^GfNBuAxApty~t2Vjn3RVw%r6%v9u&!?BMbdK>A=- zbgl#YGemXoPgsHR6Y6`lzK0b7It+58uoPhcDc(UOJio z6k70#-n&4%a%*pOZcGIINW%I#RyTIQMfnicAd|Q5%MeqRD1`X8T06l}3AR(!(B6dV zC*lCE!a*z3iNN&QqV$j2#b@_5iiTbet?>ITs}T_q!Gi#;&BwyF8UXhF7k za}Hbx@CL-z{b#D}r+G{dKR$kV0q@(M&oz!g2%Gj*hTy=wYbcc7JTr)Y(3>Dw!?;3? z{tfnZu2I+q3yfMavtlB&DL2L$f}atHE#2p--#nc-E#934@^fQPzXtyK5V*jH&}mLe zNDv%teO@U4vJ~AqLYDqSf9&hw|Lb64?;Y-(5Pmuq7$Plq^8vP$SJ!oxx5pB&Soa^4 zO(Op1VA8+a0&~HCFZlA$!2|qEjld)YksmrA?@O@}>@+#15~-PiNEb^W?< zZ3xSsag%*Mwj6^s`@RXt*s#3bxomL66aXapd=PzDxd?Ee!D3F#@3zA)zT_`b`twg{QLuf=9_#owI{K4@ zbr69;7;x>lL-EgP8U261U;n@P^5X|a^zr(GMY;MuDf&wNezix!$9a3$!|Drp}_QL?ib3pY=sF?bb|A2a%j(k!>y z?BS3Fyo;t2*2~N0vK}$upL`qqlkt^i$D=d~Nr68X67I^oxIL({1q4T|Xw>A!?C(M^MVMG{%X?;tJlzY>9sIQ~4k+;fYR+KR;uSlF8Z#?i$t1zC3%l#>IKFyZjne zS(BLgctXsEQQ5llZSs6jrMtxUyaaEo5=w5HVc+hIcoId;Zf!cUh33?gT;lDFW_0ZP zE}P0Ad@i0L^yL$~@@!L-%3bWNUYsZjA1aGItW2eFhDCKRf5*6gTTn%jQ1l)0L5WAD6uc zk@bi~k-5Y}4rQp@Ja^>=C#6t#8U}4V8BQAVLj4jA?wE+-3~9WDtUPu!ox6m&EAg}M zWzTy<9+w5NV&C!eIwt447kgOyZ;1V$w%$6ds;>J2J%DsdNrQ+;gS2!>Hxkk*ogyM7 zpa_aINJ|SyBZ8zL-3=n$Agz=jaOd&+zUSWO_uTV`FYjTW%|3gtHP>8YjxlD~2ZCK{ zhPpw2`1u zxco@apz{Kkd8M-@Q#$232EM9)x$yN8>W1>(pj5%O5JE9;KZ--PB-#ykf^A)| zR@sjz7HoZEIUh+rNVNG^vS*iKW`|j~O8v2{#lu~y5VPPQl>c9B=WmBG$?tDZ>Mi`Z z>v{<>AyZ}xst)(H>o}Cf7j8I7v=T%V2nICbZ!hMDHd{mmHoPqDQE}pAaqy~+7i(#ZCZ+S(5#`CI0I+OVMerJb?5KII0}XqK z4W&6#x|r_CEYA@^8-^3tOjS#Pv?_(QRLXVTbh{ndfWOToPrk#T9p`at^%h_HCgc78 z#thcC5T&RXm2pc@L9=YiLaN!F6`hrLBb}gaL%traalS0OCHSwmSUk#oJIdZ`+{G6! zT=^K`0$&!&H!YAD-e&x4w;R%mkKknxA|Frx@+0JryJi=ndFQ^f(6{)m%iOv^?Z|kn zu_rk#Z$kJ`GFxAn-dO8kP(=?@3=1?3nUD|`1NFs@LKF$ck+~gmAws@BaMVmY*G!vm zO8H`l6qlN9-$oBxwiCxPdUYX;^kv!MZC`A z;-Hse63+fSC{*YkRv0+6QMy$GqL262Z1@e_I$r9s$_`9CEdNSAtB!zLh(4nr-n)Rq zQ!@Ms*1PODd1?hUFg!}1>NuAT=T+oRB?KLocuS=0chN&=1i8t=sn*xCsP> zlv6Qvs715>HN^j}Tv9ihFB<1614$?s$yec>(7M$IcM>67t7 zx_Lykh9ke4fZU5n;Ml|liXw8xJ2FphtaVy=ks^e}5wF0sa>G6QGxxqn0?lu$iZaY2 zJ%ck8hC3qV_<_RWhisnr7LH{Itnp@7&BqwzqaLwyJ^jYYaMyDGRxIirwsxr!tN*Rl z*}e}7Do_gJ6~G!~*sdY{@|rYo6roSfWkPujB0{3gnCd3?(w zyX~O%*H}l<%I%1Fk6gLTQcN`%LeaZ7?jd7g%NXV-lK+Kwxsy^&D>ScqaYja&Jnh-K z&4OHiG*G3(7lFc7y)1^c!m`H=f{8^x>UiE_H3ctz^0s9+w7HV@;s4do&|ZHrr)sF4 z3%-Rv#Acy+O9oAce%nQEtDF~II&r{}^!t1CRBC*3SfvL0sgtJYUzW>|88pIJ!9sXCiSgHOu8je~)oELE31)t)b#`UfS^Kj@0U!T4Ed)fSCLGBi^+DFir zbOTv_tN35}t>n|<0jyNk3OOZ&N8~eAIjtx;RN=7|yf#&o&r66!D-ZJ7_zm{ukG#L3 zEwU9Wers|Ro((Q$k+VOr<{}VS^0<>yjHP3#i$kZ{(Uih4*%O#%XY8c#h3cM`G?gMU zA}<~@it{Q4XHw9KNEX*9$Z4E{e%AibFRZZKjAc8Dj{tXU|GoBdBg{f=Ha7Vp3x|u6>;ln5r zG9eVzg#AEdRS+xB1W5LPk6-f=TNGl-_DyHO0OISh=vd0ZgiT*WOU}I)sno%9V*mfu zLjKLm2O(w|A*~Tyoz{dlDalzc)I(gk8*eQJAyEj#zxrXEsbc5FJO<4nwzp_cimT4nNwmBD%w6Br2nqrmY-0woKD5@wli{j0YAW> zTwJ|ay?wZYwaV9gyIaDJ_waZ*0S9raEy2id)%4d@UvoUDbKTOVPZ-m!>be3|IWvBd zPUkaBm;yvv0VIfDmM?5!j=(D;k(-By=UyF65=w*LV$%;1Bnug^Vo)?5AA4ObzkdB1 zrV|4au^tE8F0fHUv2$>!G~hsJ|9icaw^CN_X*;$NOeLfhsdAYWk>~B`k>n{C5peVI z&+=kO9g4xAah8iBDbrI=cq$L0iKg?5q^%S_`U<-$>ID^1BURmZS&;aFg& zV1YBCejLRx-1f67s{-?2@r7>UYnTdlOsco}U)Rx`m_F#(@iMFPEQIcA*1Y!>6xLT) zIStC8aHlHb$U_0ko_fAfrL_`BhE$oS8=id{wtK)r8YjBF3GOj;;y#{Glz;(+l7CIw z4m9%x1<*(n8Y{pTg+gI(Z||s`yiqi?M~7bOe{JAq01A%P$c-@NzWDM#E&wpSp-9=_ zxfwg<1ge3-{(h5k^OmGD0KCAB27G{ac6OjCAQa1>@QIC$-6~Y}azsBYiu+A=xAjM; zB9xWY7?ywxb7b~gYpVj~A4M6zYoV=L;Bu#$&m0j@zcgei|_st^uZZYHHz^Qr!Q6G`#)STB<8N)|}y_#Kb%Q%nM;+#(u+q5eT-N$p!z+3jxG~GTdSF z>()iLT4V4}1VLjPR0fuomw}FMY-%dea~nz^AiN*n^d#XOV_i+BLMRGZJ~j8`4O8Uw zvL<|qIakq898Gu=~Ig$r007=`SocH|iK_}Qoey_5R)AQZ(9DwQa{OWuj z3Hm?XHJ+EYH>|F#)GpC01DsivJ%^R0W_tGfcW+QqfrK^Yhhkv{Qjr%Im-B!P1uNJM z9z57c0>W8l_?d0PB?@Fk&|IFiy(j4mT6J1O85XqYIyyQwyvb!{P+W<*%)vZ_|9Lc! z_9uDJufvXCxo8_k1R=E9gmdNQ=7N`FWFb7|`Be`AAtA7M1GhVsbL{_=8^Ns=?&Bwj z=9&T9{xW_qBO?i*d3wH8(b%fr4#bQV_(zMxP@nfI=@zuzm%f z9w@d#RkCg{3A>TW5+k60sAousH$;F_Ub)4Kt9FX!P#N0&ZlfU@}DaC@`QrY*zfmA@`HnDsF72+z8_=t!go7Zx3a-yKi z1pnOGDJd-M?(H=K&G(*0AXG=7SWGAC1u|kKWg}8cc$8IDq|L~JjMk&S(Bke589Ve_ zM!KSc=EQH6-HcM_#wE!`))%Pb!6?a{gfoLr>(pmQeQoU#81jD3yR*4cHOqFl0vQTl z%5$?VOp9x}KUQwT@M|ab^GVxqM@0g%5z{@S#i~Ip>c_(Wa>!i;ulftPYcLm&2RlkN zSzzElyZrkHoH&8^0yprfmlrC;CeYJvdcK!@ZkmGKKQI8X6~v5h!^5eY+zbjIzzmrG z;+_L8n#{~=?{qTwMM7kd>cl$Z0^&pif0uCUmPI1tN4MwXV9frPr%3JpR!gko@# zJvcbXI$1sNhCoJ4LNYo!dhzLJXh=xjhYui%DrjuZ+;-`uZUK(>r6yeRvrh9Gn>< z;u7ci8?wGkTNrQZX~K8^p7tcL=bLwBHP9j$C0PY%GCN=AMA(&I8x)9lk*m9YL_TK3 z{OKoCufATS{64`NY_$Z7KZWe%W2#a;%5~G84^sN&xSjKoOz2B23C%1*b9C( zFF(F3^vJ2v_dXB^4Q}W;vbguc+6Wcoi;W;nmD8bGvhfqFCj{Fn94C z)FW}>2ZV9>!8h3M#o~YG$2|y0#z?25ahB4(b7maf8%-2>w5b>+XP*3D?6)os{Pe7? zb9+~Rfl_Y@B=wkx!T>2q8JhXy%F2;ma8NmX{P;JB-$4$wf8N>AF_6rc4|4+IC=^`@ zB)a*L<>&(wmN(f9Sm20lr+p3?CDf&%40?WNq}Ij^bl5pLx7gSmynjBn&+~iw^l6ws z{vE8~-qjI1{w7uF<&9q3!_Jd+uX+?!Mc$J@1&Y^`TV&VZ5@j5iODQ2p;6)Zrd8~`Q@({gW{$$M)E7{9J;pG; z26K>`wD5i|d3k2GKd%*@O=)=hIT*; z52PyKoS159#Y9K*eBj^Z*P3wwP6Xub6cSrIM?Tcl)KG|gRhC1a{?83nNkfBPVv&xV zoSd3^>#KD@u|KqPhYs-kRQ?q~700Wt@tr3y65tGP-cS|3`IU4{?3*GOb7*L2C@a6= zKLyg>KhIsy#un_X_Wwfb?v<5+Z-g&dUWtfM-a6>~-rSfw7~%iffS06b zG&2@0u=Rz|$6>pc&L^jbG%UOO@z0X6snFk>hP`xy$J3MQT|<7mUr~thC~j}P&&{d3 zt#3bw(k~y=^#S0bzm9`S@Jbqmr{1z~daYW%a#_%G_K$wf8<3B=HwKR})YhuIFKGFL zM8gxxJE<|0A-Syjjj#R%{EenO?Lu-6gYxHBm!PXIefSA-9B`_EMhJp}g2)c1Vq!Cs z+C(oGZS27|8zht3Iy$xxL$zWYf{ zSFW@;(nQb|)0m5%jwBZ84XR3d-`&pRJJC6`$t)`=Ne8BghsUok=f8w{me0Ya5m;{B z-Q7@?&f&*x-&eru**b!yyKZ(DNSCZHp$rLZMUG@ua?KPVA3#zq!p+TXcbPo|yE|JO z8xUFAn*%bt>YhOhkf?RJa~k#_C`mukb3EVCt*?d54oo(45oE5T(n z9Sq7cgx#}0e0b#TADlTAg!<1SuH#VnBuz{2LcyVe8GkdzJO5E8Z_smZ262yt1rwcs zA{jdAxLdPYt2@F!C@6$2oEA(Oz3;kWOnktfcsR~_ph#}o7$%P^vLj3UYX;ktTSCB< zfd?Ul(HA9KkDu57#rrXXV5Zi>V&6@D`vh+W6nyd|pPOL-c{w<3OSG(<%6G*abJ^&M5k)^|OEe z{HakD=da6*;z?t91HB1Y+1X*6{ChP=pM?}U62J?^O4R4D0EkZGD0D&*^1qQZu(>*9 z3uUq@@-UcqVPVlf!@=TMGi7$5nfVvJp90 zyMw=O1GvATP-A(D%vwc>ulf2yI(Kn?qEVy<3noH(Vips2DGGw{G;$)!53LlAn-3KG z7u0rx>F&%G*50RPB^;Rr$G1#oJ^&hs6KKLoFwoFq?V#9Juq)S@9)+Jv86)heZHm#C z9K=iV!`aQ}RlNBAjl2*&lzL1$Zc?0r70s@pk#KcP%U2iunndokBvkj-+OMqZU@PP9UeRs|kxfHg9UPHe92`VER>EYm_PH;9z+fL8C84FA z9UnhBo_2-R682zvJ^ZmLDIz2BdHg6JM>jiCDqk_nK?if#J#2f5K<-6jNw!1;gCCL8 zSB)w6LT0mf`2dJnXTUjD0X`Kn&0MqE`L{@d{FNT4T43=EgjxO%Y;9SRGKjKCBiIZY z8>hv@Q~=dUi}y%{6W}Q@8WCyg-W^t8PavUSb%B1gu>6JfGkZDJv|3i=euy+KczjL! zrepZ++!=l_1QQeU^RBznV!D0XAGkCeTwDX)-IRq9Q%;~#RxP;IWG3f;iSsAYlqYj8 zSf3j;;~MtgsCgUFO4sXezVrs6Ac}O{tL~PIaUvf?3GwyTH-g=OPJa{~Uj4F+7Dj*@ zTg{@4Rzlp!^(Ca`JM19;S2v<|a>1HwQ5j)`*ha-?DiIZOU=Sm=a=vhw*^81Nc*RO6 zfmef&UK!;22RICyjEs*z0f#IEC_!zPmzVRfCF*Ab!0-_1cmx{!cOSlkV-C=#awoye zVWRjUY(asZ4?JmX#Q@@F2s|QBaGJq7NdBR$8p!|{*Xip+ukXR6yH>y+)9#-`+|sL`>_XG6d^wzjr_{|Vs6+VdTQa~ZoRLMhUASc^8<_q%RI zonp3jSi~z}QT(p3>V$nnx!rI!u>2x^EvjUF2C5esyWZRP@9q4?96sw6;Tx8;EFS^-)CE! zT%+kccwIpBhh$45osHnB`oBE$kFDw%MUVO!`J{@=0}MZp~|t?q;G#%T`nN_+z;Zl(CI7r(z3DBo+@3Yo^O z#q%KxzMR)9v*fh=2QFsUw{0DnHu+6i^NOEs$jhN;H&F1PY62Qw*a5&Gr?eLt-|+(GQgwd5EnqY`#Xmk^uY1%2Gx{080XDtw z$Vf@ArPt6tC9`}T?|sMa-80s6@Ot`nVg7b5k>w3!`YTce=(k19*HJ32#zUQo!;bEHOoU$X`zX zE8>JqZqaUj(k*jVxGqira*&>PFdiT~@y z>Pb4FXJSna#I%mKwrgo4TSs8220LZ|Nnu_BO!qb-LQPrO!QLK)A+h%chXI)60naj2 zV;SJJf(LBS`UCc&zy`e^P7YL9wZiyYCqgiB!F&=P*|2R!UQaV5;@7V)7oJ1Y`lY3% z;L_VbIEMh)2g{I63RNDr7Af%3VG4q=wL(fJy$*7>4+bj${s2GN!eSA&DXz8-qVWpR zz`71NT@3YU3;-^5P2cj$fj6`nar$fsE{RB)$|63J@D8?pz%EBlN!JzV+-=7Xm>n38 z2Oe#5B^Kr9-w_it2Kg!J8_kpmSG=deq{Lt$B;9)*fQY=@+=f4EsesOa9Ym9c2H5*d z;B>(50iQ*XVVqoDS($3I1JynUN&n5&oPbRtvNsZtDWO|~4Pd3W`ZozR9Qd{OMh@X+ByA*LjI9-gw0|=0Y%{x*(||-$z;1~?*oRX*mY(n%r@?8eBIcH*?h}uv!E6!SH(R4KT6@p`AS@~jMlKcMi8Y~b!lsdpt;b1F<@Mx+2C&cz z#~rTPE^-dX0iA(GEjhUs(6pEUb(uZ(w$4OUeHc7Qlqm$?^JZ36S#w@TylNVD4Vm{|FqvAsy1@41$O2OF^QJ zGYBaBnJex-SlNI5l~DFTSND$sDwj#!%Zg46=9jPxdhaj5wg@1$+@9&v++cS|eSyIL zDp8c6z}!#8%K5p_pEua__E_(^?Q+Fr5IxhF+E?5(kNe}@-;80%vohvu8arWiVC>$$ zKrQvWImKh`)%5wsjv$3V7=HaSnqB2LG0!H`{p?@Na@Q%fG`lcHQU0t;5C<9Z&CD&H zP-jM4nc@wkVpKEOktzyiwgguSTFYTfm@*?naCV_O>D5<(kIwhHJ5#LZISJ-aTVmDm zV!hD1tbbdsMu?NwtD>|=7gnuLP*wMhTy2}5D5w!6`z*}MWKaKT_dB3ZWWG9j^Y?4d zUqf7%vJ#!cFC7IV4Zhxoj(*Z{EemE=~L1Ot1iG9EQfo zItgHO-|YBdTME>60E5jTjNcOY9Yq5p05(qWzPfkIx)HeKLqgCyFhG!Wk*J6{n0AkE zx9sQGo!huR`50tE6+8ioUYRk!u#|k#pkN|pjz1^r?66Br5jk3VLY$0eYvew6ZQd+f z&HuYTZp{rsCYk5!Hw?bd!m*7Re93*2JHtF1sVBm%c919#FF1A`THT}^me zB-cag1^P~POFmK1*6hX!kVqWR5gczoc&pzpJj26OVD7ch==cJ7>;E2q*Ve;W77anR zM;q2ejX_@#!^^~Vsq$y5J6rK7jr-AO7x|XYEAGu~Z3M9(vNtMUt2^p>&v)S66qP^d z4b7R%3(p>96Di4VjU}6_KS%Lbf4ih}Z?1S>VpI6qp!IW_6R|w)%c~`J!#*zVnAF@-? z@bF#bPwrcLd(S}#Hy?2B4DOn=uOlM*ySodEi;)Gs$t`q-Hz5C62Js}IUhq@rnA6X$ z{(kUbb#`$0`0-<%%`&W0v9ZK}f9`IpE`y;B0j)@Udb+qWYBqdocdqgLvUK&mi(Iak zTj~7zw2DG%SR$2zgTjn1Prv(ob0d>X#FUozo(O>egJ~4q9gYj4pufUmJijLr=bIXY z`5zu^eF~e9DUu7NRVO@T+wPM8f&U8p7wKQxcI0y<(vY`RG3pT}(9n8)pA8$a9G}HM{7?RzM9Tau z7XN2Jly~U>qbFe@HH*&2)w84!KAU7ppJZ*$I7|+A;`=Q-$2|jHE!Hpk(eqG6Jz5Pp z-gHd}&NuTsHnng2>Q`_+ev6Nok<_d&k-qq6JlExM>)ollAN7j%x#_)3>}k4c z7=-LDYZZS-+{SijKh4IXhAt=90WiJlAr6X2 z*o%TW8*s*OLYCfb1*1ztM>!ZwV5148IYZD9eOXVp_q!$??a|=3--0PUSq{=GD2Wz~ z|C}zA*(RZ+1l`ClNFl&CQ=E%SJx?2~6UQ1di|`6U@8oxolLVl zFqylp^6v2XcO%Kk|W= zmVjd1ApUIvt85SJdOPDy8U4*u_E^91(D|^N_vDfd0jEw$gXlZ7DVZ`P;^l+3k z#<^HlA>H?}{>j6t7R|7voxg;O+h+0`t?0+uVQt$w!E%}Y{x|!+2x+a4+w_T)R5b6| zXMe5h$#uTO=Xi67Xyjs2*oySKg&n9|81I1RlX?0zb@_5{EvUZnxicf3gK_f2-W`ux zKahq&)dAKFKop?d4mP^??%jjo1DlQ!rZrBI6u^cdW7Wx52k0LL3GAO%S5{P8How__ z`&abC6i6%NcC~lDb#WjNH)NIMq#rz92jwNWyF$eP zO31*8@Ee`aIs`fd^raZmX)5N9`EegYywHp>8DF^6=Wop$^m^7Co4P;ePwJ9wL! zS>kX=7LpZ|g9O+j(rRl3fza#|)Gwj+2H>{xIm3xgJ(d+vJx7uyEGsA?I-n=R+s`A- z;A#hA?z}T^|_7TwEw9BCLQ8N1z&81w; zpg*3^R5(Uw-P31%I-4ewS*4PLm-nEHo3zp^3%NV8 zwjboy10tq`Z|xTKC@G^X?c#*CB87-ULqnW3GfOAuoV`>uG)}Ir&zB>FpbeQg-5_j2 z%DybU+2C+9Es>0@g$3mhl&CZAowSq__$$+&D|bQvj-*q7NHDJK#>>3n>FN5wCr`2| zrK)(Pw5!sahlZSHr;PjxKbAoE6YG2+&*4eMP4G5>HGpdPibPq_$qp1piqO;uG4 zJlH@7s#vKQBMZ$_R3uxd@iDS@LeL~kjC0;mq5I)@KPfkgeJ?8RZ~aT}+7y}Et!i$K zGWo?ASsz!$8fSw#iSD~;YrpBD?vUcxuzP~T>lhv?0)dbku8?eCt12CkBpVJQh)~=7 zG47Sud3r=y?>iGsTJ2e2G-<}6WOD0xch7`}+pk~wJXPqs?%Y%ax97$@!RBD;gY!TF zudT}GF|_ZiUJdrsxUJ`rnbp@0R35co(Vh-xRn*$5)CZM2KWw=vDqMG>eRV+0TTieBg4lS#{%?5T4To`JID z%uJfK^v#v8b~l3HASh+R3nnFSJtoJ-kJ}j3Zks@k#w7Wnv~>5q@2=8T zRY;SfmZy8xi&>xDssYR=Ji@ftZQnnOV2Wc9cy-dN&UvKZdpFKO4hu;`-*S*56E81s zY(ojoJMGT$0S)FE>V1cV96fEgX9(r@&hy@{>zlrbiDrkIYUfQieeC9Xx;3tTzQsK_ zfUfWfCA8`2<9k2-I~d&G?Y!CXMsL|$eVSbNN~fuMFR}9^L4#Y;!N@{XICidCR@&FH z{2SiYtn-m?O@ePPY4u?d-`TIn4pCpPVbK6;f!rYFLU9ZlnN{4-ng)kL&8^8EazwDFZm2nNaF|_%Zohlkpz@W`v89kE>nXg;aCVyA+ySRNPYa zuy+zGZ$_{5kN^06um^gShMJmO^E*qeHYQ~Bw`V#Aqi=mOeuD>3T}IMVJ;bq) zR~h1}``;ek_IZ>OtuW_%VvfjuR9F@e+9k6%%F5@(yl+Pl>Vkl zndi?0b$m4??R1UF(uoO-TH>!R0w;H>OO&GoCmm0yp7jfdHjWj>C?#{5XcwhUeEhKg zF6J7XRcF{-N;`diKY`N1Xf`LtQ)A>_c8-5+Rl`gvcT^+$(X-j7CXFJ)u0`y{Ri&$5 zl(D8FB!6-;QgV{Ha&Qp{O^Pmzz@?{O^fjt_t96%koAc+~)2T-{7pI&UC?>2rJ(n8% zYz!afnH!))SwLp>hokp*aM=1Pf_)@8(ESS{g?i`BGB2 z6N1H~HO^-(w}I>8lKgYS{9S8vnVhW6!Rsm-=|kN&cZ>^7I6dl_>{$xv8}nMl4b6&5 z@ZHtVJ@VD@H%H`WJ-QDy7~iQAbo(#re0LozoGTkNxog5QB$=fURq$L!;rvjv`~4~m z4o$pl*K?!lZKsSsLbfvV;uPvtCuc`%doI7M&r=YAeqikgkQUmoQ4ta7 zs6k_)j8O+)Niw@4R9PwXWJ9=8J}o$;n?1SQ9JE#NEY_gj@-*pndMy>9QEzx?rr`NS zAvLi(t)^0Q{tJ`y#|#1trev;?vIz0M=;PuH6X}AvGWOJ}tC#BOlaXt}`REYOrG2wa zG^z#z8lQKr*m`-Nbrug^TCeDf>w2htRjk}=O*XaTwZ2$bP|R+mH`YqngwLRNt^ZE` za1VsS0{3rzU-GCm4w4Eaj*w9hM3C0!g*Dbiy&Q+t4#t`k5!GgT0|&WwKZ4n7&3~Wf2&SmbBeMbOQ`>$ zN6DQ==kdqU#(MoInzL8@>uFqvoG;p3@eMWv0_Vl_PHEw5p$imqx=NJHE&)9|l^3Qv zBTwhY)_gvf=vjq4qU-whuCCL1+GpF~Z^opzO}pcYm+q$@n4VwsX35K0e!zOdPRF~`F_ELNqO~Q}kh#o+I{HvKF~Hk+)y3aFUr?y->arunm!44m6UuaT$w3Ql zfbeGAPU;06w$U07)< z?@}^X+hMDukuf$nmp=D9&&=Uj$PYb7g-@n?yiB^!A~@%g=BZ=l^RrzKrZZfNPW#4n z$>>@upZFF%XB^pI&}rmubgbu`uXtbR`jscmj+Fjuaiw#_p26UQmA?f=l`U?Ah4;gl zF_zbDoA#!RP0e;=X(lP*mXiLPCHSfvn4K$Lg+Gc6zt(l~i`@QNxMjHFrKDYJbfTp=H9s$K9{!}&=^DX& z=V-EY-wgQ`|Eiv#360HHk2_O|jO4q16|A@QR5lAxe_pP3b@6W3B_WsO#c}J`+6CQ< zz`@Izgi-Fy?fT)9ihhZj!W*KV0PDoeP$D)to$p4qDl6 zim`aQXN{93N8fFHnq*`5N{jxkx6WmJ74m&OEktG3Q0L{xX5RQUQuA>F`vM<_(HK+ff9%V%@;}=$ z`{*y_Pja?RR#%|yTa)Blb4nZ8`R={9%HvN#P1w&=t)9qkJ8#v$I2(3Hh9v@IltcHc zbC&(t$~N=kle+K3Z87t8wjE=Eiz$9j`y4K3Rj+R*MV}p?r0uYO^t>7`?1Z=yD08^H zTo(}Wv9a#zq4>G!w^kA4Q_g>7SresR=r2V^m!2^O@SAptYtzSL6s5C)t+P3c*;=K^ z;<5H1TvMgju&zx%vgFhJsTQqv9U;Ry~lfQBJ6ayx@ zs`bAdEO6V7ekebHjdh^m%J|%LqA79NN%DJ1Jzd7dnM^0TuR{J|*G+K`mQiVW1xN%n zm%8A?@Ol_0Mh5?pdhfRC^Y0DhKjum?`2YJKO~d~l32(4)!XJARYC(bSElV!gsn=$0wL^!U(~@ff@{(`al!x7v+eV|v{TFH=f$st zDR^VmhXF>3rL;1>L+N)Fnj*jMg>Wrs!Hrcv+i9Kg(ru|vse6A#`Uhox@MrkK+ zI2T-XJZU8gA}neJ&Kw_HFDP$YphcW?0g;-|09wYtOZmY=%ChiP;;Tzo2SfjJZ!+bc zK}+HA{BJXWz|(2aak4;$sf^Ffiu{1oYhJw8y%T8j`A*x|@|A@qSgRsDia03n)_m{~ zJejSL2AXOyYh9@={Z;M zMefNRu^`WleC63_nG$YpZyUcIMQz4g=iVEX9;g`UbfO% zLa12je~F@0%_JiLzd#Ryd#FelB?3QpJ)WsVMFhtG-=|GOI|9GeT>5ewp44v`7tK}i z;ibqO@%_MaQ@96kzix*qFu)rO*e*#Z2o`i$@4(sS;ahij@82shFUC|*iU+}B#r99Y&M0Ndx6iu!j)6>L%g+o4m|yRk`S773>q%q}oac@9!=77M7zk4ORvxEm zuO|P?Qe^Lwy2V%2(7uG+J{mp|_!tW0z&ekb`!Jx$TawYf4{wrYlTIO8;L1Dz$wc-= z(dOq%`oqU;qIfC5nf#X=4pHHbdv?6yjE2`5=8}8`@hFglwGy`3dP^vXyzXbt(w@D2 z8IK9WT--ejLuC!W6T%bIG+3HD?RR?nhv&-N0r~xv3(xVPh|AR?47Wv?wO;+t1Hlv7 z8HLYGl_&b}0jW#nt@m!b@^@-7@6s=siu*o?DWVyzeL_t%j)wT9ZOFZF$7kw!OJdR# znSXJL8U4b(*zcO(Y4DUZQ)rsDGsMukcnIB0gUc6G;0nbSS*VE)5C}z&@}Z%>gnXDx zB3X7!@MScAq-hk2aub-R(7~5p=SLnD7#q`&YaY-pmA%6^Xr+!rT6xzEd290J5>V77 z?nuIXXL$(M-*2tQu9#sBaDiCJ{-(*-Z$A#gI zH$p0?r(9Axw(&I%7XSJm2NxyjIsvxdO8p zvqembn#- z+-}tcT3DaFgrQu93}iCua}|c)btq?F!y!bie>k&$8x2*Rk)gpI`j#Stz%g1YIuv#l zP21>Ft-}?5E|XITmnU_zXZNk2A@>JiLJVGdrWP2D=(bvwL7@3)7v>Bci79!u&$O=O zI61@Fee%fW27E+$;+r8V(;yys8jJ9J0(mfmk6$QH&=AV;tz2#D$IOxm#BGR8iR&@9 z;b7A2;=UL8=Mz`KMc0x(V?u9sao`=sqV%R-KXTl_S3Uh5q zRuI8JZ!>2h{9EUC%9chfCX=Bw%Ni^D@3rpazclcPKisRF^Qb-OX=z?9%TQ~AFV74C zB)-bi2)A#ZLWoCm1Yv%;Oq2)5BJwy&Hh-btz~uOX4Y!j;8M&6sqoM|`_@;Bv$MfC{ zJO53Y3n3WM&Su2DCu(fh)qVdptV1l)aAdShwzt&lL_$LY8J;V#?il1SSxLR0B0tDP zrdUY}(V7nnF2HOw ziOI#zB~K8ylV&t(9WQmgSCJ=uEw^`*Rz1fy7DxErt0_N-BxF;FK<$`kV$pvoLfcV( sXB>86!*S8Oq<(s9huAQ}SZuBc>+9~KOpG~&z;6&r_toV}Wz2*BAEvo-!2kdN literal 0 HcmV?d00001 diff --git a/docs/runInLocal.md b/docs/runInLocal.md new file mode 100644 index 000000000..74d56533a --- /dev/null +++ b/docs/runInLocal.md @@ -0,0 +1,58 @@ +# 下载程序包到本地或服务器运行 + + + +- [1. 下载应用文件](#1-下载应用文件) +- [2. 运行](#2-运行) + + + +如果是 DotNet 开发者,直接 Clone 源码,然后 VS 打开解决方案,配置 Cookie 后即可直接本地进行运行和调试。 + +对于不是开发者的朋友,可以通过下载 Release 包到本地或任意服务器运行,步骤如下。 +

+ +## 1. 下载应用文件 + +点击 [BiliBiliTool/release](https://github.com/RayWangQvQ/BiliBiliToolPro/releases),下载已发布的最新版本。 + +* 如果本地已安装 `.NET 6.0` 环境: + +请下载 `net-dependent.zip` 文件,本文件依赖本地运行库(runtime-dependent),所以文件包非常小(不到1M)。 + +P.S.这里的运行环境指的是 `.NET Runtime 6.0.0` ,安装方法可详见 [常见问题](docs/questions.md) 中的 **本地或服务器如何安装.net环境** + +* 如果不希望安装或不知如何安装.net运行环境: + +请根据操作系统下载对应的 zip 文件,此文件已自包含(self-contained)运行环境,但相较不包含运行时的文件略大(20M 左右,Github 服务器在国外,下载可能比较慢)。 + +如,Windows系统请下载 `win-x86-x64.zip` ,其他以此类推。 + +## 2. 运行 + +下载并解压zip文件。 + +* Windows 系统 + +对于已安装.net环境,且使用的是依赖包,可在当前目录下执行命令:`dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login`,或者直接双击运行名称为 start.bat 的批处理文件,均可运行。 + +对于使用自包含运行环境版本的,可直接双击运行名称为 Ray.BiliBiliTool.Console.exe 的可执行文件。 + +* Linux 系统 + +对于已安装.net环境,且使用的是依赖包,同上,可在终端中执行命令:`dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login` + +对于使用独立包的,可在终端中执行命令: + +``` +chmod +x ./Ray.BiliBiliTool.Console +Ray.BiliBiliTool.Console +``` + +其他系统依此类推,运行结果图示如下: + +![运行图示](docs/imgs/run-exe.png) + +除了修改配置文件,也可以通过添加环境变量或在启动命令后附加参数来实现配置,详细方法可参考下面的**配置说明**章节。 + +
diff --git a/podman/README.md b/podman/README.md index 6aef954b8..6956c4a2e 100644 --- a/podman/README.md +++ b/podman/README.md @@ -7,6 +7,7 @@ - [2. 运行容器](#2-运行容器) - [2.1. 极简版](#21-极简版) - [2.2. 综合版](#22-综合版) +- [登录](#登录) - [3. 自己构建镜像(非必须)](#3-自己构建镜像非必须) - [4. 其他](#4-其他) @@ -52,9 +53,7 @@ Podman可以和Docker共存,命令也基本可以通用。 ``` # 生成并运行容器 -podman run -itd --name="bili" \ - -e Ray_BiliBiliCookies__1="cookie" \ - docker.io/zai7lou/bilibili_tool_pro +podman run -itd --name="bili" docker.io/zai7lou/bilibili_tool_pro # 查看实时日志 podman logs -f bili @@ -71,13 +70,13 @@ mkdir -p Logs # 下载appsettings.json wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/src/Ray.BiliBiliTool.Console/appsettings.json +wget https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/docker/sample/cookies.json # 运行 podman run -itd --name="bili" \ -v /bili/Logs:/app/Logs \ -v /bili/appsettings.json:/app/appsettings.json \ - -e Ray_BiliBiliCookies__1="cookie" \ - -e Ray_BiliBiliCookies__2="cookie" \ + -v /bili/cookies.json:/app/cookies.json \ -e Ray_DailyTaskConfig__Cron="0 15 * * *" \ -e Ray_LiveLotteryTaskConfig__Cron="0 22 * * *" \ -e Ray_UnfollowBatchedTaskConfig__Cron="0 6 1 * *" \ @@ -99,6 +98,14 @@ podman ps -a podman exec -it bili bash ``` +## 登录 + +在宿主机运行`podman exec -it bili bash -c "dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login"` + +扫码进行登录。 + +![login](../docs/imgs/docker-login.png) + ## 3. 自己构建镜像(非必须) 目前我提供和维护的镜像:`[zai7lou/bilibili_tool_pro](https://hub.docker.com/repository/docker/zai7lou/bilibili_tool_pro)`; diff --git a/qinglong/README.md b/qinglong/README.md index 8a43d2827..34313140b 100644 --- a/qinglong/README.md +++ b/qinglong/README.md @@ -10,16 +10,16 @@ - [1.1. 安装 `dotnet` 环境](#11-安装-dotnet-环境) - [1.2. 重启青龙容器](#12-重启青龙容器) - [1.3. 登录青龙面板并修改配置](#13-登录青龙面板并修改配置) - - [1.4. 添加bili配置](#14-添加bili配置) - - [1.5. 在青龙面板中添加拉库定时任务](#15-在青龙面板中添加拉库定时任务) - - [1.5.1 订阅管理](#151-订阅管理) - - [1.5.2 定时任务拉库](#152-定时任务拉库) + - [1.4. 在青龙面板中添加拉库定时任务](#14-在青龙面板中添加拉库定时任务) + - [1.4.1. 订阅管理](#141-订阅管理) + - [1.4.2. 定时任务拉库](#142-定时任务拉库) + - [1.5. 登录](#15-登录) - [2. 先行版](#2-先行版) - - [2.1 订阅管理](#21-订阅管理) - - [2.2 定时任务拉库](#22-定时任务拉库) + - [2.1. 订阅管理](#21-订阅管理) + - [2.2. 定时任务拉库](#22-定时任务拉库) - [3. GitHub加速](#3-github加速) -- [4 常见问题](#4-常见问题) - - [4.1 Couldn't find a valid ICU package installed on the system](#41-couldnt-find-a-valid-icu-package-installed-on-the-system) +- [4. 常见问题](#4-常见问题) + - [4.1. Couldn't find a valid ICU package installed on the system](#41-couldnt-find-a-valid-icu-package-installed-on-the-system) @@ -53,29 +53,10 @@ curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliB 保存配置。 -### 1.4. 添加bili配置 - -青龙面板,`环境变量`页,添加环境变量: - -``` -名称:Ray_BiliBiliCookies__1 -值:abc -``` - -``` -名称:Ray_BiliBiliCookies__2 -值:defg -``` - -`abc`、`defg`为你抓取到的真实cookie字符串。 - -![qinglong-env.png](../docs/imgs/qinglong-env.png) - - -### 1.5. 在青龙面板中添加拉库定时任务 +### 1.4. 在青龙面板中添加拉库定时任务 两种方式: -#### 1.5.1 订阅管理 +#### 1.4.1. 订阅管理 ``` 名称:Bilibili @@ -91,7 +72,7 @@ curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliB 保存后,点击运行按钮,运行拉库。 -#### 1.5.2 定时任务拉库 +#### 1.4.2. 定时任务拉库 青龙面板,`定时任务`页,右上角`添加任务`,填入以下信息: ``` @@ -108,6 +89,15 @@ curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliB ![qinglong-tasks.png](../docs/imgs/qinglong-tasks.png) +### 1.5. 登录 + +在青龙定时任务中,点击运行`bili扫码登录`任务,查看运行日志,扫描日志中的二维码进行登录。 +![qinglong-login.png](../docs/imgs/qinglong-login.png) + +登录成功后,会将cookie保存到青龙的环境变量中: + +![qinglong-env.png](../docs/imgs/qinglong-env.png) + ## 2. 先行版 青龙拉库时可以指定分支,develop分支的代码会超前于默认的main分支,包含当前正在开发的新功能。 @@ -116,7 +106,7 @@ curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliB 方式有两种: -### 2.1 订阅管理 +### 2.1. 订阅管理 ``` 分支:develop @@ -125,16 +115,16 @@ curl -sSL https://ghproxy.com/https://raw.githubusercontent.com/RayWangQvQ/BiliB 其他选项同上。 -### 2.2 定时任务拉库 +### 2.2. 定时任务拉库 修改拉库命令为`ql repo https://github.com/RayWangQvQ/BiliBiliToolPro.git "bili_dev_task_" "" "" "develop"` ## 3. GitHub加速 拉库时,如果服务器在国内,访问GitHub速度慢,可以在仓库地址前加上 `https://ghproxy.com/` 进行加速, 如:`ql repo https://ghproxy.com/https://github.com/RayWangQvQ/BiliBiliToolPro.git "bili_task_"` -## 4 常见问题 +## 4. 常见问题 -### 4.1 Couldn't find a valid ICU package installed on the system +### 4.1. Couldn't find a valid ICU package installed on the system 如 #266 ,需要在青龙面板的环境变量添加如下环境变量: From f49848081a1638b90b9c6a81b357eed21e09caa8 Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 10 Dec 2022 22:24:18 +0800 Subject: [PATCH 36/36] fix: start with 0 --- src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs index db548627a..f2ab99620 100644 --- a/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs +++ b/src/Ray.BiliBiliTool.Application/LoginTaskAppService.cs @@ -234,7 +234,7 @@ protected void AddOrUpdateCkToQingLong(BiliCookie ckInfo) _logger.LogInformation("用户不存在,新增cookie"); var lastNum = list.LastOrDefault()?.value.Split("__").LastOrDefault(); - var newNum = int.Parse(lastNum ?? "0") + 1; + var newNum = int.Parse(lastNum ?? "-1") + 1; var name = $"Ray_BiliBiliCookies__{newNum}"; var add = new AddQingLongEnv()