Skip to content

Commit

Permalink
Enable dual stack in services
Browse files Browse the repository at this point in the history
  • Loading branch information
lucacome committed Apr 6, 2022
1 parent 7f857cd commit 8d90992
Show file tree
Hide file tree
Showing 31 changed files with 58 additions and 33 deletions.
25 changes: 4 additions & 21 deletions tests/Makefile
Expand Up @@ -12,18 +12,8 @@ KIND_KUBE_CONFIG_FOLDER = $${HOME}/.kube/kind
SHOW_IC_LOGS = no
PYTEST_ARGS =
DOCKERFILEPATH = docker/Dockerfile
KIND_TEMPLATE_FILE_PATH=kind/kind-config-template.yaml
IP_FAMILY ?= ipv4
IP_ADDR_PROPERTY = .IPAddress
IP_ADDR_FMT = "%s"
API_SERVER_ADDR = 127.0.0.1


ifeq (${IP_FAMILY}, ipv6)
IP_ADDR_PROPERTY = .GlobalIPv6Address
IP_ADDR_FMT = "[%s]"
endif

define PRINT_HELP_PYSCRIPT
import re, sys

Expand Down Expand Up @@ -52,15 +42,9 @@ run-tests: ## Run tests
docker run --rm -v $(KUBE_CONFIG_FOLDER):/root/.kube $(PREFIX):$(TAG) --context=$(CONTEXT) --image=$(BUILD_IMAGE) --image-pull-policy=$(PULL_POLICY) --deployment-type=$(DEPLOYMENT_TYPE) --ic-type=$(IC_TYPE) --service=$(SERVICE) --node-ip=$(NODE_IP) --show-ic-logs=$(SHOW_IC_LOGS) $(PYTEST_ARGS)


.PHONY: get-kind-cluster-ip ## Get Kind cluster IP Address
get-kind-cluster-ip:
$(eval KIND_CLUSTER_IP=$(shell docker inspect -f '{{range .NetworkSettings.Networks}}{{${IP_ADDR_PROPERTY}}}{{end}}' kind-control-plane ))
$(eval KIND_CLUSTER_IP=$(shell printf ${IP_ADDR_FMT} "${KIND_CLUSTER_IP}"))


.PHONY: update-test-kind-config ## Update Kind config
update-test-kind-config: get-kind-cluster-ip
sed -ir "s|server:.*|server: https://${KIND_CLUSTER_IP}:6443|" $(KIND_KUBE_CONFIG_FOLDER)/config
update-test-kind-config:
sed -ir "s|server:.*|server: https://kind-control-plane:6443|" $(KIND_KUBE_CONFIG_FOLDER)/config


.PHONY: run-tests-in-kind
Expand All @@ -71,16 +55,15 @@ run-tests-in-kind: update-test-kind-config ## Run tests in Kind
--deployment-type=$(DEPLOYMENT_TYPE) \
--ic-type=$(IC_TYPE) \
--service=nodeport \
--node-ip=$(KIND_CLUSTER_IP) \
--node-ip=kind-control-plane \
--show-ic-logs=$(SHOW_IC_LOGS) \
$(PYTEST_ARGS)


.PHONY: create-kind-cluster
create-kind-cluster: ## Create Kind cluster
$(eval KIND_IMAGE=$(shell grep -m1 'FROM kindest/node' <docker/Dockerfile | awk -F'[ ]' '{print $$2}'))
cat ${KIND_TEMPLATE_FILE_PATH} | sed "s/{{.IPFamily}}/${IP_FAMILY}/" | sed "s/{{.APIServerAddress}}/${API_SERVER_ADDR}/" > kind-config.yaml
kind create cluster --image $(KIND_IMAGE) --config kind-config.yaml
kind create cluster --image $(KIND_IMAGE)
kind export kubeconfig --kubeconfig $(KIND_KUBE_CONFIG_FOLDER)/config


Expand Down
1 change: 1 addition & 0 deletions tests/data/ap-waf-grpc/syslog.yaml
Expand Up @@ -32,6 +32,7 @@ kind: Service
metadata:
name: syslog-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 514
targetPort: 514
Expand Down
1 change: 1 addition & 0 deletions tests/data/ap-waf/syslog.yaml
Expand Up @@ -32,6 +32,7 @@ kind: Service
metadata:
name: syslog-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 514
targetPort: 514
Expand Down
1 change: 1 addition & 0 deletions tests/data/ap-waf/webapp.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: webapp-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
1 change: 1 addition & 0 deletions tests/data/appprotect/syslog.yaml
Expand Up @@ -32,6 +32,7 @@ kind: Service
metadata:
name: syslog-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 514
targetPort: 514
Expand Down
1 change: 1 addition & 0 deletions tests/data/appprotect/syslog2.yaml
Expand Up @@ -32,6 +32,7 @@ kind: Service
metadata:
name: syslog2-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 514
targetPort: 514
Expand Down
4 changes: 4 additions & 0 deletions tests/data/common/app/advanced-routing/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: backend1-future-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -57,6 +58,7 @@ metadata:
name: backend2-svc
labels:
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -90,6 +92,7 @@ kind: Service
metadata:
name: backend3-deprecated-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -123,6 +126,7 @@ kind: Service
metadata:
name: backend4-stable-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
1 change: 1 addition & 0 deletions tests/data/common/app/dos/app.yaml
Expand Up @@ -3,6 +3,7 @@ kind: Service
metadata:
name: dos-svc
spec:
ipFamilyPolicy: PreferDualStack
selector:
app: dos-server
ports:
Expand Down
3 changes: 3 additions & 0 deletions tests/data/common/app/extended/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: backend1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -57,6 +58,7 @@ metadata:
name: backend2-svc
labels:
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -91,6 +93,7 @@ metadata:
name: backend3-svc
labels:
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
2 changes: 2 additions & 0 deletions tests/data/common/app/grpc-vs-mixed/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: grpc1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 50051
targetPort: 50051
Expand Down Expand Up @@ -56,6 +57,7 @@ kind: Service
metadata:
name: backend1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
2 changes: 2 additions & 0 deletions tests/data/common/app/grpc-vs/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: grpc1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 50051
targetPort: 50051
Expand Down Expand Up @@ -56,6 +57,7 @@ kind: Service
metadata:
name: grpc2-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 50051
targetPort: 50051
Expand Down
3 changes: 2 additions & 1 deletion tests/data/common/app/grpc/app.yaml
Expand Up @@ -23,10 +23,11 @@ kind: Service
metadata:
name: grpc-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 50051
targetPort: 50051
protocol: TCP
name: grpc
selector:
app: greeter
app: greeter
4 changes: 3 additions & 1 deletion tests/data/common/app/secure/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: backend1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -69,6 +70,7 @@ kind: Service
metadata:
name: backend2-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 443
Expand Down Expand Up @@ -105,4 +107,4 @@ data:
kind: Secret
metadata:
name: app-tls-secret
type: Opaque
type: Opaque
2 changes: 2 additions & 0 deletions tests/data/common/app/simple/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: backend1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -57,6 +58,7 @@ metadata:
name: backend2-svc
labels:
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
3 changes: 3 additions & 0 deletions tests/data/common/app/split/app.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: backend1-svc-v1
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -56,6 +57,7 @@ kind: Service
metadata:
name: backend1-svc-v2
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -90,6 +92,7 @@ metadata:
name: backend2-svc
labels:
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
2 changes: 2 additions & 0 deletions tests/data/common/app/vsr/secure/multiple.yaml
Expand Up @@ -23,6 +23,7 @@ kind: Service
metadata:
name: backend1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down Expand Up @@ -57,6 +58,7 @@ metadata:
name: backend3-svc
labels:
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
1 change: 1 addition & 0 deletions tests/data/common/app/vsr/secure/single.yaml
Expand Up @@ -38,6 +38,7 @@ metadata:
name: backend2-svc
namespace: backend2-namespace
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 443
Expand Down
1 change: 1 addition & 0 deletions tests/data/common/backend1-svc.yaml
Expand Up @@ -3,6 +3,7 @@ kind: Service
metadata:
name: backend1-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
Expand Down
Expand Up @@ -4,6 +4,7 @@ metadata:
name: nginx-ingress
namespace: nginx-ingress
spec:
ipFamilyPolicy: PreferDualStack
externalTrafficPolicy: Local
type: LoadBalancer
ports:
Expand All @@ -24,4 +25,4 @@ spec:
protocol: TCP
name: exporter
selector:
app: nginx-ingress
app: nginx-ingress
5 changes: 3 additions & 2 deletions tests/data/common/service/nodeport-with-additional-ports.yaml
Expand Up @@ -4,7 +4,8 @@ metadata:
name: nginx-ingress
namespace: nginx-ingress
spec:
type: NodePort
ipFamilyPolicy: PreferDualStack
type: NodePort
ports:
- port: 80
targetPort: 80
Expand All @@ -31,4 +32,4 @@ spec:
protocol: UDP
name: udp-server
selector:
app: nginx-ingress
app: nginx-ingress
3 changes: 2 additions & 1 deletion tests/data/dos/dos-syslog.yaml
Expand Up @@ -24,9 +24,10 @@ kind: Service
metadata:
name: syslog-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 514
targetPort: 514
protocol: TCP
selector:
app: syslog
app: syslog
3 changes: 2 additions & 1 deletion tests/data/externalname-services/externalname-svc.yaml
Expand Up @@ -3,5 +3,6 @@ apiVersion: v1
metadata:
name: externalname-service
spec:
ipFamilyPolicy: PreferDualStack
type: ExternalName
externalName: external-backend-svc.external-ns.svc.cluster.local
externalName: external-backend-svc.external-ns.svc.cluster.local
3 changes: 2 additions & 1 deletion tests/data/rewrites/hello.yaml
Expand Up @@ -23,10 +23,11 @@ kind: Service
metadata:
name: hello-svc
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: hello
app: hello
Expand Up @@ -50,6 +50,7 @@ kind: Service
metadata:
name: coredns
spec:
ipFamilyPolicy: PreferDualStack
selector:
app: coredns
ports:
Expand Down
Expand Up @@ -25,6 +25,7 @@ kind: Service
metadata:
name: tcp-service
spec:
ipFamilyPolicy: PreferDualStack
selector:
app: tcp-service
ports:
Expand Down
Expand Up @@ -36,6 +36,7 @@ kind: Service
metadata:
name: secure-app
spec:
ipFamilyPolicy: PreferDualStack
ports:
- port: 8443
targetPort: 8443
Expand Down Expand Up @@ -71,4 +72,4 @@ metadata:
name: app-tls-secret
data:
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURGRENDQWZ3Q0NRQ3EzQWxhdnJiaWpqQU5CZ2txaGtpRzl3MEJBUXNGQURCTU1Rc3dDUVlEVlFRR0V3SlYKVXpFTE1Ba0dBMVVFQ0F3Q1EwRXhGakFVQmdOVkJBY01EVk5oYmlCR2NtRnVZMmx6WTI4eEdEQVdCZ05WQkFNTQpEMkZ3Y0M1bGVHRnRjR3hsTG1OdmJUQWVGdzB5TURBek1qTXlNekl3TkROYUZ3MHlNekF6TWpNeU16SXdORE5hCk1Fd3hDekFKQmdOVkJBWVRBbFZUTVFzd0NRWURWUVFJREFKRFFURVdNQlFHQTFVRUJ3d05VMkZ1SUVaeVlXNWoKYVhOamJ6RVlNQllHQTFVRUF3d1BZWEJ3TG1WNFlXMXdiR1V1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRgpBQU9DQVE4QU1JSUJDZ0tDQVFFQTJCRXhZR1JPRkhoN2VPMVlxeCtWRHMzRzMrVEhyTEZULzdEUFFEQlkza3pDCi9oZlprWCt3OW1NNkQ1RU9uK2lpVlNhUWlQMm1aNFA3N29pR0dmd3JrNjJ0eEQ5cHphODM5NC9aSjF5Q0dXZ1QKK2NWUEVZbkxjQktzSTRMcktJZ21oWVIwUjNzWWRjR1JkSXJWUFZlNUVUQlk1Z1U0RGhhMDZOUEIraitmK0krWgphWGIvMlRBekJhNHozMWpIQzg2amVQeTFMdklGazFiY3I2cSsxRGR5eklxcWxkRDYvU3Q4Q2t3cDlOaDFCUGFhCktZZ1ZVd010UVBib2s1cFFmbVMrdDg4NHdSM0dTTEU4VkxRbzgyYnJhNUR3emhIamlzOTlJRGhzbUt0U3lWOXMKaWNJbXp5dHBnSXlhTS9zWEhRQU9KbVFJblFteWgyekd1WFhTQ0lkRGtRSURBUUFCTUEwR0NTcUdTSWIzRFFFQgpDd1VBQTRJQkFRQ0tsVkhOZ1k5VHZLaW9Xb0tvdllCdnNRMmYrcmFOOEJwdWNDcnRvRm15NUczcGIzU2lPTndaCkF2cnhtSm4vR3lsa3JKTHBpQVA1eUNBNGI2Y2lYMnRGa3pQRmhJVFZKRTVBeDlpaEF2WWZwTUFSdWVqM29HN2UKd0xwQk1iUnlGbHJYV29NWUVBMGxsV0JueHRQQXZYS2Y4SVZGYTRSSDhzV1JJSDB4M2hFdjVtQ3VUZjJTRTg0QwpiNnNjS3Z3MW9CQU5VWGxXRVZVYTFmei9rWWZBa1lrdHZyV2JUcTZTWGxodXRJYWY4WEYzSUMrL2x1b3gzZThMCjBBcEFQVE5sZ0JwOTkvcXMrOG9PMWthSmQ1TmV6TnlJeXhSdUtJMzlDWkxuQm9OYmkzdlFYY1NzRCtYU2lYT0cKcEVnTjNtci8xRms4OVZMSENhTnkyKzBqMjZ0eWpiclcKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFlFVEZnWkU0VWVIdDQKN1Zpckg1VU96Y2JmNU1lc3NWUC9zTTlBTUZqZVRNTCtGOW1SZjdEMll6b1BrUTZmNktKVkpwQ0kvYVpuZy92dQppSVlaL0N1VHJhM0VQMm5OcnpmM2o5a25YSUlaYUJQNXhVOFJpY3R3RXF3amd1c29pQ2FGaEhSSGV4aDF3WkYwCml0VTlWN2tSTUZqbUJUZ09GclRvMDhINlA1LzRqNWxwZHYvWk1ETUZyalBmV01jTHpxTjQvTFV1OGdXVFZ0eXYKcXI3VU4zTE1pcXFWMFByOUszd0tUQ24wMkhVRTlwb3BpQlZUQXkxQTl1aVRtbEIrWkw2M3p6akJIY1pJc1R4VQp0Q2p6WnV0cmtQRE9FZU9LejMwZ09HeVlxMUxKWDJ5SndpYlBLMm1Bakpveit4Y2RBQTRtWkFpZENiS0hiTWE1CmRkSUloME9SQWdNQkFBRUNnZ0VCQUxYaW16ODZrT1A0bkhBcTFPYVEyb2l3dndhQTczbTNlUytZSm84eFk4NFcKcmxyNXRzUWR5dGxPcEhTd05yQjBSQnNNTU1XeFNPQ0JJWlltUlVVZ200cGd2Uk9rRWl2OG9VOThQMkE4SnFTKwprWHBFRjVCNi84K2pXRmM0Z1Q4SWhlMEZtR0VJQllvelhYL08wejBsV0h4WXg2MHluWUoycU9vS1FKT3A5YjlsCmpiUVBkaC9mN2ErRWF0RzZNUFlrNG5xSEY3a0FzcmNsRXo2SGUvaEx6NmRkSTJ1N2RMRjB6QlN0QjM5WDFRZysKZ1JzTittOXg1S1FVTXYxMktvajdLc2hEelozOG5hSjd5bDgycGhBV1lGZzBOZHlzRlBRbmt0WmlNSUxOblFjNwpOeUt0cHNQaUxIRE9ha05hdEZLU2lOaUJrUk1lY1ZUMlJNMzMzUG54bFVFQ2dZRUEvYTY5MEEralU4VFJNbVZyCk4vRnlYWkxYa1c5b2NxVjBRbTA0TDMrSExybFNCTlRWSzk2U1pVT203VjViTzIxNmd4S2dJK3IwYm5kdE5GTUQKLzFncDhsdlJNcUlIeGZTeUo4SHpsSzViT0lnaUpxRGhzK3BKWTZmLytIVzZ1QkZyN3NGS3lxbVlIQlA0SC9BdApsT3lLeEVjMHFXazFlT2tCMWNNSGx0WDRwemtDZ1lFQTJncDhDVDVYWjNMSWRQN2M1SHpDS1YwczBYS1hGNmYyCkxzclhPVlZaTmJCN1NIS1NsOTBIU2VWVGx3czdqSnNxcC9yWFY2aHF0eUdEaTg4aTFZekthcEF6dXl3b0U3TnEKMUJpd2ZYSURQeTlPNUdGNXFYNXFUeENzSWNIcmo2Z21XMEZVQWhoS1lQcDRxd1JMdzFMZkJsd3U1VmhuN3I3ego0SkZBTEFpdlp4a0NnWUJicnpuKzVvZjdFSmtqQTdDYWlYTHlDczVLUzkrTi8rcGl6NktNMkNSOWFKRVNHZkhwClp3bTErNXRyRXIwYVgxajE0bGRxWTlKdjBrM3ZxVWs2a2h5bThUUk1mbThjeG5GVkdTMzF3SVpMaWpmOWlndkkKd0paQnBFaEkvaE83enVBWmJGYWhwR1hMVUJSUFJyalNxQ01IQ1UwcEpWTWtIZUtCNVhqcXRPNm5VUUtCZ0NJUAp6VHlzYm44TW9XQVZpSEJ4Uk91dFVKa1BxNmJZYUU3N0JSQkIwd1BlSkFRM1VjdERqaVh2RzFYWFBXQkR4VEFrCnNZdFNGZ214eEprTXJNWnJqaHVEbDNFLy9xckZOb1VYcmtxS2l4Tk4wcWMreXdDOWJPSVpHcXJUWG5jOHIzRkcKRFZlZWI5QWlrTU0ya3BkYTFOaHJnaS8xMVphb1lmVE0vQmRrNi9IUkFvR0JBSnFzTmFZYzE2clVzYzAzUEwybApXUGNzRnZxZGI3SEJyakVSRkhFdzQ0Vkt2MVlxK0ZWYnNNN1FTQVZ1V1llcGxGQUpDYzcrSEt1YjRsa1hRM1RkCndSajJLK2pOUzJtUXp1Y2hOQnlBZ1hXVnYveHhMZEE3NnpuWmJYdjl5cXhnTVVjTVZwZGRuSkxVZm9QVVZ1dTcKS0tlVVU3TTNIblRKUStrcldtbUxraUlSCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFlFVEZnWkU0VWVIdDQKN1Zpckg1VU96Y2JmNU1lc3NWUC9zTTlBTUZqZVRNTCtGOW1SZjdEMll6b1BrUTZmNktKVkpwQ0kvYVpuZy92dQppSVlaL0N1VHJhM0VQMm5OcnpmM2o5a25YSUlaYUJQNXhVOFJpY3R3RXF3amd1c29pQ2FGaEhSSGV4aDF3WkYwCml0VTlWN2tSTUZqbUJUZ09GclRvMDhINlA1LzRqNWxwZHYvWk1ETUZyalBmV01jTHpxTjQvTFV1OGdXVFZ0eXYKcXI3VU4zTE1pcXFWMFByOUszd0tUQ24wMkhVRTlwb3BpQlZUQXkxQTl1aVRtbEIrWkw2M3p6akJIY1pJc1R4VQp0Q2p6WnV0cmtQRE9FZU9LejMwZ09HeVlxMUxKWDJ5SndpYlBLMm1Bakpveit4Y2RBQTRtWkFpZENiS0hiTWE1CmRkSUloME9SQWdNQkFBRUNnZ0VCQUxYaW16ODZrT1A0bkhBcTFPYVEyb2l3dndhQTczbTNlUytZSm84eFk4NFcKcmxyNXRzUWR5dGxPcEhTd05yQjBSQnNNTU1XeFNPQ0JJWlltUlVVZ200cGd2Uk9rRWl2OG9VOThQMkE4SnFTKwprWHBFRjVCNi84K2pXRmM0Z1Q4SWhlMEZtR0VJQllvelhYL08wejBsV0h4WXg2MHluWUoycU9vS1FKT3A5YjlsCmpiUVBkaC9mN2ErRWF0RzZNUFlrNG5xSEY3a0FzcmNsRXo2SGUvaEx6NmRkSTJ1N2RMRjB6QlN0QjM5WDFRZysKZ1JzTittOXg1S1FVTXYxMktvajdLc2hEelozOG5hSjd5bDgycGhBV1lGZzBOZHlzRlBRbmt0WmlNSUxOblFjNwpOeUt0cHNQaUxIRE9ha05hdEZLU2lOaUJrUk1lY1ZUMlJNMzMzUG54bFVFQ2dZRUEvYTY5MEEralU4VFJNbVZyCk4vRnlYWkxYa1c5b2NxVjBRbTA0TDMrSExybFNCTlRWSzk2U1pVT203VjViTzIxNmd4S2dJK3IwYm5kdE5GTUQKLzFncDhsdlJNcUlIeGZTeUo4SHpsSzViT0lnaUpxRGhzK3BKWTZmLytIVzZ1QkZyN3NGS3lxbVlIQlA0SC9BdApsT3lLeEVjMHFXazFlT2tCMWNNSGx0WDRwemtDZ1lFQTJncDhDVDVYWjNMSWRQN2M1SHpDS1YwczBYS1hGNmYyCkxzclhPVlZaTmJCN1NIS1NsOTBIU2VWVGx3czdqSnNxcC9yWFY2aHF0eUdEaTg4aTFZekthcEF6dXl3b0U3TnEKMUJpd2ZYSURQeTlPNUdGNXFYNXFUeENzSWNIcmo2Z21XMEZVQWhoS1lQcDRxd1JMdzFMZkJsd3U1VmhuN3I3ego0SkZBTEFpdlp4a0NnWUJicnpuKzVvZjdFSmtqQTdDYWlYTHlDczVLUzkrTi8rcGl6NktNMkNSOWFKRVNHZkhwClp3bTErNXRyRXIwYVgxajE0bGRxWTlKdjBrM3ZxVWs2a2h5bThUUk1mbThjeG5GVkdTMzF3SVpMaWpmOWlndkkKd0paQnBFaEkvaE83enVBWmJGYWhwR1hMVUJSUFJyalNxQ01IQ1UwcEpWTWtIZUtCNVhqcXRPNm5VUUtCZ0NJUAp6VHlzYm44TW9XQVZpSEJ4Uk91dFVKa1BxNmJZYUU3N0JSQkIwd1BlSkFRM1VjdERqaVh2RzFYWFBXQkR4VEFrCnNZdFNGZ214eEprTXJNWnJqaHVEbDNFLy9xckZOb1VYcmtxS2l4Tk4wcWMreXdDOWJPSVpHcXJUWG5jOHIzRkcKRFZlZWI5QWlrTU0ya3BkYTFOaHJnaS8xMVphb1lmVE0vQmRrNi9IUkFvR0JBSnFzTmFZYzE2clVzYzAzUEwybApXUGNzRnZxZGI3SEJyakVSRkhFdzQ0Vkt2MVlxK0ZWYnNNN1FTQVZ1V1llcGxGQUpDYzcrSEt1YjRsa1hRM1RkCndSajJLK2pOUzJtUXp1Y2hOQnlBZ1hXVnYveHhMZEE3NnpuWmJYdjl5cXhnTVVjTVZwZGRuSkxVZm9QVVZ1dTcKS0tlVVU3TTNIblRKUStrcldtbUxraUlSCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K

0 comments on commit 8d90992

Please sign in to comment.