From e0a8ef8b3aaa76f59c7568bbf4f9d9faae42e6f2 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Sat, 23 Apr 2022 20:14:32 +0200 Subject: [PATCH 1/8] Create Okta OAuth Adapter --- app/config/providers.php | 10 + app/views/console/users/oauth/okta.phtml | 12 ++ public/images/users/okta.png | Bin 0 -> 8762 bytes public/scripts/views/forms/oauth-custom.js | 4 + src/Appwrite/Auth/OAuth2/Okta.php | 210 +++++++++++++++++++++ 5 files changed, 236 insertions(+) create mode 100644 app/views/console/users/oauth/okta.phtml create mode 100644 public/images/users/okta.png create mode 100644 src/Appwrite/Auth/OAuth2/Okta.php diff --git a/app/config/providers.php b/app/config/providers.php index 9a6b5fb50f..27f63b88fb 100644 --- a/app/config/providers.php +++ b/app/config/providers.php @@ -141,6 +141,16 @@ return [ // Ordered by ABC. 'beta' => false, 'mock' => false, ], + 'okta' => [ + 'name' => 'Okta', + 'developers' => 'https://developer.okta.com/', + 'icon' => 'icon-okta', + 'enabled' => true, + 'sandbox' => false, + 'form' => 'okta.phtml', + 'beta' => false, + 'mock' => false, + ], 'paypal' => [ 'name' => 'PayPal', 'developers' => 'https://developer.paypal.com/docs/api/overview/', diff --git a/app/views/console/users/oauth/okta.phtml b/app/views/console/users/oauth/okta.phtml new file mode 100644 index 0000000000..44c47c6550 --- /dev/null +++ b/app/views/console/users/oauth/okta.phtml @@ -0,0 +1,12 @@ +getParam('provider', ''); +?> + + + + + + + + + \ No newline at end of file diff --git a/public/images/users/okta.png b/public/images/users/okta.png new file mode 100644 index 0000000000000000000000000000000000000000..c66b273cfdc5618f207f022507c0657ee6a2ed5c GIT binary patch literal 8762 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 literal 0 HcmV?d00001 diff --git a/public/scripts/views/forms/oauth-custom.js b/public/scripts/views/forms/oauth-custom.js index fd8bd855d0..fabb2b17ee 100644 --- a/public/scripts/views/forms/oauth-custom.js +++ b/public/scripts/views/forms/oauth-custom.js @@ -16,6 +16,10 @@ "keyID": "oauth2AppleKeyId", "teamID": "oauth2AppleTeamId", "p8": "oauth2AppleP8" + }, + "Okta": { + "clientSecret": "oauth2OktaClientSecret", + "oktaDomain": "oauth2OktaDomain" } } let provider = element.getAttribute("data-forms-oauth-custom"); diff --git a/src/Appwrite/Auth/OAuth2/Okta.php b/src/Appwrite/Auth/OAuth2/Okta.php new file mode 100644 index 0000000000..70ea0d4b13 --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/Okta.php @@ -0,0 +1,210 @@ +getOktaDomain().'/oauth2/default/v1/authorize?'.\http_build_query([ + 'client_id' => $this->appID, + 'redirect_uri' => $this->callback, + 'state'=> \json_encode($this->state), + 'scope'=> \implode(' ', $this->getScopes()), + 'response_type' => 'code' + ]); + } + + /** + * @param string $code + * + * @return array + */ + protected function getTokens(string $code): array + { + if(empty($this->tokens)) { + $headers = ['Content-Type: application/x-www-form-urlencoded']; + $this->tokens = \json_decode($this->request( + 'POST', + 'https://'.$this->getOktaDomain().'/oauth2/default/v1/token', + $headers, + \http_build_query([ + 'code' => $code, + 'client_id' => $this->appID, + 'client_secret' => $this->getClientSecret(), + 'redirect_uri' => $this->callback, + 'scope' => \implode(' ', $this->getScopes()), + 'grant_type' => 'authorization_code' + ]) + ), true); + } + + return $this->tokens; + } + + + /** + * @param string $refreshToken + * + * @return array + */ + public function refreshTokens(string $refreshToken): array + { + $headers = ['Content-Type: application/x-www-form-urlencoded']; + $this->tokens = \json_decode($this->request( + 'POST', + 'https://'.$this->getOktaDomain().'/oauth2/default/v1/token', + $headers, + \http_build_query([ + 'refresh_token' => $refreshToken, + 'client_id' => $this->appID, + 'client_secret' => $this->getClientSecret(), + 'grant_type' => 'refresh_token' + ]) + ), true); + + if(empty($this->tokens['refresh_token'])) { + $this->tokens['refresh_token'] = $refreshToken; + } + + return $this->tokens; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['sub'])) { + return $user['sub']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['email'])) { + return $user['email']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + if (isset($user['name'])) { + return $user['name']; + } + + return ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + if (empty($this->user)) { + $headers = ['Authorization: Bearer '. \urlencode($accessToken)]; + $user = $this->request('GET', 'https://'.$this->getOktaDomain().'/v1/userinfo', $headers); + $this->user = \json_decode($user, true); + } + + return $this->user; + } + + /** + * Extracts the Client Secret from the JSON stored in appSecret + * + * @return string + */ + protected function getClientSecret(): string + { + $secret = $this->getAppSecret(); + + return (isset($secret['clientSecret'])) ? $secret['clientSecret'] : ''; + } + + /** + * Extracts the Okta Domain from the JSON stored in appSecret + * + * @return string + */ + protected function getOktaDomain(): string + { + $secret = $this->getAppSecret(); + return (isset($secret['oktaDomain'])) ? $secret['oktaDomain'] : ''; + } + + /** + * Decode the JSON stored in appSecret + * + * @return array + */ + protected function getAppSecret(): array + { + try { + $secret = \json_decode($this->appSecret, true, 512, JSON_THROW_ON_ERROR); + } catch (\Throwable $th) { + throw new \Exception('Invalid secret'); + } + return $secret; + } +} \ No newline at end of file From 8942610219b9559a0f8645af9eac150d3b1c0e12 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Sat, 23 Apr 2022 23:29:26 +0200 Subject: [PATCH 2/8] Fix typo --- public/scripts/views/forms/oauth-custom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/scripts/views/forms/oauth-custom.js b/public/scripts/views/forms/oauth-custom.js index fabb2b17ee..965296656f 100644 --- a/public/scripts/views/forms/oauth-custom.js +++ b/public/scripts/views/forms/oauth-custom.js @@ -23,7 +23,7 @@ } } let provider = element.getAttribute("data-forms-oauth-custom"); - if (!provider || !providers.hasOwnProperty(provider)) { console.error("Provider for custom form not set or unkown") } + if (!provider || !providers.hasOwnProperty(provider)) { console.error("Provider for custom form not set or unknown") } let config = providers[provider]; // Add Change Listeners for element From adce803d9e0ec79714dc72418117b2a417c4de30 Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Sat, 23 Apr 2022 23:44:50 +0200 Subject: [PATCH 3/8] Minor fix --- src/Appwrite/Auth/OAuth2/Okta.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Appwrite/Auth/OAuth2/Okta.php b/src/Appwrite/Auth/OAuth2/Okta.php index 70ea0d4b13..3277420a3b 100644 --- a/src/Appwrite/Auth/OAuth2/Okta.php +++ b/src/Appwrite/Auth/OAuth2/Okta.php @@ -163,7 +163,7 @@ class Okta extends OAuth2 { if (empty($this->user)) { $headers = ['Authorization: Bearer '. \urlencode($accessToken)]; - $user = $this->request('GET', 'https://'.$this->getOktaDomain().'/v1/userinfo', $headers); + $user = $this->request('GET', 'https://'.$this->getOktaDomain().'oauth2/default/v1/userinfo', $headers); $this->user = \json_decode($user, true); } From 5d86acf15f799a844118254a50dde02f1132983f Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Mon, 25 Apr 2022 15:45:50 +0200 Subject: [PATCH 4/8] Fix image size --- public/images/users/okta.png | Bin 8762 -> 7632 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/users/okta.png b/public/images/users/okta.png index c66b273cfdc5618f207f022507c0657ee6a2ed5c..61941c58dc636896581402b159294609b9133372 100644 GIT binary patch delta 7152 zcmV004R>004l5008;`004mK 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 From 1bca3b3ca851b8026375e49c98ca381b815d629d Mon Sep 17 00:00:00 2001 From: Tanay Pant <7481165+tanay1337@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:23:45 +0200 Subject: [PATCH 5/8] Fix missing slash --- src/Appwrite/Auth/OAuth2/Okta.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Auth/OAuth2/Okta.php b/src/Appwrite/Auth/OAuth2/Okta.php index 3277420a3b..61c710e8ad 100644 --- a/src/Appwrite/Auth/OAuth2/Okta.php +++ b/src/Appwrite/Auth/OAuth2/Okta.php @@ -163,7 +163,7 @@ class Okta extends OAuth2 { if (empty($this->user)) { $headers = ['Authorization: Bearer '. \urlencode($accessToken)]; - $user = $this->request('GET', 'https://'.$this->getOktaDomain().'oauth2/default/v1/userinfo', $headers); + $user = $this->request('GET', 'https://'.$this->getOktaDomain().'/oauth2/default/v1/userinfo', $headers); $this->user = \json_decode($user, true); } @@ -207,4 +207,4 @@ class Okta extends OAuth2 } return $secret; } -} \ No newline at end of file +} From 56c184eff3602d160860916cb7e446d056b606ae Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Tue, 26 Apr 2022 12:15:42 +0200 Subject: [PATCH 6/8] Add field for custom authorization server ID --- app/views/console/users/oauth/okta.phtml | 2 ++ public/scripts/views/forms/oauth-custom.js | 3 ++- src/Appwrite/Auth/OAuth2/Okta.php | 19 +++++++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/views/console/users/oauth/okta.phtml b/app/views/console/users/oauth/okta.phtml index 44c47c6550..2459e1543c 100644 --- a/app/views/console/users/oauth/okta.phtml +++ b/app/views/console/users/oauth/okta.phtml @@ -8,5 +8,7 @@ $provider = $this->getParam('provider', ''); + + \ No newline at end of file diff --git a/public/scripts/views/forms/oauth-custom.js b/public/scripts/views/forms/oauth-custom.js index 965296656f..67fb213215 100644 --- a/public/scripts/views/forms/oauth-custom.js +++ b/public/scripts/views/forms/oauth-custom.js @@ -19,7 +19,8 @@ }, "Okta": { "clientSecret": "oauth2OktaClientSecret", - "oktaDomain": "oauth2OktaDomain" + "oktaDomain": "oauth2OktaDomain", + "authorizationServerId": "oauth2OktaAuthorizationServerId" } } let provider = element.getAttribute("data-forms-oauth-custom"); diff --git a/src/Appwrite/Auth/OAuth2/Okta.php b/src/Appwrite/Auth/OAuth2/Okta.php index 61c710e8ad..7b1b0d19e1 100644 --- a/src/Appwrite/Auth/OAuth2/Okta.php +++ b/src/Appwrite/Auth/OAuth2/Okta.php @@ -42,7 +42,7 @@ class Okta extends OAuth2 */ public function getLoginURL(): string { - return 'https://'.$this->getOktaDomain().'/oauth2/default/v1/authorize?'.\http_build_query([ + return 'https://'.$this->getOktaDomain().'/oauth2/'.$this->getAuthorizationServerId().'/v1/authorize?'.\http_build_query([ 'client_id' => $this->appID, 'redirect_uri' => $this->callback, 'state'=> \json_encode($this->state), @@ -62,7 +62,7 @@ class Okta extends OAuth2 $headers = ['Content-Type: application/x-www-form-urlencoded']; $this->tokens = \json_decode($this->request( 'POST', - 'https://'.$this->getOktaDomain().'/oauth2/default/v1/token', + 'https://'.$this->getOktaDomain().'/oauth2/'.$this->getAuthorizationServerId().'/v1/token', $headers, \http_build_query([ 'code' => $code, @@ -89,7 +89,7 @@ class Okta extends OAuth2 $headers = ['Content-Type: application/x-www-form-urlencoded']; $this->tokens = \json_decode($this->request( 'POST', - 'https://'.$this->getOktaDomain().'/oauth2/default/v1/token', + 'https://'.$this->getOktaDomain().'/oauth2/'.$this->getAuthorizationServerId().'/v1/token', $headers, \http_build_query([ 'refresh_token' => $refreshToken, @@ -163,7 +163,7 @@ class Okta extends OAuth2 { if (empty($this->user)) { $headers = ['Authorization: Bearer '. \urlencode($accessToken)]; - $user = $this->request('GET', 'https://'.$this->getOktaDomain().'/oauth2/default/v1/userinfo', $headers); + $user = $this->request('GET', 'https://'.$this->getOktaDomain().'/oauth2/'.$this->getAuthorizationServerId().'/v1/userinfo', $headers); $this->user = \json_decode($user, true); } @@ -193,6 +193,17 @@ class Okta extends OAuth2 return (isset($secret['oktaDomain'])) ? $secret['oktaDomain'] : ''; } + /** + * Extracts the Okta Authorization Server ID from the JSON stored in appSecret + * + * @return string + */ + protected function getAuthorizationServerId(): string + { + $secret = $this->getAppSecret(); + return (isset($secret['authorizationServerId'])) ? $secret['authorizationServerId'] : 'default'; + } + /** * Decode the JSON stored in appSecret * From c7540b03f78755bc89319df708ac0600894c751f Mon Sep 17 00:00:00 2001 From: Tanay Pant Date: Tue, 26 Apr 2022 16:27:17 +0200 Subject: [PATCH 7/8] Update image --- public/images/users/okta.png | Bin 7632 -> 6945 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/users/okta.png b/public/images/users/okta.png index 61941c58dc636896581402b159294609b9133372..8016323b20dd17c5c34361dc6154f3bea64ef231 100644 GIT binary patch literal 6945 zcmd5>bySpFyB|WNyF*$)ddPtRr9+UEk{V_P7>OaJkp}7Rl131e?vxZkKqN#^knV20 zgP!l4^ToYu-TT*lXYJX~{_W@Yzx;xkCX^-X>kDn0D+3Kyf$iv-3)9j)VISz zk}hh(w31Pm0RY~{;9Wv)q1H@LWo>l;!1FEu;1>h{oTDJWRRF+M003Aw2LL2e0RSq8 z%qA@`Y9kMBpkk@64!DPsu>n|UqyP+*gogS6&}acS)=&~a4~_0m*%VC>fR4g$0=t-Z5^yA;bW4GENd1M{;m{ZetUkzz4W*JP4II>DJl`2_d`Sfp{8 zn3%v$FiQz-dBs2IsFf6pwTp{`1V6uB!#skE~Gn@w-DD z_yzd{`2Q0L2K|%c;Ob=iD>N9CA8re`gWJ0}qj-Y`T2{41@0@^-WH-@21=adARe z{OR(B_zQ8pNs#X*SP1OKDJs}swfvnT7}XF7IVU*81?i-VMA}OKIu>C5e}(@l3K#~J zfc_@@%?`@iujc5$9se2q$A&FJ`meJF=D#U83i`|JjovTxpDlp-|D!wbO(`S{wBgQ3 z+g}MvgG9mn{|5eL{x?Cx34tm-hXY)S<;JC}6BPdUF8wCll;{sHx=2^3^^LwX5X}E?*k4io z8}V1G;V@~S0P5}#5atD<%Jv8UA6x$eTfyB$1ttx%gbD&hK`>qckcc3!uqD)j7a|S? z^1_86Ksd|-1c8fM{%Q3$<$tiLXn`^*0u%v?ihu-#1;s!j;sSrNe{KFN`G0eI{=F-| z*?+tFf3@p3ih8t24rK4KS85@tV01!Bk`?yFkvd7K_#-&Qs`! z{mDF5%p*?Bu-}N+X0q61{UGzCd5pvGoaYOh@ADS7OP`&KIj<3^mF$&F=aJSOj=pa% z7|5{0k;23qbSmgFY8Yrt(n3LiSO9SjqQhzd^A0IsL5Sc~Ewe)o{egE8TFwhHcV$4> zi10TdM|2__z+M`b_uWU|m{GKGzma!1U^c)zE85*OasN-rOwfbb&}f(26iXDn)VM_(e23gHj)dc(8tOTH?i?y zy_Gi)NdHueq_<|sNqx8CO;H^i$R#R(SFSC@%ftj@fgZbp^)HIjt z^jRH1^vnLO_pwR$%=QL%r^KISZuZzjF_RbfEn;4r)%KV0nY=VzSOgzKbj3xz*CIVyDz~ z9+c`N-rx?`Zd^<-(gsol`tGkgib~3X;s?9TE$}G?T-f^}GradR6+^1;MB5zT;4N-1 z>E6Q6I=d{f=NZyDNI(+~MwF4J)*Tpr!#N=tV<;}$2ih4+XIC2wFd50Sui_M?C`qJR z-n-`Be#la94RqyIj}Vi|5Rs&;lc=3O@NO5L?!nA&b0c3}QEHiuyydAEz|%?h1u6n^ z@wVkrMia(g=mx*irgaW>S<|&W%YyjX$8Vg{2%_&> zGlZ9?4)q^gR4fDRj?YGTZ?|b?l_fv|{2`D}GvXcy4Od+S=&)>tQ~yrz^~2Ul~tW8|xtaY!Fs)0?HNgwxJ# zLY_f&%;F$ELoEZuI^FA_eixCX$8v>NJx#{oy(JN4?Ox&hP0%!sw|mG-=U2=Nlo7aN zTS61-U%$G)Awc?)%1Vzf@p>1~?uL30xPjV9a03f+`HsL)p+Js%Kj$8+Lk~?zPkD z>;KTO;o~2Ex3nV)VH7I?&HgwJ={~M`FuQ% zs5iAN76!XaEYO4NLAUAdtvl>gZfGitS#h2i&$?!A49ak0D~d=haz9RUKbI!LFRUHR z?OmhYt2uQ$7X5C66hZfRfjwZtHWbMM-7mlw+cktXY(8X*K#VFO_U3cSxSWdQq}-mRS8VM~1gIJ%8b3berUIdS4CP?vdrs z+@nk#jK#6}X(D0;x|!ePWzX67+!szWgKbU1@rY5}*s>20Ci)<`@bc z%Hqvc{@OiSh$?!t`n7Zg_v>Tr3Vu0*k||QkbDn8~%BWdEzM{z=?B5GN*u*7dWBPO7 zijMNS<5Up$eZkCT3Pc!DqPbLKo9#NQe3psc>@Hs&v4V)H9O>(>*Gm`Qr~fb_ zB+j4U44t}+BsimyV@*p!Ho)gnN|@g-D=sB!dxWkIK4ExLbW?^(G-1Io)rYR|PFW5OY52;wGvnWRB(V zz&6GRp6nI6nmS#)DhhH6sa5Pj40i1dkb3;ISI2vnwJJ|bWirvH6ZaJ(|Fmb%bZS&! zGN#YIQh+9k>dV*5ri;+G8~un+wZZti@E)3m@PmgBEwE@lce0H~w7kF#!)%XCb_*+A z-lAA*@LfWOQoUDGO=cAsJ|z6!{L`0sWasJ0m@L8s!M=DF?Zxf5n7%O3Mr!JKQi(JO zlQff7eV;v?-EGJ<^r)xqB4y!KIGFDpf|3$Evio3dldenOY$lX4z^F&0H2KnLttaRs z_jgCOeDuVs9FDn??&#K`Q%X* zLed1TV$azbk7u_d*#{$lcP~7L__w{96fJ4E1NZLuKpRf>y$i-zY@;_hP8cjZu8-?z zFAJJ5^plIGxL%2BlxBX+_7}AEeu*_PuiDX6cvhq!reBC}hKpCfN zOG} z&Y78{M(TVBbiWG3$`_huUsXsh@q=jsC0{M)8OA2rmcN_g+6#m-01i%c$hAMe^i)?= z!s`R=i3jX!L+_{4>^yEE?h;Ad;T)`rAKIV&@frj1*oDMz7>XG^_;cH?cN|&&O(LK% zM>S27U;K$sZ>U+GAXZC}&GF%Wl;MlIH8LU^|CV+)b4=vK5de%3?>a-UmI@xm8TVmV z;BUM2HE&8q(_~^b^pjE$KV%CAm>4yiP^dpfFLT-R3Asyk4BKIfK2k+2nE+LLp19!; zb8w^c$(UK{RXjU?9Pap(pt^fdVfuj~?sbe!pM@pF=oMSiMlp#CMV);>VWdtEO{SFbH+|g)A)p8z9MvM`UVDlG zW_W4h(x^>|1B1YDCc;4e-G-~}yZ0=kh%6k(E=&7YsfGQxJr5H;wYn!e`QJbNMoX5L zO=>W4*_=!&oV6w-rh5A(+JQVghZ-cRHW+C+@;G0^ZmC0eNu|7 zGM0(*Dt&u{?z;IR8a*_xfDLNQ%cTe`_@UAV_;6lzmc`Nu*xY8pMw7zOhMLIM__4L@ zKtPS-5bO!<{WJ2C@Y0g1l;TrG&C;qMXXcWe@3}=;Ad-uQx3;@sI5p1*KJK^dG7I37 zKXp(r6g_@^B3(pQH6#xW?w`S4%wmnTj`u z+j|}=UH@sdp*SaT_0yW~rQ5h)*4Kzo?%@MW#nE{mKP$8QF!fyM~pCOHjtn!flfDoj6J(N%4wDVcX zG+n|+J;gbIG&CwBr-sDpg2ma;G%Wej@;#vKZ3Qu6Kw|GOB>CG$^72A>7bd;+dN@WSN`u#%ZC9bM?3ipi)ZvOgHS0W^MX0TeZ4??rEzC?Kh6K_3fi?)+gsg!d9f8 zc76f3e(1rjSh_n@p2c7r^FTA)Bl@^-AHSucn&PW)*)5|*P7R`4(N^wXT@*-oC#uC% z%2-bc9?zEFjf8l~F*ae#av*=H4;M_8TxgdYPF2g%MzVHTZR2F zw{z-d>#(111i| z3MTLg@1vM+4gEa4aPB?!IkacQC-UAM#HvX*UdG^Qckm!$(U3Fmv9Ey_?WFzp=&T*n z!IB4t3y#?;S0mlrjzX^|qthFPw& z$qIj9V6J&a$P@yO@F3MnRUk5VG!JqlnDp>mTeJyl^M}~qYj${F$Ey4ivhnflldKg^ zEwPZ^APjoc+l{W4pK)Szj!W^z#yW=PWQDfm%3*4|-=;E28^aN6IZj|BfUU!!{UPXvlKZ@xjeQjbK ziS#)VUw>HL*sff=m^>AhpB+5wyqeFV5eQ(;jcM~FM|!i8-4f<>(_2~2_5CcyQ%S{s zn0uA9!n}Qtb)t3n^6>5I11L>y%XG`L_wg&7*%~9GB~O(kN@T1jHtO%ltNVlo6Ryns zfC5xx&in5jk-W%u#VRzp5<>m#dl=fJ)wvk0C(Zp%e0p}mU81PmwxF4xgOjLDJ2d6F zR~MVB_txNEvA&9#K>rQ>Q~HZ<9Z{2;cfin$gkKVykapzfYdyY*70Usx)5>$XiHxsi;+ z2fT}2J=c7kg4Av4Y=^L?^BMy4V-+@97xgavpySGS6kze5x^;yuWfn* zQ;oC1863-l&HgM~JU#N_cwJwA*CQ>8yw-okw%yCR5U1?xq4u@*-cg9}Y$IHZpkzF; z(2+gHKym`M&-;xbu{4Ti>allLb5v-Q8?w|gH7yTh<4fZFS$T)Sx-+4DHpVxE^GL)m z2-d*4CCa`(ZO|NISTRa z>}kxpCH*&+N(FF=@I+R(d$#a&VBlpZ!+ax|aO-(iCZh+!M_lcrsrLrvozu#MDaQgT z1}o3EHTj4g?AIlkfca)&veH@OHR}8R z(8-#hT|D&E9#LMubV~kyR*frSudqA2^)}9N3JPo95tio3)4d5RRxuuH+;-X*qF)$~ z9A|}QHC9ts+Ny+&wc9f%H&kQDv{-_A!z?+1uQyDiq+z8`ByS59;? z^|PkO2-deNKh##PRLf|Tsb&;=fBqOoGb7I4^D;o6>uvB=rbX)`H3g6S97065C0@%$ zM{0Jj#t$Nv@)su6oPHg)R3GWbu_pX1cn_eeuOh}CCL|pJv%z|znr+Msp~RXyJV8;a z=f1U5{;FGQ_c}NF;rid3o$nwuLoy< zuZ)*k(9%HWq;Q?KczLQqu&5vxG<7Hmdv!%*^hc}{9?y0aqa^M_|8hpd5gyyBw=jGO z0!_0?b-S^Y>qr?-hn~?@L&;^`L9VnOeY?PdQH{h|@pZ9;yTQT>rDvu6+ab!3m%{O} zb_;Pu*DdKORTU|VIq!vpD^x$#Om2`~J$dd0xlJ*)97zg#OQW6;gO6*S*KxpAkwOR> zPElNZ=zmq+4@#(CbmmJJkRI<}c@L%4de^OhK`NMRn4JAJXjY_Zq_D+pU;f_M#0PeL zSaZI!>o%>*#=7Nk)F#>1wa%?~IAl>T8E5!(hYwy#=Cs90jM7q)Ga{G(@084y6aOE* c^t-(8=w|mr05^R9=C2(Ug-7xgvgQH*1q81Y+yDRo delta 7223 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 Date: Tue, 26 Apr 2022 16:30:35 +0200 Subject: [PATCH 8/8] Update image --- public/images/users/okta.png | Bin 6945 -> 7408 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/users/okta.png b/public/images/users/okta.png index 8016323b20dd17c5c34361dc6154f3bea64ef231..bdf7907f46be98e29e0da289e699d2dd1b2421be 100644 GIT binary patch delta 5982 zcmbW*Wna^c+6XDS0SUPe{lOfryIBK*b$}B%Gw7LJ&!asE`cQSxm?o0&x<9 zIZDbP#ALGg2?v27`IcQA9ELR=b(N>Vxcjyt!Oy0f@1L}`=4pv%BvKKmI`L&imPT$^ zKK=alYufE!zZZqF;Xk$-o9(T!;iFdJ=$Yr^pKGvgY@dxhYJ?~fN+0tj4O5job*!ezmWX`3oW5%wt`Hx*_VN4tn*gjJX?uXJm3?k=c=hDPu ze`-qJ$ytzv6-Nq(?YDc?32C zX)c`qyJbZV%^rdK@cR%n-pq1EvB8lo`gp={RO5fffd8%`A}m~_<^#NX?K1H478_*6VN_D50=T8>qf|RJws3MPzBkJ%_ z^jAIQih5~lBV)El2QRssCc;1&5e`sO$p|FzY>bR1dhS6{qd zDpY_ah+QF$8KN>22DS}3D>`a8@4_dPODWi`9#4C58^6`A4{?cy)vyjRK1hJHbW{>$ zX`%kc2MH@Xs*<&}eP2mW=|i#VdXE+sygB>GH%0x{uC-*1F3^Qw$#Oa-^gxMr4dsli z0Xk^MP2TV+7{^#2TtDpaSxJEPN?N5@4>96D+z@*#076)^9APo~15iCiY}RP?BoCAF z3)xq1sA;1F+Uk&C4b8X8Dl^Z6;5IO@XN#v;CJj6$JTMUJFpUns7@8!?fXd;9vbM$l z6VbjPv z8<&C^F=fydDZJ!Sm)h^1iGn!PC9%iLx_zd{TUw=#>-D|M_Mw zYjOsk1d<}o%r|B1ITbI2>#pxl$TFy`Dp9olg8j8A9uhozr#eb88@^5LC4bddb+uyo z4z+6HonQIM5BiP7af`8AcYJpV^7kj*l3=uSqVGhct28e4P(6>749y$5k|r}%>>Cq< zhN2&x?Rf_=Gcg8j9HVN(DkpmY;=Ywwky|rf!m2^F#Collp;jt24YfD((UZ=Q6^Xcd zlSh}ht$mDoWogKq$g;ztb~!15tv#C9!JA~#+zX+^JcB6N=19pj#d6(f-boH0toAC{ zRHS*k4jOK6t>dg{6W@t`cyd*L?m!giS-Ihm88>D13h{(Ceu4RjOuiQ|9^btPkh7GO zJyI>T%iQv7p9nDc@NyGopsny3!|m{P)F-H&R7jCyh91|#GAUhP@?y}^TEF1bsV_Z6 z-R~hEjne~_bVNzLm#yGuq!=RK+$O5EoaeE^X!; zHb)xC*r{YvKFMZtU3dy4mxjz;jHDZ(Dm7ZQ4Rl2Jlwaz}opDrmCj|xlJtF${MivBj z=0#?fG1|-=I4B?fsVE zpVDDiL0U0qe;yhd$JAyhq{(5Xh(sQ{`k?wQlsu<1gsnlsY;37pR1Te9_p=Uc!|C$J3opkA92uolNnhN%_^xNq_@g6cDIvk|+ zT9G=BNNH#0QU>mZ`_dmvn-k7|^%c+3)PxO%KD$_|kvN>37gl>~Pi=PJ06VcWum0Fo z7;9tH-zXH)x-%wLKU~mA=+*u-scDw!csgE;06v3e34`whFI;tKws@ni>9amnN+BJ;${@`JYN3(NAmCIf~3PS{23NeZYHs^eiO3Kxn_~DqlsS0SAonm z8`B$l#?44}uGYCdo<^7-j5@?!!q%UL&u@aBa8A?b`l~i1yPLYVjPl}}W8?kIm zECCKb$l!S%wKg7(!MET_yhXi(|M&!neMh%z#?lu#Bv+d>c7j*CU%tr%d39w^6FV71 zY#qc*jiGSL?T?uhkmfml|A^y{T?jwrcLR^zPR zWyC!js_ScSHH-G>Z@)S4kot|90Yrk6_OFQWCls?&Qk>+kdrS>qfscJBh|9Y&5Yi=6 z9G(Lc1so`306CvL7jb`cp*A8Ht=L7Lq?H|bby~di9aMGK5EaA~JScDqet*hLP{w}W z@lQVG*Kg7G7hu6{q4~3whJyP956nM!XqB?9^tox@ukMF=z)(iyr*i^B zx|Cj#dvwS!kQ0t9fp- zR?|_U!X?N*4iD8L`utP?Lp<}38?Zl9!4T0KhBKC$LV3M6Bl)49k;Y2lQ|kPSQ4KHj zi&|2!i@5`r&EjD5#I+l{&>sXRXG+oJz;{9}Q(8P#0y8P*L> zp%=2=pOB>e(}lAtb}xzbf8J4iFf>vN%#lnHFw7{eafg3EI<} z7xRPhP}B;c1Oa=XsvLI-KZYYOGeq)zaW^h(S=S8%y-bkSP7t8UpI)b&*>^MmQT&-C ztoLX!rI|9f_h&i-9jFp;74zP`qN0y)%KD~{Z$ieawc+hzFhdf`qCA0E*+B;?tRUqe& zW=3UQ0(+2Kc!u%*dQ109S43)~gC3PQ=*|tE>T1}ol}Z^n*-TxZ@wjR%ZO)DD_|dv) zG<9o|tun+_FZ$tY&mNk;m5FDOfVadeG7r;sU@Gb!>UQZ!3FW4$eV^22Mr z&F@o=Y6aEnf>O8fT~R~f5*=~_w(jbvjpu8*k1xp^$tWJmWrZ3fA+oLv%b7n=)1;MY zw6SMzfirYPA57M~>T>kYx9gF5l8+8rN4zQGUqb_Eo{R@%9OAf^@dFJE{E@z`U0$I_ z^W`TKnSpfPWoW%q!X)N&lRxHd*}}CR$R|l&zW)858~Hwu zCsD-&cT$u-W%mj>;;HQ=8Lc>*c2)mv{%BGH1K{3&QlEbZGHSEn(pH3x6FW+9KSCqryiR)#cLr#VUgDTE zajh5#u%x2y&K>_{*h(KmP%gWNpKbf6A^Nxi=FHf^J|$m zFR3rQ=A_q}FBI!+cVM~0^17^=#no;6UL0Jx#_~mrOB6@H{Ddm%*of0qH=h)-3X`q< z5yGPwQAL*>mYSj7EnsP3vYd+b!T^X;KhBXN-Z2Qn3{wRWZEBhe3z5e&SI@F$Q}g2s zU$?IYB|9b+4?h$KpiG*(NwlbH7W6y5l;cU+%HaFx+gp%QuTAEL7061^S_fsrG3Z{` zPp(?_;RF#kCzJL6iUj#*-S;;+T%Gb9%N=)BfQ@zb@wXkWpF=ty2MaNk)dOwxsoS6bX?p2O&luEJ9oMLp z&`3@Jb5{Q0r{lES5rLvx_w&p4343)iN_-AO4+~TZnj4N;8Y3%GwO6lt$QhFZqyo>a z8!%J@bPMs(mOgx!pKycj94R8s$^`Z2*$sK3$EWY`pA8lt(ZiyKUd!`3!wY&zBr z{(Ob)w_zIUh`ZgD`3(AzvV*C=gb;}G2MhI0OSrwRfb!Va+Ppf>`~vGQ9;gVg%^}2| z{35l=-M9pz?eo+X$cWbrO4vpaQE zX5)@&!yqJgRyN;AR)4(6MfWJqU$x+4dfZ6;yw?Im3c#3Yy%8~%YB75H%6m%*lB4c; zsnwJ@%Cb^EcDQM4V5)vkDW>!F#LRI^ClibSRQo=E+Z74O%(-n+)md`U=Tc?-lU}%3 zV?4U@Th@@J*G)9r*ah=7XtRBt4cS}5a~N$9wH0Lk+^g=*tk~3i_E@GrK8};&nsbIq z!XgsCQ3;&TTTNQrm9u}HvR7YTlc-Dk5$D5NaU$^3^3cQ;1-{jaTC9 z7yhlxmw`j?TPde>cz90*1f{Lom6QQIzTuhWyk!dW%y5=m)N~rjiO8Xj3xC?ZVPU(7GQO*A03%n60 ze#W+nTcWDNt>-fi-A_jUX3--aq!b1;kpXRO!ELHS85PA)8qzHzF@H&L?P}>=fqiY9 zlHkO}g89{gEQc5H{79-=| zg-5CsnZ}nb#FP2*iyT z?e(S=ULS39EOliH+I4@l{DN zG5UW7Ajh#tz|rf#Z_9WaihC|eemWjdu&YDcf4*BL>ZZ!GXjS@U;MZr(YGBzkYGaf` z^n^o3h%hfK>YGnC`ucDmldiThOO};Z39mo7lKXx%q7~2l)904SQH57*OLq7kNWhIn z>$Y;G`v8L9PUu5hlD*bdyg|<&84dO~i;}=)WQf-@#H+a#9S3=CV?Cpz6@=Wq)>N7k zR2M$DHt`X0K`hAl{OxrJ0FCSF{8aRfTe~tobYcVu13jj*%bZ$i9_1T-=s89qDl+q> zrf^?2#FgA{pyzckbJ7tehX*Q)S4mbO*y7?gSK6AWxmL-?aLg5;OJ`d7KKrJ@?z&{0 z;GU{({@d51R&*5*_?{+a7SwsESi;($vu6eKIjp zmZu6mfIRi&EF3hQ;CFHhi45-zX5*F42nj&`IGqk-A>>)He7>JDAFtc?Y?T2V$K%bY z#g26|qN7Z$5}W^7tY|{Q>C;7t94A7f=L#^qv&O}AJJaEUTT)}Uu4Mbe(?x)$SpKIb zR3q8Yp$mTBnd2yc?@TX1Hou;`Wh@J&S~>cq%rYPG5dBE06nc6?oyn^UM~%rSOJ<~& z4H)-R-Npx2zMNZ9s&@4h$k7Q6d=Y=a_Mo@h&M4MMwO_D$!-EP$*{Pjqcq!U4keUz0q+a1x3J=pl4*OlC8VBStic^rlVn~UaRU5{eMKlly?9C delta 5515 zcmb`LRaX=YptX^b?oKHI35g*FM!E&*l$0UHp@#0EL5A)|x-wNro}T>b)35379mT z12Xh!0^rZsWFw6n@>zS0v_c8YDbFk=kXNOSavKz!dkHVv#d%9$ICGW>Vm^st#v>+t z(1kLy{fnHNju}qld)`0nf$&bR$AFWERllisJ9#@faJQ+h6VBoFFO1|k(ar#p1A0|- zS#^vTucU;-&=Sx{@*%x;8<Ve%J;5c#zG@pp`Q{ zWUiiI&>XNh%n(+141ITxPNJLET|9a^zhXWzVMl)=H`GP}NM}e;m~3a~$NsKh8Im>E z5a{|5Y&LaQN4IKtX>OFBP*enUt6>qx#CD4IIR-YZ%(NEW!=D-HzoLQU5ZGlTVJa zKARqO0_o0vc`P<^*UG=pE_}@zPV5$AC(0|c6#^iLiD3b<5M9~HdHXLwV#vQzoHMq< z(Z2pO;xZSKIo~CWEzm}`y?IF-XtmUMS6jEw_KLY6SA{|-r)hMoh+?0H_Hmyfw^s=L zapY(`A@z;L+1Tl#xM$AcAT*YRqHGw2`Eb`XQqFHyV7`F@U0dtjkCgA=lbfjHgi)nl zkR^bZ&ID;V(B2GOlB85DougdJ^ZOkz*B>`|i=z4PdQYL8 z*hAcnV8N~yX7gC9S^b+NjmEbKE#E;aw<+gcV5{#kM}1v~;Y-es;9NF$$77%F1q8Z6 zNYrB-dpkdhA&vHVNGDf02ifCYpgI?g`qmH-qun2PR z9?PA0Cv-28UjV`(Rb&~>7sl&w+#Avv#xTH8u!@ZnX%O;dk*B#+n<&jXzFgDRdH(8uM^D(GmL7a=TFlqg zVm?99I(v2}=3jc+Il{u=twtBM;?3a^!>3(qIlb9O@*~@~W(>+|yk&CnxR-q}WD@|x z!ZZ`Xp=z2~KYCVkFx3sKZmgit#nW2qomvqyjTna0w}0EpO}_0rCgL5_ zz$^>nH`X?S?9dTir4Yr$t&bCBUbcO&$hrlIVfA5F_w@Q``Dg@rlk?{Qf z%8K_lLgzp-IjPw#e&1`d5ZL8}z;iJx#@e$Su+}Imk{w;50oh5_dNSntrib3pa8nb? z|90}n)`_SUvlzS_h}^u67`Sfy;0Bt&C!y|1$BmgJ1!-jl+Z`K+Cn5Fd4bC!+G}=2+ zCE@P#8w{Wp;7j^9`z|MS2U;p(c3d~6NROO@FzBIrI}a7NA8Ct_Hw&x;AfPK~Ww58tyRAn<8r$l2PzM>&w|AE7^bl`S9Z z7<%`s9wz26F$T7$)UJ|2@|P6ZY!BrpcPR}8`LcXNSw$N+)5oNbOXupK9-rJ`mO&Mo zaBR-Qxp~Bn^S_UBy>Uz2u!5#O$f2MHj=~=vk?ZhKca} z70UXk6~0v#nV7NfXiu@q8J;=RCrO{o`$0+M117Auk%tP&f4RQ>whqIPi))@ zgZ)5!Fm3quTbHsKhiGc0PgH90fpI5p=!G!h#i~4nm$oPCb6(zmOh&ru-j*1Oy(;1z z^}#xW+K_sN7cF~Pir&xHI<;@*jmj6vsP1{;OGb6ENJ0M6g-wpXB|o8w$$6N;JXmqD zeoU^#iGMdNpo>5vM7h>hqeGqtQspiOeb6fi%HplifY^b=*G&x%v>0TGpELZN5*B}( z>}I|A7(;kRE6fCCxnqJN_zOA&CqT>^}JNA*eQig^4Ew@s?+BBI{O26T(4zU>g za`8?Z;)GXQJ28xYZ9{!f)J=Et9Q*#X;mPh>a+>qfh(lq$bvcBD>q9>eacv1p0;dm- zDMt9hknq#uE$XQ>%r&A(X%I5je==khV4Y;{E$i*tEa<*k=))U+|(Zdt%bOqAIqJ zDEC?ex6rMr$JN!+*aRjoiT-x{3nZC3`Ft}Y2Qh>IX77-`-_T+?k}AYxP^2R5(RB|#81{?j zFO0niJ*7UMbG3XRu503!i+YptbKy)C-tC0IJ#h=a0xfmmbX2;o`_EA#t?#g z;&u$fw9-ZHN>R;U*dcy{2Ra_pO z>3PMUqH%dtqW78U2Cb#n;=SnPj0Rmig9`M(Gqd2#>t0c*^fFG%mo}zThu^YS*+1M9 z%v?0~v|1?!CnDTKJn$3=%O1XMD?bnfc_4H$1dOPQNgvndZvGCzmk{sZ@n)f&G3*#K zKc@~ntkxKOj|8-QH6ByHXbc2a zbU#1FJLfhgl;TPV;M0UKaj9CN?U=l(2}3~BbsCK%c;*{=>8#5A?^8n;eZS&E&&zsU zF5S$qGUB#m+e~&Dn^G>|0@8LyhRSVjdmu;x8fg#haxQs1+hCzq1Tt^vBqDT_sEH9gFAb?EHRzuuh2jc@%}pqTZQ0dqUkVB zEy1zZaL3`hINBWS))6vFlK1T4Xl5oIW|SKG=vD4#0THjMufZp;;;z&nTV_IPgCD&J zCOLV~`DHC^4Qf5%_xjPW&x8#FV~R^M#(2;1(BV(ERwk9~sRw1G?#y=%9@PQ{pDLn9 z`lG>d9N|h-M;s+vZaFr_E$xL++=o8;~V*1FA)745cA7?%{%A+gF>(k3_m9#4A!`xWP^Z$M=%>|M^w0?Iujlym8B>Z*WdCDR{ zK=Ii{(OC2v{^Tkza|TzXp?Hy`-aP;c-Ty>Y%8JE}94(dVi5{lUQI=p<+d6X)BQNsm z>=SO|FKtc)sQSBkE|~CN<_y>zHUzm#q|cOP+zi5_16GO_8=HR#>zpS#>5-{a714;` z(CjI2_@6Ot-^SrZ@v0mID=nKX*vQ)_jd>QY&x5G$b|m=+{@%YB`Q(vMXxJd(`7Z;1 z6>sQ1QmSQcx3w%kWp{2b@X>2FD0c-B$uoI@sWiP75M*Z|4c3^Hr!Z(#HVQE2zs8{$ zg6G0T)2C^Czl_Kkb5Q@4CscPfz6Fe4Z1bp{)*Rq}%ie>McbNpVMgRTG9hcpY0+BSz zv6d}LN;S}A*G=>(=M#KQwc&`5U+A&ZR7&Tk~Odth}lHjhesv>k_|b$_oVfs9I=T}Gs>AEa$>ME7Gd*zXVE zGD&#qvXJK-u9;>=GOxDaDFQ2~oN~Nyepz%I#ve85p$#nAA#}dMnp%3MzwIxqibU;5 zeeU}M>iRi|Q@izgqB@t+Aznr++9&S1inH@xaaSben{R-N zsaCPw66zzXU&mPa$uqa($Z>X6a95X9e-T8sH!t2wnwy9@n-~Z6-)eVGGsqF&Sa$(} zFpu+_kp?uxPB27B^=nMg@BZE@+qcIpllVL7cK?&wuopJ14%jh~0$^s^l_&Y8sq zs5wT|LiAVJ!ZfUI%|N8Wl3Poz+#P;R_~+Od-#gG&Xbf+*W;L9?<)H?;H<)w+k8!ni z@&FMAL=RK0bw&Q3+_?9j`5iep6%g}=39@T8fS)~fI}knwK^b!u>IWM6(JeUrjmteT zA1jwJ-hkz)K1~hqz=UfSV)r(Gy;|PN|9qg#DnD(WN9G*ZF%5$56hU2%&f#)1yHU3L z>~esgj4X|wM6V)12p=--3`Jr~m}MA@aKXoS4+V|t4z_Z7)8R7S%%)Ocb@1!^$J`w* zZLx@SoYVK*NME@KzBy5<(?8&cgez`rl z@|5)^yD35VALM1A226-40N%A4hZKX?_VX@M`3g~U9aQ0+J`YsEo)9ATAL9GSYRpVy zoCB`J_un_P^{6zV(iWqN^1_jByG5*;p=c~$f3N20Pnd1AmM0)=_g@ zetk;aVL5)oHs3Y*c=>%-#+vqP=TfKVc+w76p61ka`DbN`a#{QN19%IQf<{1OIML4X zrZt+X?ET1_E7C7{9@r&jPs0CQ!S|8v+I^@v11X*#;!DVRZ;8@shvJU6oLt1+I+5vc zzkYTP|D&<9x{umXYto%~Y{A+Q0=jApBEvj{oeazj7|7bJ^Uq3!Cs)zIWEZaLiE zcwYSdw0(4JsSR+Ff+seDp|p7^Z-MOfwX2=)f=ne2h4jvJd+fJzf}%1&M=zlz6ehAR zKk*+<4Lpi)i!+X;@?6HI%k~>d#9T=Kji+C)kKX*z8co+5w!a(QSKs566~HZ1Xlnlk zR!fB9j?EN;k^ibtw^x3gH7zZ#eKKPynu2#6di?B5aI01>;X2PcXIBw{$Tk}>!t&Xa z5*SCkk>ou1oNt{mr6QJgQQtqeBQ`SD%elffBeM_)4J38@t#ZO>-M)ay*#txp`OiacJgB@%`xjCNqKc2RRxlR_EkyJ zpDtN2_6=*mSujvh^+e5O4Hj>`E*AJy`uNhRX>&i`{%L=C8hVq>H^j3Yq0*m2fXKLT zzFP;>PTEm52tbqa&%h5G{R9jWa}gN1@-%iTyjC;c;bM8!FxLT~i*B){=O-Q5+OV_=dZVNKumzq|Tv0;YCQXm&U!fuxq!_l?8;Kma zREHuq0NsWkgi4Q0*P(x2p1Lui$w{k?6r$7q@tE9FS3sQL)RgC-t#ts%E0CspG}6J= z3ytuwQ+)J{K~cV-EULF7Y?@Cbeo;)PEl{^aMa4aTgso-T(oph_UA)g8kE70m=pW`Q z7*ZIixtp=mT@NtTPKwYOt0YABr3HeTdIpXMm09<5eZ?RW3Ii67Yx-Fc^Wml=!sL$6 zH7oMvPJ~tu+>`O@(YK-4Ha>nGt?4W-#PEwNXUgEw_50~*=@79vFI0=e_)Ke-N{Xv_ zkUaxNxS?b9rH)FSdUl&^1GCupy*`+BS)60AAjFXSd-zk%r>+m`iatg8M34bn{LX{k zjJzSuO=8ySFJ=u~LA?&tzZhn*=Yu}+U0ADCB4*wvr(Ox=feb{ox>*<_NwiLQ!{D)M z=-#ilj3nt8cXpCWGXYOo`EiHg-=b*}_|t_dHF*x2h-a#zsaAx_w1oZTIf>CFUJeBR@FW=XvF!PU&hQ@jrK-@ybD zgjyC08jdsR&oQ#TE`!s%#**85V{q=wK|{yT;%Utkr1-vA^6PNGM#Wvl$Z>>Fs8yS5TsR