From 13cd51aacf13901a79a9280c23ef4f32c33c7c82 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Tue, 30 Apr 2024 11:28:59 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- system/snapshot-controller/1.0.0/.helmignore | 32 ++ system/snapshot-controller/1.0.0/CHANGELOG.md | 3 + system/snapshot-controller/1.0.0/Chart.yaml | 44 ++ system/snapshot-controller/1.0.0/README.md | 56 +++ .../1.0.0/app-changelog.md | 9 + .../snapshot-controller/1.0.0/app-readme.md | 12 + .../1.0.0/charts/common-22.0.3.tgz | Bin 0 -> 97709 bytes .../snapshot-controller/1.0.0/ix_values.yaml | 133 ++++++ .../snapshot-controller/1.0.0/questions.yaml | 196 +++++++++ .../1.0.0/templates/NOTES.txt | 1 + .../1.0.0/templates/common.yaml | 5 + ...age.k8s.io_volumegroupsnapshotclasses.yaml | 84 ++++ ...ge.k8s.io_volumegroupsnapshotcontents.yaml | 315 ++++++++++++++ ...t.storage.k8s.io_volumegroupsnapshots.yaml | 266 ++++++++++++ ....storage.k8s.io_volumesnapshotclasses.yaml | 136 ++++++ ...storage.k8s.io_volumesnapshotcontents.yaml | 403 ++++++++++++++++++ ...apshot.storage.k8s.io_volumesnapshots.yaml | 314 ++++++++++++++ system/snapshot-controller/1.0.0/values.yaml | 0 system/snapshot-controller/item.yaml | 4 + 19 files changed, 2013 insertions(+) create mode 100644 system/snapshot-controller/1.0.0/.helmignore create mode 100644 system/snapshot-controller/1.0.0/CHANGELOG.md create mode 100644 system/snapshot-controller/1.0.0/Chart.yaml create mode 100644 system/snapshot-controller/1.0.0/README.md create mode 100644 system/snapshot-controller/1.0.0/app-changelog.md create mode 100644 system/snapshot-controller/1.0.0/app-readme.md create mode 100644 system/snapshot-controller/1.0.0/charts/common-22.0.3.tgz create mode 100644 system/snapshot-controller/1.0.0/ix_values.yaml create mode 100755 system/snapshot-controller/1.0.0/questions.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/NOTES.txt create mode 100644 system/snapshot-controller/1.0.0/templates/common.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotclasses.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotcontents.yaml create mode 100644 system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshots.yaml create mode 100644 system/snapshot-controller/1.0.0/values.yaml create mode 100644 system/snapshot-controller/item.yaml diff --git a/system/snapshot-controller/1.0.0/.helmignore b/system/snapshot-controller/1.0.0/.helmignore new file mode 100644 index 00000000000..feb7464da6f --- /dev/null +++ b/system/snapshot-controller/1.0.0/.helmignore @@ -0,0 +1,32 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png +icon.webp +icon-small.webp diff --git a/system/snapshot-controller/1.0.0/CHANGELOG.md b/system/snapshot-controller/1.0.0/CHANGELOG.md new file mode 100644 index 00000000000..941abb8a218 --- /dev/null +++ b/system/snapshot-controller/1.0.0/CHANGELOG.md @@ -0,0 +1,3 @@ +*for the complete changelog, please refer to the website* + +**Important:** \ No newline at end of file diff --git a/system/snapshot-controller/1.0.0/Chart.yaml b/system/snapshot-controller/1.0.0/Chart.yaml new file mode 100644 index 00000000000..8b3e9f37c6a --- /dev/null +++ b/system/snapshot-controller/1.0.0/Chart.yaml @@ -0,0 +1,44 @@ +annotations: + max_scale_version: 24.04.1 + min_scale_version: 24.04.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: network + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: system +apiVersion: v2 +appVersion: latest +dependencies: + - name: common + version: 22.0.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: | + Deploys a Snapshot Controller in a cluster. Snapshot Controllers are often bundled with the Kubernetes distribution, + this chart is meant for cases where it is not. + Also deploys the Snapshot Validation Webhook and configures your cluster to validate every `VolumeSnapshot` and + `VolumeSnapshotContent` resource by sending it to the webhook. +home: https://truecharts.org/charts/system/snapshot-controller +icon: https://truecharts.org/img/hotlink-ok/chart-icons/snapshot-controller.webp +keywords: + - storage + - snapshot + - validation +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: snapshot-controller +sources: + - https://github.com/snapshot-controller/snapshot-controller + - https://github.com/snapshot-controller/snapshot-controller-helm-chart + - https://github.com/truecharts/charts/tree/master/charts/system/snapshot-controller + - https://github.com/truecharts/containers/tree/master/apps/scratch + - https://github.com/kubernetes-csi/external-snapshotter/ +type: application +version: 1.0.0 diff --git a/system/snapshot-controller/1.0.0/README.md b/system/snapshot-controller/1.0.0/README.md new file mode 100644 index 00000000000..51cbecd8a1b --- /dev/null +++ b/system/snapshot-controller/1.0.0/README.md @@ -0,0 +1,56 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps. +Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible + +For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/system/volumesnapshots) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Installation + +### Helm-Chart installation + +To install TrueCharts Helm charts using Helm, you can use our OCI Repository. + +`helm install mychart oci://tccr.io/truecharts/CHARTNAME` + +For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/ + + +### TrueNAS SCALE Apps + +For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale/guides/scale-intro). + +## Configuration Options + +To view the chart specific options, please view Values.yaml included in the chart. + +All our Charts use a shared "common" library chart that contains most of the templating and options. +For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/ + +## Chart Specific Guides and information + +All our charts have dedicated documentation pages. +The documentation for this chart can be found here: +https://truecharts.org/charts/system/volumesnapshots + +## Support + + +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/general/sponsor) or contributing back to the project any way you can! + +_All Rights Reserved - The TrueCharts Project_ diff --git a/system/snapshot-controller/1.0.0/app-changelog.md b/system/snapshot-controller/1.0.0/app-changelog.md new file mode 100644 index 00000000000..b5ebf1a74da --- /dev/null +++ b/system/snapshot-controller/1.0.0/app-changelog.md @@ -0,0 +1,9 @@ + + +## [snapshot-controller-1.0.0]snapshot-controller-1.0.0 (2024-04-30) + +### Feat + + + +- add Snapshot controller ([#21448](https://github.com/truecharts/charts/issues/21448)) \ No newline at end of file diff --git a/system/snapshot-controller/1.0.0/app-readme.md b/system/snapshot-controller/1.0.0/app-readme.md new file mode 100644 index 00000000000..0afa5156973 --- /dev/null +++ b/system/snapshot-controller/1.0.0/app-readme.md @@ -0,0 +1,12 @@ +Deploys a Snapshot Controller in a cluster. Snapshot Controllers are often bundled with the Kubernetes distribution, +this chart is meant for cases where it is not. +Also deploys the Snapshot Validation Webhook and configures your cluster to validate every `VolumeSnapshot` and +`VolumeSnapshotContent` resource by sending it to the webhook. + + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/system/snapshot-controller](https://truecharts.org/charts/system/snapshot-controller) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! diff --git a/system/snapshot-controller/1.0.0/charts/common-22.0.3.tgz b/system/snapshot-controller/1.0.0/charts/common-22.0.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d5b19af2e0b0a77746103b909e90c0fb4031cf5f GIT binary patch literal 97709 zcmV)sK$yQDiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POvHbK5wwFb>b(`V=T7TN}@7$-2wdIoWy~+mrD#j;&)knLY15 zTV9BSB&;cdLx6HLnSA$O;Y#o-$(HS8R@|+LMFNdRqtWPYG#U<>&xwCY_=OeG&{X!r_pRSo4p?z%~q$={{b|f0GG@YQ3k^w8jo%( z-MR1Nfxb@|WSIDLPyqmj3{RlLX3@Bg$$~mfba?aguQx2LzyN6ZxJ9x{8R;5Tw%bL z0UBuZDhrKEt5t8*+m)B*>)o^7qvZbrdJ&>ev;dUK|7N4#?)B61zu#``>~gHWh8`CbmBou zFX0>kHiHb@W6uL)1R{!Dv9LhT1H(@zR6#g_KL1P>C=4SHxgbCx|1Lh;Ad^jUEI<&F zF#=rVif`iQjS#?GRAh9n;t)@^Az$iu1Hhb;syDhZRZTW`;zfMXJ0IrY z$d>@hknh--#xEs+VBut|UL(F@8DazrN4|-NB~@Yg=>&}M??@Nte-A*j(Rh!ug+HC# z#Dy0QD=o|+A3F}B6mTw)g9pV6@q3_@lp453(ET;U3|;w74vM_h44{R>jvoL^4L_bE z5;1DAfO?|=alOn()cghj`ze%YLq5RsdijL=$|M2CQBe0S0gGXUGRWLN0Rm)@X*qJ`)n3 z0ulljQ~5WWAuz$8kqhS7bv<+sLterc)Wbd}IYp(UQ-!QGHc7W*go;wvXAt|fF{Icr-1Z7w1#)@b2jeAhm6#FC!@?zC#41|#2)T=bs-Tit zQ^6Q=79+lSZK|Z#U9o)6P=dC+w?W`70iN(~llv1A^0(8ehXAH}U6y02znAoqIW-a> z-ytEbi5|aDUj^@ez&@TwbKnyf4Y@)hG%G%Tuz#uE4Zu;O(a<#{QwrW@Bmi?l83>3= z0rXwKO-5FGEC4gO;DDhr@MQ95yDsdwomT5`JUKjSbUW=HYPTKO?lW zx7!*wdxx!Yr{VT{<5t^6m5M<4g!l}7W*ocY;qc@2h2o-sxF_eQ*XkEtIObPH>B&wM zVzvYdK!vIo7C=$(M6(XiB?LF2&&(_iF?Ur8<&7y*0rB5*3Wkw?Og~Z-4nVhe7{7WS zk|?m=A?RND-tw9d_7nCHT~dbTmP{0rd>G;d_RtiaQ3rZZI&ESVFwmb}`z=L|L*~IS zBopi*Ef}PG;yUs<+bKOtd~#p_$JoOR$5I5k?g0GbpX!$z5=#@Pf#ZvdiWU&R@&$); zAtMrneSnoPfe|Bf$gl%FZ)qw(*99j(U;TQy4@PG177 zmCyO|1EzDxoSEdRCM?Qm|s6h>f&?R-4Cx6TNc#SBDLayqp>~pA#a{N3z$69-L zf@lCbjYeZGe$LTcNUB3&q=e|V2+>5*W~yMf@c~yVrXjiLi3*pW&QH&eZ%>Ygqk(d} zLeEpEt8z)|me4jJt_4~y3`*m=kgi?Lb~8fRC1Up^yi2|uayGJGoDWZuFStChAki5N zx!KA!(3z)>boAyWA7d=IfuAD)$f$q`V$T*lV47VKfzN;4-$9C)+v0KC_R`z zVhtaFYO|`4JoYf8NV5fB>qp2#4kJo3-bG^+`iLP~$K(Kp&TIgxaPIaxhR;8mC3HeU zhimv#!dXAy;!+IBDGEHYT`FmqTg|P&ms0xE*-PB z1VU$7T5sg)5EECtbjQC!%(^=uNFdZ!4&?PJC=7;E#Dwnq zhf%p#HqDEto6T_>{F%F(aYX#tIxFY&4W6Ulxq%{#2(&=q@_vRwB#c7r@Xl6l{{I8; z@#aL;I5o~&;ZCb$ow+Gjt}Q$iR<`U=uQnGQqEmW&lG8tbl=7#3V7#!xgRAkmz?4bF z!U>U!e1@UrU7s&$Tk7_D*lAn+6#I6{1O*^~Y-aro(Nw6?=EXR2?hvzHNDt>PXlcEp z$O#ckzI*iwoKrb!*ar?@0D&AiHpBju0vIBId?#E6+`=0#0R&^{+(iM17*}VP3J@=& zL07~(_N!-Hup@{i%(m^qi|TCi@}PC;4&&salQfCZu$?7P42d`&+&p zdt|KMV}FK1%zg^V{Fq~YY?PXcAd}p%ICfpLEy36GDIrr&_0s-3)8ottP4Cc|zrZ2! z`GOTMqhj>rtl{)IvDrq@)|v;FH{PBL*6V>*x7?x`A^8r?1GYTHQim67{ZQb4AS=s~ zLQu%XO?V#^j0FrmGNlh}U;)DeUR^1_E{^5{@IffSt6B}C!g;<%qhaK4+9sO^4{VUl zgH0QA(SpwA4{Xmxivv2FZ`S53pyoFE4Ceu7WzLM8`PmGar9n-9&foh0OJ{2=+{Al8 zqlxstj+f$lh&%)-;(GW#SP+jceMjiOW5Q;lM6i%A^he?Kk?kit|0?c%uyEv0yXPD| zUGtri>UC~%)#;Kp>z|ju>zZEV z4}d{qLghXr`pi1u)m6F`-mP<=p>QHhOwGgDf?|J&5w%)y#F|G(om!(S5DSqzgKWT! z!e+KIjM!|1sMuJEhby8elpIy1WRCRDYFr|Kl-`rjRVDP#Y8J-1MlS`-yw8D}u9JCR zwedg2)FE7N`|f(MaM-FDuy9zG|JBO&3IKQM!#Q?p!NOSuDOcpgkV*uO)kw{S4331` z=;_)6Akzu}ci87+HPi|M`$W7*82or{20#rt`iv>V{&e{1M10b}YYs2HHsZRPXhRL8 zW3{(&$27oT@w5XbR)}b>G(~~;@RLBAGRUw~^C$GFF_0~p;hS^Q2>27T_Hbnu@#%5E z(UZT-IEpqD=HhP~c{(4z2=a73egyJ@t%U0^t)^i(F%qFqq z)+Db}9|m+rRtnU|&#IAXiDvY#>U^ouu-1fRE!#sG7kBvEDtM!HjlGI(3dN?li;|{! z4s1c5ocFR)=38F*xa_O^KF5e_8kBWXGK!&$-Ah@SCPh7X1p@5c0piCBWsoQLO$))o z5z9L_F4Z3N6fpojhC<}-87L_%WdL+$Fr=m+t<`h?-^gLe1(T4>!RX}p;>?O3sJsGK zz9)mXLo`952ssn{ia(!yW?WJ5j1s3j{ZXj46aVqgr*1=RQCPb}()Jdv-C^W;BjHw| z!tzeN6r;asrI;_RijF{N4g*oc{K_;SeLTt|mWu*S`0#DtnQ^(KYJ_9xh;saoEIbE# zC__OBH}{k7+vU~G*{IGwvx-lcbc)Xqbh%vn!$g@t{|+okB*qQXlyaFf6 zZ{<(9!6Evk_J;qLM8JVQUx8!}v1oGLhc zA--J&$d^^`m5yw_$^+{Vfr^+?Hh;yip@Q)0)vJp5zfFx%fE+x*4!9Tk<=o7829nVc$S&y+HrW$TUFg^9y_gg~frgsZB*`*CQe2!Xd;zf_#k zk}{@Vu>y)JQ!hd+^3QWap&TcyV{*X%Jx~Qr)Kk0OKCCx%)Kk+rYWEKNZgUKey8TwS zj?HcO}E>dv|R_b`@OC^M!jASxrg1OF6uWAn>}>Y>vX!UvN)@Xj~Ja1!d4@x zOByU2^=2!^vWp;W9`#ydr`KqXn~jchIPUe3<8`x$q&bR|R zeYe@@wtC}9t67RAgV+@(B zMjMr)3cUdPYtU1cvsklv6k`Zo)M)g&sCk532s@MBQKRj4dL4xNjb5YMY&K!%uzl3& zwtFrbA9W_}=D62uwtAg@qtopkmSRYq5He@B8bwu5<0y|HY826=)pxtSBh+no8%HhV zbPiG5IqY>Ct#P}FI)|-E`>54z93J&LZm-ch9Cy3jL)h=Sop$T6UrxlkXp9`@twvE5 z%tx`~PF%OsJM1+Pa{BGI)9m*S4}0xqzj5fcd(D39sMqOs8g8%Sbo&nMw-3jiR{N;e znj9k3pOm6_KSgUyZeGfoFpYR#x13gQGU;}Z+ZiMG2z4e+c+_vUTg~Rt7`9rIez)Ij z^txTQap-g!jj@9!&93V-4kt&b;g-+qp8wd6BxqT!SXkaaHrm}W=&_@ zY_$8WZllo}H{AB5eb{J@-M-U3>bbpUv)vp!t#Jd68;7WOUj$Vxk*+CuD9Uo2Feb{vy&Y^qMaQmH(i&|~BdD!hY z`bUkU?qodfcHP!dr-PiMrhC|Kb()i2quuY75^@eh4Bhdj7^`ae2=`it-NW%=^N7#c zR=?SE4?BmQ#^lgF8uJ;{>vks1ewXuY_sHqCdVSb*4tou^-<`CN4$CEFh+MoefkmZ! zWYJNl**ZLGI!EK4bJUwOo6Sz!aSsnCUAKAUPTJkpc+wwtyZy$bdD!Ysdi`-1HDSwj z5ub16)Fu9uJb=2gT0X)@t==JOwU1hTrvu0C(b#RYn`qK&!9&>YIo(6l?6!MNXVRYZ zn*F0juhBZ1z|OcgX?2}`(54$p~J4~Aw%3!aAqWQQ;jcp z{d!0f<5*jW&A!brDDUzn81(9`wJ=cevB>{4yaZHRCywpvsk{RJNAD2|g&l!0^2mLK ztL%#)*0`lUFJQqp-86FN@R|R>wt~@*BViBbU!zH*wOF;1)dobk2IEVb#ImG^7 zHJp0kXlh$I5u9fol**po%bve;GY23(z&qt@6Yc{UmZxiiH#(?I#@y}$;bq(hh&lCo zeXp+IoC}X!C=RI!uMwL;A2cM ze^Nr|L67%;4715#HtRU4EHB5O^X7~Q1XGP@=i(?1KDIxXV&TJiAu1U-VrO&{=psOM zUFfmjGqs-FT#V9OTL1_` zNRWDhJ$+JGpUP4Q*Q{n!Y+hp?jr--Gka1-LG9=+z;=oKgn+&zWNn<6-GEw3j{0Hd6 zX}ndFyGoU#k~$?13IooK2;&m$9*xCGI%HL1;W8lN5Ri2Wpq5*7#YuLcj@0utigNN> zqMVNnMa+~FN1SdhMpOf0X_CdbK#(+Zx?S>seL5W2C&bg#d{uZnUJK8%L-JtL z=RVU6t~j6 znL>%wZ~2vd0;VB}0`qMuPm7i{g&nI6neNRhevjQLV)n#J14#7D9N($t)!-9YD}7uD zfreEoKJlR+wLNXU5h{oXmSRjCn-F_OIvqi>-rXWyv&MCJRp$;ZQ(w)INDF4g5??xE zNU89z@`hi&%#nE)Y1|Iv6NW-Dy@l1i|O6j z&G8_m22CMD_izb960voRCspoomXiP?(lE&FT@FcR58*no)PuPU1_*{8SF{_ zM36-x+E4C4>%g4|hR|n7SsKt`5%jzzxF_MAFx1{5jwUCBO1J?110h5lagv%FP9jnv zVj>v?W-}5o4jMbi>_)3RT@ghf@;%PgOA>*5=nGC~(msO>gqYq{UV(r7BSe#b{_~AV z$S6r(g8{BnJf-!!Lvgm&=q>bs2FN*hr3%)4dHfjrQ&sdYt;wPZyf0yiVOJjz5ND^}Uk^{Nd9i))^Ucjr{dsd@{<;{czdoMIcLJ0Q z)HOAp)F|7U!I+#-`eeLCDaaUfW+GjTGLm74e0Gf{)?w{eK%CFlu`-Gon1NSM3-?0q zuw?!(*mu`}D9Qd_0<@|NMYpJWa#>5&l56c+Rpnw^&?=S3<-|->b5mNWIlWM2FD;`X zWl^Ho`t(h7Th2I!k*8!KA3#poggI^dUGzy&>AK+c>>*7+6-RV@SD!Q#NgB8`(peDz zosr0MInz<(v$$ibqRlU|f$TCLkESxt5?_)dRWJY`VH)Y@9^vVX#d*+D7PUisIg2cR zhUp;o9Wu9jT92a=&0LRD6o`5#)m33dCos}F2e-&ATR48yx_(fp1jIeXG>n9RdKYQc zCg;R#O5&-QV(k(E7dl^L9B3zB#b%X!D~@Z*KR+2YCFNgXFyEBiX27(LUaB+V(S3W#j+qOiJS^b2T8sYN=fo) zT{7T19q-LWSW3;Z&WEW{ZOR0t1|C9lF}m7eJd|%P$UO>&3LjNiT4zR^wN<#Jt}Qe| z>y-#-5`5u=2r`sNcPTTixo8f3x01+%DT$Iyjk#T#V5)kf8nn9i42`f|vN}qiWpf3~W*&`sny~93N`NXkxa6X?S7el6ti1>J&U`6oB9I+5P zbmg?m^B?QPCR*6eiH{ix_d!5h^|!^W)nqB{0C6n=u3cQ#bf#ujs-+$IZqmC@Q*mu` zJ1v_CRa-!B0J^aNqfQ6|oz*h&#r6dPu@d7aceH zO2ov^kz5!x->U2^h^U5Y8df!9n2Ij(YE?7#x1mloVfyD&M`a#JVVJ0~ zW$LK2@Hx~`Nhf9|DV?;^RO1v-v_K)(j9s@zd|Ky4sqs$h9Z2MY$aj(QjNYMT@dg%j zUFH8<(XuiBJ`FEb^L22})@Yi8PB(5v;PRy|u&oz+`;a%r=X^cK08yrmyAM<_=)T_9 z-3Ml0l-odde516#)x8vdHOZ_%tCkz!)c;6GGT)v{nGHY;jM=}x7+IR?Utu#Q#SrDjB8sIAN! z<)f{(nnlEZ4el8jLbaD7TAx3ZsZdEYomoSg@`hSx6{}Vck3A18V2GukLiH25!Zl^m z1WPxRLU9rJntrJyeR491qz=g=3lq~f8HZqH0-WHf&L}U};Du%U1C!k68^+fhtO9yF zN!?aL<_P%J}wTCBNCWeQdl)Q!Jax<24otV37*DdDRpR?;IvYx zQ6Q_tAOT3&y3!-809V$A>ympv3z@$yhn;j8Dbo)Bj$AQ*iD@TE;SqV9L7m_bb7gGS zt-3{}pRk8gT)%EZ#N(@Js;LBbaVAM~)lF*D?2{%!b4MH07-yDHg`=NsEW1?saOY*%cst+V4KuTR- zW+vuXV_y%AQsl$?OjMC-)HOj1P!>7ED>* zV)5gx*w@CSra^%f&bd#EN^$cHUnRznqB<~pIzncdJ)$4Mzx1h)f2Cew`;EA1!hs%g z$JX10JV^2{%kgB+$*EF$(vS%l##iky!bf{wFM@`kJ`{U%)S00bF>(%41A#!jG#wV1QVM~oOWJIhGD92(Iuene6vWtram3Vi5N|8lhDsW_ zuh>dhD2R7yfguQ{x13F65!nZoE6M=Z6h2if1zaS2MB=sPvjM2WK>4y&A}I6Qa;gk3 zj!({hzPdO)yB;2oM!#NNpH?&QHTqdMlKK*_S?f(Kd+HXgF1Zs+1Oi0!F$y_Li5w`t zV|?W1_W-ow^6EkhE=2(G0mc5*Lp7hXr9y$K`-#ZCxYAD9tam72yn=?RQ}HXn63(R< z8+)Zydx6UA1Qh=st2BIYK(KKBO0B{_iTo!jVwrOiSE@KW={zUH)ZKG$^;L4Bcd{LO zONWXp;Hs@|?>(-rfz>_qwv5z0^hWFARjbK3XerY;?Hhclx1~9zwpR5@+A$gtbLWJN zF3>)41K+xn!o2%{*i4${GWm>#VSA?Cx37;T* z!BBFAf*D*OFhA*2Ey3y`kq>T%3HeJ=a8a<1w_Fw;K=jDIV23 z{Y~4fDC8DOLDOPl#{81R+n!u1gi&rsYU)}yVMhTb6fg`VKJ%9neH36CjuTCt$Cz-`E5w>fK zBXRGN@MOuoO6!ieeSP*cgp7pJGM8Dk5E$`M;A^{dXUYjJxLDdKQpXdkzghC@rqOc~ zO2_MB87Ujcvy^$QCT@Vzp)SNn_0n#{8?IT1^5jcySJXw~eE2=Ykhq45L(fCP-8UHU zL1w(%*n|F^I?$yyoAeAxkY&6yULY(8c=_?-q8^Wox&laJC$Bfv_qXXniILXrC>4A3 zKNrAcpV=OxX$3xy$>Kx*7K^_QvHFllhbg0W#T1gXygUof*2FVRkFHsG8_?_I$3b$cg{T zm;jY@_6{wpM*0gyTz~mZB2wK;ROWAa_0ieI*~tx1Y;miNpf`J5WpyEwx%O!^e=|cc zxE*_Ul%u={4!BN{dHerM6%7$|_XI4_NAT12)dy~=i6pk%-kT-MVV{RV=vV1q%kURB~f`)3_2e3{LYI zaV?tv2>vC_>3@mKs6{bumD>isHqFI5b*aOf;rY$A-m*gO9=No2MAcC-VH;UaDD%#Q zP}gldq{V+LEdDjH8N+Z6{iL5Dja34E!h2BGzyd?a^e7_IS0{OB}Bw`f1$U3;5aIF9}dIMlnDmMJ&6{#VL zwPY9s$Txdna;cTq)|<;)xzWTaC$89#L+cXW7kOmB44DYLv+PFMh={S)FZCH`yCLky zyhp}&$T1!QQN{$c#Jw02>@&eFcy2MS#HVhyEb{bblbsQ>@J5u6-RK+|Z;2BWOT?~! zI%&7tM?h|MSUwa>Xeg2}qA?L8Ro6)dgyUU~ikP~Jw=~e?4&+vU7>6^NeH?M>-a3O3&-qb%0BCz~aPZ&quA#sEH!u9RSZ;{>n2f&h-^q)X z{#O5Q>t>|C)g2O|`aSkta!>0%Vh8_i;hqNlUfz5JrnIPe7g44z2OR3$nngZ0H9A?> zoBTlY!+^mnk%L!9U^t1>CQ+bGPH(vnC^0YX2ubTaZN2j6nt=bg`~~8O_kp(V_Y)WS za0_sP!kX|lkF_H~4pb73uSAG-vkxB$?Uu6w2K97LU*4q#NnOe5zDqK6tYx|od&`<) z96m*`w*-)ZId*+KoyCXnV_*YNZ2&ueC8T02Fx>s}R+DIj-Eb}X)xZbo_R;a>Y8L8sP<+%h$ydJ_ap5wt9%sDhDyY72 z_g8}&qX`MoN9nqH2*@J&HJrX9k?-X09t4DV@#aD9zO^uckhwr!xgA7=EeNJ#1zIMu zhpvblma#)I(?N!=uaZ!C!}5pDr3awRN?MD}HsL0X-Z;f3v!;n&E;6j)c~ zua~Y&&2@A52a~9+{c* z0pyVt|K#LxJnY=fNF;V}H>6Np_eCb!W4lg?7jE8ZUTeGE7O0psf-UOad6n@w}@{z&E2RiK*J&-5Y z?40liw{e(Xodw>;Z8RE(|PcFEx4H7y?!1)ECXV*2){)E}fi4At zgbMk%*x;=ho^qPjO`R&JgFl2jOWX+*(}a^UhHPJ+^ID_9+nXX56U%%^6Eso%me-@a zo-SVxh&u|96Qf0w2S_rQq;3xqaA%MXrNOQb+6~?+Ur$^~UQqO!E}ToT;lck>cRUT= zrmwM2;;jd6@D{wuC$opg^@w3lk8u^eaj|3D(eYE|%GL?{Tm`Q|Rjyy$GOSt{<=2yU zuIV0tsslZb)2MnvTqMpIqEH_-OkeY_K!`o0YL+!sx2t=5$!nSL1fbty0#vziS4~~H z#QDWwUf0nfahbwFdMo43YAY|JDj0b_f86Zk(L-p>l+tOb^U)-yr@~r&%rZ(LoFbM_ zLaHX`Nwsw1==-j+Burg?RoI#um1>gWdGwB9q^Cr3UM3sZY=m^Y{<Tk|)B|DK}4k1jE17QEy z%N@~5&eS_s6iCU(goMQYR7ptePh+wgS)ZojlL*N&F=@~$s;LB}>PUg0RHVoklqI54 zbw430*AtepxHLV;6_MG#slH zp+Eb~LZ~_1lu|9meqGMe9)#J?tl#hyw&P*=XUhH*33@VoPqK;peD}uUE!sz9?o336LJGkbT@LvE`I92HD*FoZ?Ec*xeEh5a+ zsR6{bEo-TpKmu-m9PFPqXl0UYT#gu z{R5Fttp;k2_=kE31pxaK>|?fEtt{BfMc%ruzvnN(@@smvOk7P|{YF+i02~;=G4?RS z`hYNW-8eJH<=M^c@#%;2%fy@O<6p}b%e3Fy4B~gPR+^jvk6J0qsPOa)Wnt@Ut&^Lr zPpjp>Y5k$%f2I6yHoIy0-|p??|Fb;b?Ear-yA5~$iYM+%ZMx+xgWu|wTTJxQ4Y!?J z?N9R*$^S**3)O#ur*jxQT=xI4TK+e>jaE|rH~XDdV<-Qg<1zZbN_RQIQ=!$Vw4+Ax zm#Gog6WxozuN&6M)A?P<;Gobi!Kro(;swk+_*#P`eGa`+PP#^m)*Y7%My=N`h zF1hz5bpF>y@c%qQuXO&a1mGu+^Z=}w|D9H&pYi|i?EmL^%=}kly(Qb9&oc$F-26|O z+NzE)w2iG_5ZJ}r&`y9MFDfUq?HAxR84+5RJ)c`yAlr)P(r*pvXReRNM^az=(QF@PA^Bd zznq;7Z!eEOoQ=+|Kb>6&h%h)f@GORi3way}}QUQyYi8n!reKrBr zzby9uvZ%(O91D4_ke{5NUKf0&3x|K*OS>O(u*ywyY)3n0aLhq5Q>MO`_FHU@MXwBt zMel)l0PxfK_1Uk-7Z+yu^o!f8k2mkGK3<;Qjy}G-Ji8ew$5R?;%9ZjuPS?!G&(n^t z*zHvTai?|EPx?ijTc`PN<<>+F5bNv8>hYg8SuNBR=Iet<>o`eZ4)Gnx5-;-x-unCp zm`9X-^zm=Wak@Rf9DcmH9bR3l5&1X4KB(?j6TmY<+8$;-GxeM<^xX+w^cS&Pk*@@5 zQOH{oY!z~~e^fz#5!YyKL*FP@@gL$AEvKz^O6s)G>yh|Rr9^+nPpST|ZaH~s{lC#{ zXY~KZF8=3Po+s4*758kU|EoGX{eRt^!>#J^39UKaCEV7snpqxmKx(GZ_Z*cLGKuR1 zjXAtv!&tR<3U#;9$}5%Cw1G?OiX!c00M&L#COxI{ire zYAp!XDqYy9GD;rNXbOVX<`TNz)n&Dk3Qc#>=Y8;6sy3XCrWG+b*H<5J&ThYa5qCz& z(x4e{$rh+o`TbpK(UclAgSVhs&7MBm&}b_)m_VA-bBfi$UP{MHW0WQ7W&{u&O% zIZEM91%FZ%{Lkgc-aQX`O7(x4@8fZse{1ajwHqn@zuD_|cK-iod5r$AFT~VW!kK)@ z58D2d)rmA)pAD(Tgs_Kr3`)op4~V%M zT6HG&GBg{Fw4=d(wf5elI?a?M??!RZ3c{+*&BUlY*dJ06Ghu`n_~qlfv)j?x$@STd zNYFVC*b-1C?)nf{gM<#UE4U|MWpbXnA}q7QanP6E>g*3Hm8LL+MC_)ApuExr zdQphfL{__@H=|pt=ju-1o6+s)>f{&x`(OdXgD~>*u10t3lsI>){LS&r+3o51wW{Lb zu~kL%Sr$D0c=Pk^)#b^VG`C9G)!bR0w8L&jw;xAm*Q4R_T2Nx9PeVCAIXN5N+@4;J z)q1|73&`SZ=q@OF58_4oh1y*MA;oL$O;d08LS+O5m`+)Ycu zZXZ1ws=5^3fIU4M-Q1oJ9}U;OTHXNX969RV>K*$>HW6P%ZyGrJ`_1+7?eX<{O_*HA z#byLb-+ONwyE#6;7@ZtnoSi;JyL{r@p=HeIeA4}L_P=>#+qqoUce&_;APFbh21h~i z+kJk^rd0oz7uG(t{oif(`sw)JMx(XU|DWSA`oA1&@J3%1!!;5NO7VXU=o)2xN>(~uBp2Un>poyda zi@+Co0d#eFsdkl@t5#sd$Pk5dEK;Z^Gkz=c)|rue-~5vI(8?IyX&kWoBGWpi=T_!5 zm=MoJ;r6Gug!>E&$)>C#@UpeOZLz~QC)#5kknR#=fT%&=bVyD8Jb$4a4AIaj4!2GW z({>I?vL2097Q}k}jk(W?MuQJ;H9k+PIM{eU>@mZEkqlkXX?ff!8pn8u( zG>u^BR+9k+ra|5wV$MObU|!3=>JoPILMpGoLB*SuVPF@@Yx}(lS+iSC*vB!r-ClRW zQ*Qt9(R!rux7z;e_gmfc{%@Jt()><`ogVhp*X3DD+z8Rm*C?ph4v=+-yUMO9qn*_HSCdYb+l+GB+$$wq40uzzY4AB9R!~hGf)%$p zs#_b4kzwD~EKcN%UF3H@E0&Up zbgWD>R&UkbNqOFT^qXZd}2G^4Y@;pHSd0i%?39&5b4_-UVD%pGRW$@$`j3!oHJeDCK(?-ODvzq zlaSEB|I-n1g+8&V2uiOh`JTnqIz}9&gf~$$EL2N1jRg3Olnql;1VvQ~K$VcT$nm&= z{a@<;F|7Ke@xSeE_WWG{p=uh-`{XC=Y3qqCcj=co41_vg=fxOj9nJib1@ zxw;;J>VH)$0GtnRj^ACJjc(r^pZs!mc{%`9f5JA%=>xzo=NA{FU(at&ejcd1dcT{OmeUM*nj>Na@y6zlvvt{@3ca z8tMJNPIssOJy@}3pRK+K593vY_|ZiT19Qy|j*&-YA^CT1G3fh* z3AIR-wO-^_5QkYsN&Z)E5ss5Ma}uK{kDz1$^Xu12tyZhR0Dt0UDpw8{&B`72-GO3}4=||A5rb}m^jz4-VDuu8?0X^8 zcz9gbAnT?=4)5r$6tPg^en(9hD_hHJHSk%46ao8)n$I@U9 zJ?}!)wlIyI277zyQyc5Rlw0v-r0{f;@{c{fW`%gJdaby=IHhrJ%#6+RCA6}OJ&<6> zF^FfS8cein{Yuf#76}kM4oT#e%WLAF6~DuKywN|4qi*2>)4m{-fVc=YQ`tyWQRT{~V88M!}`S=N40RQ{Ihuk=(!6uDL;6R)c}SYLBp)qU8?s%n{3g~H2t;Z@V0pod){ zc?==Th?icq$B;R*gLv(hz5gy&Zi(t{-QKO+&$@2Y06Bw=r|Bp_&I9t#f6of%QV@uGG;CrwI4YE6HaAysE%hsTot6Q@N zsdbncfH`E&>>{Cdmt*#f)=5eYQQ5$gwrtjpeJ&gJdFasXX7M3ka6tzxsXnR;7Pet7c%3E8H&h&nH!gsoctM;>+_djrsl z^}o|-H`Dk3w41y2|5={I`Y#51n@WHH_@~qaRL{1yD`1udDU@!OfxLy^UJ9&F)&(Tz z!$l{Z6ttjLBEgCM;jK8Vnt1g(*#%W;0X^*U?{d+SX-Opp{GVPGRDb%P)642!I!&5S zm|Ww2hBVbs40A7)KTTu=F*ms+xwHn(J_pEQ$OZqf!2MHg{}5lCu>Z$j=s)+tIAUN* znD|u%Z~jfN532j1nrz#~YHy9i&uJab#nd4S6fWy`hqR8#K}M+)n14@-9guAPEvk1` z4nx&o^)4Et&_@gj>MLPT^E3WQLEoLC_@AICT2oq1Gh6a}{aR7F+Im_V6}r$CRkfD9 zXh=cd3=Q*Zi>Ls?Ks~?gTzCI*Pm%sVBO(5s_zZeO;vPqgh`gjvbN_#*kB~|MWQ3l zX~4td5QfWDX+)*AJquvMNY6;dMkit0n~6} zpw@SJ`Hj%|Rpz-_08^=vXORAamY@!*^2S41FnKqYSa9q1cLONan00G!t*p=a8f>x$ z7e=d75VRJTEOwmKMRZwP_egdO`Yw2*dZ%%#aw1+WP#9vD>y{dd{W@uNXcE7*(l6FT z`bGVv1cs#zq&4sO`N|C}!+3siiKY>sMgvJ%Gm!D1!Oe4Kh@ z484Lf*GObetY4b1E0y+m;2*23Kb@BN{7Q9-&$psXKP7#hN`0q^xy_&qBhjQ5kVk2WF2vo=*wz_FS-*2~lZ| z{c99>*nu=r(|T`JZ>mc0bAF}xy;Z5LDj^nP$D%Kur0_f$e*DO=hkq9%F+`z*du~1d(|o8#rE|5KfWRNDj4DVUZ4i$?eJqG$-M5o4uI} zh!5$|8n}GEYaV}Hu+g=1x+Su2nDOqOet&FR)N-PH=#2XG^>fFhC@saZRu4@c3d*$6ZmAlz6Ec@ z=1Um_J<{pK@-^%BwO?n*2O~xTaO`;iQ{L%)ZnirJ*Z@J5G7<#HtyTb^CQF2vE+Du? z%oz0|*27ZQOP8>3#IRTAZ5(@EHG_IF8LG^wY1B$C5?VQJES{=6C}ba?52xiG=)(E4 z&Vil0c3B9~1m8WjO>zBgmR4y>Ng+NFgDzk11DE(ri@+I~qkwBdw%L=oBx$qWX?Tz9 zUV&Avu2R7MG_#SW&!QtfKa|?JXKSsA1`@rf35v^!9C+Z( z>p*nYj*K~|T4~l(B;aMuuCNUt9bPjG(FA`kfuzVXNYO%xk@RbOy^2S`TCb8%Kth%U z0e~OP$0*Ez;l)8Ir=<02$-fYAMF~%^0~tD}G(sU)CZvtz0xU1{zn>A$XomaT&XW5* zNzG8)8kA6GV-?@l$JQ!TSC^-$^Mqbj6kzxB{%V0B*9Iec%r*k8F^|^%;^qX1yy2k5 zkxXWt&k=Cr5vi>&WO694uN{TFXB=^?U7uYuVe;b2!#j-@Hb zJeuBAim8{deSm!nX5A{3IW}i~Q=w*w@|jq(RF7Ca%bw+JY&^ilEqf7VC_IS~ShHyh z<(jw{IjsGKOL*1&9JpCiDRa6j!^w8rMNFDmI9YOfq#3zvpv{Rb(W`2%bC>ig82Q&rud21`#_7`f8(%_Q zKDJx2sPj^qx^qnVpCOuJ$`tbHaDlR(eh*f%!h2^a?=0nKwUqBA-%)KXtIY%TI=x|} zODBWHi?uDq)Vgctw}GGSZH|hSGxXnu!u5?kMf#r#!a8OQIE>fdU{&v5ImKd#uYNh$92bdCJD{#vKX81K`|>Gwjy=y@%mRvMfrZUu`Ov<&q9x9 z*pbkaJjLf~zW)KJ3BuUAinC(<9}*8c%O}nM)@=8>>HM$#cE7z_|DWR#`5)dTvOHMp zk{o`u*S=Q92E{jls91fHgbNAQ+%WY*qV9H*Fl0f-KIaFeV@Qy2ox}`@3NMtRAv-A9 zWDVIe>!)okgs`U(azC5UM7J<9;@t9ITX-mm((Gtbp*s6Sr^QF zNgnaHzQzzlpgbeI$9V&_sMk#F)M?n^3(ko$Uhw9Te(k{Aos z4#et)k(7JjjXcc8>61QgfG2>2x%KMSTo*8kiky88IA4gRHVs~|Kzd9vaFVp-)Gx=z zKJ=6$k<7|i4&@J^7Poj6Yqr*jhblqPrbPxz>*Knp+VCEL?*sV9Rt47M9IHl_XEGnl zxP{9kpIVelX)OR`SEO2Dp@NYsLU&!JDysh|b}A*)MvPPnY3nSM!&0&3ERyGH=+;FE zT5HYV(ks&Y*ImhUW(!eN{m5U-5+!RwWy~yR;^^IOLE9~8y9I5xpnV$)+HO7j6R&4m z-|tC3Mf*Pi3Mr-x`Ro(%qWPn)09tkav)@YH|KDmfo1NYM&vQH?qGOmE>}`a61dErA z>==G358sgA*NM@PC4-PGFc&c>lqIbffDw_ZLGPZW=_z7)L%h&c<=^RA4#gD!Lc}2U z2jJHkVl!DtzEZdVIAJIRF7l8H*gch=?19uY_bLET{JWwE|I73vjg?ik`5vzs@5{$^ zYv*JQ5ZS}Q+e|hlwPP}Yo;QZhokEzS;atl~$#iLifj4*9ch4!PVqaYElRT3pn@VM) zQ|-UaDOqe}ybh7$K|EJGe}lI`90dxOpej+Tg6b(BCR8;o*wurDGvdRuS+7Nv)Luj4 z%vtcY^uR25C zyiR8aI?r=WI;j6&wF;_t2nBih9m`<`i+b{Ur&#>Dwed1J$8FL4-NppL06Lg0Wj)GB z2&ZbA=?N`e|EZ~YZ3`t?J}IX}Ed?)?kS%xqLdQXreju)$hpm{3!NRFqRUQ{-7t0+W zdsoek1W$6R)r&cad?pXHC@tN7lgWrgf=o7~1ca<5M*>zC?xWaLOQe^28>jr?Meoqk zifI?`3m8)FMb_u=4xRh#D!e2ls9NpqS#XkOOTunc$;~p2gSAYZyk98_Q_kK_GW1{U zT~+CPT+Jz3pA$FZ4lCp)#iw;TAD@iQw{_K3qOb9GTh*V??V;>X=u@G*MN_fR{v+-w zreP#F|6Sxx(ZjETUt#}sdj0hI&qlYo%m4E%k1+27;<{$A$6~OzVghD)=w)rfJfK33%|FsvP9FEoU9+&ZueHGs@cueyx2dH>AR#? z8;1TpUR0#C_GisdlpB1wmq+tl^*`?djyd*^7Z7`J>>(ACX1|KFEHg4XtSvjrCEd~K_{_`AWZUefAQYz7tT z{~;zJW=o+4KI!?NM!Vfi=l|@td%N?$&+kmHHozCw`E68IX#44+Yw7vP zO6#fIN%CxMJ4F?ey9a91ARU6V_C`qpN@~9(*}~i6daL&ss53)u@VV`mFkn6iT+P|3iZE*^IZAgJB@BDo&UYv z*q#4=mM1s<=fs0}zMUYTy!^?}8U=K+Dh%jk{Wu^|v>>?V(@7?t27rYi=VdNx@|(zA zk9`*~V%M)$_tuC7I$0|i$lB^vc*{3Hs{1kusSe&8k16um+F?M>6T|_l8!+v)sI-A-#4|M4u3(Cn|@9iMDN-RDg6viiPY z+fs#Jmsm&R*JagReZOKCS<1L705H`Bz&&;mAR+LHh~JQx*UEnJKhtn&B)X*4a`h`& zYAtPC68@=zHUuItVlxur-}5tVfB6yzzn@5AToVsfK~?^f*aD8JS)6pKFqB+h!&?mS z<+M~jk8G9H9M9Y7r{BGP`h94O=DO^1l~K%SQFe>U;`YSGJM6pIpDO8Le!Zj+F_wKv zmbTq=-%a;tp6Bo*kB0n!U_@T0B zz19`7|H%e(q5Vf9_NYVO*0aL?>o?lHwEfrX_ICE)b37vd?~QHc0X``a1&{&=#)-_p z+#SHn`b}mPx8qaV>@_QkN8#!JEg1R_ol zNa-mi?VG>Qy{ZLkFEMUkzs821)n1{&W;iy_0(+4R+qRJ3W!6s7<%u(D=UGMDqSyLY z(XPKu7r+qt>>5o95)8)Q;{)1LX|sL#5-)y*f};xRqIi6C#7r(z`Ms=M1#(R_CCwZQ z(QgqBksHr!gO*%bF^$V`rSC5bAmn#Eea$r81D0P!w-V3TRZYn$xOscl)U^|gQ6vsj zTqZEGUdoJ!cBwyrxmYE6!YJRRQy{8KM6M-QH51GTWug-juKAf@?t;Rygvu#a&XcJh z3BO>HE9K6FC{+Vv=-eUS)jVvMuUp?r`PZAhR_mZ&bPSYJ;KvjvT765<=gZzs;`M832)GEh0A*ONS@4e7juI8nM^C0!x}l~ z=klJ`aW+{m>6Z?>)ZQZWyT_`5*d-OlH; z?R+NV{5jozhBP}3-*}j^lqAYX4e4jllWYT-CU9ULtvkwcNSt94Tc>gHc)M`i>mc8W zYu};lu{&3uy~7L0&>dRlSAK|u6cy`f@t50vX`{&mWGdqv6&V#y6O>F`7?x^b&t}Ec z?k%r<@FNf#Q=IqsCrrT%h2q2vbX@>}kM4oTS46QyK7Fo)KjTxZ|4YaCHVlAr{lD36 zHq!CGy=J$u)Bm62QTo5!)YysvpgcOyU;)UeS%o{7DEo3h`W|~87$Xo-ImTW6%VwQ;fLsWOG^&WL_ zO5fZdmqVFdRhA1v!iYmWdylzlr%a`Vz8O^a(zyOQLw*8LOvUj%HEscM_rZjOV!;u?h3CV4K#3OR6x4e4 zrY*KrK^cq$$DUWUG2G#6Dn-R)qUP@YQUNNs zQ>P$GX!UAe#OtpkibkG_bWb=o6tv>3O{Qkblrit$mKV>lvLpi(04{TLBHs-N_L-=+ zo$1)fFv;fVJOw5%b1&)cd7fv*{*OAD`M7PM74cuKelxxQ)9>_KyZxW%coO?RYP7ew z4^(`z_gMqN61==3Ff3hmy#TRHt%#8i{KpNsL&+45;z~JtH%gP8@uDVu%qCk?hRjcu z0w(PWQw@Gc9x=__-;8H$=V|&6h*bLewZbKVnDWV~qvS$rx|9{RXezf^x1om>uKx@& zG>JUAg&^=1>wmA)>898JMsIii|5+Zn{;Rz9=ex%cyHcilRT_ zey+Q|#?xTy!PUir>z;&n9)Ygi{3qyPS4bX1)G|V*7jPH^G|szZ5#qa8!eexI%lB^i z{swdK=FQmA!*lT_gJDu#G-A~lp{%bxf~F8Bz8=4=XB{t z^ZMJ(kJ-*%zmkdLLe{36{r{|1}1c-S!9r3Bt;gJw(0XDFON2Mvk)xJ~*^xqE$FgA{6I%TqkmFR)1QC$mt2b$M02 z(#sZDxjdMqOU&kN>>u>N`a6j#cl{#1j^aj}qL1HL%!9h_y8j=t!%=Mi$G65j)&a2U z{CBIB&i~ino&R{IN80!zka!M*t$6+==X?WKf7+O=@cO4puI2Mj)LGM;V3TI+r%5nX zM?vH$=3o5zChzWKQ?r^1wM~Ic?y#GWB}WgS=aKtQ#5?;OK$-K;+Vuaj?p>rBN;F3T z5XB^YeN(ETw=3(fKBcV}r*zipktG{9%{;yHS$x+%i=w-T62c&vYyi`m!mFlbVtQKr z0rY+3-=BXZ2+0ET`GUfn>qE^qtx{#~ISXJ2=ZK+Dgj>bG2I>Ux)#=s1K0lz&jNR>n z*9##GlVV^2Jt1TQkAF|!r4C--fv;anyqEISPkj#W(7Dg9!b?Jes)U+I7M2$a^Yv>b z98&uE+?>m2(yW#riP)e~7~UjXg#B|3Ymy_|sp}ct*(GiGA2? zGmBt_{@-q=?|*Hz`icJgH57L0-nJ0)6pSu>#=w{pW_b=`GLiPcc@ z^GdC*w<_P%3J4qLp;|T0PZgg8-8rWG&k#*9WnunxGZ{Wl2(|BFCsg6R+Xem8SQOuf zmVYn#F0DbT*XfK6y7Zc-TvTz>HS^oR&-OO=%)%~AedDK4{}YP)$cF))k*AISZg(1) z_^)nfcmMyhJVK$9gH6?7Z$;lrKzw2SE`iGmeJ)dWE&VN1Yo*?mtg*SCm7?!c=~V{9 zB46mIgq-*uRHzi`cAC^qlX|ImvW)XCx#|iz9A9Tp@KIiCP;x#q5tAeC$yZ@z;_n#m z3^uYrJ>bHCGUT&Q@qW5}%R*rR8?|gSO<9|%zH-^`GrP^g0%dLPRKv`(p8of^Fo2c* zzx4iptI=)m^uK3$a`ZpJ0ozvszkz^&9E3Je2R8~2$gTPS-R{YQ1&ZPXiVxzOszt#9 zg>eFF?745IaPIct|5Nn5e0?j+E~R_#k}+a_%62J z)xLg}e2s%cAW4dA;{8Fu$`g6{x8^t&2nygze@_+|jjD=(hV5 z=zk6hS#1t|I7Q*Xt(D0BAxhw?_|JaY|JQ1^JN=#h_Z*MZ?W~ImwxIVVu1R=Feb46G zQavwKa2@?FRb`dK&n}+v_N`C|Ggs+s!_$}1yzD8T(6}t__#XUw99{51_QS?~=jr>- zHNfxH(3ILeW2!+>ZB0(8xkXBGF>2)ruq+$#8 zy`Vb(rzj)dtGh*0f+^pzX|*CRyU_=J^buP7T|9zo2!cY$&mbb6{eYyGIai!}muQ|V zcU@soOwZ>OBQI#~<(%zXlh99K?iA_&elR__9Yg0X3Z6RuOS|7lpa1Iho4flzpXFJl zdiue%F4@4&u)hTtsK8O?lPg2jXK! zLaw&w-S+5W%1f#3)&Keb*n9V`IC3OW{Qm7vp_4znLwQ}r8)lg0&ZRN!X4?iX;O;x? zWjRTvsw#)9R63;s)3(3+@93F&<)a>yA6>aS?IKeOg+fv&A{2@k!y`KsmxOi>uWNp6d<3WJ9*y`+?; z;+U9hO&K`vBf_d^Q1I*^@*)|9#pAm?4hg&@MM&V_k&V?j!<0bx35Ib{S>-JxLlpDD zeMm?&MEBNePSM~Eyoc=SbdY3yWPA;y2x9ye#hgwP^yE;hX;SuZZZMTT6y8CA#{~p; z@DT&}kq+lA?4tt8T!OqKEJr0C-|}*v43)kJ8IiFbmCehaTTU@dOFZ|dF!41vQtPZ; zi(2{V8x?v>yB1~PX`7QQR>e+e)2v%*_U7p_p9TZ1-t0&ekUPG%BEGL$9SSUmE8nZ& zM^c19RWtUEx~6(%l>l;B#}rgha@HrZO9%w~wIy~FLNRn=^OJ_@ysZbKp&B@{J5$5+ zb*xU?*ShGq`bcC-k->EKQ?JVy9G^UiLRF4XlhLBWJk}C&3!FJQs4f9f0Vwlj29?OY zh8ZkE12<1Vjo8c~#6_i=Ue^%Qzm*%%{YCuEP12f>0;<~*1*U3A2@nQ&^|pSBXhLQE zK&WEIy;8?lRip(!N3noxW+?Uvvj=V^qY?YC%hRY=_H|nJOUMTm)oXEJ1nQZBwAGsV z(GHeVpW&B@-eW3yTiJW79fRd;&}4TCfJ z9EB;2Z-Yh*=pKET=M=L0*$1jU9``JaGoBR(0j7sh-R>#G-&&@vR*mq_#-(nnE6CIB zrlkn(fh*Pb=|D?-Lq~)4D8(~lU)hSKDc3f%l8nLulxL@2QBD&_}?StOq9iu6;r>(Xpejn>IVDI%juZ^$fB!_f{T4awfgc zRGRvuMpL8xVb2={1wd%!9EX4#^1+TQvOWNuJEALg6d3nDU?bhN-ucwaC zhWT<7dMq!dv|9E}*+E2)lv$+4+M&cw#mGED7{^tWsJW-_0Vf8=zM#bcR9w-LQoRb1 zY6nrZR*heM@Za$F_YTlSRKWN~e7;HLcMrO0a?92fooIAjy~~mhTE>JfADiTMQZx;A z;#I&nGNt;oZ!1>h2d40?#0s(68gotL_Yq5|KLc$gtm@NuQ zgorvAla7{p@l{A!VppF^BT{5CmLJ+W+TQlijb z@+gyU!`#EwJ}_O)3quXAbdgy3!2Mmjb^*vjLQBoB$%0;%7Q?21*-zteeyFZ0d@2OW z72&`T%j0az_HnJyI^yU%f#X*9|+#fVKK z6I#h`x#@zm3_Ns8Dm9Nxi(NyXJ17K|54}5RT*BrZ?S2qFooXAqMTlTh@ENDkhMin^ zJUp7#yY2?mQ^0#Vps8~8l)I1Ci4;Q<-vUPH9u|)?Vq1b~%Ae^XHe-`2QI?$evyp4F z&MxTlMCQCN22=D!`2Now-%rcy`rpD+>;IV}l+Nz{*?9kdchC0!+}+#RS^9r2;`!9V z|C3LHh1~z)O*!{}aF>7Jn{(a$A30?o^LbtX($M-U-k|4v1fKK)5bvYEvY_f@FbroD zu*4g){?BHJUw~2FU4VZ=oBG5zhnkGmbn|p`d1)IfH%$+2(Kw4_!}Pm11(c{L zzw4?lhAd}C0Q3{*At5>5Ut5b(G>)^7B=@k(*IkUF@d##|Vrv_{jh(d!Wf_d<-%MCd zvccN_rx5EJ$w#_KB*iigblnJN0$n4}8ECYn!^f8_O&CAIwJqxK(X^?va?{z>=d3r? z%KtbT!g!p*_@|iy0W`?}I~#l3Zv59}{-=dJZRCG74Zejy01TNwcQ}AcIUdWv0L#Dt zUp+8@KJ{MN(+-a@^D%6liq)(0zG*6W~Gj|4EeAO`S9d{0mXcDCYi>|L=kbU$B20L zkg>RXuz*=qSJ_uwSHCiLaK~LeIN##HBopJRqU0CSV@t9R_Vp`8tyn(udMfn45hO(t z;kBDwc~MM%4AgY~v*E;lUffVBa ztrcSi6Sk*Fi(y$&7v_^b5Q0+=1ZRv1@$!M^=A8b$Cnmh@S0x&5cXQ6^lcwo#KvG5W zmbN8*Q6=;rCnSA#8AAz*0#l}=p54QuNMb4-N+|kk>vE7e1ctKB^lPg?4a7QGvN~pX zn1{DXnvld8)?QgT04o%vJV=lXsq!$vK-VL7uEX)$Zu*ryYM<`_)6jc~YHu?Xf81NJGYv;Z0LU+9(%_&x~p+{$i3rzVSS%rEfl z8*YjB@??d7)P;GLaDyO95~o~;QOv?ibIj5?hiTm7&zZ(8xoWdv40gN^#)dP&m-<~dDpw~(t zFlu})oxmLuk6z#wdRpDUXs=Q~Fc?;qj^LvH?dS=m%2$^RyLZRCHm##fU6JwxKk z|DHlmD*v19RmuOC2E(e5|2?RGGxEQ8$}Hvo3i>SN|3B?{fmrFYoEZoZb2~Q>@SL*) z@&0R`ABbgBb%vl}-gu4xm!}6m%u^x%-=h>iX3^SB0rND87%zGSF-dp;waN5=ru!f3 zn;Vw=zqz-$zLftL@i4b-ZII(~kmr#K-Vb>aP74At7sVItulXm8_oG{%JHEP3n>6y( zwVBk)sJ1qpup$?mQCH>$+Y!(5#gH_m?k@4k12sr`KD!cE1s( z`7o63>K9%<=2s82umjI=mv+*3%SglL8_0TJF)A%`-s}BXCcSS^K6GL&v)MY)rMwn)8BZ%bW$+&=)pI#>rU=>G-gJ?SuuO%V(iQBR1T zl^@DmmFA(Be0$KkrYkZ;QJJt-H6WoY*j*ag-fFR@jdDE;e5=s4(`)s7 zcWR-~fBU+;)+@lfwbbL6di>YAq|PRw%4%RQ9ahcI_03!D<^}d|L*Z8uy^3)LPcj0F z`!IbKK4KRV<$g{v4d@=wlNx<}-5D2Ajb8d~D9`i3aiQ9C9m-&f(DzMt8G?fNs$LHg>i) zt@zJ-+speui+Q+qN5>c(XZN6w3h-*o#Sb{O0?6l(md{3?OOvUAQVUrTiYZSFv2q6= z+156N8pw+Bzq!gq5V(b4jA2ZF@=cf5Rro&>gs9M+8u~leaCu!t3R*(^)IboCchL@k z&4N(U_w-*KT0G7n9eOGv4Xg|@q920Zrl+B*s0;P|FiFd-8b>NqWS7paq(Iq-^3C7E zA_;F(2;M)(*C5IGzoba`5FqI}NC&}Nj|_S8#xN~l7(a?pi6tmLK@_1Rrh-}>kGtkG zN0+Iff}Fh8ycERw{tT(r{C@z+IV#8n)f}Ic|8MPX+42APws)5P-wSydbH9LOTx1x$ zK@SiUW>onl84T&~92EqE5aVQ!@zqI~aqCe_1Dj;*Wsc%$Hw@i9Ps(&62X{}OhZDKz zJ^B7{j^d`Bp?$~Zx=DbQTta4iU6`Vh!7u>pAV|?e0M!^F7wjG zq1WRhOP8hY#;+BiKRX^$C4Hc>)srI027%d-S;K?L0a#_R!S#1#kkQW|$%v;}YXCHC zPytq1VsFI>dMSG7fYp?UF3VOJ?2dS;N{ZKZUmZEAWHg+u)bx5{gek-7fYm_@jA_v+ zQ06RgQk?C1-Z=ApqGpN3XPFkEyZE#CTKP{4tuu=R*d+gLIr*RV_I8%>{}%G_#4>VI z2d^Oka@47OGY^5TWsIiggmQFA)Cp=rq!SxOYuT^iV6?d_^Ag=eA$|_T3W%R3+lb3e z(TeizB(v~HKicLa0r5!SuOQ5iQ2r>a0G8bMfQq{mg)!)Lob6n2Z3)igil#;2IR@Qw zf>A+*n*cBaB7~Sg(V*99lqJl@jg5agBm{)ENUXg8zYmiXf(HohGW5WwpppXn1sVZ! z7+!)DlD}ZK7bOJ1k9nFz2}vIr#7m@vpfNPgRN>y5>f_|7{MB!(UYiKO-5VK^C#wkhiR8~$P22^`^ z2@*XfYMPhX8B9_L5jE!_*O-(V`}8CQsOzXEIf^~g)cjr}lUJ@=hKgN* zad%=(N^H(CI`V9Gq0FmOwVno&ER}k~bi$IdPylhEImrN(m)Ii63rPC{S=J(4CLhpo zR07u0*U^4j$$#?t;?v~++1lCIwBtYTZf-2)zePNC@}GP?Um39J&h2+52U^`(s4R%} zwr77`nqr+X9}hY>gv&91zyeVgG)`l-3EwgYoqJdi7%Lt@ z5IZOd2Vs(d5Oc2dkfbTVq)2j*!Z4;=1qFu7CQrwsTUg){AO&;`q|+?8edPV1kW^b? z`Vc;1c@EAvWB>yuO@e;h6uAu9cC`?Fq3^@?#jP}7_8nU zS$rlV^mM=~cl%E=60ra7ZU-O`L<~9|S)Gz-br|CF0``-SAXpE;su(lM!7kY$Ri`X3 zx`A0A+>+okNYMioX+S>g_;4q126X0w{1Dpi!nrMRy!rhEyJ`v5UBc(40_ftq7P;qyT(jDw@8OlSAi zW{@w@c`Nr#%gp->fVP%g0BrNH-b4PamA$vB8*}#Pm$phhZED%_3C3esxNi0V?G$($ zX5j!9Mi0B-_+!q^ml?{saFmlr@ZJG=9aMY5dr%r8tU2CIjRphLqUlxTPnWW|l@2PM zx|;_ra1xjZ|K1S1XANDyWImJwM8s7BrGGi?*IXnJ#=oJRvfZVjB=pc{lb(>aFeAky zy98kpxxz%gLQ7E$nd9NGoXZw|x*9noB;Q|K3wY&Dts%V)@;1tJG$=hZ#s9r%(-|2H z1)nw0gFXHl=;ImiFE#W1C&ybFGv4n{f~|Vt95`t_=MqK*Bv)epaLwE-ayiAJC+~ps zzl>YWwmrE0DtTXt3hVqZyoVqpAcY|&fSLLG;62CWrG9@}TU3=k&@JwEdp5<2jj)D> zT7LT~3anPv?gUj+Z)u(R^E`g}pNdgyH|%sw7=lQWPHhNkvj6OCuiNpT*0-1P|3aQ> zeU{z(*0owg>>a{%Bz0#h*dFQX?=R)Yo-E|nJwh3CoeTc=R_|}U?ZA=&dq+%|KeSR^ zDB)$qqwFME3_tn`2c#H7Hj{A=6@#@=lHJgjZ|+U4ygWl4X_0p1fpMOvk01mEOv8^b z2BNMwIJWK`867M0W&H007IbE0#qsg;TT2GUaCA=rj`Fa8W&`>VbnL#EVIbYj)(R7u zd}QO4}Pp@lqP^6l=fO-_hamtb^M=a?U~K?|G!%J|83a*e;d17JInLmg*@E6 zBQ=cvIEy&LYQNU zw0Zoc`7h+((@4G2UM65pT}JNDP`V$JKpyg zQ_dwocD0Kkuh955g&=qy0D=I-QJC{nh+s;uzenFVn&1=nhBCqSG0+p5P>-{UfjqG~#-M-avi^8q@ zr>5zH@Pyw#073C!Z5aAD6qtlT>9M%EWyMF+PQHz)jZg{;&nxE!nA3n2r^`hAfKCPq zr(2?LcR(wHYJ7B7C`-U9wj2W#U=jyPWmnT)wa>2_1ZPe8R$8Da2Hoel z>o%zFE_Tcdt~2zo&@wu+ITFYf7ljE>Bkx?Y_>CDNBE)k3XkCGl7ngp8k3wh=B&h71UdUda)d7AP!39yJFcG+-L1i7b zNckZ2Fp2&0xn4o6R#Aoh)m(|LQN9pGJ-KL`s~XjYt*Y>aEUM5yEDP}ToUW3F`c&5F z*i1>IqE5|L^fYQ)G;O4+QF++1A|Fc-$nP8$3gox8)8k5U@Y--K-~nfBEuE zNEiD|hIl5k=wKo;Y?M=-L1HA=zwj|&-z1gw&x**bg#C4>zA)KM`@+biGl&%pWrp6x znO0uRq7p^>s|QWHh>NOS!bI2pYNG6O3z%SBv1yN4Vfz~$Irc*rG=-MLR3mph$zu-p z!QJ>478xXv-I%!zaT0Z@z^{gzLRE>Acw?Maf<^N8vWevZz<2)C*nc=be+x;GL^B-& zG}wREx3;&O_@7(L_)iOYn)%R3OaML|%ByNC{Kcs}jn@9G;63G4&}TAA2<12|M$H>7 z#TRQfL2D&M!E~$^;v6LzVU@a!m+u3C?2<3FeX7?#OSzY?-QYZY$Y3!8186$`+t_vP z|E+H=?|(1kX(5M*@#phljv>y>6CV!Vw(^Qbdpv>sPyDYcXzg?N1(4A4W`5RuWrPias9t-OvR&Z3`UZIxSgpw!+No4(zV@77KIPNQ z|DXK+_qr4ReRF+heRs+K7x6Une-G=Kl*M~46PNti_4*5rPS0Nh&g?5L5mQ#qGlzM1 zh--eq(RYBcWJJbOxBiP!n4Pg9yCkT9Yd7H^<6?>^zzyqvdvj;kKL6j{-de8zMLf;x zKT5}#F!|4#4@W5LCxafF6mt)JTbaf%mi1ygEuwPqZ|#g-$)81=zm5Teji#KL*{ewQ@5R)WhThDpO9X!f9_D8LrNO)P6 zwK8AIUC9r^D#N8 zS}0uyV3n_k&mam%FpWYCJ0i)YO3hglLqO|;H@NBy9Vp=~0DF~laBlb;5TC3E9Q)j! zUCz|g*o=%C!LGHi&|JNTB#Y4l3zD_=9E<;_93k*ePUO`(|vLG4DO6L;`&9~_;Xo*o}vot&NCTwYzAoW5p9VmifI0=m39 zyEuG(d~CX)Y! zU@@r%&>;VBt?$_S|K|Gc^8Uv{p4sJpC2c;r2H+Pr%~&}c*#?m_2pZ%|vw#pJ1HXHP zayTl*O87yb9~3Y`_pr1?7?ltFX*D!&Yol)xmR`W}iPHOdARQ>iMcTAGdz-0~iy2K0 z?EV=dj}N4y5CGtgX$3l-x>eGauX+LR6D<&lzhOeU=Ob1zeuCt*Ms9(&~S(&tE=w8&S5u-)^Q5(&` z7+e0?8lb=#SYGT7J_c;S96x7<&u2i8((#w#*AM+nCjTKcNGCS{H_3k+yUzWuz1`*g zuZ28wkpI}ESQ>yi9cHiq5ANV`c3*KvNJYcFMJSb~5ndxf*$8G+&Jhl1d4v^_R6O>S8C{ZaQVjVjC_zSL!;mX1!o1k znqU?T%P`N=Bx0>tHCveP4$sfuoE#l8d*so@@vGz0tCPbwmrE(~TYV;y|M1pSEid+pM7vA~?#Vx!we{l=UAa7~-c#xS&+%ohi zHm2@$^Ne``2d;r|iZSPK)R=2+&oKW|Q6Jp+IjJCtxHgK~L%ba8yej;;T6a%#2w zC-$1P8{q)_boYODw)WinKTG*jdro7NM5!M@Go?WEAgiv!Dl*b;W#B=Q<7rs1^5|~Xb7Ze%5W&dYplHhuSF_% ze%L58`~V?A-o7Up5Q}_8Rn;R{mBD`IbT-LubIO+X)v=@{?n_}a zJ`)IH{z?RL;KH#y#O-LI2e-e!6SFq_A0bSNFu#z8-g7?x+1TB)^S^9vZ0#-i{~{g{ zpPi2^kh!5=0+v}S1`k7+ff0%!NHCCI4{c&n8w(R5!e&sfbQfu}OMLnAOjg)eGM**c zX^OcUnMwBsVhzf`ZVqcz5#Lxb^pL^ADO1M6(A<1{P9Y;mhA1xGJjDJYw>w=h^;Ord zMwNS<=0j4~B>#4UDf_ehODt8r!NsQBUh3VezA2|0_9sT;BJ%1T6)K^(jXWX66&F49 zRvaP-Sfy*e_jLNb#|(&R$hq?LRRdWn*;bj@VfYfAjCG?nG^6wf64|0M~t zI80GCp$lNc{=c)mZpZ)G+}&8_e_O~i&3=v5JeYehpp_&`NPO#wv%HccOir?dT>f8n zc$g;G`&kMr4aE*iFPDmvl(`-aVRVPbBev6Mk+na0Le;vvItX}gsw3Cd)M*H0>v0Km zf%Q17p3xNx8MB)Qt-(~Gw)O&?`)O>3`L!f5eldb-PB;ovNC{w|Sut)0AVOIblF9fZ$g_C!3H}O* zivuTX)2F;u+zw`ET> z7^^r`H+Ze;hGT!Sr~m?@$>@d%|X*9og;yqXJiw!U@PJY?uB zkRQVI5)MW%BbUh^0=W6E9)8lVT!yTS|66Gw5P=PuM}I9Ks$zfo#B*8QmvU5VyP%7% zgJUydPl%1aL=CL84-MEkAZEpKsrvG#h5k2l0Kj_vZ)4Zv|FMk!yr8GO{x?eiz?A}i z7$*gce}#|SYR5L{KyH(POyp8#;?Os5!4jlfrvc34zsF628YZSQU8N_V7HTlmgAG2% z*FasFZR2ey6`@~~EDk|3$`MX(Z&L^e0>d!RVfGS)7(74#Kho_WA?YJi2ou5_2ze?d zlrhVwh`;O0k|GsAUcr=A@`1?ft0T-awXpogFvH^l0x}EEAMZsr~WTXQ&ChN7TFMB;;>2cT!%D}qb^_cks*R(x{o{vy$k2s%UZ&3{OHKN=2 zf&wz3)jVAA%^Kh8VdsQeBQ2(lIBYWrNx@9BbVQprMsuJgJ8$vP^6D`+XekpB2AYk? zG<7M%Mtia{g-L5~O0rTg(~woPX=5}8vI=>_B}J{JHARCr@E)dtO$UxH`=*ZxEDA*B z4VC^kNU}Z(KoG;*G5wPiVFVp$bt57LC5ejBv<_&Z0kWY^GguOZI&AHp+Sd)V(Q7v% zd6A65;_+P`Q@xE8A%TO(is2ET6O#pvb6DIb7{*jQ%(OqJ85J)&PV+Mlled{^#!Sbl zb$_0A5Z^Kw&;k6Jx3h$_pEM4Rqe>usSA_c zDuUQ~g8D00Fpnt0>7qQ%s&s7$LTKEztD%bVNWWXln=8l%H@6{%%5lG~sAYSJRq~#S z$>8hsdkg5?*o_6Z@y=*lCuT3(Zt`FDvgHY9f(Fl;6w^&{JKMIJwC!Ev+Sp$l2s2L< z3CJ~=)T_=eCX-3&Ho?Tbp7tT|+K|fz(1KcSf{^z%lu1eDU@-@MMg~N5_)P^}Rg(9b z+i*SsjQf}ydMB4SDCa9+9~NDv)Ze;7cpdYzS~l8hC3n>f6NfpK`Y92pMzu<~(g|0< z0sJU#0q!4w;D6q4bpLk!e!cs*>lg3ihtc&4<2KxKdW7->#@t7GoMTeJa8#N+T}ob1 z;BP|`4b6sHTuGdjuogH*Vdk>|7$SnkC4FbXuY$Jig$dv~G5=JX3~nl~YELVQ-OkN@ z+m;kDAT$T&q#SOt@AdoBV#SH7n5zXP59Eer&sBYeDt-KhL(ifc&pp+k2Z%{DLIu=Y>Ht7FrHlIVq;hVXOJFX~Uxwf~&JvXZzq?mJmQ7CYbF+0$Y(b-@3JC zq||Q_@6FD=F8Wa>LJy44baedm;mzoN=frOFEF^hvPPA77mBH?8$SR;+$L>^}e(X-Y zUc`p_;;eazJChX|IR>id>r>8H)wVum&nl+u!Y1t;r|q{kai^HNXtJqW$4tK~(XQ3g zEdM=u{^yOoZ9D$U`pz=`*J7S#`Om`{CzbL1ZZUMxQ!d`x4UZ#I?f6omk_y&V>-935 z=Zl6}g)3g|@vYq0CU8p=El%T|<{`&da#G{;JRdl|XFO6Gcf!eV$g(2Z)5Jp!`VWQG z`e4tlXCTz#1j0i~32PdowraQr$2R1hWS6Sp{~|I0o;vThe466FY;W7~U)DFbm;8Sr zPYeDp=7CE18x@cQYNC~qIC}gS3nR-+bNlSd^fMU<(MeUxZ@Tdy8+Q6r&EOsc=CvLx zQ>hNc$`#uTK3L8#b_?V)hbaaY-?y^mNOi$cx=&t|hYF_2j zYX6@y@0)y@^uP6WXaC>Y-CFMdi+Cp3dc-W4UI3^_4y13N{^Ub*-$g}NrrJg|-d}<3 zZ}e_pbse>v%aaFhPGxnbvj+S=Y(=KoyCGXc}& zj9;DyPhbUXcUoMT?_Kg-Ck~^=ThAo}3^F$R{YP6z3rv_cQMZ-`~TJ~x}Tn~%h32_&aN7ZtCOe8u(&du z>HtiuCE~4_HN+CR$(2GyZ)OmjN(aPS?G2*kKum?Isy<&-mm9>>KCSrwj4mJz{C|CK z!}kB(*xXsh|60g10Xv+^14I-Op}SNfR>?=hH08QhPyEzA>Z+K+!s9<6=c(pFz)bxC z2=G<_0&WPacQaAoEtqxAB`oo0$qS!jg=CAvf7x|L8P^k_Y+nq-V6&Wr(} zeC`#5`4O$X;*5@H;xLYR#6d}3dE3g)+hTOjY%E}vh5bVxO7noZ-h0>@-$t)&1BDKl z#MxRkB`tR?y{@e$zgxj|0{%a>6xhK3x7K%^{Eu6kOZjghPYeEEvlyqm?B()wCjpkG zcU~%X9B}nH6Dxe>W^+b& z?+e(617ojsA`VqslAJhcptMsic>E=VjZn%ZBZ5?^v``Tzl;3?d6HKf~j zc;-MN`oJcm5sZ^*g144PDj2hpUIChf-V?=s^&vf1dg3w8VHVFoO#xw6S_&`=prk~2 z-u~pv=lgp6@*hi3I0|PG`n0F<{Ab&_|G&Aty#K$DM?^Lf<1MeyCMc8XTIrQVKKln9salA|6A*O_WA$%-sY13FX9pTzsb1B zFrb6YQ>V?w{Q2bRQE(oETFn;l<;ycsj%? z{SU$NSwEgg?tdwB+-eLKX7}b1gqPMsnC5Ih($IW0&LPVeJw@C&5MVSe=#~($4hJIH zWrs6*l^c8I&d1{YhNXL7mY^{-u2oe*NHS(pQ&6~f%2}2^vK^;1dNGhjusWly14?0A zUGeRf(kqc65js0Ap(Y_hs z-Z<5bq!I5|_;>;P?0{FenDamT2~1=9)1y$L0<2~btfnvnt1I{5Gq{6~xWhB$m>Gi9 zSMVA1lLC_tN5zx0#<4Q;No`meVRnDbmERB)u+Q_T-nTxsWi9J(4E!)E$YGif!%nA7 z&H&~wR!(F6n^&c8Ah}DBqz~kAP*Fh=a@mew)5jwlF^5ci}4KT+`-2NY}Cs;_^1-|GbFTSXA_yx>_7?NoQ5lwC!B*n3^|j5|W!fq*+A2O4pMx{7RXVEaU;Q!%LU zgVFPV6k`~8M|UM5aKuQn!f8*6WOO<1_mhtxkn80$NYR7ze|AB{V!QQSCFKp+lR&R1 z>#;xB2v@WtC#!KhV-{&KSCdRIGb)r6(m5ms&oNIkZCsrRz-knZU>b!O%ARN_+Rb}b zndoUBjkDN}cWst&q>|V@tOaU*cSUAswV3{t3qoE~0`D(I8+jq+ih$eiJ-VEN7g zuN9x!NIsdZrG@@aWy+_t|8DQ@?K<|~-R1q?g*=Y_Pe*%hMgR)zM==EOzRcMeP^q8k znu4w-XnVE5$zwxcuPs-`GM=Ga(h7LT`k*7x;L%v6tx-6dpQ5d-dDJt%Bcc+gf+!|K<7LLLNu{e=|4V4>5Iq z6#1X`eM{JibBJYoY02JA?#O(v_SJ)PvE zAa(^w2lq}RKWStI_+J(oog+ZEr0*E8Eae;r8hb#=^VLup9DjZXgR|}oP5i%~e1!4w zY)&Bc{C{J8XVc;Td+W>i-wSyR{{J%_?D=_t$hq@F>;PqF=DG!}y#R;zD2YLqq##F0 zMqq)B9G5luQ582D{mP7ZI54$m(w zw?=(GQ;fteuCUgcJ!o6igT5qK3}Jr!VH~CgWagsqE=xY>Z#xb5o;=nfA5Pb%(P*3{ zAI4BPsnoeAco6XoOC$zFUKL2wfU5VSd`#%(I3`J&kjDT7gCfj_NrVFs+$S+aKI35& z^5{AmX*`lfd9$CEXBbRl5cCskiu?B*0s7A*X~r;&js*YMKVY$N{}ZFERufdq9>Zu{ zB;-*5=tW@~jVTwLCO@ZlOoL zjo0Y$5%YDFvp2DwKmAdL8oJzYIV#FuLl2a#OAF%@fFUUns2={870IDLg-lb8fv?K zd<-G(yy0{ftPY59k7EfX*Ii4Ox9jES+X9AnEzhd!NoIt8*U062-;Pu@HNQtP$tH}6 z*=lKujri5Y$#2IObU!})>EzAH)yeTCU#oJ{t&vW2Pojw%{_W)QCZDn+2R7vQ81igA`D*#Lx?YX)?b7)uthgjd%ADr5rF&P(>LfQ*p>nBCj5H5+79 zXuCuyE%b_Uc8K3$Sg--EF2eXTEkox86ovddODiJLs)A>7D3gPDcX@nqGdq--A<(T& zf_Ob0h}Rcq@6K;#2jhj{*}~~0Lx}u*NvBi+!Dt+wp()HkbE*7xEbPKdPIs0oMY#%*PaHOrsyd9%%Jw z-hN>W{29O1q0DuqL4!BT96(q}9RcP)WTa@&NdsIG|n zDGjx}!etvPlT?6&ueS1|5a4SzIeD%oG3^yFM>rv<@Fc@%?NL?YqrtnL5+f20=7S0e z2h-w^kJI!VrAhQyWo}kO9h7AQ5S;W+5jig)h8d|%zD6q~P`7fLRfEIyA$-JCkAU}D zI8v|4(ucQdVseYGM#BfzSAu+TkT%8iYOQHBWDhwr4>P&$E8M^q0pPvSxyT$kN*D^(>#>zJ)y`c<6RdPF#Ahf|Q0$xum= zq)d%Y1uoIGyhujMylVB#Li}75ogdoOSI0{nbkL@xAf|0D$oZ20)F!MsDx9l0$Kz^o z`RA=e(uT=vqAt-fX0J}WRui}aX59=nX0hsG^<1{*b9F2JB7zkaG&$JUam z@>6DG07TMrV@y~n*^+=zl4YFdumDc8+!~}&a)>Y~!O6cExSm^`F$Sw-Hcr#Y*V+U= zPv&|1+6!#o-i^2UOevl)VHA0TFZl!3sSPjtLrtB%zA&BXjv7qIN=9j!S_0 z{nEXofFpDd>G~h_z$GL^w!?tIk9nFz2}zmnGVM5cNYd1(#d>qaHkYt~025ju3Nggo zF+>4N^cLfnppOawKZc_`g)iyMdqiXIQ67S;qjQG(yI1F&^RQuL`8w%*$;P8wSoB1g z#37{RH4-osZ=r07V|bWiMB9fPD{OaF_Ag|oE{wJe>0|2>X31ZENIz2|}!jh%U2{ zVCYDom^XbwxRd-4ra9&^x*{J>60Z*|RX)ZA-C*RmlTIPRR$RqPVN&mH>A0XPx_{$E43!aG@v{5*@~6jCrv!p?FNow; z_J^hGIw5m3Bz(ke9TQGYunYKMoKP8sfE0$9FpM37yyQdiXwM35kn~~av7|~=J)RZ@ zsSfqVWfLXYsO;TDw@OLzYjf9c|7qU;(Jh?u0HE>y_qHAXe{Xwhd%6EF;xX+1=WMX& zwdGS-KZfyNbYSy0cleNGU(VqFqSGeEjdfUYTMFvkch&zVHbm+q{MON3x$zEHjf z#2PDvPIv4`SvuWVxi|?2Z&A!*kY*k zzKJIHR+OwfYANel@?5#XeFuS6*3Gh#1x^_L7;;``C#}5-hwvIpo_|6xU>c{I%AH9} z2?}cRc_ErD|ETd|D(CQ*FKjoo{F!{6^E&@5*87Lkr*!-gJJtlQP3-VVb;&hYPuc?# z<(DYB`$Yqb_B`4crGAmR5rAuT)j?g~81p5lY{0QZb{(!Od8>a+i3ljdg zMmUEND3es(!{VVx2;_UMJQpX%1X8=Ldd-o33yT3PA(Wqe?Nx}TET>Va3?$q>`3k1t z<0Xtx7E_&o?zrOuUJVO~hbWDyeldwbu)-^&}smI8L*(*fVq$Dyj+uQUsvI?mAsN9GN^zgT+be_4%nEb>ozz^hz)=;P8e1+Xq2uEiRzhW`td_*)elbz zTGO7PRxSH8tzvhS~RWLu&;>P^9N*mw6_j4({$^KV{NqMUKUmKe{J6q2E zubt)n?}a>uv~wW`dp?4Wnma#)kfZfx-iAO0+7VwWgFDqoBxV`41(&b=(nk5c4w&y4 z>32qEMq90eNrnjwV>)6b?3WCm5Q7I1Br!}=7A+;gpr3{Vy4{$5cPYGwY1@F9kH@NsT@M{K%HX@kdgGZQ8G_>zowZ;>1KT(e6Em?q$DMw8&a?;lU4MhzZ_* z20)aL_eC^&2}^$NMfsS!fQ{e?6_1tW_-A04DV@k$U%ou!zxJP*mMXiXXqL~q^AO`C z8-Vqf+~bJ*QL$B?ke6TtL+0T%&RE^@*iv?@=g(7K+rH|~Y$#|%tHr`&oG($*r;H`~ z*>TTS(I_Dv!Us`44nV-s2|B7@XS6t_b(qBhS?1hDhVYR&v<<^7PGJnfTXYY-2j(nS zEKBPq0%s9)$^22-n_%7J@5vT@l8wE&&%_J@E9{aX&!0AH_5{Ac3HK0)LAf3Y0;7;b zLlA;IBm@?7@`IUnRkqv?RV`6c^@mTO>9#uqRek5vH!aUTK`C|qZXYm%=>FPT0SEBo z#yV?mtyp`t{RWSg%)CyI=g~hpD{g)txiUcTKU%fb_s8c~uiyT9o&4i7WUv0c z^N$ttWDXVuD&FEjHEJ4qtLJH$WZ)ztaKIEaIOu_m&P%ZRGu3j%i}l_Pef2g;6S_3{ z%boT0QOBQ{s6>91XH?J8M&ovgi0)_zS? z*@PB0QBE>&`$(6ND6_t~O$!}=%uxn2*@KO(ZMfSp&mYw^vX3z>*5sa4MInI$ROqRe z<+c-OX~Tbq%=0EpF#=&6Q+=EAz5sAnpgxsE9>R=pA(8vTFeg;o_o+OR)FdT|#1wW1 z?clUrYdm6z3)OpcBnUy&@sL5vuI){wI#AP#75kR=tlhDCDoUIva}|ha8@SPa$Dfs|jrGZ%Cw8Vly0i5WRS;;ieN>D>g8eaem|c!v#pj9h zB>xrITR3}s`0B1JxNjztGHN#59L1ja#dEfxi`d4jg#2w-&n@0-MY{z-IEuBu2Kl&` zWCW({UGle$9Xk-yir$Kv`n(z0iY!wX>u8XVJ+84&7*(0y!ylG^Wc-EqKqBQ0asZ3!GpAGZhp{ds7`4N-Jb4 z-mr9YZ_KmLi&iJuZ+6hMQS|{4skN<+YTl>zRQB1pMcRE0NYHUK0+zu?5`b%Vw)s)I z-r9%@RvE+lB!aFd?#ew%$J{G%b+TQSSA2`c8R;ch#)whN$)bvnP7baqS)2!VLXlAG|r3@kXr2!@%6aA6+e4?_&X41^dbgAB%ilhkLBv=>Q3P%HnN zHdYd5#b}$2&VbzRGE^hX>U&bN3w^adB=xw`Zls~= z_e9YO^lE5S-s{INg-gjO84L+6IL)cXnRr%9s zL=SXz!sA8bWGrg~r7^uv+9&dA`&hY;`5@E1&aVHP-dTd;92X4vd6? zwoc=oij%MnyHX)-yF)vjF~K-jgR8B*LIc*%%`V0nNk&lICkYHKJ9w8xDC1CT)0Q-7 z?yB9%GnlmNdi$%D0*wZY>od$uXshr{^A<)5&y=5vL=vDiOPJFtoACtLq2ty>bN zp4mE(3Fb9{qx{U!XN6j#qK*dDk#$vQo{AW@X7~bBkPF61TiPjkem+-%6_GL-tk#A~ zv!5MnO|qyq3c+5A9>8iUZ{Zm4JKWvL(vV7_`XS5+^C-McvKWLscHe&-uv*L`>Gb&O z=BJa>S2vf(7r&hx9b0>T7{^BrPnb^`v!vKKuRj_+qj;uMUrH&VD<-xHx%LvBKxR#499fRyBwVsAb5e*9q^rhHR-mn9$MpiMh=6ZdhPB_F8X?(3l@7}t!WU*OVoxw)kD zo9Jos{~)j!CE2u*U-{D%|8-+y$G-o$y}P{sxsb=q|630Be2xw^fIq}xq0ygt9}nu( zFSV`_#5f$l^N7b*xX18>!okIK@)RE_OxQO{8oVy+~Rks@DdjHus9iHsDQC^YZ7Js zWH1Wz00bCD1tb9o?jz#8LAi7@3V!2`EPOC0axoI!UV8zq-n_cl2Qq@^zk^dmz;8!a zOx!_Z0xqvEoy(-`#)Ho@iCvmsRiCSTlK7CWX3(~?^U#5pBqXpuPA?&`9D5kXuTVzR zO+mKW)x255u!ta8yN}q7SUTY_n{b}+{3fd2{A581fZ|(|3dp0IMJcY>H|Mhx*i0Un*1(FE~8D^#T*`CjrIVFHjy1q>}4Huq@zHXLRGVr)PDB zt#h3fd)?3!oa>-LJJW*PoENa4d<4N-;KQii)>eU%h6v>=EYclU2t&|E#Y0%c0H+}y zg7<5UsIKHCMeQB%6lGKe`~_ihg_MRCfZ(SjP725(qlT#)VlUL!i92qqrm9#oz&36T zzFYP5Dq&52Ja1xAgLBJ?VY`z^aMFQgx_-*q#+efgGq-ojdBkbh?SPe4PgTiOYCSa{ ztrF$JW5r|}Rw?<~3_-(2rW#h zq2+K-)(G54>|UB50J-9xDI*1+~{Sz3gHKiRrok|0f{b| z5UUYM`h2G6^u5TJC>?JmlN~&$m8)IPvg#C5c$K9B!;7oVw{#|CtY(^rsg!O!El7@3 z1>Xx%@;X0A#R*H8%saCYtVedLq>0A*T-3`*LS$TI?zI|`%~wmOe3+&@pRWkghC!I7 zAV)D?(;Q6b+PJO~gBx+F73=xL%~9-6P5;S?T3+Sv>0{XzRX>9}_~M@e-*dVCfiVAlBlruXJcLC^=P+G>d`T zw`%kovGn8?btjwZ4k|Pi+shbN?cR#n)oE>mG|98}0T;meLKl3c*SIKT6<7#ws zXPLHh7$yBAs>>F-(uX7(!uYacf?FN%;_SVOIgzE6%?vLl-bDL;oGVbS7zFSc^pgS; zkG0kpT&>(G{I>wr=L+OnZ&7XblB5q3g2hH|o4i}@+1_bZftkIB(czLr<-CKk=CC1E zu8tU!G`&9eR+2h1iESn2JSJWqdyo~?o!t}imvU9V6gPqyDfRP2Q&m%gYxokFx|BvC z0W-`1XHrZJHz2Y%K46{*3Saxo^;>!x&i`4qk8YauVe}ZKuq!f4t=+(nFly@$(BS{K zv9-Nno&Rs`>~1d4{}=HX=l^t20UzS|9Q`*WBC82dAWvvl_>XVa8Nlq}yu1PAaX;%j zDi5AE1ByYZn7hRI*Qe0fGov77 zrU^0SCVbmoGW$uMY5D)4$mhrZo%}yrJ9|t2uZ27Y|EGicB>cZF8|V+T3FsL|pMDdl z+6CAJ(;2q_3WM{1+NTEouN&c6<4#cFf>=A3eNAb_L7KneS%~@X6_2kw) zuH~?Z!D#0=H^p$d7si~t4PsOp`v2w2Gco=5t3VGCCfq-X{$e||1=5D-+tUF%*cR_f z|0;&02wTe${tU)>&Laj_Aw)?23k+jeV1ZZp!in^naUXdViOF)cQZAe_D~o#y)41?h z-EtHKCfD};eMKAqbT7Bkxs5&ymZGtqe~rh1QZxsj!G|#-uqHmO&u{E&?_A4g9?!J$ zpVH`BNPvy{|DJ9C-QHba%6|)a%=_PRP?tu4>19Bzn?IH%fJAeX0-wqdplH9e2DE&< z{6B^{T@G24K)iMnrAc%*L}Lt3vVU=>kjX9rH|hVoyEgyd+}_$<^8ZCVBD~s_&e_2L zX0Twn1wtzP#>|%#;|El5p9GlUaRD(%2oUaC7=%%QFb3nC<YKG=!B&p*hDs92)Vg{l%q1|LB`3z>Jb`^U`BXK z;yeu>8Jk5Zq*7Ldih_!$JliQrvO$N>P{H8#nUB^p$ga@x@TI5B0Ko1%JfjSWox>|c zyOM!%QAkV+Zbp%FP=5MF*=LL)D}^YnK#~o_dpZd0-MC2kD@srHhAn6IiqWUmD{Jzt zAraz;X+q>wuDoB>w9oX!{p){*qZAmInRSO(e09M@PS1v#|AB%3Fl~_HX;x0v@>v61^<$r~bKqbcwk}M%g8ODLvL%Lk( zRn_#%p;fNWeo#FV5(pSEx}5Try`D7Vjik>gERrz3ozu7pXv>k~BPYo5WMhZ20h-^~ zacIl26Jy88@l<11sjW^se7X|(gO6bAG1LU#CmKeK(qc{nNJ0JZL)UWPC@tnXWGe;4 zy?=#|7qBmptTM9juiWqAFP}a&X!>lxg_8f}%U?w8JNUR?8ekMc z=ZBYPnMpgEYV-S1Z9P@i>rMQ>~8J-EqJEgzUYEr?Ka8Q@G#(ibtC@c zGedxVyAAOW{KtR%<@oGpjuwoD2n5F;VKgR5HUO`F0(7F|Ua!Z4BfftRx)}&oOk@La zeGUHY-zdFMK{#SZZ%%Fw-(CH3;1vG*GeKKg_RYy}#|Mn6{573XDF{~Rdr>k*f@B56 zIm$3RSXtHB4xNE$Oh6ZdEwBmxTl>Vds3=X0w*Yj9sta@i1or2=?BUsk^EpqlfqKyq zzmh(94}ukmVgL>fKyZF``Z@sD;PYqC$2Vt(uTD;1gA0lzNHCzxSXrq<5>m#OWMcLP z;QH_MOQu?8loP8&OjkB~Wi!?X-p~d68pHS{Wp}ha%2P|;8D=r}F{7VGVUm@{;j6f# zCIVo$G$(7C?kclW3P%=>FI@3)5+Cx@?oS_u0VgWk-*B~lk>XIB+`Tv}cVgvhzh&7YicGrlS? zA3fp^X&8@^40OlLd8RuIRzB%O{Sts~uDvt*^d(?CP_e~-`?q<3#3UqR{C5E}Mq=@A z&TGj_Q^$l$o>yBg`LDj@&rV;TEo#a0L2t3-1yZjLuMU4Yygas6yRg-Xf7S8#!WaB6 zXK#-W)_90#Ca1B=ln;%wBaX=Gf3ri?{|-6<_{?WL9)fO{d2FwI(y9Libh}J;+uU2< z*wa2rD$oKS#t9@(wwP`2iT3OHVE~uQ_$w~sqcyhD#iX^|Mu6dHQMnt`GL)! zFTonqMwlC<##Ci5FHu^6dXt2Yt(uHgXRYNpx_$jNQSK+xiC*jgVlpbqd-_W!T_W~q4FVmf+%kwjJ29@Olb%Z9)UK;reKM~9F!RfRC(yhZa3CeKBW=BTM zvsiuS7bm+$aMa(!gn*0R!O`jYYbz|O#ENy2%RW(&gLy;9e8xv7JnNjl~r-_M@v`ePFNSTm2%>34ihd!7$&5=^&?N6>x8osu!T3J$ul@OEZ@3{8h+ zWvbYD#&$|UWDC=@s@*4a)P16-h5xUxT2FcTtNH%d&gQy(|7&A+8UJfB54->Mjoto| z$0T)Ezx+fYDnSH2`b?|m-|WPuRrdg02G9Uo-l)TiZbvSF*+WX5@B{Z+E9t@YhN zLDtI4`!ITW{2{Hn874a={%vt5%&OtL4K^;)3}Kws;_wfQ(-Df{L7ZSZ_D_tH_l6q& zkn%{+zKd!T0)P8>`G4OyEwB@{c|fP1U;X65=hdcdq5dMCtU0e+cm_N*-KV|n=7)Bn ztxgJ2t>kH7YL^6ut?#+{V3aomXM;1{RlX`n)7|5!X%)5hXD#+JtJk`BIKDsUM zDBAZM%lK2ii;47Cm-Aiqg%6Zr-eMF^XCr`ChK&}P(wOqkQ@K^_=W=|LViQ|dt#kfzjwOlVUDBC%lb*)1Tn zSAQHJB*g*YAUD7mfqQ?pIY^uOZiMR%jWYJv9s@*SN zWX8ouGzO%2qy%QH5riO1QZ9JXVR=Z>RDQwWeU_xxR{q5j>;VV@53g)iP1*%I)b2>v zD<WV*1t23mNd#@@xzF52Li0Mf_`$|2EzD&l{V&TTA(G5zn_M z|MA-vHR7Kq1k+^F8wFs?Zw%6z$t-oI_ct#Lb}z)t3#SfzHtCdBiJ7fLn4P}7&GjwC|Akqcqa-71H(?wX5MzjE2>;ud|7Uw=&)okv_V#x6 zmizxA9>znC#dw1*Py;?o?jJdSdJ5W9xxKq{%Jd^jVp!ZK5#*9c{e3rI2fF4d@6^eB zECY|09tVCTbh}PZ&JEteFA>Tyx=fP@RwV2x0bKiRI%dnOPU;;mDr^|IG;o%skAUv; zDFi3yAi)5SbGom=7)0ZufEh{I1r9b>(&W}OI+@9bD*L1NLL_Ml!F!J6^-FL&CSZUF z%T5&VPMr0taQ9@Y2cQd*T;;{9pue7w@P|G&XyE^JbZ6rI|Eq=mx4pY*^Z$+QrTu>) zkInzj>449L_p_<@<3+1W&f1XRX;h`Zz*bA z#`L9E!^YM@rPZ>0RZ!bppv2&bzDY55kfPf#?e)Vny$z!~aqF3iw~VN=H{~WFN>I)% zD*@TSOTPE0zv&jj$0D|`be8$!H2g_e3?QLXR6D`Z3+M^v)ZNizrpf@VvU`2h-3%!x zGsNvDEg9Xan~knxk<}9gSyZMgZN)`Z=BL&BqmkFbLw@mQhaqj=GZ)`5_e=Owj^8dLhft+i8&zhjogQYsSR0o&p z;8Gp@A$ETL`1gM)@MHuQ{gBE4_hFjEEN@_vl0MtU$)saZ@a5PKXwEh%L_Q+#CQ=b)(y2e*%0bQ_+hfK1> zBqT{>$du9updZ!-nQlct@X{N{J)5Y%k_-Gj>3FSV!t(idgb(K68gD$FtDsBQv>^2cOI_q^NPZJ0$UhWuUzq1z(u;=>T7 z${XA)r@P{Z6pVfW0q;M@fv{z1TO_3(i}uWK5~z{!7gRSW%7UK-2Ht)eJ*?QIzpub_z-@@( z?sl0HLrNuIo_!I^U#zSPNX7+UL>6sB4E_^KuIOK?p8-Lv%oDrp&-H1y|IcFmYxe)x z-Q98HKP>nEg**${|7S4zJp&*OZ()l0PR@TrSiqiKj{b+t}E&{Xf=smiNCG^3?M(J`Z}gVRQ$xm@R-wyddy>q&S@Xt@FTp zSQJSNIR}(~=(4iR?KD+3D35j}Gz+~crBcXtdRinN@rhrCm1(I~t1%gqB<+=@#co%M z$PKm4? zjxYO_@R6X55W-k@$IvXt8dU-w7E|YnYcIf0V*>g~feDC)FuJ4lm>14{M77eqNJe4t z=y-b2&y>oH`&#ZNf**05JDS&rt|Mz`QeZvVkn%}6>C47nvPCh^2+JLhKm z%fKWgVVfdZf|BFi?I~{5cJ7%?j)19NA1`XNd(8}=9HU-EoX>JHUFJ_O%-KM((}IBq zlc*ethf7-ppLYnTfj1&mXO+s;{u=Xp3q@6AAI8Eq4W3E4&8rrc#R&E?m2DTNemhb|<}w-p_ey)*~V**hhvtJ{kfd#_GB zNwZCKE1Y?Z#>%=iYQYY4g`IzF+J%Ztu0byl_CQwM>y5iyj`o?k!PTOw+~k$pyO~rk zhfsw>hg!EnBopsZbW`#>E2&_-E8p3w-mdjKYAzPrCDadlY^#LvJV=WhquEJfl6UYo^tN4Ias-s0g$6K{ZOA({Q#>noZ&>I?= zqh4;%jOj$5VaQ_^Alkh?{D?84vd@N5%B$$-U}w=V&OKXpW8Bfg5i+_CYN#{QkO%J# zz|MW`4T68oDIeH{>j1kfShZ0ccJ9lSwiwho($?IUdv}`H+m|sU^yh z*jj^gq-_L6xJQaK%P6niRR0wM_`=h+{rD0F_;tN z7yRn%J#4=$;xjREfwr8mNT)C(u4@}>qt>{@gE!u>wx(#ittc1ouGykwYHwi|LlTYC zp_Wy#Gx}KNCJ&Y!nG%vMQ_*47irk$-a-E|w{;YzA2fT&uCxr&0T$+@1D)^=PN71~y zna$pOJJ<$1yGfjX>i^rh@x5W@w^LQI%LeXbUMsnF(nm_q~fbXRNF$#YPa8Q zZg+L(WyUs|9DoVn4t@FIG2^!@e5u&PmFfS6s-S&Vl}(7vqm^|wQ03{k!}!8$QBn7< zlt2ZqC>s%g;A)n|XoeDQet46i5RVNHL6b6;Q5h6eW?#!3zuL5^(ROscw1H6YwcsUK zSxK#S1;+LCTl>MF3i&%3L+DKmNfWL;DD|P!ZqP-j+(isbzJ)Z(L`f3;G8lMN!`#j%^P`6}@fuY; zTVbCYhC3n3i+36KWhl==?&!zuO#@nlav88d zSA@*jJyaOaNrCdq@{?uozLRDJx#8Z1tj#_5_C3uwWzu1Ak;<+P3s%|_ElYOug4v#k z!SNb>ZAa>stu+u8h}w(%EZiTG=4~sCxVJP&Pc<>!1y4*sU}*#SDE%dGZeDd z;&!ZG#jLn<`$bc5?y$}~Xh%J5>}ig4R|zgKjPbuz-YDI1j?oN0vhx=_v5>AqokH@e zyu~d)d*j~;fY{oUb|CWIUhf7yz`P;0wAi9wyL<-|kOq?;&eX}_VUG>S@3j^n`oUBp z`2|b)M9m);FbHq*Das;DC z&Avgl?AT9JxldbC%^cr5x!YxvAx!9YmmpX2b|yK~`t+f&8w1G9Fn^ol9GOhJHTvfq z;g9yr8!CWuYIixuqX6|qrz!Drp?54hkT{|w+k>P^O7^X9wzf~3r}q9ACk2{_usi#o z=xO%`CUAl}T7ozEe;pp#`QHyuPPg%YH}bSP?6q|;)K)?N!7sGNZ82D1i#ibYZI8Z6 z?Etr|Oe1?#FM@Yh4=y>;7i51W5Fod45whB7!oolU_S?7v25PW+F<(a|>k z$3~vcWLvI+{ttiIaxEEGh4x&rM}AU&`56E~Q>DPFss#@?njrTw$$zB!p^|OrUSn0- zyayaP`nEeNF~LfJRj~-X8davm1uAVra|zcvQ~ovt`j?@y674aro@_b z(=WkgZ^|phUF8*Iq+0$0LO4Tl2#M{j79kRvEz&nRW{N#Mvw&>(l35$R)C%pHW<+UX zw#VL7Hgpx*Er^2hy4xx*hQq_xm-UzeVU{isQx8y9B%Hz=h6TzA%VaIGvx|HTv~AOU zQ1A5x$k7CSevh&khUg-WLGX`%{QAEGvs7T&!xs`@dnvIG8Upl2j21+qd#3^V-Y7WD z(bz1>-uSMscGMSb>5paleb=x@^Ne(AU5o2%USC)$)KoC8e|R0g!H(y;ocG3W%zfz` zN<5VQ5%OZ>JF?IGBv@y=JL1;8$nmVa%WgI(Vc64AFFF+=8g$fIo(1+T@b5+rkD7Yc zo$c?^&7!fMn;L_Y3sUd6GD8JqA@`W?N(Mu;M4}pxR(Igc6vd+vY?02=@H;Xji;x9g zrC{$EsPG>l&BERU6&hJv>?_T-$HQoe=Cp{5J65#C6^<&4P!h;;bRyhfD^Erp?n4t zloW$<_nPcL%|v8rRAHW7!lp%Pp}n)EPdomO3>v_Z*MtEWR$LFRfbcAh_J|6!P=ad{ zcAfKEeU{5JUatB=x2bbTA;-6QuB_VoJePr4S;I|Pn4Vd;M;5yg&PkEZ9Pk{w{ucGh zP8QbtwnJ7ctzzix?6{Zlco%w#BX`fasAzg8Eo;0(y|)J?20LW8zH1!t@E$z^F=o+O zZ{x1Ly6aU3>XnB&t3bO8&d*vCKCc#%n}H3x+kbf>()(>~7gkL?{c6;vt?C;mcee6Z z>}%{sqix-Y0`_U#m&Pub^Mavb?YP@tH`aoy)OchfEyvw0-@>JDn1BTs+L{V5bW%JuGvc9)wSY>@D032fXs6Q9uSDqq~K8iqIu?ll5zJD zLfNa|=9H++=A`&J!M_=+U|{`f$Kzk7vpbf|TW(){{YdYKXr9H)GK6>x?DbBY^oDVo z-p{kf11p0$X+8nz^i@q8CB;en2zZC3(K5`DN?-0>7j=N{iq_;|IK=7xVg%!C3P%A5 z%F;ZZseQk|4Z}+~s60ZRgBlC5GWW6oGkGhfpE9akmNfk%BQ! zB7l9MF&%-?zXRPkohKd^+QKe(k#`q>R|(4^+3}^V2J2PHQsnXe?XUF&zJ!1~O_hGc z04HEJj|-f|s6-hVf>)m@xyMEP2nchCe*_=Z_uHTZ)K=Yk=f%OFWk*vx|5?RiX;u?I zvyjK8*M~s1Zdi)72OP%$#v}z1CRq$0c@|rFhVZPtWS(VdUZ4o416(C zJIn}eSeq4Q93sa()GLTAaCZps{Du)v-Y~43lopzEfr8hJh-gIIITXEQ#w2^*B4)yb z|F66x4D%?k=Dgel&883j-Yhnt9i!EP)$(;VsCw;HF}7j9bdubP{qpwT{RnBk)Kg54 z(0G`4y?Ht>m^Hs*2K8%HKWEx{8vBD!L$3i}{VY~3z%aBPg;%Tu%+yoCe9WRKQB+n*H%&HYG zOJYK6u{$PaULw{B6Sb;>CUn@9d%}s`YskRhsBaX zfE)Zj4^BpQ{`Z5kZT_FlJi^nzAUg)pIG0Tjgixt-Il{svC<$#wZgw?pt}pn}c&|0kAm zcYX1{4@QTl$9DYh)1&SF-^jzZ4WHu8Y<=F>QoCMOrF(6P;@OZ)_gUocb5Ps8o}7aH zEjBN0V=qSwOmLd8Hk6I00l&@D0@32G5i-j&-@b3Io*nwzk_OEt9L!ePTYiD^ z5^U}mbdhDh@VE6~bKmc1@9xp;Oh)$Om6k+m&KvU&qZ752(>(;+

Xr8t6az%)?4w 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�lmT9WpVvNn- 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://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true + diff --git a/system/snapshot-controller/1.0.0/templates/NOTES.txt b/system/snapshot-controller/1.0.0/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/system/snapshot-controller/1.0.0/templates/common.yaml b/system/snapshot-controller/1.0.0/templates/common.yaml new file mode 100644 index 00000000000..995efb03eb0 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/common.yaml @@ -0,0 +1,5 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml b/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml new file mode 100644 index 00000000000..9f06a7dd204 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml @@ -0,0 +1,84 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814" + controller-gen.kubebuilder.io/version: v0.12.0 + creationTimestamp: null + name: volumegroupsnapshotclasses.groupsnapshot.storage.k8s.io +spec: + group: groupsnapshot.storage.k8s.io + names: + kind: VolumeGroupSnapshotClass + listKind: VolumeGroupSnapshotClassList + plural: volumegroupsnapshotclasses + shortNames: + - vgsclass + - vgsclasses + singular: volumegroupsnapshotclass + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeGroupSnapshotContent created through + the VolumeGroupSnapshotClass should be deleted when its bound VolumeGroupSnapshot + is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: VolumeGroupSnapshotClass specifies parameters that a underlying + storage system uses when creating a volume group snapshot. A specific VolumeGroupSnapshotClass + is used by specifying its name in a VolumeGroupSnapshot object. VolumeGroupSnapshotClasses + are non-namespaced. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: DeletionPolicy determines whether a VolumeGroupSnapshotContent + created through the VolumeGroupSnapshotClass should be deleted when + its bound VolumeGroupSnapshot is deleted. Supported values are "Retain" + and "Delete". "Retain" means that the VolumeGroupSnapshotContent and + its physical group snapshot on underlying storage system are kept. "Delete" + means that the VolumeGroupSnapshotContent and its physical group snapshot + on underlying storage system are deleted. Required. + enum: + - Delete + - Retain + type: string + driver: + description: Driver is the name of the storage driver expected to handle + this VolumeGroupSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a key-value map with storage driver specific + parameters for creating group snapshots. These values are opaque to + Kubernetes and are passed directly to the driver. + type: object + required: + - deletionPolicy + - driver + type: object + served: true + storage: true + subresources: {} \ No newline at end of file diff --git a/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml b/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml new file mode 100644 index 00000000000..2e063f8d679 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml @@ -0,0 +1,315 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/971" + controller-gen.kubebuilder.io/version: v0.12.0 + creationTimestamp: null + name: volumegroupsnapshotcontents.groupsnapshot.storage.k8s.io +spec: + group: groupsnapshot.storage.k8s.io + names: + kind: VolumeGroupSnapshotContent + listKind: VolumeGroupSnapshotContentList + plural: volumegroupsnapshotcontents + shortNames: + - vgsc + - vgscs + singular: volumegroupsnapshotcontent + scope: Cluster + versions: + - additionalPrinterColumns: + - description: Indicates if all the individual snapshots in the group are ready + to be used to restore a group of volumes. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Determines whether this VolumeGroupSnapshotContent and its physical + group snapshot on the underlying storage system should be deleted when its + bound VolumeGroupSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical group snapshot + on the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeGroupSnapshotClass from which this group snapshot + was (or will be) created. + jsonPath: .spec.volumeGroupSnapshotClassName + name: VolumeGroupSnapshotClass + type: string + - description: Namespace of the VolumeGroupSnapshot object to which this VolumeGroupSnapshotContent + object is bound. + jsonPath: .spec.volumeGroupSnapshotRef.namespace + name: VolumeGroupSnapshotNamespace + type: string + - description: Name of the VolumeGroupSnapshot object to which this VolumeGroupSnapshotContent + object is bound. + jsonPath: .spec.volumeGroupSnapshotRef.name + name: VolumeGroupSnapshot + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: VolumeGroupSnapshotContent represents the actual "on-disk" group + snapshot object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines properties of a VolumeGroupSnapshotContent created + by the underlying storage system. Required. + properties: + deletionPolicy: + description: DeletionPolicy determines whether this VolumeGroupSnapshotContent + and the physical group snapshot on the underlying storage system + should be deleted when the bound VolumeGroupSnapshot is deleted. + Supported values are "Retain" and "Delete". "Retain" means that + the VolumeGroupSnapshotContent and its physical group snapshot on + underlying storage system are kept. "Delete" means that the VolumeGroupSnapshotContent + and its physical group snapshot on underlying storage system are + deleted. For dynamically provisioned group snapshots, this field + will automatically be filled in by the CSI snapshotter sidecar with + the "DeletionPolicy" field defined in the corresponding VolumeGroupSnapshotClass. + For pre-existing snapshots, users MUST specify this field when creating + the VolumeGroupSnapshotContent object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: Driver is the name of the CSI driver used to create the + physical group snapshot on the underlying storage system. This MUST + be the same as the name returned by the CSI GetPluginName() call + for that driver. Required. + type: string + source: + description: Source specifies whether the snapshot is (or should be) + dynamically provisioned or already exists, and just requires a Kubernetes + object representation. This field is immutable after creation. Required. + properties: + groupSnapshotHandles: + description: GroupSnapshotHandles specifies the CSI "group_snapshot_id" + of a pre-existing group snapshot and a list of CSI "snapshot_id" + of pre-existing snapshots on the underlying storage system for + which a Kubernetes object representation was (or should be) + created. This field is immutable. + properties: + volumeGroupSnapshotHandle: + description: VolumeGroupSnapshotHandle specifies the CSI "group_snapshot_id" + of a pre-existing group snapshot on the underlying storage + system for which a Kubernetes object representation was + (or should be) created. This field is immutable. Required. + type: string + volumeSnapshotHandles: + description: VolumeSnapshotHandles is a list of CSI "snapshot_id" + of pre-existing snapshots on the underlying storage system + for which Kubernetes objects representation were (or should + be) created. This field is immutable. Required. + items: + type: string + type: array + required: + - volumeGroupSnapshotHandle + - volumeSnapshotHandles + type: object + volumeHandles: + description: VolumeHandles is a list of volume handles on the + backend to be snapshotted together. It is specified for dynamic + provisioning of the VolumeGroupSnapshot. This field is immutable. + items: + type: string + type: array + type: object + oneOf: + - required: ["volumeHandles"] + - required: ["groupSnapshotHandles"] + volumeGroupSnapshotClassName: + description: VolumeGroupSnapshotClassName is the name of the VolumeGroupSnapshotClass + from which this group snapshot was (or will be) created. Note that + after provisioning, the VolumeGroupSnapshotClass may be deleted + or recreated with different set of values, and as such, should not + be referenced post-snapshot creation. For dynamic provisioning, + this field must be set. This field may be unset for pre-provisioned + snapshots. + type: string + volumeGroupSnapshotRef: + description: VolumeGroupSnapshotRef specifies the VolumeGroupSnapshot + object to which this VolumeGroupSnapshotContent object is bound. + VolumeGroupSnapshot.Spec.VolumeGroupSnapshotContentName field must + reference to this VolumeGroupSnapshotContent's name for the bidirectional + binding to be valid. For a pre-existing VolumeGroupSnapshotContent + object, name and namespace of the VolumeGroupSnapshot object MUST + be provided for binding to happen. This field is immutable after + creation. Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - deletionPolicy + - driver + - source + - volumeGroupSnapshotRef + type: object + status: + description: status represents the current information of a group snapshot. + properties: + creationTime: + description: CreationTime is the timestamp when the point-in-time + group snapshot is taken by the underlying storage system. If not + specified, it indicates the creation time is unknown. If not specified, + it means the readiness of a group snapshot is unknown. The format + of this field is a Unix nanoseconds time encoded as an int64. On + Unix, the command date +%s%N returns the current time in nanoseconds + since 1970-01-01 00:00:00 UTC. + format: int64 + type: integer + error: + description: Error is the last observed error during group snapshot + creation, if any. Upon success after retry, this error field will + be cleared. + properties: + message: + description: 'message is a string detailing the encountered error + during snapshot creation if specified. NOTE: message may be + logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: ReadyToUse indicates if all the individual snapshots + in the group are ready to be used to restore a group of volumes. + ReadyToUse becomes true when ReadyToUse of all individual snapshots + become true. + type: boolean + volumeGroupSnapshotHandle: + description: VolumeGroupSnapshotHandle is a unique id returned by + the CSI driver to identify the VolumeGroupSnapshot on the storage + system. If a storage system does not provide such an id, the CSI + driver can choose to return the VolumeGroupSnapshot name. + type: string + volumeSnapshotContentRefList: + description: VolumeSnapshotContentRefList is the list of volume snapshot + content references for this group snapshot. The maximum number of + allowed snapshots in the group is 100. + items: + description: "ObjectReference contains enough information to let + you inspect or modify the referred object. --- New uses of this + type are discouraged because of difficulty describing its usage + when embedded in APIs. 1. Ignored fields. It includes many fields + which are not generally honored. For instance, ResourceVersion + and FieldPath are both very rarely valid in actual usage. 2. Invalid + usage help. It is impossible to add specific help for individual + usage. In most embedded usages, there are particular restrictions + like, \"must refer only to types A and B\" or \"UID not honored\" + or \"name must be restricted\". Those cannot be well described + when embedded. 3. Inconsistent validation. Because the usages + are different, the validation rules are different by usage, which + makes it hard for users to predict what will happen. 4. The fields + are both imprecise and overly precise. Kind is not a precise + mapping to a URL. This can produce ambiguity during interpretation + and require a REST mapping. In most cases, the dependency is + on the group,resource tuple and the version of the actual struct + is irrelevant. 5. We cannot easily change it. Because this type + is embedded in many locations, updates to this type will affect + numerous schemas. Don't make new APIs embed an underspecified + API type they do not control. \n Instead of using this type, create + a locally provided and used type that is well-focused on your + reference. For example, ServiceReferences for admission registration: + https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + ." + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} \ No newline at end of file diff --git a/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml b/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml new file mode 100644 index 00000000000..d0d4d790721 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml @@ -0,0 +1,266 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/995" + controller-gen.kubebuilder.io/version: v0.12.0 + creationTimestamp: null + name: volumegroupsnapshots.groupsnapshot.storage.k8s.io +spec: + group: groupsnapshot.storage.k8s.io + names: + kind: VolumeGroupSnapshot + listKind: VolumeGroupSnapshotList + plural: volumegroupsnapshots + shortNames: + - vgs + singular: volumegroupsnapshot + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Indicates if all the individual snapshots in the group are ready + to be used to restore a group of volumes. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: The name of the VolumeGroupSnapshotClass requested by the VolumeGroupSnapshot. + jsonPath: .spec.volumeGroupSnapshotClassName + name: VolumeGroupSnapshotClass + type: string + - description: Name of the VolumeGroupSnapshotContent object to which the VolumeGroupSnapshot + object intends to bind to. Please note that verification of binding actually + requires checking both VolumeGroupSnapshot and VolumeGroupSnapshotContent + to ensure both are pointing at each other. Binding MUST be verified prior + to usage of this object. + jsonPath: .status.boundVolumeGroupSnapshotContentName + name: VolumeGroupSnapshotContent + type: string + - description: Timestamp when the point-in-time group snapshot was taken by the + underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: VolumeGroupSnapshot is a user's request for creating either a + point-in-time group snapshot or binding to a pre-existing group snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the desired characteristics of a group snapshot + requested by a user. Required. + properties: + source: + description: Source specifies where a group snapshot will be created + from. This field is immutable after creation. Required. + properties: + selector: + description: Selector is a label query over persistent volume + claims that are to be grouped together for snapshotting. This + labelSelector will be used to match the label added to a PVC. + If the label is added or removed to a volume after a group snapshot + is created, the existing group snapshots won't be modified. + Once a VolumeGroupSnapshotContent is created and the sidecar + starts to process it, the volume list will not change with retries. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If + the operator is In or NotIn, the values array must + be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced + during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. A + single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is "key", + the operator is "In", and the values array contains only + "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + volumeGroupSnapshotContentName: + description: VolumeGroupSnapshotContentName specifies the name + of a pre-existing VolumeGroupSnapshotContent object representing + an existing volume group snapshot. This field should be set + if the volume group snapshot already exists and only needs a + representation in Kubernetes. This field is immutable. + type: string + type: object + volumeGroupSnapshotClassName: + description: VolumeGroupSnapshotClassName is the name of the VolumeGroupSnapshotClass + requested by the VolumeGroupSnapshot. VolumeGroupSnapshotClassName + may be left nil to indicate that the default class will be used. + Empty string is not allowed for this field. + type: string + required: + - source + type: object + status: + description: Status represents the current information of a group snapshot. + Consumers must verify binding between VolumeGroupSnapshot and VolumeGroupSnapshotContent + objects is successful (by validating that both VolumeGroupSnapshot and + VolumeGroupSnapshotContent point to each other) before using this object. + properties: + boundVolumeGroupSnapshotContentName: + description: 'BoundVolumeGroupSnapshotContentName is the name of the + VolumeGroupSnapshotContent object to which this VolumeGroupSnapshot + object intends to bind to. If not specified, it indicates that the + VolumeGroupSnapshot object has not been successfully bound to a + VolumeGroupSnapshotContent object yet. NOTE: To avoid possible security + issues, consumers must verify binding between VolumeGroupSnapshot + and VolumeGroupSnapshotContent objects is successful (by validating + that both VolumeGroupSnapshot and VolumeGroupSnapshotContent point + at each other) before using this object.' + type: string + creationTime: + description: CreationTime is the timestamp when the point-in-time + group snapshot is taken by the underlying storage system. If not + specified, it may indicate that the creation time of the group snapshot + is unknown. The format of this field is a Unix nanoseconds time + encoded as an int64. On Unix, the command date +%s%N returns the + current time in nanoseconds since 1970-01-01 00:00:00 UTC. + format: date-time + type: string + error: + description: Error is the last observed error during group snapshot + creation, if any. This field could be helpful to upper level controllers + (i.e., application controller) to decide whether they should continue + on waiting for the group snapshot to be created based on the type + of error reported. The snapshot controller will keep retrying when + an error occurs during the group snapshot creation. Upon success, + this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error + during snapshot creation if specified. NOTE: message may be + logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: ReadyToUse indicates if all the individual snapshots + in the group are ready to be used to restore a group of volumes. + ReadyToUse becomes true when ReadyToUse of all individual snapshots + become true. If not specified, it means the readiness of a group + snapshot is unknown. + type: boolean + volumeSnapshotRefList: + description: VolumeSnapshotRefList is the list of volume snapshot + references for this group snapshot. The maximum number of allowed + snapshots in the group is 100. + items: + description: "ObjectReference contains enough information to let + you inspect or modify the referred object. --- New uses of this + type are discouraged because of difficulty describing its usage + when embedded in APIs. 1. Ignored fields. It includes many fields + which are not generally honored. For instance, ResourceVersion + and FieldPath are both very rarely valid in actual usage. 2. Invalid + usage help. It is impossible to add specific help for individual + usage. In most embedded usages, there are particular restrictions + like, \"must refer only to types A and B\" or \"UID not honored\" + or \"name must be restricted\". Those cannot be well described + when embedded. 3. Inconsistent validation. Because the usages + are different, the validation rules are different by usage, which + makes it hard for users to predict what will happen. 4. The fields + are both imprecise and overly precise. Kind is not a precise + mapping to a URL. This can produce ambiguity during interpretation + and require a REST mapping. In most cases, the dependency is + on the group,resource tuple and the version of the actual struct + is irrelevant. 5. We cannot easily change it. Because this type + is embedded in many locations, updates to this type will affect + numerous schemas. Don't make new APIs embed an underspecified + API type they do not control. \n Instead of using this type, create + a locally provided and used type that is well-focused on your + reference. For example, ServiceReferences for admission registration: + https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 + ." + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + x-kubernetes-map-type: atomic + type: array + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} \ No newline at end of file diff --git a/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotclasses.yaml b/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotclasses.yaml new file mode 100644 index 00000000000..c614ab38dd4 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotclasses.yaml @@ -0,0 +1,136 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814" + controller-gen.kubebuilder.io/version: v0.12.0 + creationTimestamp: null + name: volumesnapshotclasses.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshotClass + listKind: VolumeSnapshotClassList + plural: volumesnapshotclasses + shortNames: + - vsclass + - vsclasses + singular: volumesnapshotclass + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeSnapshotContent created through the + VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshotClass specifies parameters that a underlying storage + system uses when creating a volume snapshot. A specific VolumeSnapshotClass + is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses + are non-namespaced + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: deletionPolicy determines whether a VolumeSnapshotContent + created through the VolumeSnapshotClass should be deleted when its bound + VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". + "Retain" means that the VolumeSnapshotContent and its physical snapshot + on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent + and its physical snapshot on underlying storage system are deleted. + Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the storage driver that handles this + VolumeSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + parameters: + additionalProperties: + type: string + description: parameters is a key-value map with storage driver specific + parameters for creating snapshots. These values are opaque to Kubernetes. + type: object + required: + - deletionPolicy + - driver + type: object + served: true + storage: true + subresources: {} + - additionalPrinterColumns: + - jsonPath: .driver + name: Driver + type: string + - description: Determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .deletionPolicy + name: DeletionPolicy + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshotClass is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshotClass" + schema: + openAPIV3Schema: + description: VolumeSnapshotClass specifies parameters that a underlying storage system uses when creating a volume snapshot. A specific VolumeSnapshotClass is used by specifying its name in a VolumeSnapshot object. VolumeSnapshotClasses are non-namespaced + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + deletionPolicy: + description: deletionPolicy determines whether a VolumeSnapshotContent created through the VolumeSnapshotClass should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the storage driver that handles this VolumeSnapshotClass. Required. + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + parameters: + additionalProperties: + type: string + description: parameters is a key-value map with storage driver specific parameters for creating snapshots. These values are opaque to Kubernetes. + type: object + required: + - deletionPolicy + - driver + type: object + served: false + storage: false + subresources: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotcontents.yaml b/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotcontents.yaml new file mode 100644 index 00000000000..a4ce562f184 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshotcontents.yaml @@ -0,0 +1,403 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/955" + controller-gen.kubebuilder.io/version: v0.12.0 + creationTimestamp: null + name: volumesnapshotcontents.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshotContent + listKind: VolumeSnapshotContentList + plural: volumesnapshotcontents + shortNames: + - vsc + - vscs + singular: volumesnapshotcontent + scope: Cluster + versions: + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Represents the complete size of the snapshot in bytes + jsonPath: .status.restoreSize + name: RestoreSize + type: integer + - description: Determines whether this VolumeSnapshotContent and its physical + snapshot on the underlying storage system should be deleted when its bound + VolumeSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical snapshot on + the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeSnapshotClass to which this snapshot belongs. + jsonPath: .spec.volumeSnapshotClassName + name: VolumeSnapshotClass + type: string + - description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent + object is bound. + jsonPath: .spec.volumeSnapshotRef.name + name: VolumeSnapshot + type: string + - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.namespace + name: VolumeSnapshotNamespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshotContent represents the actual "on-disk" snapshot + object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec defines properties of a VolumeSnapshotContent created + by the underlying storage system. Required. + properties: + deletionPolicy: + description: deletionPolicy determines whether this VolumeSnapshotContent + and its physical snapshot on the underlying storage system should + be deleted when its bound VolumeSnapshot is deleted. Supported values + are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent + and its physical snapshot on underlying storage system are kept. + "Delete" means that the VolumeSnapshotContent and its physical snapshot + on underlying storage system are deleted. For dynamically provisioned + snapshots, this field will automatically be filled in by the CSI + snapshotter sidecar with the "DeletionPolicy" field defined in the + corresponding VolumeSnapshotClass. For pre-existing snapshots, users + MUST specify this field when creating the VolumeSnapshotContent + object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the CSI driver used to create the + physical snapshot on the underlying storage system. This MUST be + the same as the name returned by the CSI GetPluginName() call for + that driver. Required. + type: string + source: + description: source specifies whether the snapshot is (or should be) + dynamically provisioned or already exists, and just requires a Kubernetes + object representation. This field is immutable after creation. Required. + properties: + snapshotHandle: + description: snapshotHandle specifies the CSI "snapshot_id" of + a pre-existing snapshot on the underlying storage system for + which a Kubernetes object representation was (or should be) + created. This field is immutable. + type: string + volumeHandle: + description: volumeHandle specifies the CSI "volume_id" of the + volume from which a snapshot should be dynamically taken from. + This field is immutable. + type: string + type: object + oneOf: + - required: ["snapshotHandle"] + - required: ["volumeHandle"] + sourceVolumeMode: + description: SourceVolumeMode is the mode of the volume whose snapshot + is taken. Can be either “Filesystem” or “Block”. If not specified, + it indicates the source volume's mode is unknown. This field is + immutable. This field is an alpha field. + type: string + volumeSnapshotClassName: + description: name of the VolumeSnapshotClass from which this snapshot + was (or will be) created. Note that after provisioning, the VolumeSnapshotClass + may be deleted or recreated with different set of values, and as + such, should not be referenced post-snapshot creation. + type: string + volumeSnapshotRef: + description: volumeSnapshotRef specifies the VolumeSnapshot object + to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName + field must reference to this VolumeSnapshotContent's name for the + bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent + object, name and namespace of the VolumeSnapshot object MUST be + provided for binding to happen. This field is immutable after creation. + Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + x-kubernetes-map-type: atomic + required: + - deletionPolicy + - driver + - source + - volumeSnapshotRef + type: object + status: + description: status represents the current information of a snapshot. + properties: + creationTime: + description: creationTime is the timestamp when the point-in-time + snapshot is taken by the underlying storage system. In dynamic snapshot + creation case, this field will be filled in by the CSI snapshotter + sidecar with the "creation_time" value returned from CSI "CreateSnapshot" + gRPC call. For a pre-existing snapshot, this field will be filled + with the "creation_time" value returned from the CSI "ListSnapshots" + gRPC call if the driver supports it. If not specified, it indicates + the creation time is unknown. The format of this field is a Unix + nanoseconds time encoded as an int64. On Unix, the command `date + +%s%N` returns the current time in nanoseconds since 1970-01-01 + 00:00:00 UTC. + format: int64 + type: integer + error: + description: error is the last observed error during snapshot creation, + if any. Upon success after retry, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error + during snapshot creation if specified. NOTE: message may be + logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if a snapshot is ready to be used + to restore a volume. In dynamic snapshot creation case, this field + will be filled in by the CSI snapshotter sidecar with the "ready_to_use" + value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing + snapshot, this field will be filled with the "ready_to_use" value + returned from the CSI "ListSnapshots" gRPC call if the driver supports + it, otherwise, this field will be set to "True". If not specified, + it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + description: restoreSize represents the complete size of the snapshot + in bytes. In dynamic snapshot creation case, this field will be + filled in by the CSI snapshotter sidecar with the "size_bytes" value + returned from CSI "CreateSnapshot" gRPC call. For a pre-existing + snapshot, this field will be filled with the "size_bytes" value + returned from the CSI "ListSnapshots" gRPC call if the driver supports + it. When restoring a volume from this snapshot, the size of the + volume MUST NOT be smaller than the restoreSize if it is specified, + otherwise the restoration will fail. If not specified, it indicates + that the size is unknown. + format: int64 + minimum: 0 + type: integer + snapshotHandle: + description: snapshotHandle is the CSI "snapshot_id" of a snapshot + on the underlying storage system. If not specified, it indicates + that dynamic snapshot creation has either failed or it is still + in progress. + type: string + volumeGroupSnapshotHandle: + description: VolumeGroupSnapshotHandle is the CSI "group_snapshot_id" + of a group snapshot on the underlying storage system. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: Represents the complete size of the snapshot in bytes + jsonPath: .status.restoreSize + name: RestoreSize + type: integer + - description: Determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. + jsonPath: .spec.deletionPolicy + name: DeletionPolicy + type: string + - description: Name of the CSI driver used to create the physical snapshot on the underlying storage system. + jsonPath: .spec.driver + name: Driver + type: string + - description: Name of the VolumeSnapshotClass to which this snapshot belongs. + jsonPath: .spec.volumeSnapshotClassName + name: VolumeSnapshotClass + type: string + - description: Name of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.name + name: VolumeSnapshot + type: string + - description: Namespace of the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. + jsonPath: .spec.volumeSnapshotRef.namespace + name: VolumeSnapshotNamespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshotContent is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshotContent" + schema: + openAPIV3Schema: + description: VolumeSnapshotContent represents the actual "on-disk" snapshot object in the underlying storage system + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: spec defines properties of a VolumeSnapshotContent created by the underlying storage system. Required. + properties: + deletionPolicy: + description: deletionPolicy determines whether this VolumeSnapshotContent and its physical snapshot on the underlying storage system should be deleted when its bound VolumeSnapshot is deleted. Supported values are "Retain" and "Delete". "Retain" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are kept. "Delete" means that the VolumeSnapshotContent and its physical snapshot on underlying storage system are deleted. For dynamically provisioned snapshots, this field will automatically be filled in by the CSI snapshotter sidecar with the "DeletionPolicy" field defined in the corresponding VolumeSnapshotClass. For pre-existing snapshots, users MUST specify this field when creating the VolumeSnapshotContent object. Required. + enum: + - Delete + - Retain + type: string + driver: + description: driver is the name of the CSI driver used to create the physical snapshot on the underlying storage system. This MUST be the same as the name returned by the CSI GetPluginName() call for that driver. Required. + type: string + source: + description: source specifies whether the snapshot is (or should be) dynamically provisioned or already exists, and just requires a Kubernetes object representation. This field is immutable after creation. Required. + properties: + snapshotHandle: + description: snapshotHandle specifies the CSI "snapshot_id" of a pre-existing snapshot on the underlying storage system for which a Kubernetes object representation was (or should be) created. This field is immutable. + type: string + volumeHandle: + description: volumeHandle specifies the CSI "volume_id" of the volume from which a snapshot should be dynamically taken from. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: name of the VolumeSnapshotClass from which this snapshot was (or will be) created. Note that after provisioning, the VolumeSnapshotClass may be deleted or recreated with different set of values, and as such, should not be referenced post-snapshot creation. + type: string + volumeSnapshotRef: + description: volumeSnapshotRef specifies the VolumeSnapshot object to which this VolumeSnapshotContent object is bound. VolumeSnapshot.Spec.VolumeSnapshotContentName field must reference to this VolumeSnapshotContent's name for the bidirectional binding to be valid. For a pre-existing VolumeSnapshotContent object, name and namespace of the VolumeSnapshot object MUST be provided for binding to happen. This field is immutable after creation. Required. + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + type: object + required: + - deletionPolicy + - driver + - source + - volumeSnapshotRef + type: object + status: + description: status represents the current information of a snapshot. + properties: + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it indicates the creation time is unknown. The format of this field is a Unix nanoseconds time encoded as an int64. On Unix, the command `date +%s%N` returns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. + format: int64 + type: integer + error: + description: error is the last observed error during snapshot creation, if any. Upon success after retry, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if a snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + description: restoreSize represents the complete size of the snapshot in bytes. In dynamic snapshot creation case, this field will be filled in by the CSI snapshotter sidecar with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + format: int64 + minimum: 0 + type: integer + snapshotHandle: + description: snapshotHandle is the CSI "snapshot_id" of a snapshot on the underlying storage system. If not specified, it indicates that dynamic snapshot creation has either failed or it is still in progress. + type: string + type: object + required: + - spec + type: object + served: false + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshots.yaml b/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshots.yaml new file mode 100644 index 00000000000..ec419163658 --- /dev/null +++ b/system/snapshot-controller/1.0.0/templates/crds/snapshot.storage.k8s.io_volumesnapshots.yaml @@ -0,0 +1,314 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/814" + controller-gen.kubebuilder.io/version: v0.12.0 + creationTimestamp: null + name: volumesnapshots.snapshot.storage.k8s.io +spec: + group: snapshot.storage.k8s.io + names: + kind: VolumeSnapshot + listKind: VolumeSnapshotList + plural: volumesnapshots + shortNames: + - vs + singular: volumesnapshot + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of + the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing + VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from + this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot + object intends to bind to. Please note that verification of binding actually + requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure + both are pointing at each other. Binding MUST be verified prior to usage of + this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying + storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time + snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: 'spec defines the desired characteristics of a snapshot requested + by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots + Required.' + properties: + source: + description: source specifies where a snapshot will be created from. + This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the + PersistentVolumeClaim object representing the volume from which + a snapshot should be created. This PVC is assumed to be in the + same namespace as the VolumeSnapshot object. This field should + be set if the snapshot does not exists, and needs to be created. + This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a + pre-existing VolumeSnapshotContent object representing an existing + volume snapshot. This field should be set if the snapshot already + exists and only needs a representation in Kubernetes. This field + is immutable. + type: string + type: object + oneOf: + - required: ["persistentVolumeClaimName"] + - required: ["volumeSnapshotContentName"] + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass + requested by the VolumeSnapshot. VolumeSnapshotClassName may be + left nil to indicate that the default SnapshotClass should be used. + A given cluster may have multiple default Volume SnapshotClasses: + one default per CSI Driver. If a VolumeSnapshot does not specify + a SnapshotClass, VolumeSnapshotSource will be checked to figure + out what the associated CSI Driver is, and the default VolumeSnapshotClass + associated with that CSI Driver will be used. If more than one VolumeSnapshotClass + exist for a given CSI Driver and more than one have been marked + as default, CreateSnapshot will fail and generate an event. Empty + string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. + Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent + objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent + point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent + object to which this VolumeSnapshot object intends to bind to. If + not specified, it indicates that the VolumeSnapshot object has not + been successfully bound to a VolumeSnapshotContent object yet. NOTE: + To avoid possible security issues, consumers must verify binding + between VolumeSnapshot and VolumeSnapshotContent objects is successful + (by validating that both VolumeSnapshot and VolumeSnapshotContent + point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time + snapshot is taken by the underlying storage system. In dynamic snapshot + creation case, this field will be filled in by the snapshot controller + with the "creation_time" value returned from CSI "CreateSnapshot" + gRPC call. For a pre-existing snapshot, this field will be filled + with the "creation_time" value returned from the CSI "ListSnapshots" + gRPC call if the driver supports it. If not specified, it may indicate + that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, + if any. This field could be helpful to upper level controllers(i.e., + application controller) to decide whether they should continue on + waiting for the snapshot to be created based on the type of error + reported. The snapshot controller will keep retrying when an error + occurs during the snapshot creation. Upon success, this error field + will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error + during snapshot creation if specified. NOTE: message may be + logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used + to restore a volume. In dynamic snapshot creation case, this field + will be filled in by the snapshot controller with the "ready_to_use" + value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing + snapshot, this field will be filled with the "ready_to_use" value + returned from the CSI "ListSnapshots" gRPC call if the driver supports + it, otherwise, this field will be set to "True". If not specified, + it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required + to create a volume from this snapshot. In dynamic snapshot creation + case, this field will be filled in by the snapshot controller with + the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. + For a pre-existing snapshot, this field will be filled with the + "size_bytes" value returned from the CSI "ListSnapshots" gRPC call + if the driver supports it. When restoring a volume from this snapshot, + the size of the volume MUST NOT be smaller than the restoreSize + if it is specified, otherwise the restoration will fail. If not + specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + volumeGroupSnapshotName: + description: VolumeGroupSnapshotName is the name of the VolumeGroupSnapshot + of which this VolumeSnapshot is a part of. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - description: Indicates if the snapshot is ready to be used to restore a volume. + jsonPath: .status.readyToUse + name: ReadyToUse + type: boolean + - description: If a new snapshot needs to be created, this contains the name of the source PVC from which this snapshot was (or will be) created. + jsonPath: .spec.source.persistentVolumeClaimName + name: SourcePVC + type: string + - description: If a snapshot already exists, this contains the name of the existing VolumeSnapshotContent object representing the existing snapshot. + jsonPath: .spec.source.volumeSnapshotContentName + name: SourceSnapshotContent + type: string + - description: Represents the minimum size of volume required to rehydrate from this snapshot. + jsonPath: .status.restoreSize + name: RestoreSize + type: string + - description: The name of the VolumeSnapshotClass requested by the VolumeSnapshot. + jsonPath: .spec.volumeSnapshotClassName + name: SnapshotClass + type: string + - description: Name of the VolumeSnapshotContent object to which the VolumeSnapshot object intends to bind to. Please note that verification of binding actually requires checking both VolumeSnapshot and VolumeSnapshotContent to ensure both are pointing at each other. Binding MUST be verified prior to usage of this object. + jsonPath: .status.boundVolumeSnapshotContentName + name: SnapshotContent + type: string + - description: Timestamp when the point-in-time snapshot was taken by the underlying storage system. + jsonPath: .status.creationTime + name: CreationTime + type: date + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + # This indicates the v1beta1 version of the custom resource is deprecated. + # API requests to this version receive a warning in the server response. + deprecated: true + # This overrides the default warning returned to clients making v1beta1 API requests. + deprecationWarning: "snapshot.storage.k8s.io/v1beta1 VolumeSnapshot is deprecated; use snapshot.storage.k8s.io/v1 VolumeSnapshot" + schema: + openAPIV3Schema: + description: VolumeSnapshot is a user's request for either creating a point-in-time snapshot of a persistent volume, or binding to a pre-existing snapshot. + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + spec: + description: 'spec defines the desired characteristics of a snapshot requested by a user. More info: https://kubernetes.io/docs/concepts/storage/volume-snapshots#volumesnapshots Required.' + properties: + source: + description: source specifies where a snapshot will be created from. This field is immutable after creation. Required. + properties: + persistentVolumeClaimName: + description: persistentVolumeClaimName specifies the name of the PersistentVolumeClaim object representing the volume from which a snapshot should be created. This PVC is assumed to be in the same namespace as the VolumeSnapshot object. This field should be set if the snapshot does not exists, and needs to be created. This field is immutable. + type: string + volumeSnapshotContentName: + description: volumeSnapshotContentName specifies the name of a pre-existing VolumeSnapshotContent object representing an existing volume snapshot. This field should be set if the snapshot already exists and only needs a representation in Kubernetes. This field is immutable. + type: string + type: object + volumeSnapshotClassName: + description: 'VolumeSnapshotClassName is the name of the VolumeSnapshotClass requested by the VolumeSnapshot. VolumeSnapshotClassName may be left nil to indicate that the default SnapshotClass should be used. A given cluster may have multiple default Volume SnapshotClasses: one default per CSI Driver. If a VolumeSnapshot does not specify a SnapshotClass, VolumeSnapshotSource will be checked to figure out what the associated CSI Driver is, and the default VolumeSnapshotClass associated with that CSI Driver will be used. If more than one VolumeSnapshotClass exist for a given CSI Driver and more than one have been marked as default, CreateSnapshot will fail and generate an event. Empty string is not allowed for this field.' + type: string + required: + - source + type: object + status: + description: status represents the current information of a snapshot. Consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object. + properties: + boundVolumeSnapshotContentName: + description: 'boundVolumeSnapshotContentName is the name of the VolumeSnapshotContent object to which this VolumeSnapshot object intends to bind to. If not specified, it indicates that the VolumeSnapshot object has not been successfully bound to a VolumeSnapshotContent object yet. NOTE: To avoid possible security issues, consumers must verify binding between VolumeSnapshot and VolumeSnapshotContent objects is successful (by validating that both VolumeSnapshot and VolumeSnapshotContent point at each other) before using this object.' + type: string + creationTime: + description: creationTime is the timestamp when the point-in-time snapshot is taken by the underlying storage system. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "creation_time" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "creation_time" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. If not specified, it may indicate that the creation time of the snapshot is unknown. + format: date-time + type: string + error: + description: error is the last observed error during snapshot creation, if any. This field could be helpful to upper level controllers(i.e., application controller) to decide whether they should continue on waiting for the snapshot to be created based on the type of error reported. The snapshot controller will keep retrying when an error occurs during the snapshot creation. Upon success, this error field will be cleared. + properties: + message: + description: 'message is a string detailing the encountered error during snapshot creation if specified. NOTE: message may be logged, and it should not contain sensitive information.' + type: string + time: + description: time is the timestamp when the error was encountered. + format: date-time + type: string + type: object + readyToUse: + description: readyToUse indicates if the snapshot is ready to be used to restore a volume. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "ready_to_use" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "ready_to_use" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it, otherwise, this field will be set to "True". If not specified, it means the readiness of a snapshot is unknown. + type: boolean + restoreSize: + type: string + description: restoreSize represents the minimum size of volume required to create a volume from this snapshot. In dynamic snapshot creation case, this field will be filled in by the snapshot controller with the "size_bytes" value returned from CSI "CreateSnapshot" gRPC call. For a pre-existing snapshot, this field will be filled with the "size_bytes" value returned from the CSI "ListSnapshots" gRPC call if the driver supports it. When restoring a volume from this snapshot, the size of the volume MUST NOT be smaller than the restoreSize if it is specified, otherwise the restoration will fail. If not specified, it indicates that the size is unknown. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + required: + - spec + type: object + served: false + storage: false + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/system/snapshot-controller/1.0.0/values.yaml b/system/snapshot-controller/1.0.0/values.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/system/snapshot-controller/item.yaml b/system/snapshot-controller/item.yaml new file mode 100644 index 00000000000..6429ccf902f --- /dev/null +++ b/system/snapshot-controller/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/snapshot-controller.webp +categories: + - network +screenshots: []