From e0923d877dc841e07fa54e12ba054f000a26ac35 Mon Sep 17 00:00:00 2001 From: leehaneum Date: Tue, 4 Mar 2025 08:20:37 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Google=20OAuth2=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../auth/application/dto/AuthAttributes.java | 20 ++ .../application/dto/GoogleAuthAttributes.java | 36 ++++ .../handler/OAuth2LoginSuccessHandler.java | 78 ++++++++ .../auth/application/jwt/TokenInjector.java | 52 ++++++ .../auth/application/service/AuthService.java | 73 ++++++++ .../service/OAuth2UserDetailsService.java | 27 +++ .../service/OAuth2UserService.java | 33 ++++ .../common/auth/domain/CustomOAuth2User.java | 23 +++ .../common/auth/domain/CustomUserDetails.java | 31 ++++ .../common/auth/domain/jwt/LoginResult.java | 4 + .../common/auth/domain/jwt/TokenProvider.java | 8 + .../common/auth/domain/jwt/TokenResolver.java | 13 ++ .../infrastructure/SecurityProperties.java | 10 + .../infrastructure/jwt/JwtTokenProvider.java | 47 +++++ .../infrastructure/jwt/JwtTokenResolver.java | 78 ++++++++ .../infrastructure/jwt/TokenProperties.java | 14 ++ .../auth/presentation/LoginController.java | 14 ++ .../AlreadyRegisteredUserException.java | 12 ++ .../exception/AuthExceptionCode.java | 26 +++ .../AuthenticationRequiredException.java | 11 ++ .../presentation/filter/JwtTokenFilter.java | 99 ++++++++++ .../filter/RedirectUrlFilter.java | 45 +++++ .../CustomAuthenticationFailureHandler.java | 30 +++ .../handler/JwtAuthenticationEntryPoint.java | 38 ++++ .../common/config/SecurityConfig.java | 97 +++++++--- .../command/domain/UserCommandRepository.java | 7 + .../UserCommandMongoRepository.java | 7 + .../UserCommandRepositoryImpl.java | 17 ++ .../user/domain/OAuthProviderType.java | 8 +- .../depromeet/onepiece/user/domain/User.java | 25 +++ .../query/domain/UserQueryRepository.java | 11 ++ .../UserQueryMongoRepository.java | 12 ++ .../UserQueryRepositoryImpl.java | 23 +++ src/main/resources/application.yml | 9 + src/main/resources/static/critix-logo.png | Bin 0 -> 180318 bytes src/main/resources/static/index.html | 13 ++ src/main/resources/static/login.html | 171 ++++++++++++++++++ 38 files changed, 1196 insertions(+), 27 deletions(-) create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/dto/AuthAttributes.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/dto/GoogleAuthAttributes.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/handler/OAuth2LoginSuccessHandler.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/jwt/TokenInjector.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/service/AuthService.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserDetailsService.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserService.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/domain/CustomOAuth2User.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/domain/CustomUserDetails.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/domain/jwt/LoginResult.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenProvider.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenResolver.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/infrastructure/SecurityProperties.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenProvider.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenResolver.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/TokenProperties.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/LoginController.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/exception/AlreadyRegisteredUserException.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthExceptionCode.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthenticationRequiredException.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/filter/JwtTokenFilter.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/filter/RedirectUrlFilter.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/handler/CustomAuthenticationFailureHandler.java create mode 100644 src/main/java/depromeet/onepiece/common/auth/presentation/handler/JwtAuthenticationEntryPoint.java create mode 100644 src/main/java/depromeet/onepiece/user/command/domain/UserCommandRepository.java create mode 100644 src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandMongoRepository.java create mode 100644 src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandRepositoryImpl.java create mode 100644 src/main/java/depromeet/onepiece/user/query/domain/UserQueryRepository.java create mode 100644 src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryMongoRepository.java create mode 100644 src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryRepositoryImpl.java create mode 100644 src/main/resources/static/critix-logo.png create mode 100644 src/main/resources/static/index.html create mode 100644 src/main/resources/static/login.html diff --git a/build.gradle b/build.gradle index 1fcfe85..09266df 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ dependencies { // SOCIAL LOGIN implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' + implementation 'io.jsonwebtoken:jjwt:0.12.6' // TEST testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/depromeet/onepiece/common/auth/application/dto/AuthAttributes.java b/src/main/java/depromeet/onepiece/common/auth/application/dto/AuthAttributes.java new file mode 100644 index 0000000..26804ca --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/dto/AuthAttributes.java @@ -0,0 +1,20 @@ +package depromeet.onepiece.common.auth.application.dto; + +import depromeet.onepiece.user.domain.OAuthProviderType; +import java.util.Map; + +public interface AuthAttributes { + + String getExternalId(); + + String getEmail(); + + OAuthProviderType getProvider(); + + static AuthAttributes of(String providerId, Map attributes) { + if (OAuthProviderType.GOOGLE.isProviderOf(providerId)) { + return GoogleAuthAttributes.of(attributes); + } + throw new IllegalArgumentException("Unsupported id: " + providerId); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/application/dto/GoogleAuthAttributes.java b/src/main/java/depromeet/onepiece/common/auth/application/dto/GoogleAuthAttributes.java new file mode 100644 index 0000000..de3b06b --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/dto/GoogleAuthAttributes.java @@ -0,0 +1,36 @@ +package depromeet.onepiece.common.auth.application.dto; + +import depromeet.onepiece.user.domain.OAuthProviderType; +import java.util.Map; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class GoogleAuthAttributes implements AuthAttributes { + + private final String id; + private final String email; + private final OAuthProviderType provide; + + public static GoogleAuthAttributes of(Map attributes) { + Map google = (Map) attributes.get("google"); + + return new GoogleAuthAttributes( + attributes.get("sub").toString(), (String) google.get("email"), OAuthProviderType.GOOGLE); + } + + @Override + public String getExternalId() { + return this.id; + } + + @Override + public String getEmail() { + return this.email; + } + + @Override + public OAuthProviderType getProvider() { + return this.provide; + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/application/handler/OAuth2LoginSuccessHandler.java b/src/main/java/depromeet/onepiece/common/auth/application/handler/OAuth2LoginSuccessHandler.java new file mode 100644 index 0000000..15058dd --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/handler/OAuth2LoginSuccessHandler.java @@ -0,0 +1,78 @@ +package depromeet.onepiece.common.auth.application.handler; + +import static depromeet.onepiece.common.auth.presentation.exception.AuthExceptionCode.ALREADY_REGISTERED_USER; +import static depromeet.onepiece.common.auth.presentation.filter.RedirectUrlFilter.REDIRECT_URL_COOKIE_NAME; + +import depromeet.onepiece.common.auth.application.jwt.TokenInjector; +import depromeet.onepiece.common.auth.application.service.AuthService; +import depromeet.onepiece.common.auth.domain.CustomOAuth2User; +import depromeet.onepiece.common.auth.domain.jwt.LoginResult; +import depromeet.onepiece.common.auth.infrastructure.SecurityProperties; +import depromeet.onepiece.common.auth.presentation.exception.AlreadyRegisteredUserException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.Objects; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +@RequiredArgsConstructor +@Component +public class OAuth2LoginSuccessHandler implements AuthenticationSuccessHandler { + + private final AuthService authService; + private final TokenInjector tokenInjector; + + private final SecurityProperties securityProperties; + + @Override + public void onAuthenticationSuccess( + HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException { + try { + LoginResult result = resolveLoginResultFromAuthentication(authentication); + tokenInjector.injectTokensToCookie(result, response); + redirectToSuccessUrl(request, response); + } catch (AlreadyRegisteredUserException e) { + handleAlreadyExistUser(response); + } + } + + private LoginResult resolveLoginResultFromAuthentication(Authentication authentication) { + CustomOAuth2User oAuth2User = (CustomOAuth2User) authentication.getPrincipal(); + return authService.handleLoginSuccess(oAuth2User.getAuthAttributes()); + } + + private void redirectToSuccessUrl(HttpServletRequest request, HttpServletResponse response) + throws IOException { + String redirectUrlByCookie = getRedirectUrlByCookie(request); + String redirectUrl = determineRedirectUrl(redirectUrlByCookie); + response.sendRedirect(redirectUrl); + tokenInjector.invalidateCookie(REDIRECT_URL_COOKIE_NAME, response); + } + + private String getRedirectUrlByCookie(HttpServletRequest request) { + return Arrays.stream(request.getCookies()) + .filter(cookie -> Objects.equals(cookie.getName(), REDIRECT_URL_COOKIE_NAME)) + .findFirst() + .map(Cookie::getValue) + .orElse(null); + } + + private String determineRedirectUrl(String redirectCookie) { + if (StringUtils.hasText(redirectCookie)) { + return redirectCookie; + } + return securityProperties.redirectUrl(); + } + + private void handleAlreadyExistUser(HttpServletResponse response) throws IOException { + response.sendRedirect( + securityProperties.loginUrl() + "?error=true&exception=" + ALREADY_REGISTERED_USER); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/application/jwt/TokenInjector.java b/src/main/java/depromeet/onepiece/common/auth/application/jwt/TokenInjector.java new file mode 100644 index 0000000..df53a75 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/jwt/TokenInjector.java @@ -0,0 +1,52 @@ +package depromeet.onepiece.common.auth.application.jwt; + +import static org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames.ACCESS_TOKEN; +import static org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames.REFRESH_TOKEN; + +import depromeet.onepiece.common.auth.domain.jwt.LoginResult; +import depromeet.onepiece.common.auth.infrastructure.SecurityProperties; +import depromeet.onepiece.common.auth.infrastructure.jwt.TokenProperties; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class TokenInjector { + + private final TokenProperties tokenProperties; + private final SecurityProperties securityProperties; + + public void injectTokensToCookie(LoginResult result, HttpServletResponse response) { + int accessTokenMaxAge = (int) tokenProperties.expirationTime().accessToken() + 5; + int refreshTokenMaxAge = (int) tokenProperties.expirationTime().refreshToken() + 5; + + addCookie(ACCESS_TOKEN, result.accessToken(), accessTokenMaxAge, response); + addCookie(REFRESH_TOKEN, result.refreshToken(), refreshTokenMaxAge, response); + } + + public void addCookie(String name, String value, int maxAge, HttpServletResponse response) { + Cookie cookie = new Cookie(name, value); + cookie.setPath("/"); + cookie.setMaxAge(maxAge); + cookie.setHttpOnly(securityProperties.cookie().httpOnly()); + cookie.setDomain(securityProperties.cookie().domain()); + cookie.setSecure(securityProperties.cookie().secure()); + cookie.setAttribute("SameSite", "None"); + + response.addCookie(cookie); + } + + public void invalidateCookie(String name, HttpServletResponse response) { + Cookie cookie = new Cookie(name, null); + cookie.setPath("/"); + cookie.setMaxAge(0); + cookie.setHttpOnly(securityProperties.cookie().httpOnly()); + cookie.setDomain(securityProperties.cookie().domain()); + cookie.setSecure(securityProperties.cookie().secure()); + cookie.setAttribute("SameSite", "None"); + + response.addCookie(cookie); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/application/service/AuthService.java b/src/main/java/depromeet/onepiece/common/auth/application/service/AuthService.java new file mode 100644 index 0000000..7b18845 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/service/AuthService.java @@ -0,0 +1,73 @@ +package depromeet.onepiece.common.auth.application.service; + +import depromeet.onepiece.common.auth.application.dto.AuthAttributes; +import depromeet.onepiece.common.auth.domain.RefreshToken; +import depromeet.onepiece.common.auth.domain.RefreshTokenRepository; +import depromeet.onepiece.common.auth.domain.jwt.LoginResult; +import depromeet.onepiece.common.auth.domain.jwt.TokenProvider; +import depromeet.onepiece.common.auth.infrastructure.jwt.TokenProperties; +import depromeet.onepiece.common.auth.presentation.exception.AlreadyRegisteredUserException; +import depromeet.onepiece.user.command.domain.UserCommandRepository; +import depromeet.onepiece.user.domain.User; +import depromeet.onepiece.user.query.domain.UserQueryRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class AuthService { + + private final UserQueryRepository userQueryRepository; + private final UserCommandRepository userCommandRepository; + private final TokenProvider tokenProvider; + private final RefreshTokenRepository refreshTokenRepository; + private final TokenProperties tokenProperties; + + @Transactional + public LoginResult handleLoginSuccess(AuthAttributes attributes) { + String email = attributes.getEmail(); + + return userQueryRepository + .findByEmail(email) + .map(user -> handleExistUser(user, attributes)) + .orElseGet(() -> handleFirstLogin(attributes)); + } + + private LoginResult handleExistUser(User user, AuthAttributes attributes) { + if (user.hasDifferentProviderWithEmail(attributes.getEmail(), attributes.getExternalId())) { + throw new AlreadyRegisteredUserException(); + } + + return generateLoginResult(user, false); + } + + private LoginResult handleFirstLogin(AuthAttributes attributes) { + User newUser = saveNewUser(attributes); + return generateLoginResult(newUser, true); + } + + private LoginResult generateLoginResult(User user, boolean firstLogin) { + String accessToken = tokenProvider.generateAccessToken(user.getExternalId()); + String refreshToken = tokenProvider.generateRefreshToken(user.getExternalId()); + + RefreshToken refreshTokenEntity = + refreshTokenRepository + .findByUserId(user.getId()) + .orElse( + RefreshToken.of( + user.getExternalId(), + refreshToken, + tokenProperties.expirationTime().refreshToken())); + + refreshTokenEntity.rotate(refreshToken); + refreshTokenRepository.save(refreshTokenEntity); + + return new LoginResult(accessToken, refreshToken, firstLogin, user.getExternalId()); + } + + private User saveNewUser(AuthAttributes attributes) { + User user = User.save(attributes); + return userCommandRepository.save(user); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserDetailsService.java b/src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserDetailsService.java new file mode 100644 index 0000000..b7050aa --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserDetailsService.java @@ -0,0 +1,27 @@ +package depromeet.onepiece.common.auth.application.service; + +import depromeet.onepiece.common.auth.domain.CustomUserDetails; +import depromeet.onepiece.user.domain.User; +import depromeet.onepiece.user.query.domain.UserQueryRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class OAuth2UserDetailsService implements UserDetailsService { + + private final UserQueryRepository userQueryRepository; + + @Override + public UserDetails loadUserByUsername(String externalId) throws UsernameNotFoundException { + User user = + userQueryRepository + .findUserByExternalId(externalId) + .orElseThrow( + () -> new UsernameNotFoundException("User not found with id: " + externalId)); + return new CustomUserDetails(user.getId()); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserService.java b/src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserService.java new file mode 100644 index 0000000..91a6c89 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/application/service/OAuth2UserService.java @@ -0,0 +1,33 @@ +package depromeet.onepiece.common.auth.application.service; + +import depromeet.onepiece.common.auth.application.dto.AuthAttributes; +import depromeet.onepiece.common.auth.domain.CustomOAuth2User; +import java.util.List; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.stereotype.Service; + +@Service +public class OAuth2UserService extends DefaultOAuth2UserService { + + @Override + public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { + OAuth2User oAuth2User = super.loadUser(userRequest); + + List authorities = AuthorityUtils.createAuthorityList("ROLE_USER"); + + ClientRegistration clientRegistration = userRequest.getClientRegistration(); + String registrationId = clientRegistration.getRegistrationId(); + String userNameAttributeName = + clientRegistration.getProviderDetails().getUserInfoEndpoint().getUserNameAttributeName(); + + AuthAttributes authAttributes = AuthAttributes.of(registrationId, oAuth2User.getAttributes()); + return new CustomOAuth2User( + authorities, oAuth2User.getAttributes(), userNameAttributeName, authAttributes); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/domain/CustomOAuth2User.java b/src/main/java/depromeet/onepiece/common/auth/domain/CustomOAuth2User.java new file mode 100644 index 0000000..5698e05 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/domain/CustomOAuth2User.java @@ -0,0 +1,23 @@ +package depromeet.onepiece.common.auth.domain; + +import depromeet.onepiece.common.auth.application.dto.AuthAttributes; +import java.util.Collection; +import java.util.Map; +import lombok.Getter; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; + +@Getter +public class CustomOAuth2User extends DefaultOAuth2User { + + private final AuthAttributes authAttributes; + + public CustomOAuth2User( + Collection authorities, + Map attributes, + String nameAttributeKey, + AuthAttributes authAttributes) { + super(authorities, attributes, nameAttributeKey); + this.authAttributes = authAttributes; + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/domain/CustomUserDetails.java b/src/main/java/depromeet/onepiece/common/auth/domain/CustomUserDetails.java new file mode 100644 index 0000000..d7f3970 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/domain/CustomUserDetails.java @@ -0,0 +1,31 @@ +package depromeet.onepiece.common.auth.domain; + +import java.util.Collection; +import java.util.List; +import org.bson.types.ObjectId; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +public class CustomUserDetails implements UserDetails { + + private final ObjectId userId; + + public CustomUserDetails(ObjectId userId) { + this.userId = userId; + } + + @Override + public Collection getAuthorities() { + return List.of(); + } + + @Override + public String getPassword() { + return ""; + } + + @Override + public String getUsername() { + return this.userId.toString(); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/domain/jwt/LoginResult.java b/src/main/java/depromeet/onepiece/common/auth/domain/jwt/LoginResult.java new file mode 100644 index 0000000..0eb92b2 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/domain/jwt/LoginResult.java @@ -0,0 +1,4 @@ +package depromeet.onepiece.common.auth.domain.jwt; + +public record LoginResult( + String accessToken, String refreshToken, boolean isNewUser, String externalId) {} diff --git a/src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenProvider.java b/src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenProvider.java new file mode 100644 index 0000000..a56f7da --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenProvider.java @@ -0,0 +1,8 @@ +package depromeet.onepiece.common.auth.domain.jwt; + +public interface TokenProvider { + + String generateAccessToken(String externalId); + + String generateRefreshToken(String externalId); +} diff --git a/src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenResolver.java b/src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenResolver.java new file mode 100644 index 0000000..5089243 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/domain/jwt/TokenResolver.java @@ -0,0 +1,13 @@ +package depromeet.onepiece.common.auth.domain.jwt; + +import jakarta.servlet.http.HttpServletRequest; +import java.util.Optional; + +public interface TokenResolver { + + Optional resolveTokenFromRequest(HttpServletRequest request); + + Optional resolveRefreshTokenFromRequest(HttpServletRequest request); + + String getSubjectFromToken(String token); +} diff --git a/src/main/java/depromeet/onepiece/common/auth/infrastructure/SecurityProperties.java b/src/main/java/depromeet/onepiece/common/auth/infrastructure/SecurityProperties.java new file mode 100644 index 0000000..68729cd --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/infrastructure/SecurityProperties.java @@ -0,0 +1,10 @@ +package depromeet.onepiece.common.auth.infrastructure; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +@ConfigurationProperties(prefix = "spring.security") +public record SecurityProperties( + String loginUrl, String redirectUrl, @NestedConfigurationProperty Cookie cookie) { + public record Cookie(String domain, boolean httpOnly, boolean secure) {} +} diff --git a/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenProvider.java b/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenProvider.java new file mode 100644 index 0000000..7905f94 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenProvider.java @@ -0,0 +1,47 @@ +package depromeet.onepiece.common.auth.infrastructure.jwt; + +import static io.jsonwebtoken.io.Decoders.BASE64; + +import depromeet.onepiece.common.auth.domain.jwt.TokenProvider; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.security.Keys; +import java.util.Date; +import javax.crypto.SecretKey; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@RequiredArgsConstructor +@Component +public class JwtTokenProvider implements TokenProvider { + + private final TokenProperties tokenProperties; + + @Override + public String generateAccessToken(String externalId) { + long currentTimeMillis = System.currentTimeMillis(); + Date now = new Date(currentTimeMillis); + Date expiration = + new Date(currentTimeMillis + tokenProperties.expirationTime().accessToken() * 1000); + SecretKey secretKey = Keys.hmacShaKeyFor(BASE64.decode(tokenProperties.secretKey())); + + return Jwts.builder() + .subject(String.valueOf(externalId)) + .issuedAt(now) + .expiration(expiration) + .signWith(secretKey) + .compact(); + } + + @Override + public String generateRefreshToken(String externalId) { + long currentTimeMillis = System.currentTimeMillis(); + Date now = new Date(currentTimeMillis); + SecretKey secretKey = Keys.hmacShaKeyFor(BASE64.decode(tokenProperties.secretKey())); + + return Jwts.builder() + .subject(String.valueOf(externalId)) + .issuedAt(now) + .signWith(secretKey) + .compact(); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenResolver.java b/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenResolver.java new file mode 100644 index 0000000..4e46c92 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/JwtTokenResolver.java @@ -0,0 +1,78 @@ +package depromeet.onepiece.common.auth.infrastructure.jwt; + +import static org.springframework.http.HttpHeaders.AUTHORIZATION; +import static org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames.ACCESS_TOKEN; +import static org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames.REFRESH_TOKEN; + +import depromeet.onepiece.common.auth.domain.jwt.TokenResolver; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.security.Keys; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Iterator; +import java.util.Objects; +import java.util.Optional; +import java.util.regex.Pattern; +import javax.crypto.SecretKey; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +@Slf4j +@Component +public class JwtTokenResolver implements TokenResolver { + + private static final String REPLACE_BEARER_PATTERN = "^Bearer( )*"; + private static final Pattern BEARER_PATTERN = Pattern.compile("^Bearer .*"); + + private final SecretKey secretKey; + + public JwtTokenResolver(TokenProperties tokenProperties) { + this.secretKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode(tokenProperties.secretKey())); + } + + @Override + public Optional resolveTokenFromRequest(HttpServletRequest request) { + return resolveFromHeader(request).or(() -> resolveFromCookie(request, ACCESS_TOKEN)); + } + + @Override + public Optional resolveRefreshTokenFromRequest(HttpServletRequest request) { + return resolveFromCookie(request, REFRESH_TOKEN); + } + + @Override + public String getSubjectFromToken(String token) { + return getClaims(token, secretKey).getPayload().getSubject(); + } + + private static Optional resolveFromHeader(HttpServletRequest request) { + Iterator authorizations = request.getHeaders(AUTHORIZATION).asIterator(); + + return Optional.ofNullable(authorizations) + .filter(Iterator::hasNext) + .map(Iterator::next) + .filter(auth -> StringUtils.hasText(auth) && BEARER_PATTERN.matcher(auth).matches()) + .map(auth -> auth.replaceAll(REPLACE_BEARER_PATTERN, "")); + } + + private Optional resolveFromCookie(HttpServletRequest request, String cookieName) { + Cookie[] cookies = request.getCookies(); + if (Objects.isNull(cookies)) { + return Optional.empty(); + } + + return Arrays.stream(cookies) + .filter(cookie -> Objects.equals(cookie.getName(), cookieName)) + .map(Cookie::getValue) + .findFirst(); + } + + private Jws getClaims(String token, SecretKey secretKey) { + return Jwts.parser().verifyWith(secretKey).build().parseSignedClaims(token); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/TokenProperties.java b/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/TokenProperties.java new file mode 100644 index 0000000..072a20e --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/infrastructure/jwt/TokenProperties.java @@ -0,0 +1,14 @@ +package depromeet.onepiece.common.auth.infrastructure.jwt; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +@ConfigurationProperties(prefix = "spring.security.jwt") +public record TokenProperties( + @NotNull String secretKey, + @NestedConfigurationProperty @NotNull ExpirationTime expirationTime) { + + public record ExpirationTime(@Min(0) long accessToken, @Min(0) long refreshToken) {} +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/LoginController.java b/src/main/java/depromeet/onepiece/common/auth/presentation/LoginController.java new file mode 100644 index 0000000..71b3bbc --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/LoginController.java @@ -0,0 +1,14 @@ +package depromeet.onepiece.common.auth.presentation; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/login") +public class LoginController { + @GetMapping + public String login() { + return "redirect:/oauth2/authorization/google"; + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AlreadyRegisteredUserException.java b/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AlreadyRegisteredUserException.java new file mode 100644 index 0000000..e0bd6bf --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AlreadyRegisteredUserException.java @@ -0,0 +1,12 @@ +package depromeet.onepiece.common.auth.presentation.exception; + +import static depromeet.onepiece.common.auth.presentation.exception.AuthExceptionCode.ALREADY_REGISTERED_USER; + +import depromeet.onepiece.common.error.GlobalException; + +public class AlreadyRegisteredUserException extends GlobalException { + + public AlreadyRegisteredUserException() { + super(ALREADY_REGISTERED_USER.getMessage(), ALREADY_REGISTERED_USER); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthExceptionCode.java b/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthExceptionCode.java new file mode 100644 index 0000000..6f952de --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthExceptionCode.java @@ -0,0 +1,26 @@ +package depromeet.onepiece.common.auth.presentation.exception; + +import static org.springframework.http.HttpStatus.BAD_REQUEST; +import static org.springframework.http.HttpStatus.UNAUTHORIZED; + +import depromeet.onepiece.common.error.ErrorCode; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum AuthExceptionCode implements ErrorCode { + ALREADY_REGISTERED_USER(BAD_REQUEST, "다른 소셜 계정으로 이미 가입된 사용자입니다."), + AUTHENTICATION_REQUIRED(UNAUTHORIZED, "인증 정보가 유효하지 않습니다."), + REFRESH_TOKEN_NOT_VALID(UNAUTHORIZED, "리프레시 토큰이 유효하지 않습니다."), + ; + + private final HttpStatus status; + private final String message; + + @Override + public String getCode() { + return this.name(); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthenticationRequiredException.java b/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthenticationRequiredException.java new file mode 100644 index 0000000..8c03c74 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/exception/AuthenticationRequiredException.java @@ -0,0 +1,11 @@ +package depromeet.onepiece.common.auth.presentation.exception; + +import static depromeet.onepiece.common.auth.presentation.exception.AuthExceptionCode.AUTHENTICATION_REQUIRED; + +import depromeet.onepiece.common.error.GlobalException; + +public class AuthenticationRequiredException extends GlobalException { + public AuthenticationRequiredException() { + super(AUTHENTICATION_REQUIRED.getMessage(), AUTHENTICATION_REQUIRED); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/filter/JwtTokenFilter.java b/src/main/java/depromeet/onepiece/common/auth/presentation/filter/JwtTokenFilter.java new file mode 100644 index 0000000..4d8435b --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/filter/JwtTokenFilter.java @@ -0,0 +1,99 @@ +package depromeet.onepiece.common.auth.presentation.filter; + +import static org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames.ACCESS_TOKEN; +import static org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames.REFRESH_TOKEN; + +import depromeet.onepiece.common.auth.application.jwt.TokenInjector; +import depromeet.onepiece.common.auth.application.service.RefreshTokenService; +import depromeet.onepiece.common.auth.domain.jwt.TokenResolver; +import depromeet.onepiece.common.auth.presentation.exception.AuthenticationRequiredException; +import depromeet.onepiece.common.auth.presentation.exception.RefreshTokenNotValidException; +import io.jsonwebtoken.ExpiredJwtException; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +@Slf4j +@RequiredArgsConstructor +@Component +public class JwtTokenFilter extends OncePerRequestFilter { + + private final TokenResolver tokenResolver; + private final TokenInjector tokenInjector; + private final UserDetailsService userDetailsService; + private final RefreshTokenService refreshTokenService; + + @Override + protected void doFilterInternal( + HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + processTokenAuthentication(request, response); + filterChain.doFilter(request, response); + } + + private void processTokenAuthentication( + HttpServletRequest request, HttpServletResponse response) { + try { + String token = resolveTokenFromRequest(request, response); + setAuthentication(request, getUserDetails(token, request, response)); + } catch (ExpiredJwtException | AuthenticationRequiredException e) { + log.debug("Failed to authenticate", e); + invalidateCookie(ACCESS_TOKEN, response); + } catch (RefreshTokenNotValidException e) { + log.warn("Failed to authenticate", e); + invalidateCookie(ACCESS_TOKEN, response); + invalidateCookie(REFRESH_TOKEN, response); + } catch (Exception e) { + log.error("Failed to authenticate", e); + invalidateCookie(ACCESS_TOKEN, response); + } + } + + private String resolveTokenFromRequest(HttpServletRequest request, HttpServletResponse response) { + try { + return tokenResolver + .resolveTokenFromRequest(request) + .orElseGet( + () -> + refreshTokenService.reissueBasedOnRefreshToken(request, response).accessToken()); + } catch (ExpiredJwtException e) { + return refreshTokenService.reissueBasedOnRefreshToken(request, response).accessToken(); + } + } + + private UserDetails getUserDetails( + String token, HttpServletRequest request, HttpServletResponse response) { + try { + String subject = tokenResolver.getSubjectFromToken(token); + return userDetailsService.loadUserByUsername(subject); + } catch (ExpiredJwtException e) { + String accessToken = + refreshTokenService.reissueBasedOnRefreshToken(request, response).accessToken(); + String subject = tokenResolver.getSubjectFromToken(accessToken); + return userDetailsService.loadUserByUsername(subject); + } + } + + private void setAuthentication(HttpServletRequest request, UserDetails userDetails) { + UsernamePasswordAuthenticationToken authentication = + new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + private void invalidateCookie(String cookieName, HttpServletResponse response) { + tokenInjector.invalidateCookie(cookieName, response); + SecurityContextHolder.clearContext(); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/filter/RedirectUrlFilter.java b/src/main/java/depromeet/onepiece/common/auth/presentation/filter/RedirectUrlFilter.java new file mode 100644 index 0000000..4fd020a --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/filter/RedirectUrlFilter.java @@ -0,0 +1,45 @@ +package depromeet.onepiece.common.auth.presentation.filter; + +import depromeet.onepiece.common.auth.application.jwt.TokenInjector; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.OncePerRequestFilter; + +@RequiredArgsConstructor +@Component +public class RedirectUrlFilter extends OncePerRequestFilter { + + private final TokenInjector tokenInjector; + + public static final String REDIRECT_URL_QUERY_PARAM = "redirectUrl"; + public static final String REDIRECT_URL_COOKIE_NAME = "redirect_url"; + private static final List REDIRECT_URL_INJECTION_PATTERNS = + List.of("/oauth2/authorization/.*"); + + @Override + protected void doFilterInternal( + HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + if (isRedirectRequest(request)) { + tokenInjector.invalidateCookie(REDIRECT_URL_COOKIE_NAME, response); + String redirectUri = request.getParameter(REDIRECT_URL_QUERY_PARAM); + + if (StringUtils.hasText(redirectUri)) { + tokenInjector.addCookie(REDIRECT_URL_COOKIE_NAME, redirectUri, 3600, response); + } + } + + filterChain.doFilter(request, response); + } + + private boolean isRedirectRequest(HttpServletRequest request) { + return REDIRECT_URL_INJECTION_PATTERNS.stream().anyMatch(request.getRequestURI()::matches); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/handler/CustomAuthenticationFailureHandler.java b/src/main/java/depromeet/onepiece/common/auth/presentation/handler/CustomAuthenticationFailureHandler.java new file mode 100644 index 0000000..2cb3dd0 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/handler/CustomAuthenticationFailureHandler.java @@ -0,0 +1,30 @@ +package depromeet.onepiece.common.auth.presentation.handler; + +import depromeet.onepiece.common.auth.infrastructure.SecurityProperties; +import depromeet.onepiece.common.auth.presentation.exception.AuthExceptionCode; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.stereotype.Component; + +@RequiredArgsConstructor +@Component +public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { + + private final SecurityProperties securityProperties; + + @Override + public void onAuthenticationFailure( + HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) + throws IOException, ServletException { + super.setDefaultFailureUrl( + securityProperties.loginUrl() + + "?error=true&exception=" + + AuthExceptionCode.AUTHENTICATION_REQUIRED); + super.onAuthenticationFailure(request, response, exception); + } +} diff --git a/src/main/java/depromeet/onepiece/common/auth/presentation/handler/JwtAuthenticationEntryPoint.java b/src/main/java/depromeet/onepiece/common/auth/presentation/handler/JwtAuthenticationEntryPoint.java new file mode 100644 index 0000000..730c0e8 --- /dev/null +++ b/src/main/java/depromeet/onepiece/common/auth/presentation/handler/JwtAuthenticationEntryPoint.java @@ -0,0 +1,38 @@ +package depromeet.onepiece.common.auth.presentation.handler; + +import static depromeet.onepiece.common.auth.presentation.exception.AuthExceptionCode.AUTHENTICATION_REQUIRED; +import static jakarta.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; + +import com.fasterxml.jackson.databind.ObjectMapper; +import depromeet.onepiece.common.error.CustomResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +@Slf4j +public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { + + private final ObjectMapper objectMapper; + + @Override + public void commence( + HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) + throws IOException { + setResponseBodyBasicInfo(response); + objectMapper.writeValue( + response.getOutputStream(), CustomResponse.error(AUTHENTICATION_REQUIRED)); + } + + private void setResponseBodyBasicInfo(HttpServletResponse response) { + response.setStatus(SC_UNAUTHORIZED); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + } +} diff --git a/src/main/java/depromeet/onepiece/common/config/SecurityConfig.java b/src/main/java/depromeet/onepiece/common/config/SecurityConfig.java index 5803a90..eaa47fa 100644 --- a/src/main/java/depromeet/onepiece/common/config/SecurityConfig.java +++ b/src/main/java/depromeet/onepiece/common/config/SecurityConfig.java @@ -1,45 +1,94 @@ package depromeet.onepiece.common.config; +import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS; + +import depromeet.onepiece.common.auth.infrastructure.SecurityProperties; +import depromeet.onepiece.common.auth.presentation.filter.JwtTokenFilter; +import depromeet.onepiece.common.auth.presentation.filter.RedirectUrlFilter; import java.util.Collections; import java.util.List; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; -import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.AuthenticationFailureHandler; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; @Configuration @EnableWebSecurity +@RequiredArgsConstructor public class SecurityConfig { + private final DefaultOAuth2UserService defaultOAuth2UserService; + private final AuthenticationSuccessHandler authenticationSuccessHandler; + private final AuthenticationFailureHandler authenticationFailureHandler; + private final JwtTokenFilter jwtTokenFilter; + private final RedirectUrlFilter redirectUrlFilter; + private final SecurityProperties securityProperties; + + private static final String[] PUBLIC_ENDPOINTS = { + "/api/v1/**", + }; @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - return http.cors( - corsConfigurer -> corsConfigurer.configurationSource(corsConfigurationSource())) + public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + disabledConfigurations(httpSecurity); + configurationSessionManagement(httpSecurity); + configurationCors(httpSecurity); + configureAuthorizeHttpRequests(httpSecurity); + configurationOAuth2Login(httpSecurity); + return httpSecurity.build(); + } + + private void disabledConfigurations(HttpSecurity httpSecurity) throws Exception { + httpSecurity .csrf(AbstractHttpConfigurer::disable) .httpBasic(AbstractHttpConfigurer::disable) .formLogin(AbstractHttpConfigurer::disable) - .logout(AbstractHttpConfigurer::disable) - .sessionManagement( - session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) - .authorizeHttpRequests( - auth -> - auth.requestMatchers(SWAGGER_PATTERNS) - .permitAll() - .requestMatchers(STATIC_RESOURCES_PATTERNS) - .permitAll() - .requestMatchers(PERMIT_ALL_PATTERNS) - .permitAll() - .requestMatchers(PUBLIC_ENDPOINTS) - .permitAll() - .anyRequest() - .authenticated()) - // .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())) - .build(); + .logout(AbstractHttpConfigurer::disable); + } + + private void configurationSessionManagement(HttpSecurity httpSecurity) throws Exception { + httpSecurity.sessionManagement(session -> session.sessionCreationPolicy(STATELESS)); + } + + private void configurationCors(HttpSecurity httpSecurity) throws Exception { + httpSecurity.cors( + corsConfigurer -> corsConfigurer.configurationSource(corsConfigurationSource())); + } + + private void configureAuthorizeHttpRequests(HttpSecurity httpSecurity) throws Exception { + httpSecurity.authorizeHttpRequests( + auth -> + auth.requestMatchers(SWAGGER_PATTERNS) + .permitAll() + .requestMatchers(STATIC_RESOURCES_PATTERNS) + .permitAll() + .requestMatchers(PERMIT_ALL_PATTERNS) + .permitAll() + .requestMatchers(PUBLIC_ENDPOINTS) + .permitAll() + .anyRequest() + .authenticated()); + } + + private void configurationOAuth2Login(HttpSecurity httpSecurity) throws Exception { + // httpSecurity.addFilterBefore(redirectUrlFilter, + // OAuth2AuthorizationRequestRedirectFilter.class); + httpSecurity.addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class); + httpSecurity.oauth2Login( + oauth2 -> + oauth2 + .loginPage(securityProperties.loginUrl()) + .userInfoEndpoint(userInfo -> userInfo.userService(defaultOAuth2UserService)) + .successHandler(authenticationSuccessHandler) + .failureHandler(authenticationFailureHandler)); } private static final String[] SWAGGER_PATTERNS = { @@ -51,11 +100,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { }; private static final String[] PERMIT_ALL_PATTERNS = { - "/error", "/favicon.ico", "/index.html", "/", - }; - - private static final String[] PUBLIC_ENDPOINTS = { - "/api/v1/**", + "/error", "/index.html", "/login/**", "/oauth2/**", "/login/oauth2/**", }; CorsConfigurationSource corsConfigurationSource() { diff --git a/src/main/java/depromeet/onepiece/user/command/domain/UserCommandRepository.java b/src/main/java/depromeet/onepiece/user/command/domain/UserCommandRepository.java new file mode 100644 index 0000000..16453e5 --- /dev/null +++ b/src/main/java/depromeet/onepiece/user/command/domain/UserCommandRepository.java @@ -0,0 +1,7 @@ +package depromeet.onepiece.user.command.domain; + +import depromeet.onepiece.user.domain.User; + +public interface UserCommandRepository { + User save(User user); +} diff --git a/src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandMongoRepository.java b/src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandMongoRepository.java new file mode 100644 index 0000000..ff2dc37 --- /dev/null +++ b/src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandMongoRepository.java @@ -0,0 +1,7 @@ +package depromeet.onepiece.user.command.infrastructure; + +import depromeet.onepiece.user.domain.User; +import org.bson.types.ObjectId; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface UserCommandMongoRepository extends MongoRepository {} diff --git a/src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandRepositoryImpl.java b/src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandRepositoryImpl.java new file mode 100644 index 0000000..7f31750 --- /dev/null +++ b/src/main/java/depromeet/onepiece/user/command/infrastructure/UserCommandRepositoryImpl.java @@ -0,0 +1,17 @@ +package depromeet.onepiece.user.command.infrastructure; + +import depromeet.onepiece.user.command.domain.UserCommandRepository; +import depromeet.onepiece.user.domain.User; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class UserCommandRepositoryImpl implements UserCommandRepository { + private final UserCommandMongoRepository userCommandMongoRepository; + + @Override + public User save(User user) { + return userCommandMongoRepository.save(user); + } +} diff --git a/src/main/java/depromeet/onepiece/user/domain/OAuthProviderType.java b/src/main/java/depromeet/onepiece/user/domain/OAuthProviderType.java index 152a716..793cfc6 100644 --- a/src/main/java/depromeet/onepiece/user/domain/OAuthProviderType.java +++ b/src/main/java/depromeet/onepiece/user/domain/OAuthProviderType.java @@ -1,5 +1,11 @@ package depromeet.onepiece.user.domain; +import java.util.Objects; + public enum OAuthProviderType { - GOOGLE + GOOGLE; + + public boolean isProviderOf(String providerId) { + return Objects.equals(this.name(), providerId); + } } diff --git a/src/main/java/depromeet/onepiece/user/domain/User.java b/src/main/java/depromeet/onepiece/user/domain/User.java index fdf874d..9f3a88c 100644 --- a/src/main/java/depromeet/onepiece/user/domain/User.java +++ b/src/main/java/depromeet/onepiece/user/domain/User.java @@ -1,11 +1,16 @@ package depromeet.onepiece.user.domain; +import static lombok.AccessLevel.PRIVATE; import static lombok.AccessLevel.PROTECTED; +import depromeet.onepiece.common.auth.application.dto.AuthAttributes; import depromeet.onepiece.common.domain.BaseTimeDocument; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.util.Objects; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.bson.types.ObjectId; @@ -15,8 +20,10 @@ import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.mapping.MongoId; +@Builder @Document @NoArgsConstructor(access = PROTECTED) +@AllArgsConstructor(access = PRIVATE) @CompoundIndexes( value = @CompoundIndex(unique = true, name = "email_1_provider_1", def = "email_1_provider_1")) @Getter @@ -34,4 +41,22 @@ public class User extends BaseTimeDocument { @Field("provider") @NotNull(message = "인증 제공자는 필수 입력값입니다") private OAuthProviderType provider; + + @Field("external_id") + private String externalId; + + @Field("authorization_code") + private String authorizationCode; + + public static User save(AuthAttributes authAttributes) { + return User.builder() + .email(authAttributes.getEmail()) + .provider(authAttributes.getProvider()) + .externalId(authAttributes.getExternalId()) + .build(); + } + + public boolean hasDifferentProviderWithEmail(String email, String externalId) { + return Objects.equals(this.email, email) && !Objects.equals(this.externalId, externalId); + } } diff --git a/src/main/java/depromeet/onepiece/user/query/domain/UserQueryRepository.java b/src/main/java/depromeet/onepiece/user/query/domain/UserQueryRepository.java new file mode 100644 index 0000000..2ea6c50 --- /dev/null +++ b/src/main/java/depromeet/onepiece/user/query/domain/UserQueryRepository.java @@ -0,0 +1,11 @@ +package depromeet.onepiece.user.query.domain; + +import depromeet.onepiece.user.domain.User; +import java.util.Optional; + +public interface UserQueryRepository { + + Optional findByEmail(String email); + + Optional findUserByExternalId(String externalId); +} diff --git a/src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryMongoRepository.java b/src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryMongoRepository.java new file mode 100644 index 0000000..1a9c8c1 --- /dev/null +++ b/src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryMongoRepository.java @@ -0,0 +1,12 @@ +package depromeet.onepiece.user.query.infrastructure; + +import depromeet.onepiece.user.domain.User; +import java.util.Optional; +import org.bson.types.ObjectId; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface UserQueryMongoRepository extends MongoRepository { + Optional findByEmail(String email); + + User findByExternalId(String externalId); +} diff --git a/src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryRepositoryImpl.java b/src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryRepositoryImpl.java new file mode 100644 index 0000000..cbccb22 --- /dev/null +++ b/src/main/java/depromeet/onepiece/user/query/infrastructure/UserQueryRepositoryImpl.java @@ -0,0 +1,23 @@ +package depromeet.onepiece.user.query.infrastructure; + +import depromeet.onepiece.user.domain.User; +import depromeet.onepiece.user.query.domain.UserQueryRepository; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class UserQueryRepositoryImpl implements UserQueryRepository { + private final UserQueryMongoRepository userQueryMongoRepository; + + @Override + public Optional findByEmail(String email) { + return userQueryMongoRepository.findByEmail(email); + } + + @Override + public Optional findUserByExternalId(String externalId) { + return Optional.ofNullable(userQueryMongoRepository.findByExternalId(externalId)); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cd72716..aca0953 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,13 @@ spring: security: + login-url: ${LOGIN_URL:/login} + redirect-url: ${REDIRECT_URL:/} + cookie: + domain: ${COOKIE_DOMAIN:localhost} + secure: ${COOKIE_SECURE:false} + http-only: ${COOKIE_HTTP_ONLY:true} + jwt: + secret_key: ${JWT_SECRET_KEY} oauth2: client: registration: @@ -7,6 +15,7 @@ spring: client-id: ${GOOGLE_CLIENT_ID} client-secret: ${GOOGLE_CLIENT_SECRET} scope: profile, email + redirect-uri: ${GOOGLE_REDIRECT_URI:http://localhost:8080/index.html} servlet: multipart: diff --git a/src/main/resources/static/critix-logo.png b/src/main/resources/static/critix-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..75abaf94cb75cd94244cb4cbad6465f2d7797f3a GIT binary patch literal 180318 zcmZU)2Rs~Y+djOz7OTY~YLvA^@4Z_sh$zu}C((PaizpE#(YuJK(L?keEr=k|dl1oy z7VR7N{k-q{{Qlqmj2Sa?U9;z$?KqF~5~HD}NPtU)3j%=%l$GQ)K_D0$1cC&@uz)kF z8J!#;5WcFNoScTToE$>K-Nn|<(FO!kib>JK*4NT|Amw8%3xh|8zN$_`AQ?hm!F8t} z$Y{$FBVJLEguQ&gs$1<$)b;cmo1B{t>Lp&i{d<-@6Y3I{di_|V3w2oj`&-`|?ypT} zBLVG~x%-!UO=t5Mpte}I>y+-jPi>FUyHEyF0N6ThJ46mEH&A{nU7Mt4W9=S!xZ0+N%hCj8!E+HRI_-b$bgk zVfSgpqG+8BOK{B-Mx0Z$ZF)VcbNaJY!6 zDO@Lp3l@J7_5^3|?0v}-3OI27}K_4{y2#Di#Y|1AF%X&rU= zG6v-U6uHdPi*NQ?V44BlFQNepj#7gDWSF`jJbj4*|CEliOv(0*(4wJ1^=ag3KE#%Y z6d{a28=sr;mM~JrAc!QwUY*ks9a@ldQoCDdo!$lnr(buwB1oiqSt1p!zeP#LpnE}< zFy83ru@9D|8p&zzB?MQCt~t(Ii6n5}MD$0fbz^kv$da#Yc)GoI)J`VK$NP;<@SXX3 z`|q-@#sukEf7@Fz?Y@jguxqEuvIzA&dHfEp!JfwaP+9dOyIaois=cv9y3a9Tntd8q zEJE+9CaWi0X`Vj)@pt=giKQxCsjyGsvp?taRb|`}o7LZPr$0^0?BIJt#G~phRYPCU z^kmj}??e+P3^yu<^E>-~obK{<&ma9Idb~c$#?IVws6V;;lr*MOz^G#v$5OpY(Xcw{g22Z@W1!2tfN*7#JARK`XKe;OZrs zcH(;>D~{8yc26;ucP!Ady7{ZF>uAstwdeVtEetF3dsD*L%lPx5_RZz6tC z*RQ%|i8Qo_pfPu9s_ft zhZ3_pNmIffLK8E{|Y9UUjfO+ir zm(EALp!icOkXBE6I_pMg4KEkji}&V~>G(#WDVFQ{fg<1uI^u zn^g5xWhBm!cPJ1KBuk2!>22y=?;YuF>s{+rTa~kvj*%Z{o=Iv|e#$7tnx`#0t2C=B z_NZC@H&ffg^4F>ZqdyVuxCXLZ$h4&G0mZ?z0rdeomdyJqFPR^{L>3Oe{ZP1*|51ZW zqnVYi#8BIzOjs~CQ`O{2MZS=Ry4JpiS!ro$MyX%P=aQK3WTiSKyISJq-e$Ww%?-^t zVtSG~CU4tigVO%Gon-y4dM=PjI+Bno`=z)d|NFSw_};fgdmaI5L0>A_xEEA9RB=>k z0;XfEo+@HdQgNnA+{JW-X8C9KngSI9O__lsn3+16QG!(trw+UynVu`yt=n-jxD@7SR{sPB<0O6wwWT7$F{hIeePAAXuDPH^M(WmGLR#%phG~UVpf*UTr5d4>IGbMxJEZXR$ZP8#Oq^@7m7AdY9ys zo1~hgEMNvqE{>QwcFeSUP+Mg8iwrjYcAKJ^q!GD?dGF-j8BIp~O1wh6YCLzJ(JOVz z4*#o+!@L~h9QPb=k%ioRNqSG&ZxN|DA!2i)c-iIIRZj|4@iQA;EsuNCxK06s;^Y!G zrmQ5YR56(|mTqcl8Jwq@_n+sSpO_bJGJCdN{ch&V%ri+C?F}uSq@m=ZU$fsv0PVq5 z&zCOt{_@f7Eyiu-0%dU~$v;BJ8v!oIdq)-*g%^SQ6YCDYznoQ^1}#6^WBxO@brxau zWpHC>qxHb&DD8soD5U4)=jbLaVJ9RE<1vO9q#lC=!j7?znSp78^&R^JvjyubffTJQ z3;gEq^`M$IceamE0L)2!^0Y!gw8CgrAp;{iWAzo>_^Z>R@LDf{?s zzy3;|RZ%H4;g@_?nK#3Xm$aMAa8!D<5lD0XcB!)ZY2dp?vt=y}oda*()eqry^|mUu zpT5>))j5tPb?0}}ZLE4=ddzKPj2cPo-vo|cIpHN@ZsE<6WpZ)1PaMudno6 zFxxJ!lGfYPZ1=+O3b&NgQ}9(deiR#5E)@J>xUAK1-K^dxX{E>}YtfO+x&7m37nL5} zcNI29OCj7hH+>DuPI2FLzpu~5%;7aiFTQSE8z$VLv-hFe;h4LyOS9I~Q*|6EH9VW0 z73*nEIeFez(EiNl_g-uOTdH|w-xCiy-OSHZ&t1tD_5N|`xGnnCBPzt=cHDDuH_)oZ z;qtASNr>d+%8zfpUDvY53JI~CIZ0v(rblg_tL~lac~u9M*&S4V^~Z+Y^$(`Bs(cpU zi@yH+XB%IPFh5Dnn|emM7XPW-SU3uZJSz*SyLNI(Gn#sR2|k;n>y>Q0);Ku0V7Pdf zu<$v-F5ydFxVDu@j@hJm19Di9`c1O_%K@Pq$7egtL#Vf=F* z0s=+ZfuR4nM-ABDeG-A~Zp^=Xj5m=WY~U|qVDrs~{LkGmcs|De976(uYakgdIb~&F zuVv+KW8>`c+{IJ!Q(_Eo0>@R!zyky#dw92jl{Fa;fcdBFwDmppRiB7ixj1oISi4x- zaQQm9-pvD&@D&3NooqZU5WY^1&K_dElE{DV5Ce|yPIDs>|J>r~Ac@ph)j-I(xZ5Cv zxOljDkW#n^1VX~y+Ez?c{?UJi1Aj>(pL=?`ig9!M`1o-7@N>DiKjY>V6&2;?;p67x z;{@*D^zd``wD9G0_F(vTlK+`U-p0eq-Okn1&czvVH?M`Ii?J#BpL z{_jc79{&*w5Rm)s3O6qo5BLAh4GfjIJ1eGP=WF9=AaCacyffe#QbPPf693%)|GV;k zPyDZu`u{hQk4H%0zlZ+UrT=%Rj)#rAoQo6iOi!u*)7O6n|M$iJ43yx$6aBwl#lP?Q zpR>S=mco_b{$Hg@;Rd~Br2zCuZ6~j;4eS9cyZeBpfL|>C?tx>l6<AaD%@QkIv| z_66^>sW=ME`O`F91Pcs0*IqE)PKoO2HIE0GUH<-!#M+T5d(@m55)zK{n`2{%l+@ILSDWhFqx<{&1UC!w^V47F=8Qaie4bTSRqYn5OjUeUlMJA^ z)Ya7;o|(xIm6j$<;v}_eLF>))g&$#?IAEH4h#hQ;RmtD88=~J zz>LS6IASiN6ITm)&;0ymw99qoq7*OMPSe(8HKqG@fk&BCq>MGvY)U@5+ zUE?O-p^6MCoOLV^LO8UfmYE;OZ4zr}IvH5apthKn%kaxz^91_+dR&ko%Q%OE+p_ZK z^78V-<7V$5fB)I#rO{Ef60z*vw|w1^@5}z}tE4G2wg2Y}i;nsUJ0=*}-hHcz+y^0A=~dp>ZsIl{ zlZtfO8WY-m?d^wlc6V*OZ#uqvc;l9*{gw#{baS&XH8Qgsony^<`MH2|_N0I0DQQ;Dza&3L>wVZOMV_1 zr%i5VL#4t?f7X+<(k2}O8oK+SKWe~JdFb!S1ZEhum<>rAVqs4jP8I@Q3;`8yMpojf zp9@!2W!T)3m5oq%THnkc(4p1$$_0tV{uoC8^UgH^+RD(V@`MX2tr-_G>vPDGDaQf5 zl~xm>UYn!)*VTgqi!UBHv*(VLVgt5Kwn>udhrWB>iURh4+He!_9zyN?+ga`gJa! zB*Y1PdUJE-x6pL$*wD4`hjhwyHrv#>J^6jk>5;xSs;P0xaZS!7DQT@?(9HBP-SqG0 z4TMW>`Hy`B%p6A7)Hjdnlls<^zIJx->!qrmg?6c|8-~;2d%chhj5|JC`Xybna+rYe z=u3yw$yT)$ipIeBteG6F{TP!b=8py zmdch`3>jEH@@opb^`WHWlH53c=vEwj+v30-ER?c6E-IdFa5VF~e#|E5%G0J1?>rtu zr}^E5p$BbL$;bbB=ji8SECOvm!3yaJim_QTQ>{mJX$~8 zr%S=2z5yh-tZH#&QM-9SO_l7nnBMeeNmM*k!BG3vGu)vw*EzC@(Bcu6v~|n5kXx^$ ztjzm-vvEzYL)4=J&WqVkhgTLon^pk#$Oz907N;ZW(CA+a60JEAyuH38f#$Rf^@5(o zN@uj#N@qE_3SU!RZH{cMFRB<^-JFpV`O<1|jSJ45Ynq^Kq>LR$!}mp~pNP1$|H#I+ zb3L!R{My!1b#rSl;g@;~4u3XfQX}=s*g`3GEv4hOrsgTX1fOHsCb{YC#;x!qvzLCy z+b0*B9aGEd^Svwh2knBzbTl+V@7}$W4XqGby-ut@JX_Mk!hQU6-|X@%M1%G(SVj5= zp++aUDCPdrpzqRyDG5-Ngv^$cRG!P7B04#51*e>8_oe3p&nc3EDPwce$m5OIajV}; zHZAE~xXuI%d?de(%Rer1H+h3)^j_@3S=IY&?gCKA$Mg6empbFR!7JPI{Q%M2>YlR= z_weyX2PLkp2abdpOJwUujok+{QO69Uax06DX%Zht68N6}=qV2Ts8gxpvg?07ZhUX3 zoBq>-+Z#IK=2il8KLe_pTaBwV!DqtwE|+K07ag~UF>c}sCiM?mc6$61#;zn9?XTyr zF7K?VjT1*?H4(~1Ahk|GLv#3djejd)S5kW8P3OwS(TwrUtz@B38tstNxsiYCnMO2! zzX{=$Biqz_H*bkRLy=jwucU~)N_-!jCAaf0uN{Okmhf+bxT92)zo-hG^zUu-Jo5J^*1)=VbB#xqU=E|@MsIhmKipkCUs{U)5Yp=Z z;C3my zgj<=hPB%B2Zl{0cRyQPoH#@tYBXv!4(SEr<_vOtu=^H1mGx}|ngx~uuMb?#no4uX- zbGYW#iltZ9J{OUsZ5$c|o(nE7CVxF6-7e5KYfBW>{@^1;n_x4P68S8d`(`s_cv<|g z_-t;aWADv7k&Au1>$4TgL^4ug&s46Y{RzE|(AIbHukZ&gJ3b9aGdi@%_4s}Y4sNWs zY#C*j2mAPDjXAAz6XT zN%Mw!+T!h&diXZWmk@#_8ODtC^y&x^II}B$;Q7JZ;J`q~4(qLuCgV{d`)cHYhAZ1W zkq7b3l?&;aJTlHM&byYci`kZm@MnWYi720}C1Bem3@!UR4r>W?en}D6AZPl>wZ4>c zrN5*UWFVfZM`kmg&&CElsvUUu44$6V6aU7dt|Mfc|7$NcJ;V*3o`|^~7~H2l#N5yk zuce!LR6yAOb6fQC0P7P6$Nk+eXM=-wJzl}|5cyCT9KD0!p(pu$zAGigg{@xVdH58i zWTwxNnKV@T>SPx2&g&Z)nJTmy4Z3M~WD~!3&^f2D7$;`R=3&pqEN;qd)6d>t#%(eA zTdWV1My~g0&BUit#DRJCoA5CLB9D-Qcz9qM%u|eSC)ga?y9oOUW}Xkce+T`3qrVYc z)8HN0dm}2kWa@F^GUzn_sw!f*HcU_PgJp(PsP;GqkcHn zn7-PdM%*K=G(x!ayHBFMgdD~C#dv?blIg>8>+B$+!R7WXd zEZ7$gMxvn6C?O(Opk;7oAfCZsExfI|3+QrqJl`(?r4U^<8b{kl1L^?>JsAb9#hjFTSU+b6t7;_vX!Ej*aH zDb4;%wrgG()ID+RB+SD%16D|l{`g9i#*J<*i~|myb|91|_ZGwmNyJf8uj3WYQHFqTqTzM3pTol#WbT&? zL4q>LwwMdw7Q99^47`v<$$hR2p3aoFiklr!Mnu0fZa%g+sHx_05g(bDsPlZFvK@_r zz&JQZve;io{I18eDMukX1a%=oVCp(eOz*fw* zl)Yikd|2q1z zA`hZL+LDosj!BO~UhyPoF~TMOB8Os_-s1fvq4w3=kO6dY3iqYgqgb*32JaWwy z=f9+|e4*;WDZ#m#h+BO3xO3P)YZ?KnbzGXr|huE#4pM$#|2y4rSG1UD2C@oZARS{8=EVYsWwC+?m#!3a0+!gbS3 zNGL_YXVAk+&_I~^p0hp-ij7Neql7pRMXr|Gh72e25#{tb$|D}$`B;W61U!j#bYYjo z{lq}WpM^kV9MnBjd=a{gb6mtW*y5pEubk)w-t~o% zGS;q_2h&!v5oqJ_l99_xaOjMeB`xEGTs>uQ^=N7ZJc zgx6qsQ;er6ksloDIIq<1w2gp#gM%&zTM7jSs?&$NT$I;;%6suKQ@IZ-Kn)qpNnzG& zSe7|VLB6=qS4}k7K28uBlUL7R;UcuwrpSW`kdmnHeyFGCIQHe*d9;-pmPM*M}+r~uINkeQQ>2TxhNH~_vb_t9m&$}MY)80dMxMRFn zHWjX~;0@ z6vB|3ySTe(W6Lg7<6-UQ+B>YC~I(EG8E-(uX%G&+%{cPZ_R8P z0FsiDB}9Y{KILIOJG~e1=zHHjS=qq(H(#+c7<7uSH1mopl$qW4(Z70kgKIFuIbtB_ zSKqi4Qd6;sehEVJQK5rn7&wP1f6#EO30cJS!oxvHw$oWCWafn7C)ah3=F>wfDP$rO zv^tjBy${F$vJ^_cCKht81!Uf^8kNA3Sbe_fBNN%6Yv>FEz@+GLWv{Mr^hqV7;=n746ilK{-B`s2svW#937c(5`&=m_>ekXXKp zkbr=xI&texZ)xccIPtU}_So+nf>VDZ=VvDx;xP)7J4tGey1 zXAMxuQ-nrL69J@4fc(R%fKXyIy;nJXMjTC*2ulV{fB3KpG#8!^=^`OBkf^&peE+8( zH;cR#jwSm`4EdHl)+tJe1gwYEDqdK`I zvsh)1eM5$Hn+6wF1zY zhwf~((4EO1S{(D5O$qVq`t%t#!(+#dMa4ArbX({FG7PMv@OM&$a_nRk+z@cm`j|9> zX)_F^LGqn6P9`vk_3H7zN+%+66{oLOO8MDIxiLFPeZeXET0 zA3pFDzB6|NzUBQe$`ybhRz3I-}<^u3rjEu@qK3I%>rMcL?x@?#}7yBp)KN3F-l&( z^!U~1z0%_!KBiQAZ@3fpp$g4+ezNyaM7&7Y;(rC|CP&1Rz#Np@Ko1F~e*b>6+d&yw zMC2FA^Sn2F>7Qt4Adet`LVC$NwC4%lD0F<=a72WjSx2Pys=X^DGAvb%1=vx$z z(ZJl&Tj#HNRs^1YP0t_MOweg#-y@7CF~HdUu-R-jJ3U?9wINbML`_Yd-qX`lsaGb8 z=%nk)5_WmQm6nwAfc&VsUz_InihT!_%*DAjg~&n>`0bS!UeupXC-T1K`8`dhr-j(Y zLyFHyz*l3Z?&pwBP{U;tyi*DB-0?mwI+Pxt>gkH`KM=414nl(%r`OhAM!auQoAmwk zAOadDZ}H3q2dR;$EXxAl+4l+IE4!$vo+FLboj;s?_2hC%23g6r=PMZbW@a}amNlkx z8)i=AtE4QL3=NwKniw@19t?FXQ$XZHWW-G^sgQ|k&~d(vCofTg;C{_H#<%P(^>?6)?MM|q&$D6~HJI3=oH!P{UAL=Oy{*q=ju2N~cR3Pnwy z!zA2I7|{8YXD_q<(=~4E{i5QU5>EQ!d5^*=_(6I9g74ZmgF6d>Q#2px-h5Wjl$VZv? zFYpOg9h zUkmfld(B4DP#j6za(ajpeJD*VZ0XxbT3!SGmOHYFuoxo4KMbILhVK1;V9XAEJ`iJ) zMD?>7(1-x1D6&tFP)Vpx%<>;Mb}0}m&lwdh`LoR+e{lsq) zn~tI+>qMB{guo62V0Cn1=*e?xj0FUogNqB7!BWOj-#DXfLCy~T)WSjvv8)_0j2rJ` z8&YL$-#xzd6TI;^Bc-G0V-T~Os*%AW;W#8HN2q@+w~`)+HObH@_zq)Ta}vr-{T$Y28ZKC~*_A!~!V-od!9ofn_7G-ALTD5a zoK~aGtnlSePF_x3H+^sO#7bSSdDSo=G3GMb+r>pig-gX8EsOYcEw<3T;w33fF!I&rM!tqUW-m3~+pd&tpYKCbzhduH=%G zy}ccuwo20qlwjejhz=ev;%5JPr^6fsRyvQVZyk^lJkSST4h2@!iw_00>?H9MP`(kvpy6?^}42Fow})~mu+5-PAF zl7hC6ZlPvJWOulL0tfom$nX6rQH>Om+EV2f6YH?iDnxV{!VHN$!p69GVb34s27zYPg#q6W41C}mBud)J&49_0pe-{Xm{~-3t&YtaiQ1)`1g^a_D-TOhAxAkYxh6FM~kFF@Lccg4e%mX5V#z%>xrtE0Y6S$wj8{|11I=CS_+mb;Pv z5sWo`7$=r;f&}eNR1FPt!?CFLnRZT%f1j00gb9gR7=&Yeqd#G+_iUr~%|A0LO{zt`MK@@Wu%pxAVX6L6VjAHw1E40Xfq7XRtf1IoP0XG910 zVSkjjbCB>vi9|;&%ouZb%}H9_RB>74FI=>_o7*=I4vqmr(iH4Bj}<0?|G`GBU!>8nBl75RC)I zm*=5XhnY`3uke1ySNhi)^Xoq_K^}1r@*4_agZH}89T!o9+2DoqGMvLkNpT3BnbIQq z3`y>m_X?q*S;U6t(Vt>aEwE)5dnF;+5+YcHJW5utWzj$Po(JEw=X-NQ!)nVy-+Gp(doq3a|PUh>{28-+STY3q41 zeNPrK7>^3EZQe-au0GA3R$gJ;wl$GQ;6Sy3A4K%7 zC6Fo7)jPXrs%jPnAkm=;pfXww%}HDf6lRz&!BgRgt`EZ@1c_s$UtbKXLMP!$q-a#% z0-{!d9?(+$j|j)lH?CMIk3T!QxG3_Kyn}{W);v#5OB)#+jA5n89dP-MVtkj*N(+gX z5A{{lKt>a5MZ~Hf1}1)9IF!?#Umbtl zhDpOW($mv<@`6q?;>xRAwD?ZMg3ElL(=UG}GZ6TM{NBdE7*<{T$NO-r)qYeSlBF1e zNaTK!RcbuC!}m%iM5Hw#cf9T3kIFfuF%=rNjCF6TXnWfsMJBLX;a{;45DTK}j%}b# z<*BU}h(vO>$aGuw{gKZ%xl>}Tz98@br@ndTDU+|`7G00E_#R-rMjZ@u0?ZDQ9-y%p zr!|veuHEd7W#pn!8+S;ZWNmL|CTwO-99DsRxDy~pP>L3!QXMp7VO@@`7sxax|MS&->xQOj15v_c_9=x+N!1Z~FOE-C^O9LS} zWIE%|nnW&uT=SWrkT{VDb=`wk{}$`3h~;Rs;(IG%*eYnSRUQFC8@y)y+~}%a_&7cooV9un0DV>WlPm+1=Uojf{A|$Ks_l zVSl8d-br9+NuZ1gWrF|!hMRk6qxfan@0fA2J&UJarjOYb z^FvdkI^jGiXB<5A5XNp;o_zDF#Pq`n;g*}if;VnEkbzHh#+zyVZCMn3#`{rynq$js|M#k)Pq2wyC5)6OdU z`gVJ~uc&2Az;~ljeRuKjs5VO`3S}-wq0JZ}bHcZ#G#-dNpaug3Clr#BK4)C*zn7S( zrv$7!rbr?|-)GQBR#<+$LN6#g_3F={c0|k~iicS%1&&3PMb3dnk;Oia>i|2bdZTCI8#K|>S}?3zJ4O+Z!3fRjmq@_+8xWjlM@@DnP$BfH$U&|#%8F4 zUG#Hni_)j60aDh#M=pO)C@ssHBAoWvL0UTAO2vLhbF%ji4E^Hfp0) z019VQ@O#j1tR6hQf7Di?hgjq-+% zX(K>>pu6H;-i5ooe4LKm$@(os#D!jpsfPrQAmGEqDd z5*#lZ@hta3XMoJQTPbHRX(s(cTujXR$I^#c9xT|iu~C2+;kuIf1;>J!9I$sBvCC46 zkm?$J#z*0y6@SA!>GuC-*?0taST!`vCSgFeh{vajYr|6%ZxQA_6tFK%!zMb{Ykz1% z#xE`kD5N7hv-8i3kr0VGBPMn``xIL#NNi@ zLfz*3Tjf!tceZkzror=#2_9;UZ&T}i9|nI+vog?Nb6vyaQ6(`Rg<6;#na_?$Pvl+N z+p83na<0%OiA5dkx`fOXfF7*|IS@bo3*TmlJ$hlM#X&Z#y#C~;6gy{L_R$n4{qGql zd%4QS#@|Sc+uRe^TL}uRITfTq$kVo8Etpn7KH9zG;f(*q6NwL@lQ>Xz!b29)b;i1% z+_RaSP=Ng43=uSn#Vl8uDb-EI*(@a7^Hl}P?5XWLNNhn5r)In<(V#Pjh5J^^p_h*y z|FwE?zSJPighu3IWMsiukN{uFvmrtDUEB*ZEDR32$LM&y9ovDp7mCv0$}9U5@N#d+ z_&X5G7aZeNH_bw>>zmqxb9RV;>X|tLjb~ELO-%Ovx6VfBZ^iJmw9OG~XIXtzKsTh> zj}*cs)rPCCz9df(9utG}g{!5bV}I+}de4avBohyRc3@V@SlfEE1Ua$%^8G`AASP#s zQ~r)6cmCqv=!IlhF1%m!MQ|&JAR$TA21rFaDBCB3KoWxhq=N%(Dhlyt#t=_e+)E*cL${qu?RfKcLM%92<^&+VM|Zn>}h04M%+ z50XHSpG;cN=H}x7K}&mf6(@)711uA7}F*dx~y zMBWZse27Lg#&O3Y6)JSKD0{JudjDgxa58{aC5(kx^JoD%VE9w#ACRf*`bL z^Cv*Jj_gB`_0)Dei}6u(WasSPmmK;re>2D9_2dO5e}?G@Z1R!=wT!vx#(HEFynFfN zVy?)M=3?kZMCw%;6k;d-$hr(Dt@agDQBVQ6D?Pp%TQT28>ljbh4`7iXtLB+s9WySp z>IIMMTRb7@-OQ{kBf$UzHxcO3i)@x3Uo%EVRB^0A{#tG*;X?6E4v@K}9V@bw)G2Hm zKY#8h1W-y}Dm?eU>04gTA86-JpUZl1?^yvPr_4;`~ zHpjU7H!PVW0;UfYkfQ+T^=t#jXVAgw(VP!^*nH>=X}w1oVPOeTz1`5S z>1u;CujTM?4Eh|*s3*9ph=WONEbBu*MJ((ihh7E`*pnx(21n-=D7ACjS)BSm7Y{ep zzr$+b!J-|d(wuUnx-Co;{QaeVyc*_j``I81~zY`5YX<(>HHTplxQ$M<7hs_adW0og3DKFgFb z!?WR0>LY-=>@17mZfs3HHImwL?4o2P*y$p9nuvabpTG?L0O|6IyPhRsl=!DUx4s9E z1{)D5S6^Rids$qSqXQ-nvN+)kIl*?unr9}1hhLuqXOvrF48yr?B-IuC<+P@OmHz|+c zgiZ5qV%S|5lzqa&gLKUs%S1bN;X>7dKo3UztjW=CIA))k8=eCTGJB`KhMdU}!Sbbe zczB+F$F9Z0;lzdj)GAiU&&}?8V(?UrWAta{2=3**@3z)|H^rGik&2NDMUfWxfBU!F z4hu<0NQ(41(ltvRD$f5-KFn&&?v96lRhO z=>h?rBMG2$gdzmkjuMvg#kNO?{J){5m%kp39OKmyKXx7}gBzO(JC8rlLM=~XdpDff z$Q0EiI#Z1BwIqNTA070!AC8>XiJSpcFD`W9OxE9_I;pOXzZMpdeZE)ur$F{gZ77II zirIrCNb+JpN}}<-Aw)*?KJ2e{29kpGKQiF~GC{Z_z&Owud%=$lCQt!V*avGMrtLPf z@#HYwO^xPSQ9!~e0mJ~Xr+YF#`3h`%k&wUEY~At-W7Fy5}`l{%BE@;^11FUz_ zL>_>46Ym2k`ojkf$%v5&h6?djsr#@!=Y1;Lyx$lEuGTkS#>Vpf&Vp5w$=GcJ0$Nu5 zW|`m`LHXcMx#xVmytcZ!L_NoUGJ0vq^ZdI%*U)xH@+Q*glGnDBX^O__knxkC8Hw~w zjD+gTGnMv}lRgOPc=_Q%wO`wLgggcV-+|(LJzEiHVENm#Cp9=??;Yj=|0f37R5y=2t zWXi&iV}c~W@Fn9#y_B~#5a|GbzEq{hFOfR;Uq5{#GFNX{JLIdLBnp7r zV_J{*G~g%1@o~S2V75oKYhFoi+V2`j)cK5_^|O=03jE_PqES4M^Q>+z?VYP9e-Url zrB-R*suW8{`hO0U=ziPE{?AI8fV(#3)_qteKnBnam}c4cTYj3kT3$v4OW&ib`v`FU ze>)jWC4E+@9@XIjrX#ueTZvFWQqtxKs78G?9tVaAz3CdBJOj9t`_t}-w)v%{GfvuE z2)JiVKp4aVN2Df2zB2#swle_HQ5=?6sfhb(I@-;?aI~o$2pV=+^YlGU)r8O~)5E%V zpV)#RU_gj~1i-l%Ab<;1|LGre`326vJ4VkLwZuI-G@65zkia5jTz!H1cJ7{)EHV)Z z&4odmt<;3~uwL(;(no+d=F?I)--oO`I=(NM5uXt@vcd4Khky+V0B>MPRBOoXBK1z% z@P*&)-o{Qkxu!mx3P1p%y$$~UtN_q?5wFREV}Xyr4&fSNNEwO=!~F0D79nSD(Cut& zwv@gmbM6C^C~>=zi-{aQ(=v9)^}Yec~M5^~s+4W^N7I2Ivc5_4mb4PP-g z^+=SqjJX;N`VMH4#x!x_=@R>7;pu)escJG`X9es8z7R0145cC(V}$>tg8@)L@Gs-A z@Lli4P^vOw@W<+XqH-c0EmH-arWw?gR^rhbU`S2ojDfO z&g1m*a~Mzr38bazHMkSQ-kiu}I`qVD{`wU?v$&{Im+>(UM)9ECyoROa%a@IU*`)|! z02kdNQuTo16rioczOCr|lRbst)g+XB-ZjuL_6j&wbBj#v3aep;0@M+PfrHafT(jmC z2@Pv>dZYuedZxqV5U@{cpBKY12{<;C38>ofDKwc(FDG#^gXN4ykG6 z*8H2LK&Ae053h-04M?N-goF$HlSMlg~^7?QblH6orj0^QTl73B@8T*lA8VFsn$*L z(`o0!tPZEOGZQmp5NO9}iO!_JVx*ZXl8tw_$_7tY#*5`%g!YpF9S8}FF8+VS*1hYq z-c#vk+Vatgl-l)Qdss zL&+kN`8i^h*y!VG63Y(3RS zu(|hrYV3DafVu_#DCcoSM{cfq)ULgoNpV`U~1p>Mp`+JBC2K5y{$O5ziBP4yGQ!P3?oEQlF ze-LqM{6GSG#TLl}u;8sf4mapG8Zse3tUIJ0n3wO20%-g|bL)fTh)R61I3^NwG9r;| zyg3hLJ{(G5=E_)Dl7#!+S!-Oo*%nJEYiVH#U<~T&>Qd#ao0=}NQJn{vCdV?ralI|@ z;lfua%OAj^JTdZ8DuIW@f|!xK8Yf`(5E^ut()JVeb&B?7FwH2r@vP$(TVf}8h~f>3~i2Q!KO`)^7*kS@z_ zvhFO$%6F~I=!DQ>6wike82`iTL+2~(tqEcd^s=n%kOn$m-3UaN1vJ+XoEFE_ZgfM| zO{@vM9T#?b*1In6q^UiCC0ijB;iaXlDgess8X1YJ4*|Fp@*{?`o9lo`?tusuajQZ+ zE6`^ge2E&56K(Hmz%aO8fqew(I15R^9QaEM3o{GRcJ;iZas{Mi?T?KH3D21HA6NA8KRq}1|8e!+@l^lu8#l+n$I7uc z$I3|dj5t=dlo3K?mo0l9j*uBCGb$l_mc6rgB}9}hWMr@Ved_zW@89qK^ZV%WEgwGT z{eHc!>v>(OeqGgL_s#nY;-ujlYd5#F-0TrIdJ~O36c)&GpJZ^(hbGeX!W?9e-5tOin`rUvO26>U)T> z)QcB%KM#`U5Clho-#`DlasMUTA8ypy;Ru+N6DqWUn&g}h7MNfsqPAgD8I8_d0T$M@ zB8*P}K6bNj1!pcv9#>%7%f!1buD_ueWM~^dWVznKlo8I2_{@btm;3r5{%uQ=SgDfu zHA;^XKkSzZTNpe{<%gXuF%}#V9?yj-%H==QvLlazV?R}a*iRLEPF-~O;DrdlM{XS6 z)KR6UtZzSwk%>a3W98{j{D=X%^;3^q@)fIxJ3IV3dZW(;Im(fRRLRNKqQ5TUoyY^Dmi%c^nydKYICSl$17068^pUuE+-|A3HaP2|>AAXrwdiSXK9#ua#m_ zL;BunYkD?kIUwUwJoXPRWzVjEx&nMWSytz_1Tb`1@x%YEx%WiFaBaqGAb39qkBQOq zWYYf(Fg}=)W@{{hZAN!4-~26V||z zVv~|P<~1WhJdkAOGCe&r{th)_ULa;t&l9d{(yo22OfBxQM_*sxYrZ?W14kw`YT2Tv z)+R7?VvsuQVP`x%?1tQ799D`-RE0NYA*u*&KdAvURON~?2(-YLFqvYKd35bK4HgWZ zvi>LK?4%e}j^gvTHr{^)Q%DIME}>6^6$OdBbo9|UXBAHo1d)Vlubk}egX?Y#9r~@4 zXz%lbJ*7cj#DRz;Ju@TlC8Z1s@9bi9KkAm8udVgDOgkYFr+@MlN;q*%xUUV37E9bq zm9(S<$vhJD+_RXQ=|k#PGe$N`7??3PS2E57 zL;k_l*AzHCDOd=ZYSYOD{&@B?!q~#%S^Y0NARsXYZY^yT=5u&@jJq|>wuGYGt~MAZ zP}{&ySOVk~ut!9WJ~WYqQ1b06Ei5WB&41!t1hB-Zu;^&f*j6+5@z~x}S05jR?flSV z)GJ|Y`JgG?#!ZWNdVpKvt_pZdvn?|g2Drw=!Jr9&r+!_#FJi!;B=Lq#@3rw zx0al3)3qV^+n#+fPVn#fV+VhtpXaBi#SE;h;wJ&z?C&hr(Cz7l;HyrPqN18#+S#cT z!L+%ajk|sk5-fG<(5r||DP#xCfCD&Ns7#*Jmvd<#^*mLcT(NjsTLzN5ffPCw3CADB z>6+)Xjb~`s<+gp5fH?oMd@GyXWpB_+hhW=g@YwywU#bHT57K-eJCs>qxWQU|eI7|B zJ9N&2v@j#IrIVR$8}S;R*lTYr_27KNtF2Gd&a;ib{vb6O66XK_%90#VvEhEJG4?z9 z1{lXj8U?Pd5h%CPT*#Wp9B+*6cQOjm=cug>za54$h2Zo)!$JdT?7+0Hsd1IEc?;)A ze~N&qvL`Mq2H{wd$_E|WD4XQ0{f+GHfwScDjap=KqR?%_K_EkoiIDcfNQmI?JhU}q z-L)4sO3axqxVY^`W93y^zoDhC*nGePkm;vLsPVKXRZcENSe(ZI>3|arsI0j;y1#?r zWeT^Ji^$3%O>nJwnJl#R7jE;4tx7Xy5n*LOF#5Md1Ejjb!_d1C*tfH20W>)E!KP#x zvhJzUsZUwY0qb@GR{`Ybq^?xHmLMatX@P*X!{5SGB2 zjHARG^~#j6YbHj^^Ywy%zutkVu3qWah=!KtW=SR{rZ_mP?>29MT7^H4&Mkh!+QZzH zNbx&ysVFavrhUib*?-YDHvd7^wl|D~Dy+zt*JpA zUxIxT1r$qWxcDqCm<;A+mIh%k-xgLHAV_NtI0L7_nR89nVi8wZejb}l2!!X4`kK;9vBhhM7lBJ4*Ke_CkG9fP!?_SeoOy= zGA#+42IB;j+k<;Mm1kU8HLR4D5?V-JpZAtPko-$tM6>7UAk~%S`Z`GMAl*i?m2!R8-b>wqB#mY}tJ< z5!uM=>iymsVFFj^vrV9&~i|_5w=SRqecRd!aZKhx- zpSM5oMgQ}8D$${mXiEuvkEF>h>XHEtSUvVCMLviE*04QAy}`u#hVK^!POAzk!Vc!V z*L)*UtSHnA6iPLHDz0y{OqLg>p(|) zTV_uYt7u?bOeqjG=oz(;1?I`Vl%(YU2oX{2SKg|REJ%HjlFXatAS^CQ4L~bkPephb zq3(ZSDKjf4-hzZE(o!=m|ECK8y#k>gv+h>O^0V6lnt#UALbpu8h}g>VWFD9O5ldGP z=@K9_QMlkUK9=Jzbrl|l&yHB%WKQqzzk<(YY|Ds1F#+%eiAItQsmGATqfmZH)xKO= z-mx0=;oJ-(&s5+3Twj;Vx-nMxQpHk(Kv|je-d3UObr`NPy?8jr{7p>}_!teg{wMw^ zL%CrnHvu>-`eA=K^oJ1!Y_)m0IAN=!FahI1VT@v?tTxQLQjP6ChTu-z{`XB%0cWxs`xJw#@m$?u&Wn^As_Yn~4^3kGD z$Wbn8E1d1Lpt+@+Eln4e^|q3LkZ|yX{9&wX5_dk|Wc|6_m+2^GX&$0y%p;LsUWb^5 zRJCv6Ukyy??EqBekD{!Enn0Xd8ky8W4#S|=^5KLZpVfI;e@<)GuZt?lV+lVVdQ^ss!0G7SBmN>opw zonHG%=IQ2;Jjj!@-fObF@4{~n^q{yBKW^DxKR74Q^z)UF1&OFRwJ11Dfe~abz?Eb} z1r0VZ zA(+%@QSfJoEeL*PM?PP6=@C3^@Mc5h?x_(GnNd+3(AuY1)g8~c5V@a4_{1KXEnIDL z`bZ*TYo@=H$tq!Q^~zynQ&P&u{|}MuuCeRvbzZDMi&LP6tbHzj<>>#Kw}~0);=3PZ zib7Mw(?)tVShb*VPppTlY^N;*n<9pbRa$;zDI5Jp*oE`OlO0hYVC*Mr0es3$g(WUn zFfdclw^wc?jBvxl5)6=ACtL${c^ssWx!2Ke%j~r=tH7>mtmz?*A7*{4=@YYO5-RaI z?W>1`MDY5<{P*7A2lp%eGsFIkc6u|hSjDx|u^0ky*Zrbw#%Xv!efeW01}vCu-z(u^ z=?IA0+xG9$_BY)I>{tZ!LX&##M+-@L=X#41)@oeHjepuv%nJ@u=jg( zKTK5fjl&YQz;%8dSY6db*OV9~^NIkE5|_q`1I9b~hz3$$d9o=3p6M8p9y@-TI4&XO zl!VHer5&>b3!USZ60tM*EJx^Sywgam%gjtgnABW=MfwY*I zA`8FbQaM6`BIur*M>~QbIP|N{C}E5aSI*(B|AxZ5P{9?1I)vve)9d6HJ8nk=o}{aL zPl=w|W^`@7yF@_oIse@z1OZ3d)uay^Y)AzC(*YnWjP+DCTd1N^04UQ3wy%6=6Qw(b zAf%8%2b9G4<VTxzZ@L!dhWvYL$a)1{01N1JTrNT#rfoO ze_wfL2e=tMUYxn*t2o=o+MIfs*;JK%(j9cwKUB4lh#eetIG~jPkiaAGFILmT57U1Q zK%1D%L|YvTwBPS6S&ujQ$Gg-=> ze!X#ljLz(2UIgG-PUo{f`@AO~vt)DDLs=T%cWMgypaet1_DzZ@G0757Q(9_Atj6sq z#HN_Za54S0gMzK#zgvT}Pg{V4LE$}wXHdk45UaQE0+U(?V)N(~z#;c;~(;)2WZU)7|xz={k1myg2V z@2)sK)HPrqrU=##A5n!V3e1X#QHjc@#`BjTr7kQ9^-Yp6b<5HwQS?!|GHHVi;92 zWiyJFBtD^k>GYIClOiaEF#HR#GQHfc3=Q;Bv7H1QQV8?_J7B0l+$vugX{-w2EzTg* zJQ>M`NU_pi+-ihy4;={m0P36AM zU3MU1Y+1W-j0^)&2PfAnR%Up(=z*T)D1A(~USXN0IxXv2G|p5j2t8r#Ti{Ck&*ZVs z!x8vE?62!Z=X?mmh|DR%P1)yk7Jd>gBDb?FOPuD}6}b2;T<9Y93F~CDHT@cKFuNbwMU# z1FotPtdi-TPSS;gyj!&HYYQ@brPkp3BgLZD0%z_!ySoM$zoqyQI&k|vfhk54!(UZc z6L5_DhH}BOq6xucDt!ZeeVvAM_o7J8zOzzoP`J{!-pO8>T<^AKMPEsUY)i5XsRxyczHSW2g#HN13?iF zPrgw^P6=sH67<6e=~E)|Zi)x7EAp2*FjvFDC<%CgN6S^#t^9?o3Tsx);U$L8YXUXA zO;a7tCiVW9_M(=2lL9K-DZLwi*I?z;cwOA9Yx)uyvls$RhX^g~PFz=-p?Eu-OAZi1 z&Qe`u4u^Ii5744>uvcUcK|xaEupxMng*PqC_(ccmZp*4`)%FSeBbo zz}kptAV!om6iy)hj|WQBfP=GCPDVpEO@C1^R$CIuc*YO=_!R(g=VEe4N z+BTL?cP(3<`K}1KN=0?Pp_VZn^nLcuhmveS049k67Qo$JExTpgibB1f7+9N~-S#I* zGtV|+CSr^N3WoOPv^={W4nkC%9UXRB?-YiX?FaG`0IoQd0}gC{j{!BXrvQVC-iH&@ z_VMG}f{T=uRCyJg!g;WMq%}0i?tZy*?|OuAC=A#7?jNfdz$bLp&}Y+&b*m+|$gkc* z9xl8>pdxpG<|1=l#+p7{uSdlF3cP%UyT7ld&eoo#^yU?{GaDzFQL}CSlM3iMx+epxILtxJcZmOa2m=A}_7q|Cfmc z;tK+XCU_O|MEGWKls{Mi_fC~0g_zZ@a(Kuy-R>e)4+%unk%F}ffB@Lgd#b|~H^CFq@Evn*E6`;h_wH_I z(^N)qzM<@z`{aGvZVaP9!0DTjredv@H5@-kCL*PNssXv3_4Mz8)x!ZxFTCS8`9I+| zVFd*qI7|n;QP9t7>J64Myh_U&Ah!I^XnYyn%HIxv95t};9CNNm|NHMYu167jj35K> z2$}d?gr{qUghW+L*kPbc>f7TVo1aGIld3shWC&~Z?=As(6J$NbDIxlA92$3W^96ad z+(YiYFkdhW)J(9iwCWugs7}iojB&Esk!`O;BT7hPa4w5@>dW-k6MlNbN_qS1&Cz-Ya4w#aGvSfeE-am!_XcoYcVfHvWFnpfy~OE{Ds9r zL+v0uOmZ(>9(OLOGQEm(+}fFla-WJ93t+6g;BqkZIhKV6L9nQmYRo6A+JL>suPj^F z%`C=`?F8KCGF+Sez`8Z=de#`M=17eHV&#qu`zsP7E==25lSs-=^h{f!E6vp&Vi+=~ zF{r^#SC>1s&7J#--KQaH&hq!~Ic{q}_fV@f!Y;6HXSp6-!s0qPB|!Lm0uQ@vaQHWn zoOl(UhcPy$PV*AD{p#k;omQJm!CIG8p-ZW8psLcog^8hFX`R_C#<}pRz^#8GrMFlV87>ZXq2w5TvAf=}KR(U#khX zG8LdzM~GUckOv#bZJ-v6r)KA%z zc@dTs8rHYJxDpQkJ;zm$*I?cp%Cs`<$t56Y=1LT-cIZMm6FHD(fmOfU+W3PTwrGnB zLD~mk{J#|d52L#40jsM+%~2KY3v@TLk*q6tWx3!-t7CMi9E z-~aR*k$UHswFo|z%PsRXSRnAp`ZaJW3?s@x5?Oxg`xy4BZxf5eG~y_IO-tt(2wQ0* z)$0|@9Zt=Ja`6G2vt_6Hefg2bFG;LFHqhEs*HlLpQQ1_DQjw)ZSvom=E-n!Qhh)H{ zQ?Naw5`ExBfI{I-otud!Nuiu$MjyZVaL@$@*x$HugD)gYa@nSnm97hiE5* zu~JVHsG*tCgr`%eGXb`DZ48(qcJmp|ChE^?m*tLO=+)Is6XQ%VIywoHE38gjh` zU}LsydXa;6!HG$$>D6Wjik-xGLyt!WB2^J#=BJCBUxK%T?X&fh`DP}0tQ<`tWMJFc zRFcf|^OZk;wEJTR#$$kwB?o*ga|a^01PFgmqZE63}WAr6ML7(lV!=Y%l+A2@Ty0qw#KJoZR+54D)K#2A35*9N-CqTRn-BQ=e}k zQS^9#7o4x?s-8L%p|N5-1CA#Uyp3Us#Ol9v(K%+NsXqhJ5B5wRsIZjNEZ`#4_)|Q^ zuHMHZBZkkOZIb^2v~qb%eviN^&V&hHdxa+U4qxk|q|2`SSxY??4J>9)KUu%TM^01J z?TX19$T=meQ0L(-{2#cTn{TKJL*?);#mL`zA@Nw)_c5suaDYG*3N+sxo0+G;>4rGWY}4mJP~i^7$*jbXRQXZX-#;AL z?cQQ;yJq!1j8afX#NVF;|M_1iaxFQP^6BOPV#+b&&+9GvN7^~ z92=VJtX=n=am=di-~-RYrYD3^G>j04nHi(>xO;3@nA&x~rG0F4&?2V)z(sJ5I(4t*z8G19$l#Z3`M68r@Yf&dZm(F6+ zvp!_6!pUQaFzgKLPW=g_sT;TX;knwcgds0@3%C$!6x?A!@*q^8W^SzFYNJr#eaYdUyP zs!q?8#^>Km>B3k;UIwKUrIxovtfE=4uIFlddU#Q`Amtx=vZ2)SkJAKAvjQ!ir^v&f>{dx$Yg^(ul&3?qqo^Ta zzRGgrXVQf8&rLi+Lb98AUa7Kxbcv8#7SLl@!r!}+!0s}L2$aCj2AyYrwi1#jgp%AV zuc`v2oY(E{9^O8dB|O=(yeQKktuO@%*Qk2R|1Sb^6At4B%V}izEX81NrjviXkv%Rh zxa38Hrw<>4ewOz%4VGSlBu0_oAbrBVOM$LNhU&;nY}D1Ho#ruPgm@R;DuAefhvydf zi#cN3r|}@T7my=?Lo^uzx@*KK%5%NaS_Jq&RnG|8_*)yU#>wBQ>z!oDqJKaP&?TMt{;EQFnvp^Hp?CJAz~I9C+el9RIplK-heO=+-mojgx?DAh9|c zpM%P&W#S63c=ORj5je0oBu0q?=S%uVbDCLM;8?AjH$+%L;h!Z)7@ysO3t$B@YJ=-d ziK1ZR7MZ$qJYR^YzXYIiG)EOB`dp>8!~UTQe( zjF`3X^1DA=BPd%9K+nO=&EWf9m9L#R=PZ)I1p1O~GLmrqLv!qME554Ppty#*d(FGo-3;iR)-x5`yS z=sE)d%Y??IJVtVk5n|i}kID}jr={&i?`>C`4WClrr)j3~iw3tm1+r=Q@?R~&iDTS&}d7XpPw^?dzTS%4oF-7AtNJf(3uIz90euz|0->2cP08R4+5>G(}4puj0Y zp{US!hRD`%0LRC=j%p3&Y@3Ym#xe+J%ggIfhSpu0JQAhL zW^DWUK@Ypurlq8Cdp?6u!HAw&68`O|Zg@*DC;R%j^ zxG@4<4&^Fgm)dd{>*H8t4r4n2j4SRE0T`Oy23G|s0fjybSLG6z<_ZGWq6GwJ%J>`O zbL4Lau?W1^D3rv+OGmxH#Ac<|r{ffo80bK8%;`9!y%OhVlpNUeAObv zuw7t&1_l}c=Js+y^U<+B^`|s7#1_avtBA@TxtWt%wO&@oR)t930R<+{AZ*%pQO^rB zDJjvfi!gf$@Q8|0=qa@hCA65Q?A3D?3B0v=?B01+Qo?e@mRz=W(yX7U_cIA=>sF6j z$BkWpFZ>QVi1fNxIM#|8=uI6ot&c|Oy+H+m%~j{~NzwX!cOzrXPfPRNS4BS^_wT*R zHu6+NR#)&1qd=CH5Ri5h_+bxeOuqh~aQ9_VZy$>GIew>o<5jRkfG;tEQ!Jkjm#N)S zNr~QJ-IoSG%me|^d&+v?9c`sygcGwKoF6szL_`dL;VCInZ48l#saPJ9c266PZh@vFjgVVlg{9ry$x^?OG2fBLRcHfiK_cnEscEs?*B8m#)zWMMQ|99jKzf2I&jwi2?kHf1tfmFLkz&<_$_e##FE1tKn>b;GRCl~(gDbne~cnTT94{D&|sf@Ba20lsj!)k#JU~e>hGx6mg!;M zy}ZXuQUAQSq5(J(|2e;?2M}Ce327`arFTuLQgA&UnHJ!akUgnt32gb+4;k6sY&1Mu z;;d*S4?Agd(l4ofT*5F2UgatFoUFOQ(?L)ud1m#g`NSvZBds_Xh!7;Y%-Rmt`~3bo zSR*iHl}`_51xzc5C@IR~RwczWC_)hpb|-F+U-=O*(gu~5KHv{OwC~!2VO7CUNJYtV z&58%}9M;D4G`X|k$&yQ=daDR9-tlmCV7Ro!<-b6JMUr_>iIP{ts0c*RVs0Gb0pPSv z3QV)@9Kc@g=up1)MEJb|$oGd0mfMM);la|M2v1~+AuoUgvZM~LjK+3{B#)QuWFsKp zb%1NbU^ZlH+`o2GF2lKa^1+8u<_xY&m*SaRKIkA@e_k?x%AuaeqoG!pTN=lCw@|=V z8!LGy!DvOAXP>7sWtU+^dixi*c}F=tR-T~Jjg0Q6_$BY>^T3{sHTG9M0(t;Qt?-V& znKN`Oa*Mtl^|RiBTifYozm4tB9aRR8tBwvEA#Ipr~{wYjWQ=H0rT+WANCSmA=nx*yb9l> z{5aJj^tMZyAlg!c8Um1IZe!d?<2o|beBliz=hCPAjn25P`-&FSR+7yi56yo#1!@l3 zRrZ*H4iW^iW~jS+LvalsBz<6C$txzOdm3i*6B>?lM#Flb>L~{xuwLfIw0$j$6n3Mn zeOysfH=NaZ=~--0y)^gY&O1IfLMk}22EK!efQQBUNi{7g=~mcv(68rzRX5EG1GAo` zPd_vByNQv9DX+=ZE_5i3-`E3`EsF3z!7VEE8__G8cFVItU?0XCf{@v$Yqbm$kk>75 z_soK~GqGnO{_Bdfs=jD|mmvhNybo%sR?e+;Ip)+*fJ_S#p(UMQJGoA|IZat#Xy{oW z+#T^gJlx8r<0$rBG|CjwLyT@M5n)Z?pB7Gk-bK|Gk4-5{i#wDn&gbzN;6HgNi$NDL zd3b|urIL4h=Vz5x|L`M@t^JuN^pckEB@ZmP(1H7tvYuw8fE>}Kvm4_FT0!s4j0C2; zLhl>2<>}+%<63Q8+ChhVYIsl&t9hqj0=_yu<7!9$dPlZIgp}*}x{F~?==R?aCj#xn zG3Tx1z=sHp^)|Tnn&X~i26>4K8c2wG#8#mn`6(e&>4J~W;FJ2ZMjxFM5$>A-VNk7< z&|_{4`fr>Ajg;b*n<<+4qZIP|y8LE@2(Np4jRI5am78(Vnu!of@W&_v90kL}28ZH&oBgf;1O9~$ z&>RK-(;O*bpFZi^1zQb?E*OHsI5|yV>iuh5#Px!q)$Kx*d)Is7Ze*ZvI(v$wX-chLiu7QxC0fEs>px|I7xLIyw z|DQB7D-GmLF2Ea4*oW74p1#H) zG~gt`Wcuwg_ACufwLoq;QaV|I`IeS)imsW2GUy2q|)PGUu^V~Dl;@b zap!jl!-q?bJlqyIeH?taHEzJq^Q>h*ynS~9n;FemOi}G??z&OwLu_m;z$gF*jYZbn zUPEQzy0Lbofl2}Dti;^@|DT(@4-BcHG2t{STCqGH*aimxnC9ZYdS9o>9MZIVNCDVaFd!3+a3D~Fd0aLpVrkT%&DNg`jX!CNG0rm;`CxB5y7o}e zSk=V{3`GLons7W#JGFgQF-r6ec+Q%LT=82}BHf}DV6*@#H@M%u{2Kbyb*x#NbT>bb zL;GQDY8aHufa`koronG6_>-m7Pka|O#8z|VHoSO|D)kEHD`CpFSRL|%{NQ2WX9-FO zaa5a;vfpAVtIiIeHGI*ZkZc##oaS`f?qzQq*5wQ}znWOmolEVL>BBhVlyZ=(j%F*~ zbz;c&c&Gs*@kY=ry|z^)shEM)#;z z>2?$zCYwbWCrL6!i^R_LAoNVNTW`=#ktAl<&Xg7xl#^&&UM(j9`#0VbEF|?XMH=&e z0wny19$ENhRd9~QumT(BD+LhJl3$~?+)wr}=Cv`se1Od%6aez{E=h`ydBeQnz$`F~ zeRXYIIJQDV$*gc-Xw47-Olh4Qjn)0?8#+p$ZLv~d)(STPQ%WyrW5kj37?`S2Vf;!t z*mR!Rv@V24NK5_e>-YvF61V3bax|+9A`d?pi52Wnl7nF|(i-}goHfb~_3ln@Hq2Vh-R0aE zkx0?_^1sVo-KZGSiQ(J;=oQ5%GE0fNYEpzMO?1}sBBBf&$GX>@6d`zo3K4v_=-1Lr z*?B!*-*Wp}dRk^*#*u`~J(H@0gp)FsFT47le*OwNg%DRFI3q^zPdDDq0a%}d zzDI9ui^YIo847x}(OK|&Jp9^X3vfRs^fQH01B0jf7L*0EBL!haMKMa0Y+_*Cp8OoZ z&_^FT3i=$5cKU^~A^7aY_k^`u!EcvI|@s-Y^>{E2nfXELE;wvzw0bcSos=q zDeN;q%xV;{Q(M z&UWaQ-XKVVx7jZ4RUP%Wtnt4C`PN;}tN1WYJD;4oatPZV4xDe`AkB9#NPV}g$jM+Q zJw4m@Iqz~Mihg)?`}|PhtXo0qZPun$j0^(^$B1)LLaY~=zDjV>2rRX5y7=RjAi9;} z;0*%8IXphDWME;6u6D@ci+nq6O!rg%iRN`y;3OQi8`wke_pLHd2VW>PvGvYB>-ZY5 z^eQ}>U+sq)C`}6%_x14}BfzHIXzrS~$(sPi`Q#0>vj|#2m!z!Gw zpih2EFMcJ2?0g9MR(;z?qwlO#;r!rY>0bK1(@2Hi4mE4=Fu-zFv4G&g8)UgKIG{P$ zN5InW>lQK*;N(&IMegWCJx5rd3rw?bB5QqUybaKE6(fX{xbtSxDoIC=7SL^N>`eWy zjT++3wwK$V$;p>a;1~2n2y;^S;^TID0`^>DHn8eQlmGjgDtzvsW{*a;A|lmI?pgx) z0T=+d_e>h}C46r-e}N#l1Kcq<(Z340G-Yt|jF4JcDhmU0erf6wnM)ivIgvZhv*jNM z7<<`)E|hn{8$2zJ!6!Z!iX5`0ci$X)5Mxk>TI>{$9&8hn7^RDRux-+$E#AKuZ228n zZaL0yVS7oyx0amyx(Euf+seOpcGXi-V>}!_?{67Cmxgi#%{gBcX|+~@5@rO}rtaY*Ejv#TG<(ySh5?2@|{i)N=K@T1j?(T~S!uwr}NzF*>?Uh9f zVcHIw0UP>iy)epiKt2)b>&`dB#N*jy_{nOpqEd{|I1P8|4nOA+rV0qaj!t7cJJM3v z5*8NiJEr>nWT}FP9Mx)u<71%}fnu_^RtHbjV4Ubya?)o)r3I+DNX$R+bAUZGI#zX( zyQ!)wpR&DGcL}AN1P>diVPTwR#5D&6K55BBg=NiC4$cm!C)uZ2v+r}!zac+l454@X z`Rv7?1RZ7*=ftStp25Chezyka&~X&Xo&u<_ya_TC*W4T(6@w$+4-5`E zFGN1#f;IANZZdcAU#X-BdS0QwfZIAwgAZFKSL4W`L@VdYW@lX{Z`A~q3N%ptyvTE6 zIMRCeN5@_Lr{-g7YPMlxYEUB$?c&A;nNR+s(dFkTz31|oT;&AMG>{IV;s1u|G!^XY zf_!y633TuUX6!M7qZZ<=DeXb9OA8fZEBdLgP5LaLg| z5BwOX7XnY9KP0dO>mg;LjC^%dLNre2nKUtc$Ua^L#SM#8Kagkf!(m$4_tsiEKbJSM z1tmUxfk%sUO6ObDTm;P*O>AFeKPGx|g?XO5VKC=sAJ^Y^0}2x%4hVSo*N*0{j0z)n z+UWx|pBjq4&45~GfBh=Td-TW&)b`927nbz{KW5?#i7?ZI!fW}p+TQN|mvQC7uE55W zpiuIczn@=^d~__MEHrx$hgS&VOyKEbqAl=csIyeRCMgM95>D0 z)DhTlncFKnU%jw9|C4=D_1>oyq$L|!$|&1WpRKUJA_KvOo9J;v?S{dzbt2&i&j+oQ z;wW<@W$470&F!NPDxfay{8~-(m`jto{fRZx?Z;>C^wX)& zfd`N77ReVyx5hWn#bBkC_yU4M4fsibT6DtVr=PPfQ$Kp}+&gFwomHUlKzRV#+=Ida zhpm^!Nn!T2bnyKAmKtN`1^e+{;Qjm40$1rGRBuaxOHQ9EP}U33$b4KTLl2<^5-~fA zg>?xohkI2q2lbIS!H&!D}SD<)23^#7-b2`!F*G)2=q3xS0s zV5fZ(KBbD1#VE>x{@l;!4J`+RX(?SUU+Dz1NSwERU+lHGy|6en;6ae8L*W}|bQ|+z z;4Ga|v-AS(Au31e;UixFxp21q`<(our}1pR?8Aj6gKk>dx$)GcONq|d_-EpEc=`I6OXC6ih%JG6PeRFvxoAyo1S; zUxD^5C5`43fnW#GY@JUOWHS2?IHl=%5te;jHAnQ(S+{!Kx6Vs$E^Tj>1f@L=}oC|fiCn-Wm8cEf)q z1N*Gt1p>e1q;+R?9w1jr&jAoW##5zmiD2j*MX27^*el(Y`yr=E4}G(+h@9+FV2g{C zg5zW16#_KQ-2BmV&@Hwy5rz4FU1D)ZV=XAj4)3~LOxSXPC7&;=5AASir0`aFM!!xf z{?jJm9ZrJBL=y7rFQx3upE*(X1cYKnOXfWpe8bKFsScbs9XK&%SB|uh z6)E-43GdxH<9$!~+^@Qy#gpHsHXM3VmL;}{35t-R738i?B)>6j0e)==g1CbJ^4WK> zzFKswIT=1IttaFF^l&=W(3>(5;0_`Pyt^Nw2Ap{>oo=$7zY$It-F2)u*~`9|znC=3 zl;~?N6f`D6qsEH{Bta0f`D`0ESrO$~HK;`l5BYr%Jj>t46^@d8aP;Y7H(Mj*v_(#A ze7_q6$x)K$+(9`T*h+aXY^8i8P}7+qG|C((xImj*Hv|6vvjWrESaonZ5$|PPa{c{* z!ySgpPuS7<(Z*68uSM2EUM;+p?b*{iIP1I{1R0(8WOG3yFDpL+;Pie{2vo?{kE#y_ zjVlDTd{^|76|+To>s_!+C!!_jgI%fMLn8tKY5ad%e-vtpLhlX|A)3DLl30BbwQoy@ z3+Tut{3{rN!x@EB&fO2^F)i8Vs0Ifa@0Rnji>($H$T6qM62E3N%Ne}lufLf*Vq*t= zP!2{I#SrkT!xnB1_yq4{1TCQV*(AKqwhMXNLFGUYp(rESG{5Nr_WQHW z&eR!XX!-SNx9{~LuY&{xhtk~JHr5J3D`~g6p{pJ{LYjUD--Mb@=DbbOgxbE5gixy^ zzeVwpn2nl^W&hnNwgANkY*46Kx)esStjS_CDw>zK9K4n|l z_z==`_sgD2opJT?{KfgfKzGael@qz=C^ukP+jg6db*HcUmT0{N`4{n>;<7swBbhwA zRL}_91sG*R_JW`^qmAM;m7GboG7zuqGjF^Jza1A!f*X4vV~8J?#%EHnSqejY!n-DS zck#v2GK8nyHue0@)2ISzF>;|~bu+{!BW72+9Dv-11Ob_o(29yU;D?FWo#}As@tU1rmiMMoP$5Mc{NVgLXJDjDz1j zu~Na!f!SC%(%@s=Y3uX; z{Gf(JsOw^Vec%o0$6N1`d>gmG{%Ws50%|KRdba|k5I9wvGYwKo#(c@uV`QQFdP|_q zkby$-M^~2}aq(&pRr6j6`Dp;L+pg@>tmeiXm?DmN<7a$0Gv6F`zfMd1c!59JB-XOi zr7fQbr!^WMz+^7x$+e^Cw0&!O3bozLiC@jReZ9-Y?|gBw9zn&cqFoU9MgO66ks>=$u>D>r&L!YUdXvSQFd7--bj0kzdRPP#$7)_c| zztTw`<91ActC4OOFqwRDkaaTDKiD78+wgnlEQl^W;CG$<(a`TqpYILJr$fJs!k<5$ zABj7EcGq2vQzukHpWb4(4Voar)uMs6q#iO*LJm^ugqu5y;S_F6Frx-x-fSs0quD*^ z_am}5))dh>uRPe|b+VrGBDUhc3Nywf3&W_8NC)*SlVmOwzkS0-4gk4E%}154KaKz{n#gd=u(1lr%|{2uEdvn znqH*j36?WAV=h^#X89cy(iEuqq@Ch@ZQ2le`$FBj_sI*M0}iG}yM@P(o0U`HlC+$v z=p6EsS9M&y6-HZG83<$&%3_o>6;0U>MpY#DRVvM8p-^Tn5@S_TVc0zm3dATXiSz-v z5pkHJ&X-^#F=3e7kf#!SL4{z$gZqQH9jk|EWbm*tACIG5R$cLmQm7eyE*H;TrQ;Ig zM!1XLPZM>`S45)n?TT|B6pq+WUB2DCI=S8Vd-q2*eZCbujMMThP;0x}zHxu%5jxvy zC|_Qr6G+2*)2vK*r5!V6%A7z^P6x|H=^05XpT4Y0s@Clbv8xk?K7)KnPu~zV(@;Rb zaZcTlfq}F1owaOsh^DE@_#%1yb2c?3;AMp<@EqyXZu?`Vt{#;@{5(2cTG2PLA#DGX zx#i{L&K4Hm?OryDW+_Ho#@NbR93^>6z6L=I^l?QjJNeP)j-QI3GQL+nD=9~7SfX#y z!NV+oS0EZfhq8>3{;UBZL{OCY9whdt)oJ4I?9pWEnglAm1=nlYdLr7l*YH|9VLW?I z%ai;(qQyvr`faWTVK-2)5TmS&0?rL6vSUz(~I>`&V3Sr)q@>E}8AQ!EPSbwxcRMtg5AK5qNcC3G9L4KIqq;#E-y z$SKD^zxL8V&GcgR>l=x*5`B9QegaP&K}l%pKChB(dp7wTxLA+VZAGP}qZ;JoM!tO6 zNdKtnVTjrx=X=-ty3gBVMmWGbZKAHP;f}5ALe(fVvWzyaEGcnzW7H52tR=*~^7ddl z{Pp|vftTTeq+3;;)`!N^6A^93a)*M_u)2tk!XdqWN`^W2dwItDb&g<;x^>t|Ay$sCGznd%qCO`eVvu(F%e zr8M(Ih!0ZJZ0@0c2xAgjHvd;d~18xpQ{~P>V+}y-? zj<1@kKF#-BQp!TFC8Z~kYV<}Ihzf^!t%k+#3*M#ROhs9Kc56M-#o%1sB)deqQyLMC z@|Y0gYv2lW-zjzdWST$&Kpq`y(z70?%2C(M*5@7tX;30l*w_(CM1AYeo94vaD^FT= zHVFqhJt`}?-sO1wzN_>uXJ_WaWv%vM2DCdgp^VNkJY-)LnaY^@U9`78zr&pvbI?75ms<@rDI z9+~p_f0+8}sHmf^YZwL?dgz9syHOg32BicIaSj)9U=gvLn?z8tk=hQlUBZz}Lkq|)kh3m3YQ<2Djo97^X4bsM#b6#B> zUo^kPU0Ws(7amz!GOha_Xd)30ptHDDCkA}zdu*4=mEKi~mxdl>dObD+`tf3Bm#9{? zVzH|Td{RuX60Dq1nZNui)jL5D@m41KDQQk5J4%j8d%&oPdV>FEb8X(c!wiiOYi1%9 z5Q!8C1Tw9JI>ic|u@r)QL{(^I1rw2?6~j%&Vx}qod4rRU>e`EU<=mR(<{IoaH&=G{ z1yRv~)kf{y*eb{wSU^|Uwg53HB}YO2pW>rGu~Mi&Bl<+tmoGoD$9v4RKca@W{n5jD z753~+D!vm6$VGtWk6|T9dWGa`*M+vW+c1!XsuaA~Z)M^Nv1BlQ| zU0*}71-e3{MX5v!G-1MfgTLb8CdQAgor22Ui??Z7<8;WIncLfkdto%-x$#9iEKAUA z1e0^XzX-vRhDq1=Croc=!)g3A8L1W59nB}|ODd|D(+MXhh!RLRN4!-$9|RF$DH zpzg64HuqR5War92V1k=U;ZQP~H(_JAJy<_)=(Th81Fv5WS%x4});`C_yl85UB*wH~ zP|(S+ViJjmfSI;qE3Yjgzb1<4)FP)G8i9kcf-F7&gMp@(um>F9ZW-}9X#DbZ+zB*eh7>sEq9v);E zs3;=`JNR3YjHDW=@#w0|@sT0HogPXmN=I&BWeV61#%`6ueBK*s>tTh*S%;z!Jcp)} z4IeUu1~gUV7dYZMibfA1Uf$sCJB6PK`{Hh6*^g*b8;=NWm=FMQAOe4h||!#jXW7m?4Lbzahi;YB%8TpLF5FW3?p`MQ@ z4TO-1nnZSK%!fn^ke34Gu z`YnXexNY9voFSiIGpuY1lp9kZR{xj zY{vMi<95M^c{0d}7~OEf*Ft9Wz#guR=}CJK!q7cP?sd=yOI7&*B8a92qIH|PjPm1t z=t8@h)*i`^khD#IeJBKKp#uw_%I-d&qD1~h1WXy3YS;|ivflL=j&~4d#JCdgU2k8T$95dn^eBX$U3vpQ1crUo`$RoxTSr8=w&Mv%aIX=(f1+Q5-#viMoM~SbvM9-an-bhU5+e@5`lqsxk2~I4dSJO74gyB*JT)11z znkwSoXI2)d1rdL(@0X2Y;)lDlw+NfBtwsC$Rbm^9e+qhR?20gP6KP)4zUci;r0&PP zqk=9$7%i<;vRN?Q5!j+3tKh@|2%lt8W~Q4RYF+Y)+OkRD4e+$L%6-^m6U= zjL!x1-b+h!4;nb35pfxO@!RikSII>PX&ag*)?z<;W8xD1jedWn99wyRYE$Y*`)$de z_HDXa%v2UUH$0!^*pTye7do!{3({hLw7KKBX_)v;G6 zxwPgCR}2o2VOd$(HQIZVL^;VMPx^>`#V^;F-G2&0ZIYKM@DE7QH}n+e-jd9 z7%$GH$NO}Q{XQR(VSnbdaHg*=E)&v9tHsXuF0+*s-$@%x%#P^rUd4I?j03u3*xi-T zqIiXt?Q1IsyC;wSzVIsGYWX9_=^26!q;Ps7uWi^XdTsvY6aQaLL-lKT^7o&SrRZJp ztL@xns$=ft!=#Fg8oNw6ed60HeHf3Pkq^j{expoBeH>E51;`-g7cq0YFN$S8qWjMt zgC=N7HQyavio|L3J}}&np!N?1Sz{)Kv3s25GobJ#M6sWoCNt4$rS3QIt9voy9)|qy zo%vn$P55(Il;Si$w_#*Q*;4aw$)KjujV7VA8^*nj;9;pg!oQn;;j$gdpBeXwCm|Ev z1Vse};A3j}W%V;P)|QOWIBm6MJQWm5#i&1j7=If=*4Y#eWEwM`wQO~8p z0&B^Hr;g6*uf|s7bG_KoSd*`IUq&2h%nNY;V8`tuuKmXACKlD9 zzfAXrO*~^UF^I9Y>iqO6%b~-k88z=9|LO?ZhG}wUNulw_IV1A0EvDROvf%uwHdNgJFaWT)_V-M(Z%g*V-9(Al` zn;?yUOpiH67~9t6!xhEd%7tUNB*QIxbX%2d5=l;AbWc_5WLS$HI(jIPSd;Hd3a*>z zTEdbZ^Vv5R;^%r7uO9B^4^Me|FyHaas|5RZg z=5OYq*$hc5IkcSPGhOod9E+W@V{y%X%9_p}>~)ZD?J|;F6A5#p$H$Q63lzoe$~RZ3 zqeptwkaHv_k_#Ku%$85xRrt&G-|G)(x!3&NSjN6=@s~yhXfM8hl0D26up*NF@Dl6W zjr(o?E0?^e&%3?eX+?P0uZ{R)9`&aBXbIgKU40IRx-Q>)@#NO&>(P=cCV%giHdA-D z_}yt#kSP4k{_N|qH}h$(fP7C+vuq*0r3R})+-4u|r!uva@I&E%jH;WH}8^zcw0-dtQ`$~#@z_yFWh9( z=^T4y1sd&^UT$A4jfjj3zX~>=Ej3z7o^Y;@d+ttPD-A1!q^Fy&H3jUFpQ@)AN{)@r zGOfqT&r$Aj7!8cvA1dPoQpmciFcuYdav1e;zlk+xt z7wl!R)<^;Vz2fECrj3P?D+DB`H$m1(YtWxkgM_8k(>-cI_?IBapEo;PZ2x|Yq>f`U zH=#4HCidr!2KK9;J7uCnHpMO>!^N*GH8F|Yw7V$%%Yuu?i@(GsvoL75if$VjMIr^r zZ}}4x4yWUJ3iLP9&8Z<*5|I~oOis_a&_2_9NwfQV*UoKr*Qvfx7AN|q?!@(OSz|3q zo%pR%u_yW`Qr4&!=Xg2$l5t=8qs7rbXPcOUh&;@?*+2MJF2Bj3zV6I#%y#W%l|Kzd&w=zVvJO zZYSV6a|t9_Z;oyow>U+h`;x8+6<_fYQAYky$N49*?d?X^LTmelZzS(di89NiQ21=| zCCS&Kud?cnIpwN_#24QVG>jv)by;4g`ctzRU%w2#QypEECRJR6rmar`TNgCZIO0FI zd}Ecw-ihE;mwYq77RgH6kNx_hAGS=MLwtvHjHVgz}Y*|6-aXkQI@75uoevCrB_P5p` zX|B{Jdm*-yR;FUh%A`r_x5_W|iT*U+T{Cr1tL?4dUQDPKI4w-+Fhy!pIxI?ddVTHs zYrJK@+*&rlTHc00-t-IO`Rn)d zTQnYD=F?Rwk-z!N)_TM<{kW77?!w?Ee`63QrRGLU#T5~ruN6l$@_q2Thm`Tz?8&3} zH{ho}4<8-ISmmk7LB2jr}T*=G{^ zO+H~^Z1SD{Ls$I5UD+>=D-!oZg~!^>9Rp6gL9VLkOj@zjt{iyy#!Dl5ue($2dDtzRx%3X*!J#F@RZCm135Fe^|9@ehd#J@$uVlcZ{Zd7UWC37y!O>*}Z zKE1n){(0o`R^DojtHYZjv9>CHh~JSswtZtuhFXDd=c89E_?r)FlW^nn(PwEJ#xb0- zok{9V_({L>{gZ_AuZs^itE(p8B-i?QsvmDuA9C_oFfZNm&8!JjAMi&6fM|g{ax}X- zU?&*U+mnJ^m=Hfn-n+HL>qca(_f42z{ap8@vZb(LuehAo>$k=gWX!j*N{V3R-5bD^uk;CX^rEind{&9>sVyd z^LTCJXiR-7@_5BGhEzvR20i~`bLJa}k%l4v8|{>?QDG5U>>NQ51B|DA-+ZK*)kPCHyW^Klo^nliP3M7;ILFerK} zE>XEIPKK-s(Qdj|^f-<{&#T|f=Syr%=U?qjrjJWc$2=Xkeka{pjb6goPZ92Mny))mf;y-NYA=j|O-2`k;l=5wBlED+o==bgDERQ;CN zNLR7@waRq91ow{S9j$e>;Ra(5c{g%YfEpz3mhZ-pq&EcFSLfvPSC^yE4USUe+r&Bt zqJ+Gw>o3Dh_y2Ae9ve`Gny+$PE0ceX1|roxc%FswT+Nj=HOb!n&F+0U%c3SorjI|A zg>M4JmJV1F8R)kPuN#QLon&^DeSwu-;zZ4AKt_dkHP7Sm!f%Zk?BY@hOEe(Ueq%1B zVW7v0XjSE+vNB8smhCxZs*r-`DAZd|V;4~lTTXFZU2`c>B&ot$s{+M^ZxcydQ<~4A zo%kwgN^+#fW-|F|wT|H5U zk=)H-?%(fF8(7P0*r?vzGz%F8N$^PF-5M=#3eV53tU!7ru>C;@FXzN?6o;a@kg~QF zk!XJzPv~{P21Ufkl*Y2SRb?;+c%5$@`jHOavYMFKO$brimBi~qIn$5peRfdPAV}CW zu=OY8(0+c0yOl~OgEYqj$!NJ5XVXa{eJ-}U`z(rxk-+*BMQu%{&H~Q2U7+oIF7j#+Kb0n1#Gc^b#+m zE|c>j{%8D}90EdK8h5mmBtuqc^@Pl9W@!;z+Qsl8T0NVTq#^;Hk=N~=C;Uw+^Br}V{2pbitTMJv#!Sk^cy!9-!1GDP0<_iysZ$c*3RA(0vJRQ(%1 zB!0^{(pu(N{U{tN-W8Mujo^;-v<(W3*379I2v`#aJ1;5SSD{-i@u9itsLUZX?Fdwz zmOJzH*du<~F{DLqcN#*0Xwk&tfCl5(X){`Y5EoX3!$ftw8XVBx-4))h=I=6u^61pls3dZvMm_Ls=?sRv ze!PYe4H=oZ>=;ndOywr0kItd5%Z=&1*a{cbHf|#=NLUhf zPG3?S)s&X%?kiZL1_m6>(8nzhamtdSZWO|vadnV9ufYE&lk2iPUyfx+RnCt1F#lT3 zVubq*J(QKO*i$!;?9j~LBQoP5yf;GcgnU86Uo#E@270fR--@NJJ8~=wfV}8d)M0Uv zug|>8EAp83FDn1TeM#~N9=NaDkeMxwtz=?nC|$iWn-_&+8XL2t{y1QA2%1E;DZ zfcx2GyCWdqBF~6`$Mj^e8mhCyRugVK#iy1?6u$Dhh%=|m0X(JlfOB(HKm{bK`2&Hi z1izUNV>0{U;`N%h(u--u1ll4uWXl&n!?+j8@OxDAWy8QJ}uq3Zz zdH43!w-acs+aWgcE86DNjpfHi9*++0=DEaT-`B@G*U7iCvA(z5vo`RQ7xNk29`=}C z4pFBAQyi0%3zYi|k?YuP9BjuqORVLRY}e$t*i;jf1f9Q}Lova{R;?}0RrJgFoeWg>LZ{ZMJSQurb53F>DuG zX-3e_PyjF~np_fH2Kb54NE23pLe|z-XGY(id6z}?WdEbFk+UpN!quS-2TS;l?@G`J z<%l!=RW3f{MZlM9))vT+1@Oxwce6YW6*gPU75hREUwW;XaSf6speCef7dGhgdTn6P z{4?bVa>1Ep^cKGpQx7as>Ak&-FFzmDemZ$xWB;}|r}({sW$fnijLPAbn-RJXm=|*8 z69NON@>;jSWefzk6^}aJ65Q5~p#^LqjrXU19>xXQ2X+WAx zNDPUDx?sul(-gGw@$!1>AazH8V|7!Eczwz1v|pSKsWp!_L{kKiX9;| zV&MmtPU8y2t2g*hcaU1P1P=d3<0Af3Y>DhxOfZD?h6?|p-LZ7TWrtb->&%}u@Qz?H zvJxkw{_+E*pYh-P1e`u)g_Rk^O+469Z?QQuLn50*+A^zKZ zU^qzPuM-w@=3#>Q*q79HRPG;F_A8iQqIw#^060(y+0EID8EWHb0C*G2_BMU}W1NXJF9SI~2`rN#7MQE&x&kl*$l9^|y~_OIfkt z(R6dSQus=6jCox2etRp-BrE%X^l{U8B&4lqHUu$FIktL{NEu}8b2xug`*A6RCYG4%ULQ;W^ z#L(eGY+iW;_n057h_Ir@_Tawbe4d2Qi-9~3to%acBK4gr0;i$OqASAx+rSx@F3MN#bjqa5<%l=49UI(>}D?+%`-e{kb zQd)~z&WL~8Y*KhrkTC&+YxxKu?y72ltD&7bX*R9B)na+W>ge*5X~-1FwTJG{I9SD zuP#lSlCsDdVS3%9&m=PT`$XG&)FvS5&hUBxl&9PFMjECh^W@x^Yx|&!DX~DNk+kVS zMM{a))bx+hRixB*)<6Nq3Er0j9&ibFQ>czWJ#)MUto1x72>rXy3nD&i0INL1p?WV5 zAV6-HOf^UFlFyFF)jdykNbF2BVrgVIo3@T8Rm7U4^x@)Tp3RWV;^`K)tRjpEgj|Qz z+n2@Oi*mj_@9yCtd7N_4kWQGEQK7YETrwBCj4`;Grmq2i@==YC}kwn1!m6+IV- zhg%zT{NYAvX*p@y;A+fDGuow8(Zv~QOEq10VdU~-L*V|=zCUS(yE3Utu zlC*|8h|v#)35?JpH(C7ZEGmKN<;_6vgJ?50pC^On2WT8le5bU62 z0bCRSd08+Zaz9~!O>?)_7*$|S&g-J3?^tjT!nSB{ajC9u(MQI|_jvd62NoI|sZxJA z(HYdP-flMsd?eSOy^({>1Yv@E0)O-7X5Efsx=^dr#F2eh2D|lS1SZf0gQV4I)mr5w z>9_~}elYnDD)#X^__O~F#w$*>s{syID&Jh1pRGo89VmhW8yoHK3}^BOKt;*By~?x6 zf5(B?08#b0VS_fd1i84B<19o+L!=AP?`eJ?i^a;N;}i)YAr{LTk@WvHtEOabHlPwh zToL0*X}~k){fmT{7;dK7_QY`1Fhp z;GPH~rENi9dbmH#t*e{Vsj1*I$7jva1Cbgv5lG%AmBsqDek^1tKkbRl!wOmkmS}f& zb>-1++5Ya846J-)VM)3dTD;=L`pnbcqy&Y@hrrRCxleIs> z66&yA`(g!5!TaGzbo)C%Zr_RL!{pukyO>@-v*L=SRn2F_Cg4a>yLvHY&)UN z#|mr^1b?WaT5Zq$`4c0e@E(8KZgE|`<4Yt@gfQ(8+#eiHr1&2DOjs%JYiT1SiR0+w zZ`^)jubBdC8bHbyNq@>pd5lm%MyD1l`a1GKyzn|ZVQi;8MEX90xk$S0f*%xxL~lX~ zLMFH@qN__aB$NAC%Lr=I2I6ip3#M_Pj4)}te(VJY!dIM9cb*Pwy5>D1R#Mc;Yu3QT z2Exe9+@5*;%k(^JIp|B>eltvPA}X@_Lu3m4Xmph?WMqRT9v#WdK%OQpX|R6?u4BPm zm9-mCQ{zs)FGkqc^`GQTOMhed-%=nKD3EU~`$hOb&lOFcyZ{$0LVIhnbAMk~CwcBD z!FpwZ2H#V*?fr0{u&U(#KEoO=UH7m)OS_81b$-w)Jq!b^h)atn6v?;q{BG?vYnDDA zbCe^H&W!wOOBAY1o(T(gf6ExR zctRf@{NBX$6h4EHc0zQ47H>%Zz)Po7tzTcieJr@^0fVr_0#!fhK)^drM=R0`!NRc8 zPa=DzT@0Luc8MgFz1Yl9U9dPQB@|&!+l=0Fv-)wh^>)7-27^C`FkYhm8ue|Pp7BNC zyhVYLAp)Au1d0lGn1gI0`)|l!1^gt}9Fdom^*t4?Wl@10p}Y*62SB&3-?*r**Cr;l z%Q`0+vNe6H9O%QmDggu(eX5{O|ItlP+K9LQeWnxx91_QKyRiW-{xPa}apnKu^%+sk z2g-PFh;`W1{E`$a(wYb&WL65##mf9S092@R8CB)1v}4yoooT$lH`DqY3}XDJ&e3a)3d*=7&HqElja?~__wAdeJPg2< z3hVE0@7@^1a$`&Oabw#rYrHap)$w`!L(H$-3oQd8{&R=ZgfTPSo7v%x%4fAR6Ybml zc3a7ctHWjY?on7MY{!lv8^6-FIoPpKbvGar)Q$v%X_Y?AP$fossd2`M%E{@DuU9M-rtc5PqZg9=XQJUu1QiEZ8->m3>V`X zAbtcEex0VlSE}4U{AzM+t|DF}yA!JCTQTHxx3j)674RMcI^TLwG~Bz*8q!FUE+C*b z0ALpzkU_Dstj>31gktoxKQh4k`XYF#Sq$dpMv~e}UcEsBV!Eih&#(>WQnH;O^`^D2 z?l(5_iRsOnR)$*!k}J7*y>`zFkhGZ@h=^GISEp|v_lh%fR4e1tf#}|qyj=Yot*)v` zFI7W;$QqVF(Wjlwjl_6wRBi^6-Y|T+4SW+?hyVb@TxDd*sMGUvKvNgJ3}_f~c|bM5 z3`dZ3Ta`GFWt$K7sun;`Mm&_F>imBfe#pcS5(0$D@pb*yA95fXVNUxUzDM6_eeiI7 zj_A%jyxRK$$H{_`t}}D|r}XxlTVXyOeHXRrQked9zzSXj3@a^Ak5y>Ghu~iRWBMMC zDAnz`l5AqCvJ#`P(R=`QpLG0J7}WI=uBG*hMqbX4X5;5d=q*jqr>-pp!^OJxr~n=C zyKfw(r(8lHe9Ws6QskZXR!kvKLhjVqLg)i)!`TnAt!~H+67X0S6cuf+eej;Gp6=M4 zpPtXvv6tZmFL|4j+Sgk;l=q~!FYbQ;rZuM5%e3~Yz#x!;V1)d3J4}*}=4-yX3K`Gm zumQ(<^5il@(ihq>=J-#@9l2(~H-r0Y!~eM`fpFemL==>2Yhu<#mQz-_SV16H(^fEO zAib3Y=#n;J|H(n6%>nhH0#@QhvpAT-C{1xd08N1Qk^7l2fc#AM?jLde{cjx%zz!HR z@j0n6aNAkzr|)oO*YO0Lx3hxIrlAUh`Tyw>D3o?|qjoDhnweXIs!b) zn5hh;P(I*$i=RLP2LzcTrX5m@pSzefpR)kYR@*bWo4okFn$FDca$4DnnIit=EMu`| z2Vf$OL|v4NCb&%J|iVwc$(5~T>(N2@rv;@@EAM}8=(fOiw=9# z%v3}6A6jx+_Z}~$jz;O+%}r7il1qEPKc2e_oA2;9q!ORI-(Bn|Y9LICG+@00!`)dH zCG{%e!ZK1ng=qAe?sRr)2vUQ1h5qJpilqN*GeZvm+G7 z_Id2jnuEZz6I(>OyZ48B7^`qg=G{BY1U+R$fHEEab0(HrI?y=gNqH=bwB4SqjTE&W z?Uwu-%ID=d%4hek0M&FaQ@vbR$lOsCXt2FU8BFMgGbd2)iTQ6JUIXKfUK)jopLl7zs_bWR;uZ|CJdTOj;ry#7TFfkBtm zCEU-uJkp%l7xCl3 zfpZLsAvaGbRM7L|>Yh<*w7}M9-Go|w2e6>s(u;zW#z*$PuI5i95dw<&Vv zjtqGKpB2a#nA~WW7jkMNtMYFKGCpXcoY6y-+Fkq~VH4EWKznqnqAB>PE;u6>zyxq1 zXH1VTJ|XkrOeGF`ayg~w!4DH7%=?~oI;z;cKi`o6;~FopNN7b12EY7HeGrfD#lQ!^ z-uT?D>?+{40M(}iP#UN<9}OD^h2-2}4;l?(f>+IYcg_?|a?9}i+z*9TgFY_HlelL* zpgP5*n0G#?#a+Nup;M9HoQsY_rxKD;Nbdj1Tgy4^>8)tzLsoM~HYqp3+h zF(nAs)8k8s^&0((s1wsUh*UEfP;y%d^`=EEw6C?|3x5V!?RJHLNl1I>P)Zy#|4Gqi z+sFt~Rka&@zQlc5fPrTt=I0EX^N4F@5(Zcy@Q5BHCj|sqxd5*IwVF zjop4*<>mIyZa_wIHt{P@P3{aO9p5Gtr-cwK9hK0C;>hsMCv->mr<#$OX{o)i}1kB@&*<)&3#VSiw zKsKbDLi)-k0ho4Yu(5x57!)6mFAWut4aqHV74<9XmXVPG5sa2D;t)uBWhUUKk^#9o zE+ZyBo^E@0KQxg=T{Y7ru&B}G8M5$mFQT1xZdFz*OKTZ>d#bqMgY{|_du=ga6;t3L z6IPfTrmt=F6oDdObaXTdCc3{r(@pcQ(umW9MP_>LoB_7_XQ}b=WMpz67$IcPPKrAM ze}oWOWLfP)iViz;#QP&M!2SHPrA{Lygiy`ecT?VbmVw%+bYQ$R_T18hAlidl0sF_c z%N3_{MIhn`U2YVanb-C|T^}Vi&<5@A2%PZ*e88pzK0xDb_o1mrt|Dnpgej$2VsO>A zfG{t(udi=pa*LGMG+RJ zZ~nP6RVtgACGajq1NR2d42%`VhUs}0)1FR-Tau=}UKF7n=OONHB^LV5tpFV8yzZ+M?F=~n|t|>LGhih*l<=9$2<)UXrmoQ+1LIW{ks#P zVoPr@F{Hg?>~#r1ZU8kFfDyi@PZB5XNT+q>_->ID-_0-QRx{mE^Zi8XSbH&o#RX8Y zzwrZ!)WLx$hs_vSMfwcMIXIfZ`GLPGovpQXm^(W=*T7L>7+}92wfl2>tGi{(*d?~) ze(G1rK#&c>fgr2OD^+6qi`DY8k1Yb9$3;!2-b*GK0v51N=0}+Dk6hK68~%9^W`{kSw*B8iYBV#3Ff|g+h}EE(wkc44~1}Bo+)O3umJCe0hL0h zm^CotTvr8_d%VF)2-%-jR;gm0-fPcIFeFP2uSfZGbLTeQ){YeiFW&&6>kcq0P(JZI z=UcV)E-vkC4s3pdgX|%e#!VQ>cjK5vsnpNhn{PHQbKfoNkBrSg+^#_62Vt(}@Ud|@ zm`x|`st?iz2?>A)CC~sfv8C{nuww?c8FSjpr!-mKYv8QueCWbL1sQCJ8|lZo%=!wO zz6~HOeZ^j?{(;J6x28~O!t}LLUw>W$qY%rcf^fF}=fZKnugJ+m z-xIWc0kAHIDypj8@~Z|%x#>pc=8=B~Q{lPf{Nse%d^AG&^Lc98!T9TZQ?1d#+~bs? z03F2%ho^nu2?`BmerZUiv?-+nE6*jIDOLgoUr?r)=W+f}g6&T&-YM9&lx#NitP^mtE7fcOgxLPRdYJqSpEuDl|J z=1>hnNUu%Fnp~s~i?gXrBmpu{{anjzhhcfb2C}B5t=J?t`!3K~3gCiE%O~*Uq@ax7 z$q;`G%q81i0g`*D+KX3Oh8TNgbq0xj1>$juVy}PyCKI4BU(Q?iIKWW7cD4X)_2uXw zcg?3V>|&cx=dCnQne~RWk)a00^3bd>O4Fu+ogh(b zA|i+(V5+;G5D1_}*7L?;>1fN>*#N~ktB(^NHg>4?>88-?VRZGKHv?li=O^vDLkAC= zKmBnpiz;ezVdw+|gzzR^dGbM4X;hH5o%4DiF(E|eAH6gKKLW-oC`}7x3k#3*it1Si z3u?E|Ko_T(FJzm6Dzv(Q_fLk{mK*dCttZ^3CCHyZ2pQP+;hVqmWw8p&ySnxYqpudQz=cG0Wwy7Lf(|@b~ktTM(tt_OIn;jCZ&+@Jm$Hkwe3? z@`}2`)a1mB5WmWCr`mVM6F~Y)K`nHB#vP15f{IL!*LXEyHFJ7$TEDSXsM0CdeP(MG z|A`2)k;jZb^3hmJ>$_D7T3?@XTv8H3a)r>;$w`S7ubA|uZ-cZ(Um=4`LSR+Ka8y7R zR0D9T1FU)lpVil*qEA^Ya$~kqixCgH4b1mGTn!gqy1utJeAh?OO;C@+Xv6ZIQd;h#a zE|}KA@hB{O6o@~|SM*iSpSM=zbLz2F6h=7CslNDx&FD<+pa?vY$NPUsy~|A7J&vp=Sk@AguF&ge{P_zM)a5@j==0&j|!eLXelx=e(LAZhFefE$W{ zU_A*+*W?BXTLqNcUu|0wh2^r)xv9cYLKP&vs&#XLF6*EBTMZV%zq-e;94Y)!p z9RyPADezK5qFS#p<*nuOr_{D&w28+2RAhTsC!kINbs1=+PDvG#`K>I(SlowH`~DuK z0!2p4EQSgnBriX{8uei~XmU?T;WHk~b6iBU5NB9&w*t_6DEJc^wy8px3rK8V65y?3 zNYqn$0MXuxhnU+%F$-gD5Yz~WCnN_9%K6_0i$MsA=Wn+QvMPZ!_kl|AVVl6F7Du>T zzFm4$bYv{?KfKRdZ4oH+_z$l(7zctAaN@DAOu!4Ft#V+H-Wz{<qz%* zlHnf#j^Y=kD&5wU^hfj7EqMN(o20zq@7X2}ifAbN?Elk27e>Qqi7KWGOsU|fQhPc& zZ>ij2Z4e-lTxh{GwmwI7_6Rb<2{1GP0QZtH({0LIyl}2z^lQ|ww@E)N!R@lG+=rQI zY2@%jw6OTz=e)U%ieYaU)HW@Eo+K1)+fvbDpoj2NeWGz+3;*5C@<=JaLZ>b`t_*2>C%^pigQzJomjrx`DdPG&myS z7}FLh31d6Ai~nS2DGV#8K$~~8J#|ohA1&=Q=Go5$K#aw}$}tQMkb#jM0xdMeJGDtC z*Dr{~CU>&KQCvs1>|PkqFFdYMu4O;Y5F%Kn4Dl2%A759|melm-xA?=0v7tMkCK|%Y z_-Cafvs`~Ww|z1sQ<=I+lmhCk4YKPV*0y0H{F)dl@-p}eZAy>1zg*@=^>t^}&D+4z z{`HE}xmYeM@R=O^+tREI0?80PfdH2fa%OL8y(te4+|N`gE-kenMH_l2YW~CUVX~~9 z{G}Aihh)xYH88-;6OM$yd$^*Uso2CQHWNa_&n@P%efyRjP)Nhd7Mk!e`?qXf4pykj zt}GFg%8leP7rkXhjBxLBp>>(=V#um}b!jPIs`F|)* zNlfsL20+zhT#~H+Aq4vTm@B`%ivqO~JhkyQyK=YH02}a3R#9^hbz4AC)wy@OoPg;p?WFoq%}*w z<~X>ip+R7p`xE|?P&@Om@wZq$pnwQq8deKzoB%=IHd{xT}S44;07z?OCrR;NhV0mCPky?%(IDa$3;g>Sb@C{?x8jY6fX35XYWE0GscQ z9fB3);c6N%HtIzsPP2#j!sodyL4zgpMg@CfYJ%LHcdH+u4npbShnc^uQlw??mCOIr z6F!br)V3Ns6N1RYd4DKyf=U&@0|IQ%6*HJG`)xKFiNppiC@5HwTjg7Xo3zZ=OPAOw?7cCsA28{o;REYECvTw7C$kt9lU=uAzMia-P|rG6izLCv-zW8-Mloq zhwFgZR4M;&o33}iQ-RVUwB!}JgYG%N?@j*e4>?id%@DCeb9M7F2*Xl;r!dAL%*C+c z0}hufzn-f84Rvk3PQu7T0}AHWJ}Mw%0FV;G)%7Yf9QcTFyQ$e=&_kA4OE!F&vdZM^ z*6I`L?})!7dJ5M#Nv&fHIoL=~2(n)JzvCj)(XJF5p-?TdP`IiaQ)$az7sFFhZcDR; z5=cIWMke_a@ZQgd2Y>@*7@uH5#s$#_VAZxXNj+~d#X2xdF;bC2BRM{HTi!&39m)wP z&f5n_xZkgrmpzF6&hvY~0^S}TGp18w9R^*#ZJfI2wA;-l4{1ZZqMv^F91RTQ{x~NR zd{!gJhiU#@(z2h3m4henCm>S@R>$~mk2HKfbNzjN%%xFrWe_$M@W%>FhTH@_a&<%M z%lYT+n_{Fl_dI8?L^%Fc9FKcldKugVPeghCIWFa253rImr-+EMP|iFUGGH}drXQ#M z+}C>B6L|a81s78Q)}^Yp1i0eUuMsPO-*sA}mp$bg_%hph!DsF)vZ2YJiBLMDj+i+* z-bM>pfurODCakU2m?gh2{>69B!2oyHR1>-k{}~9~-!Iv2UqL#%yu?a02NZq`RqN8| zftDLf9>j`_Io8?&IWjfW=0_Q-i@8(r3G6n15_uS|r*w&G-0*lCmzhk?iWxQwL4>tj z=m{^*VY<0RKdLHfx%ydxd=s&5wLz8m|T( z*uaYyk->-!qizRu4yfGHmnWt#4~W^Q>g-Rva&Z6sNeSQ?%Ugu0nLG1h)?zXTAuyw$Jhr4F2Qrg@rC0vcgUSpg75W1(IUbFqC)KBH0594< z6X#IC4}f2ehk#KNLx3eK9wsKOp-L6XRxrRCQ28Mou2G^1ySgH9H65`~xHbq?#fO2~ z0D*@0kQSgp$C=H3-9cw+Pvx)v{CY&Cr5459?{3A*ggEy3N{hT;`O$pZ0La}koPSuzc zOr7q)3GH4!ZqL`-ftSu|B55F84IHKU|3%B(xzeePdSEKbwl5GAj&h4hv`;|+2pUQw z(?EJ?dv94)8}f=RiZT|k6}@ukzUBv60UH-TB!2<5DGvbF#_K}{ZD!!S$N|d{Kk%W3 z-76N@0d98*Y#*Qie!FKEOc~UVcYzh*65S_q1BQ&mhODJ+I^D~v%V0L}q$081ihKP- z=;z&(dFRz#6S=y(&iC+Qaj|g@hHZRil!n2`d0A*wXq?QxSNw?zaD)6#l552TPo1-I z&)!4g=K1OI_72(u;u-)aT3370?W-zB9R1zBfQ`y%;TJE6EjfkQLBKqO4T;bv)sYc3 zFt}5Af$@Wi_nNZik%u@2oLT(2mv~H@Xxv*;+9y#)99Ss_f6;nQ((t4?A1wwfVWq-X z8vP1Vx)6X;ln+A4vP_?YnCDLG(hbM}3u4tr6vavZ+%nQ^@0I7mArT|2v=`COg;XspnC)zSMQKxIB8DATI~^DEP5Jfqe`AWnn)6?rO2nvor#3Y^PO)!=N7XCj80loL9Rj78vpBHgI=_ zyq98QnSuCDG$0v-2?;w?@CyhLa+rD21n81Od$L|{Gc!_9M2dI4b5D=}rkYT?k`=P}Jo`8lW8D5TN8-r3zUXN-0*8`8qe_&YD1RG=gc^RZZrv?ajnVrRU zP(J6|z2{p?U<{3c%+HUH0;Mhgl6Hx};?vu30Yg{fHp_px9rGN@^W**-j;;9@EJvS6 z4yXkQ?=0%~9xvcz=Fzo&rjn&7$jHae&2@&$asY6=YceIr$C5_)8Jbu=*4-9bkP?=! z34Ou^-LJiEQr#K4F3ZK=Oj(*5u>c7`jV3}EDViVl-Kuf+>C5^Qw=lr4+vi{cg)>cS z!%)tx)M8ST8pna?R)MP8NTFU!lA7efl=903>o#{r459!*eGw!~Z5IOJP}U&QU~kDj z@lBEy4NXF$z0U&}G`j@StCn1kMb8uh)0Dzt?mm?)aC3=Mz#yzX-ut@gwKb*R`(@SA z6M0Zjc@Nfo5P+=Nk^X{f6z~ zUIcMqSP@TCdTu4ZyanRQ6}17;AYC=xT$-$ccEW~0BK>{xR|OJR_O&Gp{kl8vi{}4v z`yTS*_7$!eH&PBRu!|RVAgu$8Ubg1_qW}h;@PZ;zFGUDo!(ZyUJ#U$EFEaYa<|xVu zZ|_;ft}9hWy{$Q;QeNVgH^!VF1DCCt+<0IiY@ z5|Xv402!7c^Gg-cG{NlXR6p8GgSih&4N9F6-vGz23^XzUpsJecMf+jNsF}iO-YsS& z@_zWB7e>nN-*NaZ0!Ztgc8SF0Acb*~Q$1pl@DwQIMBaTy>9BzQ`7v+GpgJZ4V)Yka zV;IOQg2+t@#Ztn~`qO>F71Bt`WOWc58aw&ss}jM!OTT}4j8@8jzp&YD}R{a z%Yeu6w93%O?SHOwB&xEd@zBce_pwu8$?TbGy*( z%F>T-lWPK@1-h&V2ODt@pXc+aVp@&*b7Y> zf6kgcTu)PMU&$*##Fmr#`TYa!+{$wx!UKz@CoWniZyyUA;X{V^|C=$?Eeu#jhKGV- zq{0-KH88g~yM>5@jUeF05^n8qFYW+uOgujH&po#in|b=zJ9`{#GfElhWGtjNlet4s zk;`@xwqF5(AD+Sf;+?MR0iI7uZKMz_zmm5fFOANeY|K zLY<#a=6##xdy%KS#oFa0S5@BjF=V5;n&!q1YMC4c=8?6lS6Q|GhQANXRc=+*BY&1u zzpz0tYv>P2R1pSTx|*6{4#8=OJ!$w$LE@ zf1VruYddLlnQgyRdGOPW^EtO4j~5fnxnE*BZ0RNNi|M)Ffw%yj3P$<8D6~yT7#%=& znU?C!ZC0HE^CJxrTEEjH*>AfQG%N>&kp?^H+`^yc6#G@1A(|#~cgSHn$773Sll>Vo#7E9P_p~1Wl=Vk}Bvr|~uZjjHo+F=F4PP!*t=`m?C^uNSYzKJ_PU+89%`D1U3 z$lZI0*umq=>hl4+|7QPGGEC+xkZ(pX6oN7XBSTJRGCIUPd)4S#`-=H9%;eU9H zMu&-HZCbjgAR7?3{)S%EJ?!w;;K0)e_9jOTKsB}WqM=KrboA7+>bYSKgg9oo2pZpH zyq?_!*Y!jK@L28X5{VciFo2%#d@O%$;vd$;%zy{s$1w75M9s^f%TjpNy%EGxwdMql z!X}piYE3^Lg87v)i5L10NW>!wDPjMM2PA*~9sy1e4dygl`2LD{qc#sdbb6qHw~hk# zYK5qb`b7Z=+geH(0>1WP4Zp86s(M9~MLvm!iZNc0GVNl*X_YVNYXy&xxLuWls zL4`32H5zA7Sjq7Ij+rD5R#u8NLD<6G>TK>xbAh*3m;e)`lnF{InrWG5A1OFg&0J~*QBC@1Goi!bAXjJKmA=$vkkC0|O9L?Mk+$_AnKRLQ3I3r4P53IUA=^)zY zl}ujOB%-+?T}2^~6|fQ#lqfm6p$9B1NJXQqHNAbEuOUjB0bfO?M)ZSm@t~og#T!yE zWZ^El7xsY7z`q+WIwoe{sm((YFgOrW*#FjLAsaOmIzq88B7;37?QZv4936S@Rv8$b zfCu2s7u>a83BJ3>!*?2vgdv%6iI4&cc|jw`z9H5<_9vn*F|*uWWo8g|K?+hybD)@f zFsK6=ImlI{Axim4%p58Ez_N-ZO5vUv3dzi{oJVjwMYsVa*-|?-ZcOdyJwz(iNdSLZ z?Dh3q#lK9FE8UzYiQ-$x@8ssi-sL*9Nd{iN>gcpvt6&BmGZ`Oyje8J^0IoSJzV;6Km3RbZlDCzk2`ac%pBRW zrEh+<+BsSjigXBa^M6tid+6ow@|VU3tVA{NCe~I{7&T0@r;GQzoi=@;emy60w=mfB z2+>QV7NT117Vn9SK>SZ|WE%n28xEV_DM4%LSvL1^kKd?67cBDDjy+!imisf;f zjYSVH^dI#v&i38o`?w*>4qpS1ep1p$V2#Ybm59E+o&LAL0elH!Kcu818+-vE!CBZ3 z5&NHZc5k&23x#x7tRbCvsHUxr4{r`jR$?bVJ3mtr;w1;Pa!vUu;GuxBVw5g&bTSdV zhnL51J;G9W`AR!FjD4=0^pHZeKI7Jj(D1vHgc0RGnZUqAStfM-`LnN+iOix=_%xi zzp$t%q+g|fVs2H)fh$+HM16#5?m@kI96%s@uTKTrVwBvl+2A<0LW}*?_YR%kEoiD1 zIPpZ59o(jLI zU8x5UQ{Y3>E;#?2m@H`~qUHD~U{1|p|3aQ@61{p~+We!!wW)=6x^&-HmK-Mj?beB_ zj^VX8*zsGY8X0!*pxy)lggYt3jP?LOKFFzp!)7k8hQPGKsi{km5{(lxAgGiwDCY6D zFsevKq7W(9Z@g>Lr<=2@QW2 zdPP3NK-*)1V*dwp<>;d$_&*wVKcYBuq2Ba4dKmwOVZ4M1DeS1L;-6|cNEgho8vxmrUZe=@ zaHE2{=1An4Rnr}>61sU@{~ZBSpbnT19w7qZjFH#`Ti@nql4WP}l*f@TbMR3J96adY z(@&EMUx5tcqz$|{euVYDcE|+mj%QyDo~^-C2I=xVR_VJYIOg4JkK6l2)o4T)feeLc zwD%q@<{$vGA%l{Id_-XMG6OK8%8rH-#+`>$h3^~&5~+!`fM-n)gk@<7heu`HQPS5J z>b$c<`Ph#1MuZWN9y!D^)J_kPu%<=DM+U<$}erA~yU0x0FvnHn7vLWIWvR4L(gm1}vkKDxB;1aN* z!dJd+8@*sioac4Ruz)uip^*Hhn``05Z^AN+U?!{YR|F>L3{(DB<-Io21;K;vgV;^L zbu{u^_K|>p@e-4)PhfPEoqfQptXeAp8@wIp=ZA&xh@%XPNV{&l+I_4{-6V9Rn zMCAZ?JO*wqzgxevg>oEPPg2Vw7Aef=uQfM2qa>C5;}O#*kJKklPGD^j{uYUrjy&3jltxP`z649^|X7$O)Nv$i)ao z70Ht^?iA3DEe=1S#^Hrvn%RhYV!m3ur07~Zb=9UzDGmzgm!`HQph{;=G~VzQ8CVM) zw5*10;3}?)LK;;6|K#1r)Hn@$j-?OcVNo(NR6KB92TmR`_I2Xn?-dRRn^8DT+;@kv zUu2hEp~-jNm+(hYFnnl$UAs)nH+hbGNJk&Ya^7ia5kv6tk?+WUi8~;Sg{A>T5jTmh zIun9{0y~^Z#{pUsoCjTPwHV)F?2{g?YB>UC=i3F^jAriauxD`V8X zap39ovb{y%;o)iS+$odyj^w$fggN-#lKh!s9jPqY*r<>8u9SAM6A~bF^`j*9st6=m z39Sc(m>|4#-->)TC`E?(9R9gTxrdO(1@gLaQ(_aH1*@F&Jcw36vfAqCnc-BzC+PR> zc9PBPTwOR}$5DTyDx`N1@P-Ou1yhnRz-p~3OX0+PP3m<>GL$QaKN@QclOVYXXsNzl z+Jbd|=YY@XDkDl*qB0+*J%xsM_&n~5yTSpgwN5s#-_ZzL4G8Mh&J^DRMB3U`_3~fs zE=&Kvhhj~CYevb^y|=Lmw%6xpJn+m+?jgLkZv{>tpGu5kf(lAVYYMah)K)YMgig{a zgD7L$8C#K3og^F^F;KIq04{=9kJjXeahW{^^$;djLX@!i;5!8T+mG-di%eHk3<28$4-TRy z2n^QW+pf4>vUduZc7_8|EUM1n_D#SiZAGNf%1K}0@tC_a@@TgMg zP1up=()9GmC#Xx4xV25kiH;_s9k7XX-WxmTsuCZZyZjaY60{>}pxOi7A0C7~`|ny_*4mF&+z#+> zNdBO4iw2ztSQ%QYXtJm&Dhr>OZ1GYXKxG##L9>EZ@uB_g!sbmbgM}_!dO3~U+P9LC z$!$qKc;Zi&Jgol|noXI=Fo%ZjB?f7)l0d_LXSshT`xj_nKg<3tfo z_g!J2O$<`XDy)rgBKu@mS~V?Obh2Uv$bdkspH0^%U`FsSfb_D0arCH<6weQD=##FN zR&S`5axR9tdP%4)##P{--i_mu?mi^@R}Cw3B}6+MTx^#{GhYh%_7tGzyUD#iBum5^ z#EjAR>)j9PN{A(R`-c0>2&nt=4x9f#7}r|m60(^9Azu836jm{L3t&Y3s~oPxtReMf z%|-7<7~u|8eXenKnuCiMyG0chDU3b>GpBsj0famEEylrWo676@g4<(AgDK0>blUOQ z_9q*?n_YU&5VtBdjs$?|yfe9;WHi|bcAuIjse^vqNI{Iiz=ekiVqzjdFflKtqOX7<6dQs|2AgqLaR{%dP}Nl03Wi(}mPSx9 z01P8j_JA^daQ8A;o(aX*c+3kd-nMem4Bs@NfZXv15{1c)Ljj0A=qSKb+UaD%i zT5%_ZF|U|I)5h4kpwV!=IZy6Bpu0KYLrhfva>4E23=}5b57*U$c83fnJo!SaUv53q=q#n6KwpHMMFQ|2oJ=Y73=x#@k^- zzLKBGpL$*m9fLRGeYN!7*bv-~BbQ}r*p)jw`Pi1o2v&ASs<4M_q zT->``p9^E45Z?=pu228T6vN7pscv8iGb{W%cm`oO!+UW@*$EFSw1sa9eB3K_5n5Ql z(5Ljka28?-?ngjdQMI!_JxzW9A|lST2=-}#+_+zhQ3rr%qK--19?{E?Y2E_%fzoqd>N_?n1Y4)gj_HRNVjt-2N`6mwBXKAgx-EFt*i$5x~vE zdY}VL{voAKTgwfHqt^NXEcXFGrXL7m?qz{ZfoTAkLLtc4oyiL6%qLxLVsMF+vafxzKU-m(9$VgN>=UQH zzg)dy7}P{|vmbL|9ZKYK#85MZ6b^Ih-E9R3h4|;B!v$dBoZV0+c??n7F&)mSKq5V! z)zhRnHzN$eKEV{^wi8W?fN>=74V8Ed+TF5X@QSAeJ#u!B`!at07nuT{)Gv`|r7+qb!atjwSD zcZnEazKAD}JbQRm>A6g@$!t*;*q5yba@--Pfynn#8TUBCh5#R@)%O7vto|6F8PdWP z#AI{#s|L`S^E@<)9-qYw=@1fFO6o|~@Ov?4_)wsClyo;-;C>}-1DMxvB#|H|oVH|h z0ME&znq1a8mK!mQ6=;F12$#FgW*bv$k8Ob)PKmj_CD1$!^mz`z;s!#^sFJNU%)eqJ zEE+Otb{wcR=&+VK*pLU!k;Z3(Q{Cpu#5>AbCs{U~;6^Sn0!^CqL68V`oWCm0-Mb@4 z`ea8%Fo--Oqo(105SQ)pe3K19aINGZTGRgW^p@#Zw0HcW3-fQAiz<@9l|U@8Ezj33{W^ zYN5jGE%Q&1uq+8#asX}RR{jJ{HxTA{6d$nH8%1QuRiZ|0PUHRO_^Yc4=rI+6Wpt7L z&ZpfuLw}0rffskG>*R^SGLm~Hf6!k9c=L#-A5-+^9m*#OxtO8YysJ0h^Y4!ZjS!a! z2l&w5FoZHPIQW$TDf}S3+XZq~s9k}1N7F29C_t5;hK?!xxe@iwA#)fYMW!_aRS_l2 zwd%F}0yaTn{5{TA!qw7p_@vb}AFX2AOOOdL_L~*M(50rrnDssjQBM@&-9+-|-#c|P z9#duOvkB9*F&F}|%WqDe=v=ih0%+%A$Qi)=mbe=Q0{^Xgsr(lH#ctXiPGEw=3y-v5 zsoC8qUYY*tF-)`L8FRG)Y~C`0rb+EaqCga|YfZHRsEpPP^6D;X%|L9Q1^Pg=b!dU50#6CUDM^W+;Lkz!oU&*E$r0Y*=$4K`1Q+x1p(U1*`iG4 zI=SU2t5t7u5zxfEBL&#Sv$HX00aVyZ7XiV`QqiyXmaZ!s6U>6%VpzOXM*wluaakx$ zDebPxg7WL-_c|FWe~XWZ+%O8f&O6H*oR@pqK%A?KpjpJb96N?}|NSHxu#v48 zRr|?>hK|lJIE1w(%-5#r+iZ~C?AL9zbjp`+Xdyxhe$>~$gtmC#^RKRyMssC7sXmRQ zLr@~OPff{S$Leobh3M*^e%B`8<1l!0ad&ZFeTE?T#JF?kem0_XjojeQTjfSK8Ri(a z|BGPLtp{^k4!#sMl_Ly>4e|AUM2kYJ4!cQ73XsDRosEIOE13@*5PPRe0xV8nXHTIU z5P|iFt?vRH4LC2vj};CqK(GgQz;*fN*AjJ#(YGf)FZ*JcpT}zV{VfX@d4&{yrb3>J zAR31Ho~PkWc)rG6W|&ZX*(KBdO~(c)}*uh)us5IC?Ckmr2MWP!B_&qE$61b+&McKvw z-RHa)d0hc6PmHmsG+gKtgsgF>gFUb_@F1)d@+gyb(IzaAo}p3p*Wcmn>}03528g3n zu)`xXbQ`5>NG8fC0qRfkw@+-V9MbEoLvb78F|-LroXFMS2EAK*+Ne%34^UJ87Ibvt zAEU&F;=Z9D1BwU&>amEn>HX->^13+9UOW+Lroc{EaVf)Qs}BXol%GM74ut-(Q{$)# zR$YMRcm8!_j$M{AVn`X%i(3v2{{Uu8{9!RMUN=?RTX2I@leB^O+qaFdmAorlP|R@y z(~Jp29+CFAB)|-)LQvb96L_wc-Sh_{P$I)F zNDhNY%~)n)+^2w@Jq3Ij0c2yp4eY!C8XkH-_Yh8AEv(*!jH{cI{8>DI+}`VS9G#K% z10>q*0geedY-|0H%diEArDd;#<{t7xUi`O5shOzkI2j1kfp{gHUpALV7m-6)y7L@3 z%=hPB)W&Behdm8HGtwORNqX%GU=w3JxrdWwjrwWNU{ay4r@&Qhrs*RC zaFIVZ&mmoJ6=M{Fi8bo!BPzbD=19~ry!ZMkFPy(jZ8}LrBmn3q)Ow{Fvms(4pMChh z5C38UEG(G6h$%!SR1}Try)_z14Fq%zwx!n>e4vVMVEOG+b*_fieSm|Hvh75K`}qgy zVyk`9YJs3?ntbdyS&{gT&H&k6Q*!m|PRGAxiB{Ku0XTEr!}(4!V?9w1MDi}kF=6$j z`44~hOB)>ID$${J{kU=M+;OyyYrH_T4T7b>Kp10pK+YBZbu_XeZg+H?2J`JL<>LeP z_B7vGrIx13S?gjDw=JhFFcLfjmQ>meW@%BM!mK-jg2Y3E0Z*Q!Uuw)|xJDGMSSxV? z&Bhz|sD?|{PT}^;;xH?k`L?+ECK%jF;W@?g7KP4b8nDMlXo-61awk+pTipce^u$n> z^{B6WHM-{=_=m3-qm86Gp8|Q*Pe^FyvX9NJi|)tp-B*%u^$cxe@ctZ;GQv{%B7j@M zMcZ*x6=%2wZ11HQ>PY2Q1`?o}npqGBHOyn(6#weAS%)offY6BF06QzIt7>)?AWzSu z1&RT?;$_{@xe%N!3V7a*OmMW$U)(n|tw93L$IBvVS_E>AM6$r=`=c;Bq}U#c0N6=m zwW$xEHDG(w@y~zhA@ArThM-!S?3x-6aJ96wke((g)w)P_$O4hGlqis%pB-Qp6c@s2 zc78?y8}TFQvx}ae@5#UF{VEuuGS`%M{h`>GbrZO)I(eC^LK?6>DVv5oqMBil*`1)H zv2R-elCe&7j$g~2xe(9pj~@8GF3_t)c$_UyEm>0#Rw43@x8!2+0u+wqQ>8Cd|JvCHc8)N7Cr*sGWSJ%&-^>{IOr6r%hF0lBa@ z>*KEsPKc+CpIr%~m~5p1h21N<6iPK3DYDMJnU8J+Y_=2-02))Y6nIL5nHRk8;a+G$ ziMt3aYJx9&nck&WSB7l`OFHosNSws8@igHWzHvYcW<|KM3r$1_)V>U z#OC`q%52tCF#}MwTOsnmpv6|-ZAOfHl^zR)ogPp@Go^fKI+6gYhsZEsf!;&ja-1N4 zq_o$PDT)FV5-rr)AxO;=a-n}6KnfTp7k^gr)P#u4Ob1P+8Z^zdXFz~yDol=v1Q4BZ zL9h4HHZ79{3CDonh>TdF3y$iHU`CHKU+GJqOo~{f`hAX+=HjA{*GX9anQ{}kOr3+* z9p@;5LI}?X^1`n}&)-Ae$Ddf<5TzphUNlAV!x8jEd#M`#B~0N5CQyBK3nDOd zP6)5Ib55w7=%PrhtQUa9SBAbj>Y4h09h6{fK!t}FH1F-~I^V|%7DV==GQJl$Y<)f% z{rv1>aZiERsleeycLvL8$oPfaw^N1RHEQd!eP;SB71! zMjXA^e{m>ayJRpN!uMt2EZY#d%;<>4d}9>C!Zu*BNxh9*!TINh3yxns90qYo9b=X|pH^M}i*VX|#jNoa zQrp3Z%BCJIBauvq>Q#Chv+ERW!UJcoteWcnLXQ|ea5{f=NH~D`Q{>BH85}QC6>*Lu zeI0|IqP_1l@{``3-qedLa_@^mo#3# zLo5_}tDvjnH<$&+3T3OSs?-T2JTPF;hN0Y4Jk_icwFD{(=GDYln~!6~iuzx^JZ>$f z7P4*;7`tbmgG7Lh_3-&<5jv9;^wrH3sr$`HaZT`p$}3xjcw~kD>DR7{7mfO*m~1`Y z3>tSnIzy2NSW3G(V(kOxYxd#E`&G^f#p^-6W^dWNq8(>LZ%!-E76|y3m}(C<$XR>s z9qW`n9-CEt=(9bazvtW5x$q**844*Hl5Sdk22naXtS;C1a)8r}Z7PlrkjO7kNN&kO zhrQGjQVz&M@?0po521a@YJ!DAu!?sIg&|AmYhAIsgn78E`3W<5;0_Zpvd41oU%(@n z#notx$L*QPI|-{WKcK?6NWBQ0|K>rIIQZa}?K@ihq^-}OAfal33I{x0joEKh16v3V z3ANXSy3wX_=lgXvla}SmeJ^{2Xj-O z)btnIntrsb2XYoH9_Az8uHF#A@#Hd^KVn(E4aTdtXlp$Vzn5vChwwrbI8Zc|;=?DR zz&F@w`^23E7zeDI((ekD5pTT3fG?iShbLwIN6wt%ThO%y7ncu*<$ zm>hOVi<#7V5bi&=7UYjj{uPNhI%S+Ynh%FUxZ&c78FdZ#xrnS`sKDi8gWNR+KJwVe zm-CFKrMegpRGne6t(!8^jqv$##ISEkOL#J~tmA#50~Zr(<v}0~|BGE;tClo9Mwy<@&9q96gdcIyjP6Vk! zZC&A{bo$oPBihWbfyVT^|M)JObXut{3XKhx>e zbG-g7f7<&p`vfODthHu+&B~JHWl3!M{V7X^(myKXKZO}S!ZqE}kj&l9Y0oc~MC~aB zxCIih!Pkss7{v72zr*ZTzf)Q2Gew#2o{kLQDhVJ#VW3L#+kXEzyk@xf6uR1FXIBE& zr|nRK+}rOgyWEkwshODrLSkC%pP=4LhD18?1&KDoRS|iI~NTv=8Wh_PVh+yaVgR;Y>WQsc`xa=u|R_%_-h{7d#b! zJTz|d_)1ny+%Bo|28;grHccBW7e^v|p()^Gk*es-`f7+`#GXXYp_&aoPANRjxNKq>qY_Y`vR;bbkzvX6OPzB@2I0d$9JZN`B*ymOM@$qtd4gDk8mjp0C zG#!nN+N)HYNGYi=&g!15^tz5>mU%5DV9eaML_&taoE7xm$Gp?|4+)CN~byqtZW^5l7G!ogg zU+BLx@h_sS_3(@OD45I}S0mN#l5pG*9)>+Xh|6u={FTHMPgjZ$DO2~lDc7F}BL#mt zNNOtmj3KMXwf-a~5TZ0!2ZcP%kYVZ(fWIezYii%Ete80qOl#HC=e)X3ryF+%d$_Yn z%DIdLK|60NZoy3grPDytqQZ&?=}KK?VOB|xd4ln>#_hS`k>hw{5X?pdJoG76$$Voi zC)~l&ams^}s=p7-=b!S+8;26+w>PgxEeMsYi$L1Sk0rn5p1qAQ$m}!0RpyV~xDgc1 zU0eF{$OMrr0pHIZ_D& z8ZKON#M3M+JxYZ$IRsMSJzN?w7TII={n`Rk`0VKKPz%QvoA2ORhVU@fQLU{dd<@zm-a`5g5=0mXbsyI4!O+ zvF9p{)@o-wb;fF97jXCD-arH#nugX#tlfo*6GQ}a)-zLnk$qb6Yc1$)H+2|tZ8T^& zzIv0f-d){wfwUGW?1fI{)5uv5?`MXI+l!*A$tpy05h6VI=w~VubUAIwdLJuu+8Qb? z+t0|C*UVA(=*mYgn_Q5+$HH7?Il^D0*;}}#+P`X=^0y}-)_g6*y{8`06HKx!eqOrf ze0|0PaSgo=xw1W7t=>f|6(8g^+0~r`k$;6W{u)QyGoI3@4ALMV>cP^@)N3}FsN{5*LN3QfD329A$$ga zEb?gsTSzwYV3Ux$xoac3h#evb%JnoB{YuUDLe_Jt?&gOleS}H9xuKs2SK!)@;^q*g zqBj_25_2p^Qz`GqZ>!tPU0uu!C%t0eRYnW$bZT~1B*WPFe$zh2;U=vpB=63)oUrg){D9e96PHS+D zSfdy-)Y>y+0RJ$x|1R>*Twsx66>OgnhQy8LPmSCh+xI(sjkfsWZ|v8t4Ahq<+}O}F zR&boqT|{rTy@TXZer?ry$UI}ZNiH7rBkT0&@q}zrP|WS;X+>$xfTpeX-=6O~S7|$9 z%zF=l{$#z`qEm9WAdNi>vU7b&CAHG(Os;)bXY$nxA?tPr@1IxsI+`%$Q{h~N!)nKm6$O(G}#81q*o{==Dx(DPxQ ztM!O-iLA_O`nZ;|Zcha~f(Y(O6$u2K3DXe@dCsJW9^bGIV2aUCOn!ZHeM#|mhu)?+ z3yJWdtaOz$tx~SAHx;q@&hKfSBjQ3+Sl^KRjDHChcCE*6ebYv-a_XxqcGwxG*YZm& zd0rL4kFrIF^*%5PI2(9`za-*f$BC~Z5)}v4a`Q>;eU&~VxnFI2bT`v#Cc&TIzw&Zx zbeWXD3zf2wPh%pqW* z^GZ~dQsEiE+Cei{%r5iehno2Hn8;J}z6Vk)hy)`7&Lp-wY^Ws>s{RpAyEDLj+L*v1E7ZNnxDxH*znQXD`MJ%K11cT5wQL zN3th69d+uR3F}ScF}4o*qwc%9jeK044jui?G;{GPW>!o9A63HGNa-09g?jvCOS2^8 z>fBZ~!pF_iE7$x{Yvt_z!hP#QrJ2fcq|35M4B34{#yG4(49u7C`CmPuRX5gcvBV73 zWnwSK?|i9e`wN;%6F-fss|=kQmF$D$vpBsOV9z7TMIK4PVY`odxltH6w3w%s4`y^)&6z+nwN!l zd2{err}|GAJ(9CY0Ly9K89MNBZTrSgk+I>9?n}Mrd%hQK=h=%g37zLVS|nqCI_m$H zcwZn8(D41k_c}4>%)a^tg0bwjc3yfH4g5{nR;jHx%JXNt=H?wc&Z)R`=%Mj!B%Ku)|HV^Nf5Caymu56 zD3BiWk~acQT<~KFdf`8TvF~2Y{qtpFyj%-)ma@pV>h=;j$3VwQK>K*%gboA|Y#L{O zu&{J)SSITH)7oNrq2Uv30789esPx2~uCmQV<+m;;H^T|GOJVNlC#ZAjhhth;06uE< z=2fP`^-qiUEh6wg;oq2ki+g>)DJ8woKQ>Z;yPd(hxo@w9Gu)uiv_E!hN;*P*^0c+2!%pcF9k>14+LMp}Af1`1ekx)phUtSSQLE-J#4W|*GA%^{JS{>(or z6|eJbuPzO5!T*3*REgX4au39Hbhjn{yH?IsM;whPCOSLUu;W87o`))IQe2#>GQlgJ zL9MUXKi5ISRkr9)?-4{rEjI!;ki;F{Y7%k$v=#`0ggas-i*e-P@~dr=2-USudov`T z;?*`?|9h;s^J(9J})J79Jt}8gbjmv1aQ~_kiZ1NP#E}7CY|zM z>-Z?-4DOkBhm_}J!Ia^B?l>)MEuP^S(Q^4sit~!4Z!4M8uN5obc({h7I+4Om6VYGC z|LKj7UE<8S$WiT?(fi!eyKJtjo_Z5I<-FAMZL&9uYOP3%WICHm;h}NH zdv`7>7*q!PgShR0yZFgJyrTPbvA!EMMu=3#Mv~7(B*S}}!;{_$O&d>r%R_(eI(_mY zHKn16CZr5QmczhA)LMCbEq5TX*QRc-iaLT-H)Z}%e8_&+rduu;DeX!CF{!TmN@hwZ zf&UBhXU1QEM9d4eW=6IbkItgH{0~tO)Gy(nDz#@CBTjty&{AkPN~M9}9@_Mr&_x7Z zeGj6<&3=45$_>V2pnjX_e&*xyrH%3F&Qj6|E>Y!Yj}J4^^~7EnAlKxm>x2H(`AtZ~ z`DsNfb25`Wfzwg8djESg$*{O^G&OY#q_^wv-WOB^j?3?!YHJ8473=adp)k3%vF>&r z-s^)-9{MzUkuD1^;k3!La~@XslDs!>Ql2>535K_t3c3*r`MUl<{0JvW+(6tm_OJ!C zfp72EzCdCSV0o^}$F3y7x{tp#I)CWnVk8kj?wDg>L&%44iw12b9gCgH@&k<@XVrh} zxv#xjIEWVnmkzoT%ln@WpzS4A>jDDO@_W0v<%{aXd#(jOlgo?htx5UuJuXF;NM#6Grk(nt=%b>Afy>D3 zOpQfpmF`64I6M_kw>06CAL58~1hixr=2|>h3OUoYm!Y{?6ZYk=y)~1A-t8V5@&5rxGE{ za=!lv17j06d|1@yQs<_Q({f8CuS)FK_lLzYF`#Qz{+zs;jLMc5$#6JLX6U`};D*nmTKyM5 ziFt)=Vg$ptRvvlU`N4g#%4Xmry7u-ue=MrRnt^X<(N^}k0aH}TdbL-VbEvtNuN4bg zroLwMMd506=|^5t?;vw1-BVeQYHm>##ygHvGaNmoms(@AJjlIJ$h!I>?N!SpBdr_cP6@D`=boq2`yA$Fkbl&eFeS6A&;m`Piq_9R~?F05J zvx;hYQ1Ws@1 zqb#23;S@=1B1eNth!RpXNPz-Ir)|JC2LOXj5!9L%97Z<`7sSG}hgGw}p+$pD!on}= z7b>%O`;Ja8^AkdAMqke*1+m6uFKU;qqZ#7!JEDWytZI5b^47!jl;!C(bpJC8aNpAex4#Y-w0ZBQ!|W%;+oK~IcN+TsRQl;* zX!-JTX-GCp6G)hlU0LjdhDQh{=(Gq<%&qo}xi7 zAhWR1Z$kEb5>1w8+@`Iy`g~u!fKmgv{|~XLf-%Z6V z<3owo;RrG)3|k;Qok!*!2PF}$-trYu>8x2tW@h?|!Ba~tNEPXX8)1s zLz{^P`=G0>acd0B!86A7cQ}y$YW8SB^^<}}9Y5KwyBH5lyPuOgIy{Q%iuA#Uo8Ga< zcYhXA9$qwAX#)?djqMWSc~UH-DlHQ8Ja4g&c3C>H_n+C zZC-7qO5gr@n9`UMv=5q-LzKGw+?@c7EcZetzu#C30b?`=>D$0D*}Sa88pq&{p8@)t zU48kO72SH-&7+PN|Mh^T(P*F5pxETS)on9+tgp^i(oWpV@*7$s!b&PDx6sm2NBU~Q z^y9H;4){=C@AsGJ36hk8)5rbI#f2#l`72CRLHNVGw}J1NqrZ)asGfE)flunW%EAqA zzic?dM_~-07NpV)vBQbof1n1zFi}WqziK3Oi>C40a1%l4RFDEFj2EIwn=ea$E}RDR z?ZocJ5Pgvdx;vw}Deb*`|2fG5{Per#>j1i%o4uvnvvWSzBqJrW2$=1`7{c~Wd;)Jt zHP)Eo2S`-Ooif5mDhZXZ==JU+nTHU8I(_x0}%9o)dI+2!El>saZx9 zC%|2AO#g}J;I4f1it_%GQzU15G=%~%7jE5j#Y_G@kZS$euRZ>i2D(pha5YQ99XjE~ zw}zx=Qn4MqKAcJxcxdM}WS_Q3-@pwokn!Q%(~+b3eE!h0;@6zDsS+P`7F|tv3$jEB z>d}+3ul1;}s6r`~!is`2yr%yT&91z3T5~ZTw2XJ-ds-@7-(SB#yPR{>tHnb9eA5qt zGNp`lzo+-Snd|rspA*2cSC&uEZv3XX!}UPE^uW3)uj`yhY`t6%3|3FUU{yklV7jWk zdKMh@EkI>PY4?AcnI)B>XRCsXTfkKWNkA+919=C1p>-=3T{kB9u3GUv`fhGLY;dvry(0)kwX zfPdFYWo-Z@f2RC{(EVl0oEu07x^r*Qk5>FgE~Ojh)YU@H5sTmL%op6iMhaUireYGJ ze7yXAtpY-R=1c?uBNQtp@dbjT1U`!t3}q@9m_- z81Tg9dIP*19kj;(og2=eY69pk8wNxvM7R5i`mfVVd@K$J3z-2v>n%Ai=?J7azU!Fk z)?aJ&*UR%eHPi1D;nYdC9~t|#z;(uWi=r*3@!HzKiHmY%xS-*Fy0^Xd=L*YJBO4C4=VkSml9 z&N&xxozwaMnEL9dsJHHK7zP-6=#Usf8UZDg98y41QjqRO=}?#fq(cD}=?3YPE)fBP zZV3eh>2BdYbMJkA>;2EQT#KcL@7ZVXPwo5UJ2l($!LT@gDoMY#WN|)gTogj;9iSY2 zOPOVY$_!AdT7tPhed9~KNzK#mBh8Fy)EQ{^Rz96Y4&^PtJC{=>?>LPK*6DA&PR_{a z56Q|u>YCv1e+Xm?81cONx;;~WhY#NB z=7v>F0u4b5K*uOx7CgFq^mrY`H{o7|Sg6Hpn)*u;y=FU{n??EbjJVPFLqoXBzR`)s zem5|@ugm1kh6uU13lZYf6j$~cj=WGuOo4upAi2$4pPzW9p|lh!Fei@JpU*j{21e463SryW{T_ zfyk@t&prN2Cy@^!C_Bp#+|u4!s;003T)w>@&nal|UM7X|VTj9Qa+rubEtO@i%5*(1 zFM;X4RADI%URQ|49~#B()GU(zZb?eibwF1yi?iqZRa1e}c@iQV=W1|&ep15#T5HTK zknllkf!XU<56`4A-5R||P>@tXVS%=j)9ssFH+5o`Z3fno75v-qs|7E$IVrs+Mu`V{ zgdkj`dL!;x0gAKbmnT}+KM6Q)OL}LMGR=(UXLYuBQWDhi^o<|b4Sg3dDOtBb)_gB? zlbS4p!+HcSR3ahRX7WE?_V&IV+>WHsImN~{dfj*@MmZC^D~cEn`;q#^LN9=`0ByT< z&f|ldl=&Dsl87B5hY-SgO%wyxQg!DeI1m;P?0P5!-mIP@31f*TK_`3 z*-m<;=C2^BJzU6X^tZa+{3h;=;IhHAOcE(@c|HyVudD>Fb%)1H;G<}yQ6b6*3tY78 zY=e%5MjY73g@D7PUP?)Z0zaHCm+XWJ)aQ6fZ&scY#!Jb;#ibJ@@9Ff>2JQ9?PuH@a z7Rl+sOU}Ic*;x#)25H=xS#c6XdyLE6I>%4+h#l@?3+ci%0&>8RUgh_flb=5foxfOn zgC>=V_=YL3;^I}Rr;5+dMGrCv+tEF5KNeGL6xh(jxe~4?Gppo{ywuqXbh{M0`?xxk zU@T!@(XwD~fYZ6NyOSg2u_>6VztZ686H+O)?8i?wfte*su?`C=57!2>H=DW&P3}c; zIv1PA-*BZn2y;ST*>WH_6tmg^hq4p%|pgd?-a(=G1lFd-RPJhXS45UCc#^Ak-Pw z$3-tL-2FdhQ0TkFi_Tcd7fJjgKd~U1Y(k|j)cqU`q$h}M-#3~bY}PyN3SKYtZPTSF zD1H%uCKhg}grE}wqi;|E`6l6EL5UfU4&rocbYYy6aKp6jEKFTf`t%gCF1%@w7P#+z zFoSW`=^4Em00-u5ej?aNM-SHy=}Z&6diT6~SM_sX@4=MR^82jMKdE3gdWeTL!6c} ze-C$VMRGrdF-g?rk*01r4*W9Lc^a_Mhx_Ey39Kyh1h)0#9Q5bwHpW!2@0s_$wA92q z8QN9T1`KzydaL~`O@h(A6!5)$>u@C)s)$$Z^$m~zb~E>Qn%T3|flR-;;Yjqu=nJ5B zXb{n4M!?tZ&pJY|_3#f@3v*s!Lx3KIp}X(fWb!Q|Z@}R{K)@T%u8=PC|I9x4oL+JE z@`hUQ=G=D2WSInZBf36|<(&fmQgLLs@cLJVQtn`~L1xKlP>XMrMvhFvL!8z`x%tm5 zY)CcPw^yseyDHQ`r-yDAzd=y>&j4>X+FdLP!A`>0yd8xwz*OKO4o5`@E47I0OxVK_ z6DJ$=HjaDtaYl>IL*r5-6wXp>bZ7WG&%-Y)>N$B4q$6E85vFkuokT^RQf?tgMCkgUlg22mptz`v-b6ykOI(w`<-N+P#bicl_IW$@Gl9OE zTmTc+2wgQMdVrvlDqdFe@XcIR4hs>G%Le7Q4C%pJ2!ncqtT#)=7H8oY+ zv{00u_EXAPMye2XZCW9g;OnJ>YbBGb-RM$RVhRe1;;P~sbH|c*Hnfj}!x*MRz;zFR}PatN3bJ0O;B!imukxy^ZU!~3KVxh)f<3RJ+P z;7%&y<*y}5ZsD8Z&ENwO6iUs8+n{GW&bDW(pRLrrKh$|BtW!?=HMYT(o3E7pnf1@x zPUG!K^G@8Wx|pJqHKmOU>B|oP+*eXt*;a)%xW()JUh)tJ%EpGp7aBRl-Si)NUD4GZ zN=bil%&cc+2^zJ~KTSTvYou?SslA^kF3hQFT?6K-Gg^hqra9V?5PCV!{;)uk1tY3? z4C=Df&uwQP)88gz3-X5ZdxQ|w^Hy!J(LoLg{1$Qsh&5~?9BD^F6J;L2#8@sTcBHT~ z`Qb;0#Y(RVUt2O7>JUnph8#D(6%UBpqRGGR^$o@I$1Qnr$C!Aig(u`n+j&Z)jyx%64 z`A73Uk^Jf!fHpmI&+pd~xNSgR0GtUl zDT_D`^yvo^wjWfc-N16f!A58kVe8Z2)fnw!@pXfdk&o#`JNHem zKL~iAg~h5JcR?Z1AblV{)B7pg<_seTB2w)bqEB2dHhKO+fHfrk<$$$FW46Qzg4_Z*Qz5kd=B)2>mqrT>Fa;(~)S{ z!;1ThC$fR>co#1Cc6z53-Uyoe=(j%Ip{DjNV)YG5c@gK|sb9@XCkiVIIOjzz0&Q;& zJ$M#VNA1_P@Be;yEjUjTK#;|x*jeoIE;J{nlujAzJ;%1{b89iYcj0oHg$*_~=mk&{xA&!o#mK#-!Qqh1)kgz4lQyF9HGU8l#DMkR z8UudwZKsl*Mi~1%RX1OHo!ry>Kux(V0Co1_mS^)v@=s?~a=u z9YCE%g<}ZuNQ$~&r6Dwc+ zT733i!iX9tZ(LT96<(*}teS8c6nCY@?Z^YsPgxPUnAdsT5Y-z37)L4+e%3w6ryOQf zFXyBPM9$~_&54H$D2shiY$BL-$dbRXSA`<6cyuq4DjuScoJG9{@spW}U*jc)QB0M2 zk3lCmWLlW!Z|Mlp?>dAkm0fBt|PcR&zSp8IT(|sw)1|yQk0CEZRf-uQ= zBm(^VCof&I_lErRT+6694ZpAcW0*1%q%z9DY@<-a8Y8*wjXb8etf(V1IrwAyH@`r?k3x zCJYzd>!w`Fsj_nN^js^efU$2w46o_tWC{gL0?-fEpe;^PDZt1(->NbJY^n;@dNy)! z7=!Ei(X95s1|Opyh!z46ij%!~yPJtst#&f5a8KymYvv#YC#?|3+r2NEI>zM@NQ=~4=V-?R#8if3^oSdBM*q(&q zlUNertlk{##*OrJ!bn}E8}a+0`&cv&QH-v&PkAExLHA5r_=EZH<{!FpW3Y5c{F>$O zp5b-LU-Iq4Fz>cTTVu4hK7K2z`$5T!=)&+-K0g|lG|NF|v#WALpu`A_ zng#SfQs1M6{Fra_8Eoaw9GvE~l&lX8&(JcS(o_k7Dv3SUc4SZ8@TaWz#mDDR23?a{ zS;)yT7T~0wdj3AN7g?Q`RGIJ3m99H+YarzZ{0R7JX_R&*iAs?`g?U2h>;rvvaggu% zshN)gVtA(0?Fjs1T+#)C?VVdl3{Enq{&%A;Rb;=*eL^~JhZJG)`fL*!xdwqb!1_qj zvt0ac@Is?^@KcS_BwDqmxb-MufF%(VIMRG~6CNU^P4@7=Apq;rh=hyGV~jwqw!utJAM@b%IdhA(7361 zte3fUQY7+n;`dj=f|vFzyT)|kS>unhGGGJ0A--Wn z6Cd`FexergiOH+({-xr}xo<~=&g&1FG8}f8MQQM?IiDr9i;(kDA5rM8hS5XhFhw@N zjXF}wTgdxYDS-I`=l9MLKCSQ6?!cghiwd@gMG3I9eQ)wGCR|H``3*mf1JG%CDaEx7 ztUf`a7NgyWLKhL1tN(x&Z`qsT??ir_tgiZ%lzLJ%bQRv1^>JseMW!qSu#-Z<$B*=W z&D4J>cE zG*(U19mE%}6);0)7fyo@Bh0V4N)o@7-%#HWvocRqvSzs!o~5N4Z;Ra#js@!Dqa;B= z4$ya)UPHc5#bb@(yF}128O37h!T9k+27a?`eSMh$w_2$49mIY*^H7bd$HFpOFlSiv zF-j_%%)CX7r(UQNo${xS*R;yYww255y!MZ9Ha13L2mrt?Z~oR})j;Ob8llD2Y880j z!hmuDMjH*ZIM#Ix1NTwLv)AA1JbpEDJDpb!n@sziUoOCuxuQLWt=zYOYW%*DgKA@XF? zDIyyPU)RL&>nXZR+F81EoACI&`w1JxmgX;S`QJ;PZ42SN+zpAXF?MU6>a> z8>uZQ?5(M&fav`GK?1xf3<&twF&~C|b8QVv-p4`f!iNS$Eyo(cpb44-!XGvmw7n@+ z2yTej{rv#&iHoYAtqG(OXaVa)^ZDZVK?Io6y*@QU&iOoN9hEaKmlXUT3-_I&=V zt9vCIp$eVDCoQOWh99bKK{dqv1>ia?RdHR%b2<$c?eC@@AFi7!K5IX{*=&3H;j4Hg zO;C8}0M~UK0d)3{5I=FninqbE)A7NLr(2RTcSA!`1O>k<#+m_?0J|98xTN{^JbWI= z|Cc?Z8-@OrpP%tu&`6qbtZPk_mA=?@gM5D|Lgr`5UAV2wT-h!2JYL4SHvb+{rX@|Mo=b zf+czlF7gQB>QDMBtN%*@X@@=p@wPR_DAZ$Jp72T zb=cvyki8PeE*o@X<6Woec6RUW;Vi-jZnc?)J`iUgs4lDV`nQplBwq zQ;U?HUYc(q&)Xeu04768m)bj5aZ%g$-nS-Sz2tfw5?CWXwqMBmK_yeZd~1p z&w7WkR@^s)lUND`rA6k3pSMk=G6Vgc#P*lXm(fgzvm>c9iaDdhpwLPE0JV>_gT8--*!66EyMw*3+CBjzoYQj@9!BQ z!DZNZ)cb3}n?LJkPiPv}<_mY3Elk~( zGn|1Qs3B2H@l5c8C)c?L7lgu>LQLd+}n@56h69S*d8`T*07vZQ+ zAW{*p`~{8pgwRQ$Crc48t_0{hUp0;*qBeT#$f;nDQ)%YpN*-5H47$Q$ zUPXkssE}I#2OGjo;v*_~&P>E@0EgvgU^MQ_VZK3AyvA}#-Y-rt+#@6Jx}1~;Wv8F!e*`gyW+?D~{ z((Snehwm}Lx2a`$F>urkY<(z1D#3Y`^_@Fvbx&H)drd`TTw|PE{tY7tC(SSax6?3^ z`Bg=ZGSX&!dw9sk0K7{#bYe3K+1uP7fy9aK>?Au^JR+P@?ISbETs6!*c)l2V^5^pG zU9~^qbGoMsj*ZSxP~=VK_xI2;^`TeS?h|!9pZ2chZp-;t3aU9y z_Y!^d;ONzgHyl2w?fBNg$HjDE+HcuE-%us!!O>y14TYkS$2P<6(1tZNW|Nga zl0uO~$ZS%`u2UsWhGsZ?)41i{gK)bv1+7Qf)MtJ?h`M%Kh{ zBoMIXCgHVKeAY|c0A^9SPHjfm8gjAxO=i(5&DU|Akr_7d$R-p47Mr{K@z3irJp^2F z*Ejv_LSBm~w_VJ7Oi04Sw7jUXXdpzz#k4tH`--^L*Y~NO|FlHd&?|kI*XC5_%m;hS z%Tk6OW7z_}p#&-8d(mLV)#Ie(5K2Yd(qt#6n!AgxAqvnjPV+JFSxs#~i{Z_FNEu!E z^2RkzGNpQ_R}cbpgw%HCB3Ehm7V_sLKXoG-2%vsl-d8@i0H)p_LkwJS_n|^Rb8eOX z+Tgy5f6C1TSGU7OgLZsqYEB!pJOB0aarz&ByqP9g<#tA4{K2K2Y#Ch02lWU7UEO}TrkeXA$6()wtgI&#fPwW!+zS#Fr%o> ze_s%OMw6(L`3CuM4KyYFdn#DF#7df%Bp|{xOu13WWi=K)lQ@D^WgT5}Bs)C$Hu%9H zN7??PAC#B2%;xh(I_IU(2}0KI_4Z3qI1+=+Gy`iS~lcZf9cv7WKLB^=s% z9r;q^+1~!5;bk2GkPE(jw!_pQ2%n{TK4mA@OGflSk1J!Qk&jZx$XVg5;+}dS z{t`c{b3q{BMtB7~H`LUf#IPkevD^4eCp#`{mri!Y@M`_ zUmt6Wc-QH&ee_MVBU_;IZ>EpShrwQigSp2=&!2ZAq2Cnb518+R4kEv8Xdp%a2sk~W zakqX%4pG936Rf-lX|pn7$}>dMP*Mv)2f!0^Ku_g4l4-ihRn+Me zKh|G_nb4K#*;pcybeCAb%?9XDJJ;APBRLdey(fna9vKqCON0}L6arZf0QcxqUn*Mh zZ(Yj?R0;3)JPG223x!$;UYEOkX3clf2?RS%YxDf;=+T}3p)aiVttaGaHUKVC9oGW7 z_cY1M2EbVw-m&-m@%J1kH9;v9`?$IBJ6s(RGw*uaSl3CdruVtV7l+RS(6(ZSwQtEO z3!~yovJD^7C-^Vh%f;|AY9t=E_|UtUSD_!8*q`D_68A7eGqe5*>2Cr^9uv^YJcie_yC+Qwi7nhVn~9SuqQo7 zhPYVa{BK2QCU8km%iYfRd3}e7fFP#{2ZSN0Yvr+)08I~&RLY7ouoGfoBeGery#Yq+ z^=I(mDWIae=0F(h^H95!?PFeeU!*&5$j!-mYMyp2mD&DZvO<|OHHlo*SBbFbnv27L}micwrn;nlcdi> zUDn+_Az_gS_)s6zk!J=#p2qJdoWC?|@g%82!-3%|W#^eK+Mb18iz|W2_MT~=3vo|- zw#fp@YtVP~Ub3jyk}YVa5br*jeNn=R@Vgh68Qm82Me@>0aza;_-3S3Efv`;ycqcg| z-Z8iTZ@4qlNA!)9<>_(5fv-gHjXWYzRm+HW?c*1L0zF>17noP@vjMGapxv^RLJga^ z?AN<2CI*TqSLhfy%)(MzlCrmh=cd=nYBge$`pRUQ85fOUC~%(8b$k9~m+$#ZSm(bl za#?+ecVJpLZnpO+Uf=YR%5w>CX!3Q<8mM6D=pQM6p#)IO(4Qe2Y!)Nz*0*?Ls=Ko( zZ8)W`$4~q3`3WI6Tqp_)AG2sHKVNZRU?5+QlcML-C!HkDCo_Xz-pCduPq_Xm3}hK` zAuU^bpmf8%;*p$*ctzgUY}p54_$DD?%diUAgPUIzy%|uc1&2jq<{geB##V1j^F_qe zn%X^xUwg4?SI)rGcb+@kpssc%m{~)yQ=sVhR72V_L@LwKTwyXuSO&N=+UpsGqRnnq^;`GilLjF$_m2sc>H|5D9OHCD7Y~dua$JsM^DhrkZ|(HJmWy|N z8`JcV#29`Vj{c|gG&t<3WG$qN6x^UUsyp=@I}Tg3A8c{a0+ZCR7sQs3E;%@8<~29i zXmHU>pL@DN62gXd+}vwpP+@{SYUo4mN_elcpC2Z59N?@%M4cy+M@C0gnH32L_Pj=? zB8nHvef=ql*{LNRw{kzP_5ECu>P-+}Qkc-cKoiJ5j~|(-tF3bt`K<-+nRJQ(vCpTn za5*nSi$9GMe^G*^mbND*o>X8@LVN8!nH08CA@z%t_0`PQhVp6=Q4X;r{Cm#5iTPg z*;&bwrIy0ddkbYTWoqpJ+)+|*@43GyTes~^b6|CnMTFSLHuDek^ryVLGou-)))4nl z0pa)7ElbFh3ARQLn~LmwIly$--MZr_8RxRe=`wm74101$4qjP$Z5FshICCZPa)@jq z)CV&wTr@5(6>L{(A|)G-5R5|)95msuR}Xa^|HVqiu^1X{Xs}ry4$_H!)#Zi8OuBbJ zvlQDi+$f!?!hxWa2oC-3{3L)XxM5tj%q$Gu;-N_3C4@nXzKVo4BSR!=_mR%8TM7E+ z6zxiHa&TztJn8KRyn5a`^}4YT^-yoV(KGE1l^ zVeS1;v}1J|H1@|NjN1_5mrf1CTqWs30V9pp2tDrTfkGfj%hhD!#gJiuv#2Wg>hjMu znrdCUNAJg+@N>2LV1sXN`r!*{YbI7WjOMR@(V5q#$fT#qTi&Gte_HsqMnSW|%6~fH z35nG);C4)xpPBm`S*{ZiZ)I7P0y0)Aac|%g;rMcWi&_KhDr9A9EziDE-hipGxP(kZ z>=($+b(*{t%6xS~TkLQ3)cTXDue62r?p-DcueUO1r#r8ExcqEvee(%q(a%sfLwZ%% zt1FN|5GG1Z!brhBZ6N#g=AFW!iAnMIWKeP}Y4FHNpFiag!Mv*xSP_$+cG>JNc=Heo>@v*&W@PIK5tS&=%jrT`h zRlX-MRWy8y^gsr8az6OZYx2oc=q9I$+)*$5-}r@=rfMs-N_!ih+|PcRr0=PIk0PA1 z{_*XW{DMPJt-fCZ0biiq0D7v!Uc#2 z{s<*Kvf4X6D|Agxe?=3cV0hb3|EZH2UW_KHQy-e`mHXQOSU|rVwiF!HW2V3I3Yjej zMDE+8aUP)aBb1QvqyqH4MPXs_Z->u69)12=`cK%1=-~`{TmguY`p%;4xZ(fDwqquJ zxt`XwrtD1QVr;k^oam7V4O;ZKB|38Ipf>1>o$=i#>C$l~W9$ER)>CbduveptKy@fH zu~yR6sn01NUA~R70IO+ru-B5*05*Z~e_Sd{$A&<Ny=*%hAJ`1f@wrenPKf^h>zY*F&vF>&4NQY>+f_TcjZKr~$D_3MGT z)t)g98w$DqQ`w#n4#&(u!CEA!kQHGN4RPxaFEwocpk-uJG+0C&YYY#9%%%Y#%^3Ql zuKAcu!hun6C&1P?R*x?@6BEmxOvQwx>BGWQYW)7r9z)>l<-uOdSOTZL(yw_K@8isR z;YmuEm^KRBbFdt9&P$c*=BRPFYF%{A^Sr`aZ_O;l4K=;a_0#ndGH zIl%J#6(^F0LD6Dv|7M-r^a$RUyU)niaVA)=&Sw@z8m|3cPEyB%pUYI{z@r9Tc8BP& zPIZU9K3E-eF7F|shk$&8y+e)q=YIo-qbOZ0J&2)@1rGgTx+L;14oaUZI^fbrveE`S!36awZb33zdMXC=5I zT*?H{(cp9bqw8O;^}C(47x1?qzn&;iuN-@ayheq@kav<2iT0m;Yuy>;!XI!P%=}v= zq@4sgT(^cM8v}<~=V1ml0v;=@VUxfKaCgN}hIK5|3v%G%unhVUq`!602m(hdxWR_8 z^vF2W6#Zfq8McmXny}N`Qaza3q>IH-6x#(J6T3i6ch8*#W-TV;qLCbhh!hh#ukBam z(<0^$7P=0x`J8qUsr{fkldQAGg}`A}$DA;64-FKu$o*O4`CWXdJh{VUg@CQC@7S_i zn6#nkv-6pix;m=Ya*kR&CH;C&C+}VbZ`M1T{nc(iBMI1Q%5n-Wi-;HXl9GqRpLP{I zc%z_Ye!*`;$f_T7bU{?Cd%`^VeF+CX6xvy74;IchT~NU=1E zQ0GR2l>+beU74S^elo%VRkV0e!ud^5&=eWr+nPtN`)x*vo(V&cJ@XzA|8q<*8f&2B zk60vtDxxgLTmJ#+v8_Ls`uE6QEVIw=1tiokRRW1umI6k(O|ETci6w97z>s^+Ke(iH zDJ7E+x`~2tRLD&O_X7j>kcTFEzVTOT{|Ohz&AWPE{imI_u_mh?^_r%<^Cx4{EXS;k zsJ>%W=4=X=22XMt^swluCW4LFI`+~Y@2_P=NRN-ykCs1@x4?+$rqbf8&#|arRwv9= z0n4s4b-yDt0@YL^Cu!hTPT}ocM9bD+kFj*gylFZ{8EvKe@r*5E z9IPaD&Tr((XY1G=siY`Kh1u+zY|6_EFz*vJKeSuDCGs=Ec5)qaurZyLb{e_TE7TQL zLWzN<{A$bg!0os8qv?P=MddKQGUw@FM{st|mqt5Q$co8)PB>+o)_Dz_LWJ5HhRoH~ z=w1kPWor97BA8n2pH0Iv9_0XmqTPit@W19_oJ{(CgoWiUH(!bV-T8Yk3`-`E3j7~u zjNpC${}4=w91slW-pw6|el~#I_}6Ik_|bLs$XOJALs9vkzYH9o`EUJjE!Gsj&KGmT+)6H_w!iHfpD|BM#>*_`&A z@vrt%(b5{F(F<=pN(jD83Ue5$HDskGYfEtp++7F?C&F7I#(0Xr?otLFqzcZrccOWX zoR_}`&^Wn`PxeM`Hh+D8!-ogHOhcvnXZ`4VNUT|3TzjAj5!{0Ud)l-XfIyl)QSEdn z)9VYanZ{rCB)rnoxXJ3jgW{-R%3v|Yt;pdDD=0YG)OXZrqdA~RF+TxoE^3yJX0NYI zw%nf`us<;*igI)WUB~Z=Y$=*JmD@`~FOc#vzYo6$R~9T>9)9lSHP$v>j_$ZR4H}${ zF~(9F(&j#eo)OYCdzgxs)8VTg7CNgxI7AxBx_+ z!C{&=ZlJrqI+}i}S84Un3F)V2kO-o9<(e-nZhCZi{@eaIZJM z(7N#3-rwe)uSVqz#b3!qSMTKl_`+m7f7=JSHbSD`gI>@2{6vi!27Md*Rg;4z31Oks zs=?n><*|R4H`urKrYpUx;?qlDKAO^}!@Z?`Hbf%f#s=>T=mj`$SijL``l}8C37;}+ zOYMhGmr_FUk%-8Q+3YKo9E^`M-H{Ph*t&F=NBE^a-orzHQU|bnbjap=$E4Jimkxi)?c{ZHgZ1>^>mmTTz#>keOilwr6w!MiJ5Nk7 zKx+U!ekZ9nG5SnO<96Btj5ig&^Z!K%o~aKwe&>ZsHb`E#-vohqUi5>H97yU1ty#TF zfMB2bZ5}}z-{u*=^Nb2QGijB#l5vWM7UB?uClU`Q54gJSy!;l69&YB|&d)@;7* zqj73+`Bpp}Z3qXzCEWlN&086Z{bVKtAn0Nt>!X~ulTX-^@Qgn=_V=JfzOA+@JtVZX z@txo}Jvb+cq8~xdQB^+s{Y1i`DMse{($h5Qht(d~%iF)d^F+_+He|oi8~c;*9PDx( zpE4DxZFvucKr%QKlHIKArK@MY)vs+Bh7$=l0J7|&-9tGy?}FczYQtC(7Gtf8!5q@_#>6JO{WATFZzZP zhG)(OJh^R5O2nZ|UTV$^MW4SF@lgh0(Jt;hMB#7DQu$E&@O zN_a3?R`lc2>L5EeJQ7wGRG4gL(!}=5Tk=-qdFQVq_t{~uul0`r`8#t6HqI{Lp%xja zP8T82Zs7m3Ttt86CbjIuY7n|hN`&*t(Zlsbo&gj{uGCHqbr($yKh|ocr-Y@%#5q5H z$&57(X1~2j62`gpSGHX(_|e6K2L47Bme!6thYzO)YY?-Q!Gf%WqiZ{_yW0``YIjTU zQRZMGsZ@fZIm>Qk^N{TBv?((zUL-w&1exD)TpUp{JWKy>^`|ZurErK0yUj_?y|7Oj zxD_WlP52(rg;>y7b~p%k-pyY#0}zPtd`J|~G`+0VePbbJ; z)lGAzw_cmMF~LEaQgel$`?rVyq3O=Rd^cO-REi+a4Fb}jFX#Y zH@8pCVgPU1Ez@dZ=8=Scx)PB+u8s+P=I{{YT_`|>?*YfXlD*|n*`qrYx!RDxTfLt| zhnwNvs2Ezo8quzs-!c)8JKhgQb(pz5f4MGXm3v+8?vj5qK|Ly}+A0xzp^Ze?K)u^a zx$CUkuEgH4$K;DbJA{NNVKU{;?mW6Zd&X30RCPP62ZR~%6Q>&jmAMhnyp(=C-RfkE zI*SD(52Hdgt|Ku2Y)<9$b_1t&uP2SMf@scz<7bVkKAPfZL1O#q|*5go6jenUf?^R8CE;M(nqu*^gVTPoR|eYTTvS_Uelkc8MF$ z&!J4W7UXu?F68pQ^=)sXLeCwJaX(1yZYh7s!-7YKbqaP|!?((dMSzQjg{6u!F$;U7 zGsW2kTW1)&d$S3v3$lyH@Mn}+gi%rpArUAnY=i|N3Q%kpV@4p|$^rry-B*zV6-vm0 ze;l`-vp>pn0=m?4eZRyTda6uRfEX}WsoXO_B|I4u!G*BGU3@b^$R7!Ky`?bpPA|@V z5)$nC*SE`%ox~7v>4c>J!^grUdz7Kw0?M<)bH9$#5+4wS{4dAV?13CES|Ngzj}smV zr~#8d$p^nxKn&9Zz1VbEDe}KphV(NG`ad(EnoD|;l1u7a4fj;F5+0tzdk<2$3iEXm za>Si!a1kVQEo2QH?V0n&2Sk`8mGLam&Cwg_@QwqMT9LB2qp%T-1}Xps{iVapi}UT* zQb|*x2%PIXl)(|1j29;2p`_`zoJc!j>+X7@Qa4ZL3G(Xdj*jBySzyXo(2$T-I824d z&N(S}e4OOk)%Ix7!qP%C*J02VR;-74R4(TL3+zw)u^tGs?&`&6fUsfUo{#{~q+vd6 z6x9nf{d8d0aa4=30#N0-f*6Pg!SnSpOf3_6?L~)r{0lXy<(!}Y@Gy9%VzLu}t0uZx zh8GVGAID}53X@bsWz(9_MdA*8X1SJrOn(1+zl4&TJtutghenl<2lT0-4;$~3{mkR} zz#Y>M7zRD1>8VIDHV(#gNML{o7|ZMATUWOkP;x|wiaye1NWA&cVC#-Qd7zLt&`8_* zgmU=Rm5|>ErC!KV%u1J1N=dn36JsZ83Rjv-?Ml_4e17WE^Ry8QdWgs-hxyb(L7^v~2kG!ibY_&*1v{eEhCfixB1c@NR z1rtza?GOWMwOZl<{j|`->Ogk~m5Ng-j9Tdj3F*cEFt_Q~q}d#nOl7uOU-LC8D@bOu z6DIZC$t)?2ttX5FZ0HPa{mEGdPG)r`U1S?p^X+%3!6ow(a6b!Glcj z6xk6nyW}`bUDGFp99zdShhV{B37`%5`K0R+K<*&`SW;vLi+jG=>ij`dU(_E2q?CeJ zBgel@37~l(RwD%a_3Gtx6d0$oZ48<}S(5!v z`Z+an`VRm%_NSqa=|LRf6M#m)j0e~qIjF=uhKRLSZ}J}f0g2KN8!m%oq)>}5atui~ zEBCM0gu5eQ#9))64$IwMUXYO)icAziIN=Zw{PLVnmY}B6)zo1bU=d0-KG^nUJVsQV zrHt2|rRdL)?u?Gx`+fdFU!IqrPc!!JCaOo`S79}oPKU`(4Hs4&gDyXy6r{j-p|%KanKy3|jUXK!{*UHc;|XdYK)uMHa9OAL2En|u6|4vv zJk$Lef5Q|8Ty$VjP>kC}uW!YtP%>nv7DfZIpu5}@hs#%c@(Kvg<*)lX_euIwNgy`){-ZN#=Zw#^2n#5xZT7>^u}0;nBhs?bI_Q_2xwbJU|{}-g?^7!<_5Ciw5fVup}YXR3PVR4|k+Xe_0UJ^A9?MJXw zqbeLF^w^{477$46`fQ7iAisz>jlaJs>O7E-JwKN@o5$k4VJLs5@In_%$nIoAOT$^R zzAt2Cf43-je(@(UZ|GMM3+KJc#`}F#s}hP@pohRh!J!ZuylMU~%~{kLkn7{{#|=k$>Od$2 z7*=Kw5?PMSdtwVK{vZVM*Tng5bWBRV#x2cK2gDML8xCZk8z+gTd!e9{cyyNWszcJp zMNr&q+J*#V4?z0H^<@%7mK$UdQpqirOzV z6CDH(^LqheBUJVSu`O`dfSoPXi$yO9OkZ~YBvd2==cLfC-19u3|EhEc04=CLWhh%T8wnodSaI1uCrsK@z*7?SDz^xVUr0 z{s(@dgG-uB4wu#k-~p9#opf>-T~67Z2)hu`<)6;3v66; z5@@mrGDNk%Izq!Z65qa6DK{>vRgz;!!h5Tj_)3jwpAch-NyJOngn^S0WA)hHbeuV! z$Xc6|ZB^qU+ayZFtALwY6kxLwkByB9IfiJ3F;<@veF3G<<^bg5D1%>2wrPRtFLy5mS3_*Sw*?#`~1&j$z!D?Rz08i4k)W54o``sINz zKd?CB>v7UjxA~aA&wm7{*K6f!6&MUt$^%GQ;fL$`iV>tBp1aB$(c!xTu5xDGS%W$h z^EsW0ElJ=PZkb7chobX<4L0oSODlN_75fxaU7enqszwf{#xL%A{TogT1vjWko1%b0 z_{B&Fdn%F(*=Yv8p55*1OY?J&1J0R)tCq`_`7oJ|{d=a(eyQKHDszZv*OTz%*%|H@ z3(9sR+#%SsS#vZGHUkk-W>QQ8yZ>PyOzR|b;9J6iI-ZFS0XVjkG``FoUtT;UEsEX zbdjH*E@?T}FD<`8JTWix0vCOv-skhV-}n8xUxOa< z*aFFokExCh*pwl#QYLt07}z-kMgve!oIg?`+!-5Ut@(VnZn(Z!TFguD(x>4u?Y*Nxb~7qBt}!)N7+DsI7F{C zunEETY9GFFEee>gO2RU7T)t|e{+6)}Oj)!s?`R>G?O))}j!4{Gqe^RJnO9+yRvI*} zcZEU!ga#pCgn!3D#|sI6)~){m=I_4^%N8|L*KhG2ogKd^jE|>V+j~38>VM66Z9&Lh zunC`CE}Zau;-`OKBoPPZBK}xg#T~Na^IILj8DMbq(A0Z*K`be#4Pf?5=DLC|3TUu{ zR)rZh&}qC_|HD$4MXqN0eMnpy5Ql3Kpa#hr*3WS2BSuKAsvNv5Mtk>c+wfUL0g-$J z(KR~o;%a94KmLudkkG&v5dD#N>OG$cYf4wudR=UcGzh(Is}5+J9K`51UNzXS5M4;4mU-CT1i90df>45ozO^> zFMeA}GeIj#%yai?GtuqxF31;px-+99etn3wbMz?BKAiQ7=i7#Dm#CtGw!Y2L9b!(b+&@WJrrhzPr}#x z=&it8XV`@-D&Ktm;0g3G=qYl^+PQ8UV8?amf0z>GIeiFE;pDfyRb@<`KH9`s;tMn_ z1z*jizc5V!feKYdUsp%KFFvBFTRy9c?~R4@sOdiv}(qcs@rMy9KX7eMTfvIfz=&c0- z4q?_uN^~_eV|=!Z+j|!d0ap@jd8s9&%N`d7)diU#G+?Gl7P?0&rT3_+3h7%2yB;#} z+^y$wGaa441XqMruQ|c1%^Ax!EFziY;cp-?4OS-*n zannfTe%Dyq!FU$JYVmX*=n>-uBjLmukrZGShsCn;fO(y5f(t*=%P$70B~%j%Ahg4W zfo+t9U)R32pAnj=JUaIt_7CrAc8=3%-8yC2%W9kLMo!tMaKLT%{T_7CL<&#=7nV9w z@g*xOxOmfjAsuy8kazVUgp}|I2Gd4_kzpBsPyz2;;sg)tus^E< zI_RQ`U@%9d9+ua8$*wLU=@BK2w-&dMY-6GFRhGDS&Ml^^XdNSr32Ai@b2o9!ez>~y z%hYon2ehe1$lH(ZaHczmRX*DQkuX48%hz}!1B6&R=C768D_>q?xcJyG?gZ{tx9d@i zysqQ9Y5{Cmz+nR3u3Pb4-AK(GpmPBi!Dg^N6PFwSv6)F@*QIV-*9Rbn3V_?1M%mP0 zf8@UR`I&?{u!{`^N>e#&ppv759&bnXU1bQ*&}jRY&f6eSxj+aAHrmky?c(vs7ns2` zAP-TR6qcnK;paO65~?Hs7;-F190pno(gs$gqVw|?EQCTOJZ;!oUNXEKTurZ%#!cjx zM4o^dZW;Hsxmdh6<-~!}cd8E>(-PsNAU6Dotd36nZ`6HC7Sz>GK>sPpCTxlY4GurR@dgkrT49rbL zj2wv|gPs4$Ge#jJFKhTl(!4uTgCQsjK__?9xs`E#Q1QAcnF#8iEJUrWtgx{&hrP%3 z)9%W(nh5BOB?T5xqb%BV;H62UhpSM}bgTwEW3f!?v=j3?Z3SD9gB50GfV8Ar?@&qo zPjd@ju2TnAFP3*|9LT{RF2HPSAgKO#hI*yI`HGqo{v8Vwvhc^TLX?@^vh1lman_7x?Iox#Y&@ z5NPYG&Lz$4+{%}8$V+eMJPdK^5v+qhYhOHnZHtNxPeGp^fn)8=JbOctkA(tGwz9y1 zVCi;$2GFpUv$QK3mM0i%d-99V*A_+}-4VTAVI17lc|Wby&N8HxHrRJ@eP>6*cYh`t zHB4&b|I< zM>07wH#84^{?EbbN>52<7o)A5&a!5mol|GOY!7|?D0p;lzxIKQ^wl`ieJ9fX zhE9Sr)Yu6RllsGU^T8feZeCsvL*jG%_pvDp0ek+`D~&$5>kueLRyQ)NC(dVFR<(#@ z`9lvYqc0AVmaeYckLDEPsNlgtj>CwpQac+~m)&`Eht9}!HayHhBheyo|0p(f;Q&n}Xrz4&2?3j?(q(W!seRwo%j+gloSMeR=Bcn@mz^6VK0&J0O z*%Gi|Ka1DDel_jYc3K+zMvDfWdg3gjgJz zqa?fz8T395#7O6dM5}Ku2s(9c6(*7+p<(G-qnMQw<#G(1QCyf+aH`Xt0>KuyXX^1$?+CI)aa`vD%5Pjn4b&ie6^4 zXSS6It83%1jmxn{+ga7=%lF3&oxS2E!;j|ku#I2dobz+b8<**FQ-Cg}kyk@x?Fw#I z=35Z>6cY{pbE>aSv8~~}kir3l6^u_1`iZ{0vaE#- zI1vF_oieyg)*eE_{MQ6R36b(X$I)4-mN_d~83^jw(eCcxkjKf?<9%0eK+&6xn*p!IqcS+xzPAlfTJ8WhN`)VPI3}Q9M z!_l1*P@#A?^E4n)@t5tFZRhS?pCb{1>wU#pLYtT9xM&DAWMK>gWKGY|aGXv0kK@_Y z_wNr|h&nK_gGoXSH<1W5bc@7=WthkIPsb+<-}Pmgw1hJuwM|rF`(t%;H-qO{Uy5~p zTw2nm8Fr#NF%pLb<*R`y zGC}B8H!1$btV^e&=DQcco0-NA8b%epyvF zj||Snf|8`a+)wC2iG2GedWYJms%2V-5)ENQ7vS_Vt%owNyjBLC4GmL|J)u1@ZwR$a zv5nk!(jQms@F7ia6;*gC>YKpg8ned!>XR>SDHQheSF*$b?ic5_e$oa_cI0vrtNBTC zZ+BDFet|-*vh9O;y#`yPEPy?$5~#Gn&lrsU1&;^@qi+FIME2A2x zi`1d??`6ktO_08%aX@sA1a+jMqn?zTdIAhwqC5zRkrpvL zw&r2KalK}4aEwwWIr{yY54wYXtRApiZlqK zh15hpK||M}T<lYBf1p zus`maG+_{;L*Wgx9t2vp#jitY+xxlS?*m$wf=lUBH$=iKrDhdn`=D>snEBfemx)5( zIeurX#Es8ZhvANXHTrVa~}K{=9d@C49; z@8ZMNnja^nM?S;+-hQt4=#g@s79gjh{h^}XKfqoa>{ZxY_lwIzx!@DjQ&A8IgZH0} z6Z2R51#f`F75YLWpW2-?-oqIVhs12G$G`JQ<9jyH#R*0DC1vOt&Rn*NTD(grp)D3l z&-&8Pk(L&~$bP0o__n+vEl{M$kwG7`K1Z*|8XXDperu11zFeZgjhI|VzeU-tkL(eR zeYo*A@}wzE*RlK*Zm=VM*r&o(M}-jSCWQXwMbOG~)XG>#Tr zLWwwkC*;F#0N9@#g%#zX{RpaefTE|xB=1Mx6Ygx1=!vqY5OJec12gH-nh4p!-h zEp{ZvuWTs?99%YC%ZtUr)Ktr>G1x+rz+kaUbh3ZCZ3L?E^tIAgPMXZ@yCqdW&SvEw z4-P#|Il&C-l-l_JM-krZn?ytPUP%}u2x-AYw3CvIxp)1zy6nM@1k;j@Zc0Zb8gQXP z?gM?{OrBR)6ne1yP*cF)RK|J%0VOo3!o(Oa9{9^NQ$KMLZYALoK1zLb&ksVQyK=7d zMQT-OYof)czS}(5ki?6P-xh^`_gd2wpVNjzPB{_mQaza8zE+x|-B#5lyk(^2A6!a~SWiM|V{r|B;@bLH7ATOi)O zJfomi91rvy2|bT+HR4YC#RHG+VI$Ub3#4;JVtfe$mD_I{81V=R3Amy`zZAIc?4iNl zO;S|Kp|d4epf@GbYbr-$prZv}`8G9$&V;qUyi$+)Hq`8s(J-WLhl?>#-E;}=mM&E8 zdU}Of4GA^`3s!}WU=s`Cse*x)!%a9SC_7%SFuChw=C1BW5@=w*Rm8&N ztU1TJp2v01kQT->P_ojpOn*JoYb3XX+zA9&~eNuI&ZNAj* zh#ZMwE}h5!vX3*tpHI`<)vSc`ll{hKhji`>p_C&L;+WsYu#f>gdJ$8JwWb(kF}TMBvALmx2LRq(lTU#vF78m|>vFjE=3nYjoP%+D0}> z+f&hoLcG`z8V+)bM8;z&XwU^oGfzM3q~el}n!-P@(gdLIGykb0>wrm51D8=Zr?MlY9uin zlRQff7@WKQ;kVahzxQ|N#O3ZrR@%PY{8F~rI4<)S10qx#nMlob zHD$1T-T5#uL4QBBYHKe0DXnPSMLb;$C}BR zUO_)S%*-V94GndbpRuQ;r050&1k4ls*^hbkAik(|e5gG<^G&L#YEF@8^jpC?<@!ko zgl4)jFV?lv<%bFFKOmS?_J~%Mo zazIX~(xUvbt}UqpB}N^bqUXTbm)t_ z3+}x#0=~za$s1~jnj4C&v*qV|kt~b;cX*|;?I1GkHdv!oX5yO@qH!d=ud&3;SqP5p z$2vP}ALzcF;71UMumA^h*u#jR1SsLl1OB_SEw9~Ack(kbsGpR&=8nA=h!sM-tO*ht zx!*vI6N6(Z3q6uUM|HMyy*%C(ueX|1x%}VK?lH`BqZ=BG0t=v!9*TQ1bTv}nWQUYh zG<51LnW4dUYKU}Ph)n$(gAPl1>L$*)^K4@xK*D$fJhY|5Wd~nHN9%e>Vxf>PyEAUf z0u_QKP%WG9O={)K;m_owr0|i5&Wp6vu_>aLCDloBb;6J?bzrjwNz#FI*{!t0L1yqs zA~HUEF8YQAp6{&->Cyvycgubsd=o>WK6YHdEy>lTHSr5e zB-(@tp3v8vd|Dd6NDF*dO)~V)E0`XMbYle(U~14wOm$S}W6dPnG;N(EIE-+1+)9b} z&<$7ITn_EkN+oc!nD`M=mWK`vW*hqz%>kA_nsrxdI4H{{bIfTQw(fOJqdMxj6Qe{1 zwPoLJGoXFC_))~Uz8gX36fPzOLEj>VPojSBy|Hps)L?)g?=3|TZfgRf%UFzf%d;j$ z)gLd#y?61oZ|N|zkLu{fQld3wso}GqonHKw%Synm>OfWPOl9l1wukxR(+(D*=n(`n zeApwH@EQ`-5o^5m)NVD~W#@FV-;0i^lv0A^)MV{PKA8IZ(#h+@T0R8vQk&~egRuqQ zk@-fq9Equa`4SFy!M;dFdT}iS6E9>c@9^tK*7sxUJw9hI9!qG@DFxkHNwfYg{V=0P z0(}v4|=M=MV(iXLJ*QKjk$m4W8^6Y3XwAq=lXO} z0q50#A+k>#VTl2erK=fiMo?aA_&g?HLTBf z6%jW^A+c8deIP!TT9@`3b95gWHYk?aHrD ziyUQR)6)%v*cYR^7IJGRM!({ckA?Qk;^hRzpZ?6|0 zf~Rlf+pyx7&jKnpsdoU%2M$qKKP5RWTY1*cd+d5xI{$rs^h17rYOCCL?_wsg29@=& zwZ19>N!}5^d^9=`8g+ueZ6s0{$f-()g4+Ieh}_VLCBAv=S|YWp4ucLj-z(J+xYSq4 z78viN;=Aw31~`+|MRN#veW=>cJ{d$LZN>5%;4vZ((!sfcAToS+M%&6;=|DJLL-IjB zgW8cZm&pxXkw*IWD?Y&D9w)AOJ+Vy*kxAQ9o*2kQT3&d%>xY0C1i&;cXEG+<{-%Zy z3E%+1CVz_W^A@6<9y$WD$}4B>gw8_LQ(%WotZT1>tAtT(9oriebPH)FWCjMkZ@&(H z?-ihI*OOM--ku}rUY^dUr6MoSJZDc<`=?BEhk9t*wJGj04|!YWO7<3Is-^jt+6hPR zfFBo`O9e6WVSV`0{AaRRRZmaRxAqUG1rlH1-2Am)k5hcx(7;$8aX8<~=pZ_q4cB1vkSs%bqLre^00X9sUI7 z?e(yU18t<+x;+_{>OO1sJF5YBA&5B-V43HUDnW4-X$X>eAYMypB4J24)2E4rHPWR8zX7Q*OfBQ@qLPQd=@O&HY%jz&h{_4OJ1 z(f8iql*E_{;P%w?+^YiY4-=ujjXdCWc+CkEKt}T9Sgl4i@KBz=%6MgYhrZja;F*7N zO3ys}8;(yD_?Z*VM~2?Ary7cM8&_v!pGOA-zxbou3Nc4dIlW_KW^GVw{Y zrnObB915XC-S{hmDN0kN*y$0Vqm&+au14}twB5i}n%gTXZIJe0k(eHh+$fS2tKYF1 zT!!}cEM_BsCP3wVe4R1o=D59;VQ>O}jpo++^wh7E zt8dY53c-1b5TYmQB+CyS*E7EJ*Ryu=KjgE&K6{%dP8TpY75I1R%|eU+Rk*9u>LjS2 zfU_$eyUhdk+;JkebW8kcKu!ChHR=r%g#j-HWZN#_2KRibZo|#oR?)1 zt)7?*e@AQrsReqU@I&6Cet}+crYZ`MgnM4eA2q|_he6*Rj-R`^PYjzcqfnGWqrMa(_UE5 zE1j1gd}N)iP-ORxPs<>W82d>&GHAsaYTOboE`GS44{mC)@A;Ks*g>NV5x%$Y6ACm$ z4}FbOA7|StWF|Jy6M6iSK_PS+^TjlKc;1#mP8^tlZXw$U7)kv26ycESwXv~i0(K;z zG-B@FJGNni-Z~fBg;ps7r&ei4dSSrFNB>m(@xZz3_}4F&%907KrRLD$sx(Zgkd~VADpJ+#GXeLoPPnAh3mS?^z$u+kUsUI zoRIKfq2;@9fbkk(d>{1@=l^|3*47#9AzD%FN!3LE^Z4Q8--9&*Gh zKVJf)!zLd(RQLpJ^$y)OwUr*z3>MB|R?vUOhk%FH!j&|kfg>7%(#k{Of4c)Q#xglG;MM8Iz?p5H^}qy&8nC%(fd+#J z4})10Sz-tW7E8F~FDQb8xTMHPO-KB{RX6QYt2F--yN%)?pcIV*QMqh(BW`R2q03<( zZ;KYp5#hH)D3%zQAmHs%6t!YqUQuDgo5`_bbp;B6o(1+;(EK5F3}9a%NM3vZ?Z~bX ziUX8QBti!Y63R+z0cBC9@XgpuI*{vX^VlmEh=)dtS>jM83Sv{ z@ZBCvPM}MbWTxQ^MvlPbKfC54;rx1W658B(PJA{bpQcy26s>KZYkisOP%OK{VzNLm zcP0YicXQ2}+sf^|ms?UWe5!aBQQFL@7MnoYB-+)r&y}fw$pv1$JHM@-W z$k8Gab(h@8fKVCg{a)xkBg*omxN?HI=;H&D^?mKub_evLy}8|eHex!^9+=DLRsi1) zh7v9vFn;oQk^7_zz9ob00@4?AO@+Uf{XmfE3>)zIORrBz&?kZEfMxc(y)lVKK#`E? zXNo@L2IU_G)}d&5sxR9!rf*3?0(ljpLqDXVd)C0r_-PP9Df%|+{x#gjTK+1k5m{E&DGjqyGm3}-1R~KDrgP47doC zR5WZ|D~*zd3ApqZEBy?qJ$`?5T-nA(Qu9IhHX-Oeuw-+t+$;=>acvd?+W8yd$p;g4 zW5~A0s#>Oc`DW*9f>9sg=|Vmd*-|NrB^qmfPL`E13Qyse1j;UJ`2Kd}5Z8{@fEWUOYfNXxEG8Jz=(;V-vwg{G3z$8=y^$jigNI2ar_*06}c5}(-S){wS(oU8=B8SdIB`5 zS~(wF37{!>egAX#1y<5RpIwn1b%7H3Tb9KmGbDlOslL6Q zDD#jt(cftaG4?7ZBssG|lMz$DZX)3-=8Hz#`!RPsKgDs4Tb6*vTPe8` zjbEblv?kU@4c7swWtq0B7J+-VpJ+HY3JCVj?_$N=1N&ilm?=FRFm1GPxi-AM9Ys41 zmzZ!l(!?sn1sPE?S-gH{+oeLMCfN*}FMxrWgw?kpK*{Ix{|tZP03UYQQ+^D*1fBEc z4~Rhx$ps0;Be2`XNz+(~AQoAZj$@`6A3^)!cjec+(!g<7+x$-#%c8A-#5r*_62SnS z>ZnitY@lvO4C$JAR#3kcp#mJh0)R)8-VoMFKm@R&1KMuPj^&9@KNes@V`vrlOf~W{ z2|`-KDj4rEn%=$3;^2TB-jRV8t7QV$kRT-dA+-7jT*Tvw&E;~TL#OMNO$Ke?epXe$ z<+!?cV6=i-8{-RDH94c(FC+51(v1;g?H9>WLuT2$cx>(#}{{wT=qWtL}=(B5-y)=cbBcizGAz6h*VlU z^p+9C4Bh}Nu`SJq5<;6G1Ka`FR2HFzCJ;cd93gqaUWtKRpn;>$shLHdc9bkI3+DpBfUh<&Rq0b3IuI zlFget#igk0-|pxbkTkjdAeq#gP9MR`aASmk_`e;zD_g7m{V_7nGr9OCezU4*DuMAT zRVoM;Bu5q`P*_Ucf$f4;Z9e zm{|jBDOi3cCF!W!Ht)E6v{Gs5wqiAlXFN4V%KmNnzp6<}KnVx~Cj8j{EVN6t1)EgnU z#Ldl3^=)GHCNk83Zm-iRW*`HIRzN-_)PARkc)*!$@HNvVKym$+AB2Eo0byl#(8{4) zHLo#pqotw6pL7vs0m6X18@NJk8}eQi>fPGb$Tc1L+JV;0-iREvD%QhZn>_@0;pJYddJYq-}fjSV_H-DF=T{7i@d&l81USy;~fvu zUJZ^o0P0A30^7X>nK$CnC3T{TrSBS*7;*IU^hUzERn=%={!^n&8Yk!w(1ELUc=K>y zY;fGOHT(;>Ou-WduJ z&bC1uDClj4=#x3%`_`;r7w|#!%Lrwb5tV^sZyl)7f%r0rk@z>SpRh55J%Lda1({X; zz(M1iy7i{Xt^BemF)113uA+ICbmpMycH2j1oJBAxt*Rl|oHvBN#ACk#l%5*eCyL&P zpXl_&VD4HMGP|3VfVHwJE*Qd-BjyDJe)yN!*f5NuclWhEm18Ij{$vNjbRtq%jOF@d zbJGU)`pxxSOp1n z0?fE4C#M{3QL-!qF#gi2DxN~DMF^@G2DC;c!wwu!^^SvG*7Nz<%z5UIFRY0607Uo9J0gYuDSe2T?EA^v383X7ZfbX!uHP^xvsO*`BHIZU{K z=qmX8ukS5TRyz~iFDMLR9p1q(WYew-!zQ%U*ORn>5lm8o-PRJL&*M;_$fZXZJaN}t zNd^b2D}WM#qV{pYrQ!B-87tc5a;A4$!|$yt)LqElY|K(pD@s~QUiB@!dS zgBB5@DsOH&#!#9!5rlWuO5VSZx{pC6ES8c~)fAU{D$|5C!S@j&7>YdoqNL7sy*;*423k zju%wM-3|(9s8Rr;A)c($K6>`w#Yan(c`rmq1p&vy;4-4h@KV764ChYyelv4Uz{1VZ z1|Qo$1L%bVxgsbBZsgTa8F?`FO|0N9*or5_?3K`BgB#@MNc+nqfV<^7&oGZyp) zaB+d81RjO87{Rdb%FC6P)a_C4x@1)zx182jGtuSwO<4K(!Eh@W&gBlpNWZjh;}3oj z`^FU&|zl?;;l> zbBn~7h6TApx`+aSSG;But{^Kmo;;1co&9nyjq-i2NWHQJc{&Zy^5H)(5;ym$)m7RD zEY?)H>Zw~4{c*}2SZW8ZJmp_Ur*~j*WF(FA5&W+|ihG5P62Z7dkMm}Q#2GV?q_POO z{O_!7(=~D|>$_|!B7ocJ7(PQ2ZA5vzIaxq;YZH0;n7;4Zuw@F6G!DM2d{gWL54zwgVnqqz{&rwGBa{8krCNYh5*ABpQsqLH6| zzp*n9cPbLF+)uZ23;a6rSAy#%ItS^Q-|--(7-exe&>cHJdVKnd0=OVBmwIFWxGv7s z>A$Xfb@f;_=)c9!Nw*ds*6lHcgJZh=h%)(`9&OZHFFKFU$;tH+1NJNv%Prm@k_s#? z)Da2%z*=1XSN0NcwYu;qOhzJ71-{JcJQm=xJGST1k~=w>sR*rdI3j-c@i0Vv!nJ>Y zS+Vtk7QIAj`U!9hhIBPS>>eduK83@QyY|xKF87z9?1lgc{^rmx<@=pq##a(fkHf^| zS*(#QcHkrda=haHetRRNWmd_}7Bv^7uY$pCMFV0qY-mETjm0qg0wO!7ZmtM+{vN$_ zf(Ey?3MRkxZqO(FNwFB2_^H%P4ZnxQOjXt3rg-wG?ZR$x)N^pLCHuDcaHvEJU4;U6 zSS3!Bkqa7^RP|%?g~luJr6@NC%IQp^?-k^H3_SNUz8Q-T5VFQ61NT@70`8xXnBx^X zFv;8y&irzI2sqXXeU3c9A(+tSQATip3{47q;J zs+oi001&(1h6!7f zL8QqfzSr^2&j>%cH}wyzxA@kF@4QRU*=pZ&Ja?a+13D$qk$&pm%v|1FYD)n5rwXAB zILp1#Z?lxAJNe!#8J_1@rVl2R%o?=K+xltJaL&Hk?m``{00Kfr`+Ss1IBNP8A@ zgBP$pJ-CX>7K9aW;d3eHCSWDK;1`yX%6U{+OZutheMlinCzX$aC0+%bN3IMAS;W}G zM6Gmt91lrLD3|!i9Io^*sN9uGPZ8K$S27sVX9@;czPcTO0qYq~ui2$<-mwfz+pZ%s zjw>;9K7f0Ptt1Ph#mH`1SM22>rG6^86BBwZbE8{cBxs0AQ(sZAAv+17;0;Qz3zgg< z|1>@nC(07AER$;n5--3fCJVgJWZ0;813Rp*od@mQ1)@CQz|IoPwLf0v0wYUrRaIrx zF9H&TCBk6)aS*fIE+ZWdPD*y&_lG_x&zdGS1e2jWa2U1jv&qc!LMC62qx&jKYVDii zwENf)Sz4fu*TsWDHNM42uL2xor4`Q+>1Em17cDPi8YI+t3YDdVaS#~M%Iba7w89L= z0gP2#@oIy)vxA!v`@J^x2*SrtPN@Y-u<=_Ht!=~wWO8FvR8&9Y_4V{V`HVWoPbN!jnSzom;ZvH2WKv_kvKneovuOkcBp#O82!Ww;E7K(AtgOud_nj}HZ*4e@P~uFoVt+~BFR zv^0wBpOu)&04btG;g>hgEw;UsN7N5hixCK^l7Ru`de=RA-MR7cNQtcO;1s&gRZ@n+ zs9aR_Fwp3I0Jrr4utCVZ_ermoFEV;{>);;*Xr!u7E0jMpe{+jpd~knhaFNlIN<~F! z?U|tcs7J+g7;Tq{H2w0i{Ui5bAJDTTzYYik4?RA}VY&onPd0PlnE#Ju+unvxPe_p#s*3@aeq2aOAV8*QFB zp!ISvp6$V3x7XN^S~c?ZH)Gi;!ZT4Jub?`cFRBdn^b+9Mwr2q~{XXoHE#pZyduCBv zS#XK%IYVvR^ZmEx1xKuL+TsRxnqC}`ObUABGMXeYv0(MGQbs~BaN#vH=p7`m3xc~E zoJ&i#55BkW?CqqbjWtM%=pKIisNB`*qPT2ma%OWD^{w=+lzaNM--+tnQejUIbHgc^ z|9#y4x2kEy8ckxqh1p4fz|XQQpZHOYFPKiQIz^{XckMpb8{UqAmi}TOyZN5npEpVN zPX}Q@Gqrv@B^OQGu)N)GXSoI_TyR3N>513u#Tnc4?w=KLt3e-$XBwXpxcEC&7GTeo zBHfNf?!a(UdZ_COzk@z>ki+g-uFVHnJra>Vnvfk}>SD{YWu}Dj-eIQ9Bdb^l(NX5) z87Ky= zX$C&W!xsjKe#Q=VcqHk9$xF%Qxz;A`{rJUzi2Lu1HyUb)dEtBn=%yZOAv%U~qLf{Oi08}NMG+x7QC0p78G_bjqg4%Qz> zHro_z%?mMkd9&xa47|R%b-?{)zWr_6g)k79)_IqvBT{tu^I#x14Z)_E<3s(ThBI=-(39T(s2TX0N_)A>^E0n>Mt%Io+RC8 zaoBL9n=zfai@YO!AsQTL>+Uj$Oq9f~t@?rbb8iO@#<^FfB^u~qD5wF=dVe{F&gUd# zKcuK=En_oih~=)2ZxC`HaR>HGOh5{1#|!E3Tg4m{tpOeUSH6j7dyDK7AbRtnJ=z7o zoMUj^a9H9YxIo#@&Ib$*;LN~IG2HQ=5GDw8TNcPy^QGJ}ZvIpv!-v{qK6T7Vy&HWk zNDOX>dm_MRgteuv?#IcR=f=Zg0Z3Qtp0v8R)J4p~r&H6H{|(B1PfefRO8~8zS1Waf zEb!p}Ty2I+3d1iNsY?Na-dkhPZT^Q&eVDe{>4fTnx7r;(Y2X3Co8abW@_b3u+yfjLFcuY+b#HQM(bS# zcOmNhd?-U+My-X?fEsa~SC)V1-oVOMy^rsRAe8|*@1y%?mt)bG$Gocdrfn}YYnhr8 zlaiA=?_*)i_Ac`SZ`X#z;^axml;@FwXC5qi^?6co{E;s@ab5f?lRmI>P#FKiSVVc* z>0%vvu4a=n-|UW#S{Wg8pF?vld*+398(NH|ah5XTIxp5VwNH8k=Xj=9R!GL@T`OgL z(lH=1PB8iF?EZ+T7`CW7xR#4m4P4xuKppnsHto*=d>ncBz8?i{+f~j&+CMFFVPRlH zmb`Vq#|G-v_qE$aG5BPaY4z5QbJrF<7CiURAt=A!ZzvdvZetnI6BDq+fY6%Zvf*R2 z)fn1Mg>?~_^&{nF0s`77e#@<a-PC=&;Bx4u6G+Rc>h(b%o&}T z;{fjiEz{qj%U08^SU6C{_wMOh+H;S;%Nae(3y3()Np^Sk*cXwZf&>~M(EPqHI(`K7 zpgR2T@jE-DZRqIOh!N%@3a}^qhMsuN39Z%eIcT4E>%0@VAks{G?X@ zYz0B)nkz}OEdTwZ0Dm2lwk97MW+s-*S*|&EVD-|v2LrsDzvr#8co=XPEg$MGJh+-0 z|6itvx(ib3!9IcJ^XI}ThZwcpJ(1a z!`iP5M*fV?<#Ztt$0hURT=|*1=QPtYk4#_0E&hpM1zjlD+V5-^!E62pu_MVe?(gG2 z`tWF=K_1gD+e1*_&)ZI>F&@jj@|r_-#y+rd!N;+{Kt;kSr9H?cTYSwP{$61^f-5bx zg-r4KMPU)H_eJYHQbRaoeswh8D^$iA24p9`!lb_Gx9P5pcZDpaAi$je^26Ut!px-? zG~Cu*P9BvV~m)9r!<`noz+7rgKoxqKFQD8&8y0RasjFFD*Gy*aW$y=!cH^++@v?3RLT8x9INENWKh3rhfR>IF;NG*~!acw~tA zM=F?-ZaB2428{p@cE(2F*uP)J5R;hoP{$i|L`r(x+O4P{ICdx?H{`R!zY8V3_i!&m z=0Ri(8-QIX$hvKG!Foee%?pD9)|pB0&_Ome06~BOp?w(Y{g{9OZ7GnF&9-KU1tdMT zK!eB#TKb+>M z)e2-kHb1AQvd=4hKr2l}D`t)g;)XfkLRpVCjvZf;z-nsjzX&;P|NOU!Y>XaVpp;ld zL$MJX0c2?N0h93HTq!v>gl5r5x#i>4(id_pMX-3}PKes-x>k4wG2Srm7af>pDogyj z+mkfQ+d7ytFKF@#Zt)>J$QXjoYeZ}UObAAdqx>&H0^fyhbq+FUtM>YxSy^5xa@kBi zofBqqq~W~zQ;Ns{YiilazQWEq;G^}TBvbjDr<}JNS_1^YB-TOh_eb@6#5UR?sMX3o*)# z{QRBZfvKW^LerG3-D6!dv+RoAaLa}G&Tp@K1$>rcie;CtN7wIlEf7g65b>Jjbuc`6 z7=}h3oF7b(Vj2@9VPxFqm>I3Oyf|WEQ6DsPPdYyxxsSi_XQ5;PFCT+p>AyZ1gFy!N z4LE+v=m>D(XRNNI4pXC+2e6fTjwBLIe$QK}7Y%d2kf&ztA4p`FJoEuXu^4sLrOxhL zX4~)2Ou6%-|5hD_faw)GSlXXE- z4jxbl3k8lJ>?lOC5F+{oe@rmfdP-`FlXzG~Ig&ck(^@SXAgRt4XqdrD#7B!hRP)jW z(p47figD>q76_#eu1h%zF|;Ze3h^bEIX7>dy1s}uMl@V)@s>5TrvJQPoTjOLm}ofr zC;P4U)CU{6hB<&^9T>w=)BA@W4%|Y@3OC9i?lCp&R(&e zrQy(kdFdINlnk&Zrx_mp#BxMrNN8m9zZt+d0}v>|3%ar+>6DjShX4&Em8K3l#?fewed+Ku-$Ia|8(TvavSwjs~dUj?s96}wHL5T^$&qe zb}&(%=}}{C%kdbOow=1Nm1%rIk2y$C8@|hK&g3bd8LzbU!}lJ$&XAPr4p_UMm6&AR zwdEWYCV`Oxr|S)O$$>WDn^DR11=}Kw6)s|mLR9H~x9djgjv*iUi0bPbga}!7e+G;` zDBSFO=wplhuX3&DX2_<#$^%@IS2tbGHv64R9V%@Raqj%a>T=SrGb2r+%omg+;kH-Te0 z!wn-D_qdC}P8|+Yi&rHrZ5xjUlig8I-MOpM9QeJWPQ?csaZ4LqAgWZYYoQsBD z_wRaPR%JD2R=uTIlCN(^UH@Wt2drxGw*P6oFkzhx^62YnE%<|rA;?@F?8hfp7x|dU z?M^L^zUAG$L#$PS?1TmbPXfLq4X|mDsa|VttahNvRO&znRHeeItdcBbO-yy4ZXVK& znek!~6J`cxIh_c>yy&-*vM9u1R#!8^{asdIv5|AT$Q~UD4aP@uz-r16b?xOYf5_g} zJU)~yE(eUxn<@yKV3u&mYkZ&-Ln;#a9JX z)Nhd2`4oO3-Q9S4#yVKid8wVBo-F_hBJy?>Jo-u1aJ`q1EMF1XI`BnRCEpcI7!`yE zSawmS7Fyeii2vj1JN&79|NnCw9Q(*7b&TvyR>rYa_8!@pS=l4w94nhLvv)QTD%rab zvWc>{L}dQ1)93yD{Q*55xzBxH*X#A1%^O67*ynYkANwqLhg_(4X_b+CBR9#(|4M6y zKM~<3inZ0eheGbT3XLVuF+?nHfjda@F4#Z%Kw#Hpx_DUx5b%9rs4+{Z8WgDhteTW6yULGV+R`Ptc9ET_;J5{J+*R*%K!4E-H}-qQi;IMnznjVL=?!(w>D5ojfzL zJs;NIiZr!Cv)l!erOzlMDewnTy|d%NOwaU zU_i%=(2|w}qJhf?1`iQS;pp(sfBlJYAeT`eA2Yj2>DzHIZ*u^Ek~^@L_XQDKQ}*iG zx=tJvz4Mrpy*ZD_|NTB_w8~ZDuC}`COA*YJmxcU_v1m-!F?(%wKg5oz6mBma!~=YZ^(hoX>J8zh^D(;YRNZBrMq?g_aCgw(vobSbvh{O;^(%>g6}jZ65C&fOiC zZMdtFkB`$lpI`F=21@na1m){*hT^YE2>vF76%<&plZ)N+BZ+_dbI3Xax#UWS{a~b~ zac{ki=OsfHhimwncWP79Thyo_3i+R~v(lc zK_UBlzCFX=?Cn-k0G;``gK5kMOx4Y|m0y?Ft~*REE2<)vaF8DfDPT;>wh#erqv!QYy3!xwf>gQXFiWum%6o{Z)!UZUudmTI`AGtJ{3t4^^c^9sl zAz0PnwCN52fI&cGOZ0k!oSm(3VNIPvBXZrhvp06|W7)n{Qk5)9qzqt#<0rf{bN27C zjPwJx_*QWuiQ$vhD%oNgsh=**w%LA|OffGhabcH&%!`u+ygxuCek=pS#Rbb0 zSg;(Xs!eqVGOvrf(-jf+QNjp@lr%kl&|FZ2g*{OJ7VuqeZAwhFZ|^khazhW}OUBP@ zE~T=?o*B>Wx+r^sr{V9(83%|xlXWRu<+SP@=Jlo9gY!N5czCB)reCgvF+szX{pYE>J)G3=6sST~NgAOsSFxl$>P` zK6?0Ah#Nd41(XGXo9MBSYbAkjC2&&#FnK_nOfOfCZUeAz6Sxvux32SgNp=Y^@H*fa1+2^+IsZyPX6!p2U$%fXcqMYoXoiql9E{v6v^NA59gVh(4U`sm17D zPge7qE{tR>D?9A71s8bqjg=jEE*UfEva)k>=7XckAc3@lUKvo&2K*Njlb6Yf>Cabh zd^d`}QB=kgNyEU7ym8n=fNYyDmOL^Nv{tpg0cdXXaKM#=MpRPzF}vH#hp*l?R#M6n!Us0J#+vH4t~78t0#-)%A~6c*cF&>q!$;9Dijf_CRZxHeRiFC zd{3jP*(%w6_s%_kF$NiLG!S~Cy9579v2gYS=^UaGBFjRB%OKHU*NLIitVROs2VYXe`u%{iKo`dHK=FJhV|)`~v#SADB|({S)S^3heb z|F3ykiKNzCk}EI5RfY%5j6M%IY!%T31=^fkT-G*Gbitu3uSP?`5I5>0b3`N6;@Oje z?Q16vaY=qre~ZF%$r1X0uC9u{rM0EZbA4QIxua!MJ>@qFsPK-^M>)2T4k4EaUB4X! zoLxgU1`7mO0bzigSuLIP@gJ(?F6t`gJok==bAUe&0O>|j%0ZV@U{J^~P)CFm$70wK zpykfg7%sM_%#nXRc1cA5t&+#J^4&i5JvI@QDs_*>v^twzI(!x71=*3Ro9Z9E>#9WV z6RAWwL?OSb&{=dMxrHoGzlS(J-7YIYKfvbpF(YP;#?7O?5?yZGtVHsIa&a>i+c4|X z6`3H#b7_!IiIee=D#OwmZdt%2S%uiA$OiNo5HJlB;LHhorQ@>trKF^e_rxe7$Q51` znrLM5|6(2d3=AnNq&x2S>YM+fb6>N61%4Ae6i^qHe#3wD#et}5Ln-e)Pc$$QET#zx zCIH5gUd>Jys0wNQVAMDiu+IFSIo9R)P&5TM(Y%oPPAmm@4ECfzL8|pv$_=6RKSUP^ zGc5z{s&Pe*5EOK;XZzVV{P&N^CUKO=JbeP23~7O(2RH_OMttfEs9*X#1d0$wf)|}3 zZ-^W0Ca^e|jI_Ew8p_h~a}f_ewd+-7h0lY#@wcG0sX{q`ZJ7yXX}EoV5pRiG*dOql zsUh=XKZR(_tsvUGS^hI30Jzo#lvOih1TZe<<*y?6R@mXZ57JLcPM`e5VNc=cW^w+}XSbas{X0wxh_K z(FMa{W=P{3`U$`UJy}s4aR!RY+*-`2tjP=q;l3eEu~*OU)#RV~bN>QMxiA+#3bBi;49?)~NM4T*Ko}c80;*D8aE_Fv)>8M)W|1MN)q63ts3K8+y~ zUh&LHRB22_C`WzTH|#ZGxs7TAS~GEQSnpzBt`d_bE#6rp9tu7F{%DR;V-$a=b?K#4 zw#fEfdux8@;l;5c*P*9>c%)xPA#u5G-kSN8?MyUog-sDa=GGOL@##gLs3=p2BKA9@x&P2bH8f1RzyHe@TmV%F?)?RF z01uDi*O;Ht+C%;rtw#j*h`V3A-eDM^$3vX}GwfilO&-l{NW`QUw>;b+KpCExIB|~> zXRvX-u-cFLZKvb+Aj-OLogJV)SLAnZ8PO~KVuM%$U48TNa0Fp^ns6u5#)guQTTdI% z8Zu;un{VvCWOYE%;t2RD%k^B)wQGaNc<|f64zk^Kvx!8ikkFm;5GHi}0| zkf)dhTcK7j^RN*Xl#uCSE6TS?P4vSgIAA7QUjHT}i*R$aeF4ro1wnd3{ob{REgY_> z?=knyWLbqp_=-Vf_?ZA$-6ak?)jnJe;ywj;6e8rY>F%*FLK(h1u>Gtd1LY;#(C=6O zU3tG%o?gGob7v_G$?tgNCK0p~hD`xGdy6?M;8Am~t43*3H@cLJ6_X$C*vf8EG;zqp z^f%oe;Mu5YlTF}F5I}DVgSNrq;om7>%+0k*A^7L{Gx!Z$(5F%FJ!7eF?DEP-qJRib zT;)f;{Zb$ti%q5i;~_yJrV`MQAnBSnn3iICBa9qZ5#LRv3A`gEsu`1R+0(2vXg()Hgce)q)Y(=+yOoW(lLSGIhZD--fM|G9XPp(v635;jKmJh- zcEktrg)sFZo9jdA;`m$&f7m|ihWN~2yAc62uwhXiL{#sSg7d)t&yJFL@TFJbt``vu zdX)|DNCJ4CLg#r+!1WNsK-suMEYe$^%*ENz8@^f*m*Wnu;T?`WO4tfvzmPG=9|5 zM*w%?=j#)M(-GLEmfHcWbEgYn zm`N84jNiw-sexi$`7y9k_p?10FNuvU?8Wi-3NsyKR`C$?sqEkg=^>!!DBSXjcPjF4Nsf zb_&0!+RbmASSYE&~#-Y&oKfYxO;%MeQqGr5t zjCDL<{QJUc_V;FL1q5HRf1{8`dtmYQKW7n$Pv}YnkOht0XF5pRe3MrG%KreyrSpe7d~wc^BR*WH&5s_2qS3$BTU7%U0!$wKl)6WCDyY zKx%dhmCodp`B;*vxpwbx6{xwv+wB(AXJNO^#7@NTT(<4g0(H^gI2fwC8gLEPz*dUG z%#%Dyd091-BO^KLt9S2GorJBSLd0Rn!1i0W;u_zsq>ftF&~pM?9sfF3BY!&Jt>iZW zAPawKpE#bXs1#ahc-O$JxhgYWSM;AP27)29F5M}~;UhdNgGEpWI= zMSy|r3y$L(5bep{qOvjeiuCcv{q`Y`gte7lD(Q< z{*m@dH9ZXS2M3~gM>BWrzu7*Ln1#KVom6ob?Ee^XVP}cr6c9UjcGzqW$RSj$fD>wD zH=M7f^S)V~1*P*C$k8Zx@5#Nc(4eMZs=-oU?E9>PAVyP5Bc?YRM0v=O{i3hK+3XJX z0qcsulXwZO&0|9y#EV}m$6{kFq43)r+F}}Tx7Us(^B(c;Vc{KKX_zw3rS;roDiEzZ z)7c&r#UR7h>0sS<9B*P@$qt{#!GV;n_I~jVx?UrYcx%U2Tx^puQ~9Iu!^uYPPRZWU z<@N8|URzlf%~Hak+w=YA`DVMFiHcdwaITG@EH;4JwVnyQ!cVW%9@y8alm|6}Zn#ji zEnFjA5=B*WMcnh_!x#~5fV5RdKSqNf09|_JKqOP|h+%W_f3ZIX?xwgFa;BKwCg2Ln zL&ABv&fSM8v2# z!c2kXg_sKWY<$v?ISycLOiL_W*nPkg80d42 zrHQbAHg>u~XjDl4@mEdT)$1t_2z{b8=8DQg*X@vhF%|e?vfrG74_yQqE0i5`nWu(wk9H_`+^q<2k$Q)U#vC-3_7ez$oh_b2^ty4?0K6P7;%TXtZlRA`2lv6(1BlBZs$lv63T& z%c3T!0F};IOU@)DPmEfUZRBqzq{595TrdtIz85y|xck0wVr&h2?q4&|!Hqo-+z7-Yit0W*U+}96$L|RI=HhCCBzd&*>2N1#b4RPFqOj+NH<~M7--IQW(NZk+)Z*?Wc zDg{ObMtBy8zz?64Ydrc0Om{G7YUj>ruL%OK3S92oM7MIK2(f`RUQ8cBLr92CsHH#G zFirhrcSd&8LHQf*nA|?c#f`Fnlj@^yGQr5YXW1rVgpmueNUaW|hjUj35+ByNB)si& zS?lyob>veht-NjsqLSw0bNP+y`T9rhKP{pinP3p-Oxd!Y9TmDh;sv6S02k0-tqGWv zou{qs#Q980xr~S{Y_Qt@o_UikK2PjgS(G5sGH&Gt(%ruU+Z#4vD3zA`A8Ozo5S4lR znVo|}HtFB@luZlZUCA3@1sW<4-3C{+OwC(ZhK*&u5lk z@(A{A#aJG1Q87A%T;!8jBobar0!1OlW|oJ3E2O-!d)QP$h5L#v6uC6ysVrSSx7QNa zJA4z;(ZpO6CS)2KVryP|^o&z1AV)n*Y`4GJ(t4@C!H_CB5o7|mE&Wc|5Hqxc+PCg%E(5I~3A??>Z9K`Oqm^PW%L=Vn?F?;y`k;*9KNMe{x6 zjgN%cuSy%K(y;F{p0P8+yL)@bTJ8eZg@noMVBP2+Eg63(1S8$*f6%ZCK-7HfKK>N_2sMkKun0(ZICMCR^=js|4V=qnq^@F zg2DZQG6HT<;cDF_OHow>K2raq9i@*x`z3>e536=*0P)u|of3yaE)6y)-tug3wV<4% zzU5OCDC>q`Rwgc#6;(sW$-?2eEtr{vZH!d2ci1_3;9B7|vL9;Yp{dV$J@{@!8pT|0 z30N#ir^3_M+JnDK$B#K0oGt@?Xmo0QCUXOS{A#EIUbWl}?X=+s2LIy$K2C%HwARRI zMz=Fs5i^YZUiw*TKY0>lZ`YKwO$ddom*|4dYMHFgcmuHZt)eG1zw_|0xYecoGVUly z{-45G9wexL4y*nFMDv(8V8y>>E9%@2>uXTBUB-Rw7GJ4WqJ2HSGIF-@w@trd*EucR z5Ma5eHj$@aG^W=x72*_+L;_Mt=y3Co2*^JSz~zYsz3nj}UMlt1@6K!n=Py&NcL~w_ zK)of}DBw#cf-9@?{KQz_xRMNCy@a9Yi|O2(x0T6sbacYKCJ!EPwCQW9sa5T}IXrC# z^R%*x$^&pUv52U(&3?Eeg8Rer?dqE?dO;K1DD}so?OSRlm0RDqOr>14Lq^P5}VcDmH{F9-~6!PkzQ5 zfb%o=RmW=t9GdjvLhl|X>bl>9a!)lSteR0i9obI*>_QHK84wM=FUFp~cOxh3D^LO{ zDFN)FLOfe%N}SPK*-jx6IRP&T2zluo1~nI!0#7bITfzHWo7xoRyo00X(^Rv$KT(chYC66{7hR-qrFR`r5G+Y_6>>p zp$H_>=OP6Yn)5#LWVHCV9q%jr@;AxUa8AzhH;q(JAQ@Q8Y_X#|gonR}{R8ASZkc}V z1oF}U@>xpjak5;fAgih*{?CB?#SzMmMBaroQ@v5R-fCqwGHm^UJA*%Jk`az7K_1Xh zz^aGMR+O0rJXWfHs0xuaC*eaM3`BwR#l^Os>>ZGCDe%AZe>sN3MY<0Xbn+$~s7KSl zx&YOA^$M7G>F1J2I1rv4+9eM-3(oRDY>JIyy4!#+82b%%Bd~G%h%h+`Y5}%3Z<5%# zfbC|q%rlFJ=o>lg%)Z+S{1U1qc;y4Qi?^jdh`i%Z7j|$AC5U1mUE0iGocEq`Rz;kW zz@Rw;8!4zKyR#32PfM>A#b@5fH}b)hB&}BX=_G;#1J~cDg+>CioiH?BD9QqZZ7(|n zY=RJVme(1SJ3TtXB6zD#K1+6j9jCtvF)F!NpyLX5`3zqV0Z%;xQf>Izz3+3ez;FDI z#CF=FT);wc!TtxV*6EQ%Gyjvt)!_f0i@jS*UXUOMOk(zv)+3FyZ0h#3z^-cCt8^?{ zfK2Qr0ESEL?5K@11I$%D-~|4_%!GU(wuUJ(zdd;kG=(r-_D%pFYq57Kq`sjV?mTYB zu~3zcJr{q4rRbps*DTJW1xfA@ER(!9cj5fcu6w_G9%$l%w(T!O!GSPW%XTOvBM-y? zf|YxJE$H{0>)6$ZbivUPb2Uv-ZPwYJeGQG4Ur(dsws)e_$%-yvE4SvmsPN1+ap!J5 zmdvb4!Y?ncD2wJHQFz<>;Y06L9>pKAJweR6r}hdkGcRAhRl3s&P{%@mI%ejCX*4p` z{)kIC8jbLA+9l5h^gN`N7sm7>c1mT3kYy|{*-C#+YxlK_-4WOVI__$WR_+5~8*C5g zvt>tSKY*=>%Dlpak5^LJRZ`rbe*5i*nzdb0TEURJ_12Ocpn+QUx6}4DU|E8`C`3q$ zsK-H2+*IwI$lzhQr!de7PJSXP9RRx=-a0X3^}N?da^f*W)?rsqrfF$|X!K+DlV6RR z*U{B<>)2sboHt8s=2H*>5^ti+b#)>`8c#bMbj`g-4zw0T6fns&y9Mmm15~)8L$A9C zpo?Rs)Rb8M0=Mos^mo&Cbot^yc$nPQPPM>w z&bNDcl;Fv_&Q3@UTxQM;738{Fw6E|v|4wWx!k~6}NH@LL@|3WZM~om0?S>))q*hQf z^3!5Kgcs_!ZTm|TB>=2F$VB1XdGeyBBC&G^upa550GL`^vRCBdq=bRy2Fb#Q7!4MG z4wAG9zPay9DxVi%57PRU6)-{C_Q<;|9n7guGSJ{h>fvA$$RQjV%3-V(M!zkTaI@)EySgQjYR8i~r=lyp)@ zB)SH_^O6B$i>MS?u9G6Nhd84OTfr_~K5zf)kE1~lP(+=Ui#>bxV_yaE${au|syNJS zBo55OaYbNG1)l(_M<(y1rKJT-2M#0Zuye3UfkJ#;=ryXqS@WGoO#n1DEjt`NA#C2; z)&MCV-E|oB?H||3=vn1&#VZs1E;z8~b2NX)eCG$m3#i#HvfX7>bsbaena6j1`yoha zV;~>O5A2sRP5^4+ksK)lOuL<%eWMf6wg_gh!-3F~HI-Iqh*lP62hXZRlG@CU=Rf## zwE0Rd5Ras&?`moe6U_6Vs(`kQF)s-}U7_}5dSXOz!%TkFpwR96j0n~b3=mg9%V`#NdK-yN}K z_toIOfuoRzi|;-S)TK&;ye7#WC}^r`NX}J>w`SzHnfxuQaI7=WZe*|FpvS*7EfY|JQSKpj#(wdDQQA`inqNjUP z(DD)=M~^NeueJ4iMu#$dqWM>0x};k?2IS`kZ6T}Gin!c{KVQAv7#f<(lY>JQMk^LX zpF~GQxiEyZ*S8reFS};0hN!^h;3#y94htb+64g*=2qo;TE(e?&n9=s7=pCBHK-iF> z3ITSsJPByS0x$Rhx2B_I`^VxQ33W`~AEsqYOG-g@`IBEE4kqzPdDs670W^Q)_72@> zV!rCe&!38NX|aTvNGJ})N3vQSaUBYnQas(m_wP&J)Gie)$UE=wA?NqiB7K=1@42?h zV<2#R=qpw=XV^max`zFQlp`G0k`~-FORd5>+vKXz6+v9^tA4NeKJ`_5z(B`~WF`=4 zRz5>t_{m5`x-*&L$2F(mz_jbs49Qe)z z>Qa%JXUW`WBK7=eEg$?Hd4n`FD?_=C7ZmNPe5S-fJMF%{?I0yIJkCv&S_|no0Ve`f z15+Mk=L{lT5@~9r*c%#4D@-B*V4A)mRbVDKmr1DKZ1D9yd5v`Ne`fFMD~PhOf(1Vp zyt_;r0)7@_NVB4_%(_M1I4wu>9(&|M||+-D1FJmk&^b@S*Xy z$NTrhBS;gz#+R8Qr< zxh8h0T6A6MOwKeAcCBBP2_q%VuXu=c}sd7IZROq1&VOb1dYvaV3({yBJu z#Ag2&qr>R_Ht*N%g++7;5JLMQzPYNDCwJ!@bdZ`rVoOOinKBKO+L5CU5--jN$l; zkq@v|G=UZ!g6PkSZS_uM3?nLbe=AD}?ObRly{60`eF``!QVx2X>VI@+C$*NW^fMU- zc8C(qR59Z-V*y{HwRVe9S<) zfi^_52Rj+o${UNphuql`DazD*6z|;)f$Sq0@CDy5oj)um?SFJ9g3T_#vc5blyv%jY zuavsKF+Z?8YvEY_bb2ih7zP~Ql$7)eV243uPjzE0aL{A?1W<<8FSTKJLg^kMwjOY*dD74~qtn|agbT=SMWVQa|F-iy;KcF-59kp-Pnj)R|Ihoue1R&YH*yi0P@#MYxA-*j6ODYZ*M*#`2+k#7-c4+8fDdlflde?qs9uVGZ zHDNfo7)KU0Q-W2f! zTKZcm?@N0W;kD zaQEd(R?o;-*4+_tjwj}Q?r1$3vn-#48iDquIL44%2kTQKQm(q|OFJ zy9CiU=Klg_S(x-{%De4f%O_2zI~{{JJ}GSgpXp=cqj5cbxrjzohzqo`LC~HBet^5* z31MT0Kd~Qa_6iLn$U%ZNZ~>Twz}XS;&vQ&Za8K~X9QdZlVNfN6r>bck-)Tawv@)AU zj(1g{EL^otfJWL1ruN=PTCFYE643Uj5NkMGP!=$f4d=_(`8$^Z3OzbHm+-Pu0)4jH zM~4nO&03xj1K5B6+A)O2kwa*~OnsNfkVfS>lh+kU2u$qpkbBG92al8a5ZbBCPC$0U z56O5+=E+cX79z|8MYn$+&=WGTR30KXDH6pVseL_in3dIww}J~bFy=`d zAjl^zRyk1(G*@&?Ndfbbg6we^97e$f?+-lrArH6%M=Mc!Cy-wB2JiYQxMqYvw;HszfH#^-le1>8YGAS?UdAP914?mAh19b6PM^lU+=>3ny7 z+!P_w`fifr2ZDqe5t3`Y&NcuOhf(1UkGPtUS&^0TgnbLF$wD46b%&w?5PlfXgq!>ZY2^%>dMxXYSW;ShH7Em5OYS=I5(rBC77w(#Qi5gwjEO z+$8?dO}_jlgZ!WtDw@CfO6fkK<_HP2@~xoTZ4_d>k@%VS3UT0uJlFuw4i1NAnu3>k zhdRN7KPkOv;>sz=I_j!!;)B^1fYgUF13-5A_Bc+{KxI2BmdW1OJqnedlPT>of8P59 zz2I54B)K@!1MP>VSb13RW?=dt2}9S&3wa2!#qV%JhqOF;?Gj;GNqC|P0wB%(!ENDu zF?uX!!hRq`xD5{IkNHRodo=ApTYkLOdo}1cU@Eehutm>`$?nEaT^V~Szm0!KR(#&t z3rQ6hKmTtaSQB0g)d#PHhVT!&vK6fGZm0fEfjNf6dXjE}CJ$tl35kx>MgY z@6O%&cJLIKeex~wQOF&_?%o@#1dsxxW+wsEd3UgLZ}J@oY9IUz(IP+K!%7|g#J4)u8T2=RHB2P1WV> zt~9MuyVF0NCgfzn3L_iudez-S4D-tiNT_b`**7a+QA^aeVyy$w;fJlfxB27};Hdkp ze$)$|>z{zI7tU9j(|Ad`KR&s5Jt_1DM>gx6bmP${JfZ?NgG&hzIEQS12YYg7TJ3yh z4H3Am|G_O{0QxvgRa1}S33~QTKQMEL<&pp`AqP3kIE^ffK-Tvn%Z-8s!uF&iLm)(Q z=}Svk%;3h)X9uzok`z2Vdb0mZx}|op7o%c?D6J#I7M2>=F$TND1)c;s!TZs`6;@yj zA|8NgG-G}hlkwn3YYGfOoO~PtHL|2lMMgB9PjJv(8I1`yfte@q^RZz{acl{4$z6`R z`eX09MQ!-oF)L$%{o9=V_Z8*7U@UAPJ%c1D&VU>a=L%i7(-7S~F#(C`3iU{>G9>QjdLprIYzXVVJ8MXhIc2lIt}9d^a}T zieQ_XL2bqE;Wi3v42j?-Ts-0N+Wvf>0oYQM;bIvnO0*z>4$RFNhY5C1MeyFe^V01g zYNKluf1#UUvD2JXDeY#a!*~D_E+JyJu++SnM9QcOQ$@|cR6;V*zYD#;mOeXQ$j!ji2SA)0JB)&&?;=wJA+>>_Mc z7O|rVyX4Fu!$U-W%4_ZlIvn&Juuj!S^e&wYf>Fi?_h@%2^X1E%$#7Wh z^2BKiMhD&PzO4=REy)Bk7t8I)w$fw1%jwVZ!p=^w!?F07!0;@r;_R#fa_}u?>{rzx zD9K1aFjcnbv^G`!J#@4ykU#|cL{eGYijH`{KPC9Ur3s%!99UgH^bL@gmen27?95L(F2r7~A zjx81jR#m|vEJ#P7^DLXOfEc4^&p~j( z%b6-0@8Oqr4#QUPKI1Nx5g*%2sk~AR(Ht(I)3v^T&`At4b@`GzxLxh@x?A zm$-J(w`?|1d!}$>GwlLi*pU-GL~h6L5A`;O*9FVmnSydJ8ULd|BojW+Ndf)1fPM;x z(Cw^vsujy&>=@7x{0tDdA-m-|vWRAan|-%Hq+OIMLbGo9owBI^QO}fpcfnXnz4U#G^!36YturbC8xboL_T^4wnY z!Qa$W6n~MrZ+~JgGTt-q87IjSY(E(-i1kPmRB<4_$|HbA;J$6F@A;=c zE0C846#GmFQt{N9;5($LkJGIRNwwr6pI;ugkfVJb#EdjvLecTUKBGFo>jjauS3hcX z-A0vs|Krx`2kV#b1Z5N|wwZWkRXk;nYhU)Lb6_l*;BCB!{dt0%OCRJtj8}cEYiaql z-cA&BjKWNv?aEe#+@xG+Gu;*~mX*YG3uLIuw3*!!ZZA(d4tkVPuaCt0zls6jOjfW} zi4edAq9+A+6ZX41^Gr^78+`b{mzVSlrVKu~Fr@fV!?p3HVDbJ1T2QE-fi7R%a-fH+ z*noiNZ;vax^j`@NIz=vIJ2vd1?~#Vq+K(<>w?C3z8`HAC+g@2t2o4~fNPyxRG)8>K zW}Xm*0zc~@6q3#IU|x5#%V=W8{Z-?izda!Tql6QB^pp{@Y&TrM7Su>^pM|@7y1ZoW z<;b_Wni6EYcC<1$zO5Yge(sNp-VRNE_q`=NCn3C0Q#k9mm5&?-j(31{RyHWyBBrWj zig-8`1+;=_u7X$0rt{Hn1QK$9P*77I3>FbUa&2L63+z&Td*ko?Iy560Qx=pq&|b1C zhpN66b{^qQ>6oJ)v5^@P@S8REBIjuXzt}JVl$uw>b+&N?P$9%1DwCzCb5H8SSdJ99 zU?jA>@$ew1g%_Dqxzp4wm&<(|*WVn5uoqfVv!}F`Q$6Szw}}L(H_XzuehUwI6TtE| z92Lz_BL!eHE`uNHsW=sS35&`1KUCY45)Pa*K~{QsxaCh)cvuS5|)BICf8;~rOT2GFolXv zwmRSY`Mq|_PU}(c zd+X%y3EJL;ppHrubByhiP8Ko?n*<^)w4Yi6_UsOrjX?J)Mp#UxPYQ>1cOpJ_nstiC zG1UBcHtM0fil&4?{RP84aImGzd+o}$Lro(tYZAIF~PN_{GVvJpaXEW9vKDibzj$S@@v29~5XmO5Yao4+uHCjUtw@gmhdT0I`*ugr~g* z!+mcSwG2c=3jV1%&nx^b$EQF{84-o^{jE4SeYFf}paNZLdT@N7maU{ckG>Zdly|ua zTasM4sG=us!a&m%9Ek#{7w@dhXrl1EYB1qz4<1B$p1Q52go=C$U2lArCyU^Zw``_b zaeZlLP(ye^8BeQ#m|e)g{ph9WHKWKYI0X7y|M|V9OL0WMIGGf9BqWZ`+)AN{z*cX{qR7hr=G6tru(AZ^&Lq$nuaAfTKuG!)G-BphFLFAhi5N3y(9r(Z#5bhpefLpc4h}GsLHu z$Ejgdk{f?cvpy6k`LMgg?-T|$Z+7N?;C)g|0DT?a0T%k%?CP!|4lE#4P-Ar?wIHq@ zb8Pr1R29=N&T}pErxn^Bz4h>1_$#qz{kYT6*iPnCXbOwtPleGX+^udNd`E?6wt{*1 z4_;Ul(8PAo3~=*`+1d(nvf2s@946SZzTQxE>o9$ty@yMetY-gVCi!aQ{qf%R*3|K& zv5VfPnwx$#<$F>m^ZWA#rg|qI7X`|ZA<2T(c<5&kthSMvTFd(Fpi_q%WrQt?Q&r`J z-w-WvkqgGHPsIKB?mzoUQ@%Kc4DjB6mq~E+(SPr@zG8(zO(C;#JnpOr9U&QuE4C-Euwn=5>#VCH*)bMPK-FTd&P2+z2wQEZHQKB$ zS%U|4AWbeZ&mJUrbU3oYzfDbk?9IcjAbTN*Dw2R(p`3WWu-9rc7;ZtU>GAtRnBdJS zmIxQQS)M$Lzu$?Ecnuv6i_Ic!XfLhI9;h zUWo$qnA`-MJbCM`rVlK?#_7;hiX?U-$zc4JtDNmhY?Vq0nyrz6Jx>{Lgd#Ozj(;b9 z{cdHH(dg7MhCvUBNaPHBtzIUutx>{^4N-X_cha!AVthEi%kNGEkg)Ih-l2CExbrp( z4r5il^~huksGt)7ZReO>_D+?K)j()Az$An4$YJ0AL?A8jwECe8>8f9&uDAOK zp)c2f#40z)u~;I}6YuSvNoS_Tkk5{KO%AUSyHt~~^|dtWor`&6xw6Ob#0j=>*PPJj zG4DetlLQaxU*TJ|i4^f45Y8;^ppo!flYbkF0E)_)tn1L~wUF9G0ZZ&`Cyu8=S>P^i zi!=-9XfBLKBjMliE6@@)6-WE7&W*c2DyCq?h$`c)!Qko@bdkq%=s>q(BzXO;9k$iAOI!RK;>> zG33Py8$YG(5h%Km09vZ%P*yWXmBibwCIhd9L8Rq?yu)TGTl8g&kQ5-&akb zE{sq=ou}R`XghC}4*TzU_1$8Hx9mniWF_E_9&+2DK~6rqpe%k0EEicU3TNsl?Mqj6 z<9_@EQUeU*-j75%3%nk?L!~d5v{M4^8RztMnLIFX8)~8+tF0qn9%VdYifSJ-aV^l} zYfYR#Ig2sEfq-Ynl!Ji#q6%b0RBwVFmL26O-sa5s^NX~L&BtVh_wHNXdz=*0C1JTL zazWa1LDC=ZBKt-A4$Go`$cmo_ysdKo3luUS#c&jnEVxG|>L*2Y7}b)EzkGZe8^c#h zzi;^SwuPYz)6zRMAqCURul`qxSHnEb?sWG=MQj@wSaHz6iJ+x6+b|9y31jOBD_O6tI2GcV*FR?2`~EGgziAY(wX_{F6P0hVtYxP9gM9_(;OuL zgSveE-Bb;SaRT~;%j~jehHsmd5~dV)dzf6GVi2E;@1S-6eOeOrEFq$PIx)b5k%_9} zCJK&c`z7b|WlcUq#UiFHQfSILs7*vid+_;H7B^YfrY9^N6Xl-1IN)S>hj*32kL2R& z?P_ys3B54Rt&{B;!tzWUD03g@`yxS20%%`c;n{~Oz?MFXPyNIYECSZ4 zfair)WCT#HDBboT^-uP6*+<2MvIrQ>iCpG=|5Lb>*vZpx?VE&+ltyQexQrqUiNLOQ zz2=1}P&AE|&D6cCs< zF?({rvaU3|&FSEPo*z6_yjrby0RY_H4cS=oG+rv_( z1}_bHrmnN*9zU;m|Q(aG}d4O?EWH5h1 zqY#MSxF1XQ0hE3L$~&CIw+MsubHn4772xWi7=^p-aRNZA zIqZ02&BwgdobSEq>hbqBnR+61!}FzZb8@k`j%QiDOIAe!2N3n?7yJ;7dGWOG!P`8u z+9s|o)C}MaO~z-b>Zr5si#@aEfZsac=Ho6}h>aLe>y>3WxUCPzYv~iNq{I4bftBInPNVnOqVc7CP3Cpi1OL~pVdz~CAzq;k(%ahaewIa5F2WTP5{>S zsY@uhYlj(&3uqo`1m^gU;sAIF6z)kXPRLk~T>o4@S_{6;;oI20e98hzP3lEJWYIAw z1e_Hji(nY8BV(k!cMlwP^6~fHQinE}c*hnPLKGk;TA6NJ6cWn?pKAxZrIM3s5pA>? z6eL#U96kB+752-$5`erfu0)1V;JPdWIhqOdvcmNxGSA(`x~HOI$*QM<>r_xbb>hd= z7nAflB6a@+fTvUeC?{DYwnkudjt#(_rQv}ctRf-zY$`jUXTc*!@VOW=A?nCrkfx%)4gidm|(u2ky zzvkaOYWBpx><8jLwy^V~I(@lx9Yiw-vvV21qNI2biA-F+n@uXV7aLN9$FXi#e(zof z`S|K;vZ^5i2vb{MT5^fpg(K=8;Ra?% zucro0PZeO$Wk0NMlRR_c;T_+-*Fz=1DXys!`H`WBALjEs)=%{KC*fvM+f5ww@3_Aq z5gzh+me#~l-s??e)!u}Z9^iyZy+BF*`r@(Cnb}rI`hy%s!2r?V{tzzhyRBBf=p-F3 zo8C?h=|ExQNsh?F9GdtQXJpJ*ur5>Vg5~ek)Ew0$y)dq>q?5BVdu}wVr%Sd=H9t&- zl|&QdG*EEs(MP@#^C#)da6~w2jvb9$qLRJd%G5=)hozi1zs{+BdAmCWsVU{c#AAH* z|9JY!sHocRZx{v~dgv4eP$Z;NazMJJQBqn^Qo4px1f-<9Q$mq$Bt=0&kd}~?MjGC0 zeD44IIMlS3BbZ(HYDMT?x1h>kE{5=`gL?(7?ZKY5j;!ba|=0NZD5N zYpQwr9r(K>?PyHd$qr~PKD#v@BXtAAlPQ#+-YK<;fez(^{#JJ_I$e>ghfM)<&mKGX zVE>_oB|uPYH@G#Y{c-t!E;2`wK3u zn`~#?e^AH|BLgN*LeRdkyY{%LWqm(CsVeZC_f98bl&TOjg+OHX34+`u^`OB#Cdj^Q zZ0uln>af*QmW5W7aFtOv=d;#qIKC?5;r>HYuV|~r$}di>A!F2P-->RXOy{}EWdl>p>M(nY4@WkIZVw;noBCv#0o!R3N^FP` zZjHU=?eamvpPFaaCZ@lQrM7Iu7}*JoEp8u0Y8rf_G_oGULwA8MI%qPh-#kDencWuL zcr2NR=HSO*n@pL3{X`_s$h013G#gp}RSlc&5lFi&qLV&5irT<+#grj|NqL2=v~@#s zRmov(Z{P7ZhH^Xy8Eg^N{mg&%*iJ)Bs{0QOM$q4oyo699iWy$r<$9HbGu^yq8Avy5 zZo+wkLdIeiFpC2HHwm;cmOIOHKt7|(oEBVyK~(0MCQn4h+ON#HC!UuT#z@aInt%EA zyv(xit)R`elGx#>!}`z{+wjRpUN}%cIrB4<`q7JW(J&bvnm3Yw6`bKGA!#T16Psd+!IU5}TWoA#h zZ~T$sbame;lU~g?KIa_p_sLC%Lpgkoat37{mN=X+s8OaMSLb{VBtOLB7=9{z5+kc# z{66^(+?`v8Q+kZ@XyY?jU~cz2xX1mHX6tX;A=nS_u50yx^>|mePZO6rwt)@tbRfdV}o?2t09nh zA;Or9(gA{Gurz!8k6u^P9Uo5cf3E+W2n|jX(JxC*24#!D|K1ArhL`DsyF3c7qQxr_ z0}~^jq(nZ!K?78VMHDb@uqKfQ&~6i=;2=`?wdo531~pj+Y;UD91+O!|>_M1}as^0= z8uk>CQlF%B?d-g|uwVN-w3&H@L#SWrVLckexDsUSJOY{teFSe@7jRM-=e=u;`nk35 zyv%N$GZpXcNACJVd9w{J9`>Wus%so@!qm;&l$)Nqo01;8%syE4Ok9~b(RJ1~=-g_3;l+*k^y#&) zZgb;&F=d{;ej%SZZqHW0k*4kgD=$HD%qoz!2DT_W<2XSUf+A->WuJ&DSuaLOzI_Z+ zYWtDd;)>LlAJ{B0nW;Z0E8!ZSouX!wlORkIjL z*SYmUEEWDU2f1jr-TlG{lsw`Rz;xH=BH@3{u{W|o35NzB20KzdUqxYzQWe}P2f>0F zz2@Yj)CI3#wol)795DJv&IejjXj2z_HY()ZOGP5oiI(Y8Jh=k73tw)7!3Sp7sK;KT zYNcQAl*`IWAtd=EVX3+6OvAl=%-X8DY9+5G)3BQhIg3k^f>2{lB67zBZr> zW35P$fv=I{#IFUA?Cc8=%Vr!y0n#Vvw3#l28ac zOalDEC;EIS40eKPL_Q3v4y?)|zXF`rO#CGyhS-I{N{=8U07SYsljkE6;pr(zL>a%# zi#OOR)r2pmu#wUwrrKFj((~!ss{($n{mFI$c|0t2 zz$ha;y6;yJfg2r+#60k2faeD9DIQDjq&(c34~Tr`P#?NrgvIc8b0Q&}fKF|aB^rf! z^u53yeSqGAzuW2qI~$FRcS-y!PDdnqe^dhk9v)$K#oSGewvSZ4a-;5z+tTMq6rT9r$5@=qPn5qab9M&+Nij6aYsPL^nE}5j zWP~C;f{*~5bKS4sXcd_cg2<={2CG=)q*I)=$!k`2aNH$?Nue;{uLU7RI#hOhwLl(E zj`I;TpYNw{`%wlVsm($uN1_e&`BV_*-b1PQlwrq)|WQk(je?8U-+Pz=RCV~c>=a`49Wv4dj|Cu;>B5rctX`;yQU zE~khg#bZy>g_+^bR{z|+T+_Gc9bmsgCQFBO@v!9AyN*TsKys>px1_KP0=Wt4vsm2B zDR}$Dc~$V)3rBbBzN$g3j6Hm#FFTBkfhhqO{a9AO%a`3OkGs}SQZW2iWa-zZw_w(a zj(#-!4VZq&ZZ;wMh?HmJ#DY6f9S6ys%+q)A3R@0=9Q4{2*dR}L6yduzK z=mQ2?Pmn;gNN>ReFCoWy62bz1eb2CTg`Sum8!XtRh4p_a@A+8Cd`8f1V~Sd|(ML4g zCD4-laSNO`Ix+Nr(v2kqq%9~~tUS0Iyo`!kd_8^khIf7JN$Y};;?Q_-J3hpNwoE(! zey$a2Pn9A;RI;^yEbtEM%`hRsPAiDQAREXEeV-X;T|dmi=}_R3MpQ*KCo8evn|&esrj#PS-}mRSFv^5Jzm;f{+VmO#|hW{&Z>{F6B{8f zF|)QVbl)KSXip1ptuA2CHrP9R?7hybk6;riMFxT29#i;%h0vS3AD;lMIB4vCuYb47 zOoQT--%UJvA4dwY0*aykxPe-m8u3yFg>^?&i0Q?bE7z%d+=SwhOKZ*0xv%}_1|Of@ zo%8S3>%E*D49rslsUemYyz|wCpq9`3pO}dGomL+d1J&)a3*S!1nE-cgf@l~J7WF>- z{tYE^vq#Xn=R}O~ml3zhAl4;j?6N1&K+o~4N-dfLGC7flV6Umj`q`67Ad>)q z9BQGIb<}_AY%m-4#)UQBtqq6P!<7a#uN^Odu`9lA6;6;oLfpn z>Ro~0Eg8z3rvYLhI6zPz0lQxH8LD}!dxE|-8?F!A7)P3KPVPX$@Q*{Lp%mw_& zGPT%rHn_0|8n^6`P~nlE`z!S9SO)R>@#pDthxcBY-%gr3+lO`Hf64=+t?zl=GLi2* zOAap78dx0|W`pk2wldt3TNnGU?}3Ke?F*9qu&s6{>3Evz-tXnsa@G-m9%23qvH zrO#C0iDW>T%}Mg)BDJ0z8BSpW09ReXwCtI5ETa|+3jG~-MFsWSaQ_cB4*#Zp#r&|p zmKBB`vjUWYkc$it+wT+5h`r_*tg?Vt-LQ=>DQBVlvoT~7F{dSAAS#)x`f zk>pFswj^AWC(Fv~@yg4)JWn*h@qSA7k=I==tCMoLX|Ug_CjEL@GMVn^!=zB+ATp~t z%(%tot4{%MKSR+}5_leea07`eS-@x5s77iIc{0DT6SS%IW%7Lrnl4$Qf;gC7kx3pN z_S6Pk*@*cZm6(0~{H?NpPxSg|_&dcy^F0s$hp&Qy$RO?K`w~7eI@IIO%U+6^)b@2D z5%4{xef`>p@Y}Z_ambtqg9rBoYX_OAfe_iPZ06WdNd1!wt^iNd><>%7V+g7*soMBz*=A*P?v&?q6Cm0! zaz7KkHrh;6vd&4o0sV`rGx+qQA)Ol;T{%p@O%zY~(KlETXu!5_)I_oUcT%%?@;uGF zUm&dv0oQDNirgQtKkZj^$_6RNW4xDq1?+{sN%VCD6HsvLA5xceWVS7S_F$x^%WpF~)D@ z5sU8Z2^5cE4ImZvMl4R0v06cOT;#GEbmgjvLBmQ7 z_d3tL*x0z09Nw8&D;0!{rA+J30P^#eTx~okMMhW0Ypc2nub$Av^zXS~`PZF~ibR%^ zU}}s51U%Der*!)kt8ocFbd)((7r_RW2w<^WpO=&4M8;{eJ`eqn&8xajn}mRm+jVry}cTH%Io~pn{neWBQsH74=A#}X* ze!8YGMV2L{PG-%*GfQIxBR5ZqhiWN{=0#+C!hat;hxGbmy-@x)sDsS{88kGhE23 zz+AwYd9+Zi)q4ZODWxpQZjS5fxM>J)#BRI?RN+of(D-;4{ReZuivw!`unEE%0HHWL z8IO(j7fF4VV{V8y@Lgrg{h1m^^kQh0MJ`t?l8ARF+A!W?ps1PlwtU;ZKq1N&T6FoQ zjk|-uo+)bP;l@S|b9b_t6?_F4rgG1HTqx-Fc!QBwO%t_X%#5ndbjtU+`}z0RC#Pxi z@0?y5tjZvqvCTe!Wl73xvM2I|yx_ZVcNv&qQvFAi;$+9WudpQz*?isp3N8i&pA2n? zu_Ei>Y9!#TTW-V>lRUIJr4Qfl)=2%lx z_1e~74=4Y=`5v_LmQK<})a0OkVO0>vj6(r7vc@b6(9Jb-P6%d|zEBNb$4{26k`>KF zs@N&;&=^1x73-HCX=@^XKoh2}O$~O!#ojC31S51<(1TOz;^YFNxyU1?1a<;6o|uZy zl={a8BlQmaRLEi#hq!%cXy0|-@k1$9cSEvV-gK$q<6e!6Edksm*h zpy_}+^W~V@{B|j~TJx+nBIVS(UoVWw`O|JyULVzPG1u{vGx?29-Uf1I#&8$fkm0OA z5){V(*qQ$C>i@>@i6IR7jFa*d2ON24m|V03qTi5*zigaiGDnB{ zT~gwxwFny8Cc*n3FCra!n4zz$3;rk&e(~(*N@${zO}&=#BX+nFuM6?+RxJ19Wl$q| zLgNy%Wt@QWLeZEVZfvVSq5y;5y=+%!;OIi2AODw?OjZx2@q_3zI=V~^#lKUb13Kdi zef=H?$lC?~Wj)=)a}_hm#I+a7PIW~#SYZ4fpR6;NXn`5xL0e}?(OFXSLD;K5YrpUm zl7ZHDZ5X#qxi$e4b>p*Qdo+F6o=-^kOyFHtsUu9+l{VxTi{c2OY7$eljBvHH)F@2i zIAQnu45yhqUdTJPw{(3_Ffzb^!0P^=cjgvUpzI_6f7gq6?mh9^6c>cHfX~J$54h1p zM9(dHnBhQwSPiU7Td`?(;D(&0cf({_w*uq_Fo3v){qgtx2^EVyTEKB&2Y;f2c+vw; zO)OnIgQ`mE*LmZZdl`cXoy5|=7|0FnUUht!S^NHFSZZR&i=HURe9ehG1d$CoeL$^? zBw5r~Qo#PTxvnd(UF(6srux;_z#G6xGLykrLC+*TW%M}q2>YgPFI~4eKysAIs*_`8 z159GH4_rk}L@)FU`1)}uzbVoJ(4^&Xvs|~nRCx4iZ~Dw-SrNF_b=YvBqXzvDpW7}| zSYYBIgFN!L0C=n8d~H}_V;cX<;=$Z)9pWe=F?N|o-+lu z4nh8FhKMKkLog9JBz9<1Hqw&xlV&5sjiENR;|xQ?mMI6^JU1lpR|2kiCV0=|i=emg|>kfn#3z>(a(tnRc{d7BgiMi^A%%R?S#TVd84daeHO&vs% zo#Y}H`IShjxXa`c6DiTK3JGyh@(##ex|_D+*n0Gt|9mV^N`o%0t>boV#B_YG`OxPG z_ijmI9s4!ztf^2E1Y8)J^_V|<{`!kb0k0CST8a+!l*w)37tC{?E+1Sl`Q3s5?8Yk` z`ECFU5*!d`!4cM3xR9bwH47xH`)mpid-l2n%UmcRGT3PDm*Ojo_8y$qv8M=$V8L$8 z%0KhP{WuApuouK|g>q-z*9xr^K(2GRXQZ?%Sfz z^?TYrx?Rj;XLrg=uOUAhd2moE_*7Tu>bO2YiA7UPa;X({f$X3`f6*UZ?*g#0LjZ`& z#76qr2?#16N-lS|c7SL=oqm9ashg*J$=5`@DJXgvN5 z1|vs^;z#JI;}LN4E)GGafiENg|7Hm%!G~+TSA0-^xakGMW0`b=1;bgW1cCg&mW-@P z7<*nI^?piYETDW5Y}CH0V8JUMR!n8ziR1}?u@SvCFHXsNRFK*!ch*aa0b4#t#LqKE z>vnA#aIEDKqHoA?t`+$+xR5AB1{hj_Ftqn!4*gWqZxf%TtQouI^JpcrMGK|gw{*(I z+0vQcS}E-bBtj{QWJ5cg}A| zwhmFyH3$|WU!DBHgC+n>ck6F#6G1(wPr>bNQ5vU9$@WWYZRB!pb}WPt9?5-J>%q*b z0t5AE19@aO*6Hf_`tsZ2Eh_0CL7bY`Y+`Y5I-HXHz@COc6j)%wYuOi_SA_K)WLH%# zcbfcfqMJp)@1?4>lFFLC5f&0^M%~?QijO?~V1$6L5E`ps!(rMOxZf*XAf1p3ua^S! zL!_|q4_o(B|2*v)RA1=U^8B8_31E&;-UbLG^IHI0k`N=Bok(EZe0c$)PeYrx__V1` zMXu#uB6mU}pC|C$4P@bLI%cb@y!FFO`rq%!28UAiY6-7o0GnN~77nLUF&IG><-o>+ z(Ak>zifz7F?*n)Jr`v9C;L~Gr?Byi(ntL%vciLk=mJve0O`!p9K!SeF%uXQuYEl_1 zOFj2iIxe2oHY9E#jr*W)skPP<2Sn z2(>PK3NvV-bil*H<isOw!fp-d&tp3QAIab3I3Flf)@3&#lfN__ z(6T_Ktgmlex_!BB@^@ZxgcLwJo7CNpU;xr%>~yX(FXUZU-)%i%xc$IY?tu~i#yg!S zd9jS58L_?HoB+3pS$_L-Q@rnium=}9$sNiZl^$nz;3FX+gJ26C2|FQr zk(br@fd=I;5ge_pDxamEH>UjUvZx zgF3~7$RK!a9j#WKvU6?%F3s%bnxbjG{Iaru!F-?HFXn3?vM0d9f`5{Y?r_>^jivx- zDVPGcQE$p1s2wbZ-$JCPP;hlpL6^?s2f-u^XxC15f)_19$?zOCT7aP|VX480o`B-S z0awBc5f~=KB>nE*xgDB#H`Sy+R8R1`$6s0wpaNR73xF9ygAJ6m@4a6}H&FaWykwJ> z2G!{RQ3KC7j$J96^@)EcFoIPrOBO)=aTJ{7Z1m`7V}r;{Adfv^(BLjh(&IG#S3l~V zoP2Jsgn@vt1|oB$za}q9ZEDK7^b7^p@uySC~3?A{pNxfK@cK#dmn3Ms3 z&FPIipDy>*q?PbORJqQ{s{5%EyK(|GcA*-g0W?kq)yvproTq;89YN`z^zPaO=LGL< z%>ZusuZWD99uO(CC=-^m$P@(v0Rc4FwrkkODIGFT{*PTSk6AkQx@P%e-&HVXa!i+) zN%DWAsaW>?5BdKC$!_3#9Eqraouu}Mpd?XMRX<7c4Q@+p1rt($173&@prE_!Zd;t( zzCL>m7!3^&011V|{Nx_AZp;xLAFV$RR6S1LvR`Ps+Q46m;)LqbhVW<>yV+i6a*CG_ zK)b?0jrc|qw{VHVQYSz5&G^3|zcE1+5A@F8S>PvBy65uYBw((9wjAMrx_jLZ=#$8t zz+*seqIsrD6K4@}m~rSNIBl?`A#SUl^2nX=x=nUl&BDeLN%F@xi-xBpN=3Xtp4V9( zKWK#sGui2l0EDVm8${7kl702NKOoz42yJwFI_=}k zAM78oyHA`XYk^+kku!}H1eF0l9nR(k?d#1$yb$u*-nX|)^~+yGVk(m!l(2X9aD!0^ z57m%xt03VG+G+FY6UZq;BKB62fd}Cp@A=b$HxrUgdhh7shLVzXm{SR{gS#GblIeSz z`9_d@*oJ`(C!Sqpds*S_tonxG(h3%Ts}qqUxL`@>EshW;)~dcFW&-w4l?2?ZnijGm zxM4hINpn&$a<_?|a6+_xIQDc^Ihn!@z!O%j%YCVg#pBdLhjzTyhhOde?c(G%U?*Vp z1Ir+!_rBU34*32ao2j~FALXCBg$}epI@JM${)CU3 z?{^a@cMrBdesV12HHUOQuJHOAu17tbZoFT{T45NB>^GT;U8Aw=xD5dsx%2sQ-6HgE zW?pmINn9m%9k8N-6n3B&n)-5$G#(poszos;z=V*i;c41QILnI~z$rBSZ$c#9&kCLK zuiw1|=AWHYoYhRwj*ArYdQ}O9b>7jifWMmXmO)YXd4Q{gN>ABrZ&x}6%>b+%VMqU_ zXAe#i_t-|}D-ae7@U*72IroUX$?02vTJx_|7xcYdCC5?!u4!Sun^{453Z$c6dmloA zcab?T5--OA=6K^*J=LiOXc@*IQJ@m#3cjAGqLp|}0c!#hxqsuJC@RSJ-iCFx5lm^2 zFAlp82YLXq>Vo}9@Xfpvpb%9QqMjVb*4XdCoL67`9ws$ejPr21R4f^*Cex#>&fh!` z{Hm6qO|Yt_ghYMTtlk4nyVfG;O33}8cfJ~17s6rlPIrOR1aXdfITM0kb?Tsx5X}Zy z3gy7%7Mkhu`ISuky(s!+gXkKu*}M=A;ihI^rU$Kw5TiZ80S+;RY-GpS2^ZkRZ_tw; zEc$jIG+2QZF1W4qfb5S+EG+M~v==dS7BS*(E-l&hA*I~ZuQNJTX#yLpru*gUPRXNl z+XAdUjl46hmtbdIc!iB5CB|% z)1gu>7vDyPNIUE)V4s9Q#S2RpF5Q`0kJqS5+X9{p z(rlljf(rOjoR{{GCc;j%7s@OG1ToQ>G0?2DpR$jS@nF!>jy|q1RBPbDp7fe6vCi>S z#NX~yB2dMmNMc*UPZoU0Ca4GKlkgsu~m2()aji1rPpb^x?`ts;myp z5um1Vh#5-W4S*tZhdfSjDWz+X94yG8QRB&M+fxA_0$9*x`ZO()3w-yCpfeG!Fp50F zZp8R4L!%59w^<39ICn3MvFjB3nv<{w1$jfs(Kod)PW$6dzuhrkUZ7qQ`Z-?BWeRkY zeIEwxf80J9E%;cx`S9Q6UIZgQRAp}^&8zfq*n>j8$@^`HfOmTF5y)r$orEPo-~&+f z^BV&-!^W6$X84d51cmwO{jWS^$CElh>bFK^VOLZ~nGUJ>0$q)@-$KndC@P1Mtcfys zWYvbA`mXz`v!uc%MCAKd)B2RrFV>1IZV@yhUvp_buGw&heyk*6yMsG>9idYa z5pw{#;DwwxvZIY)UWRkcf!`C&a+fJki;gF~=1jKG*fxZ1i3FFZyB&qP#IgJNpeNxs0~Jy*IS%_`%C!emrLaEZ-JUz;<+KI5a(^r}WjpV&Nd zv$SjxOR{uABKk>6;8a)u1?~itz?&E0Fep%9N%BUi+SCIcgNn{sm%+#4&PEDp}a@P|;<%G_uDS~b^c=oBG9XpfHmsak&S$J$1?|;;% zYk811Hj~zW#Gm)XL@8ESKMrpZ2_K@Z}ow3ye|%W`>TSIiSKV^jkoY<6wsDK5_&1S{|(1 zkGpKy*SeUn6hA|2e`iWtgRg$GhpI)u5SoPU>+*htd^LkIG<%Xr-c02`5Xpn9ct6R5FXjWNFuUxhRN( zuJ#*&;+lm!d*!#MfTE8HTvP(1@m)Eoht^d1%C1ul5rQXeuR2yd7>Gb8!~6=PfcJgu z1{F<_HuVtDEl|xLz3-3C=6yf_kx9w>{sXLgsO@2S=38{H0$SzHX__Bi$asy{XrR;v z&bTl*R3NNRC7KQZKL)iyg1aNdV~ zUPJGh=VER!Ur1GFQyRNqMyM!orytKsYLWZ|pBr|KR}u+C1~{=dLWse4ZX1ffJt1#k zDg&BW30h+8Uc{3USBbN?Xh9-h5pIH}B}MRs@k}r#!kiYh zFn@#Pvz(Y*3bLo4%RX|1LN+8;aAycGw=qykz-)c`#c;6hcXVRh(Sk#<@9}15BlWFP zJw4Wc!I6xQKu2e}o{W9=Tu;~i7gbpL)idVzCU;Z)>DFeY@X7S;Wd>cl(yB=ZwuwK! zJGus;B>hP*ddg3@6o#3t((p|4M zw+T2Lo7u=TFtzFpcyYfPnaLU43nb!p8kTz#Gl44pw~TnC-{j1!KUMpOg;iVj-qEHO z+;--MkL4fanfGot8t#*io#s8+SI7a9;-;IVbXU{6a3{fvd3FfqntfGy0y)kttUn)= zaLqs@83+OGpxE(h+{BYI;{@OwpinvcrD#Q(mR>?tZ9dw7NYhlT`*;?IjNZW9L9s1 z5kzZ(P$PtD|K*nxo3Zl=ArNBI=d$z6?t;~x0Hm0zQVper2;$^MlhS{oKrL`zVZQe{ zvn~sR$k6q_NkrzzbabaEK(f)&4~d)8{5$se)t}^%`mzLNw8&#n?F1^@pbh>B!}UJ&$FQrx#)TGXZJmO0xM=>I=IrS zAXXso_E_0+dEWH2?Y6-iUO*s*RRQUc7DsN9F#fpJ%M<_M)}=Ddk_-mSM^XRjV9;ph z2WE`Ks0z5ZHUhkq$7fDgP3l@-{zA{}XkGL{SB6OYel)TbS=AH|MyRgENQTE@rS7ot zwi6t#n*rI!?H(-L{ToQU#ZxT}OXse4!`~AR14)q%pvaxR>TpWF=9NKAt(dWp)H;&D z(xUsD!m+uHjs=t581(gx%1OJHs4g)e$Q%k3D{GR}b%Okz2ZA-96p_m8{HTt15KL|A z+8E_FV59A)s#zT51b0K_9nR?Bd2mO@G;H8AvN|5r zimwIlfTLRy!q=n!+yzGU^66XC7JAh}Bk zj@-Z`b{H>+#kzyH1KR zyz;2WZ()nO`7HOd7>AMuJG2qhC9fS7V;GKG{HddGAV54U;=k8<;l9#Ovg$s-o}D_x zP9PPfK)hJU12gt}2@>XxctGZr!V?lSFVM7?UTbmuZ2IhbK=yer8Yk+`mWH zvthsOxQz@!cCbJLnvaNpMN^=dHwXmhYQtgMcJN>FvQH#HIHMX1f*n6AU@t()%mz2K zrN0^g`e3r}ykFQV39da6FM#q9z6~&}fk91%lx$eS04GA5SzY#3)OUR8n zwiOrh3Acntav#1r6bYiuV&+A6K~fjSX)a%gB|qU?0#pVXaN))ZzodZ%>kcW#(8zpk zc}#I;$U*JzyrO36g$Cvn= zkWO*V(%Omy5)eAox6_wm1d-W7s{v;F_!F>|AKcr(ulA0?pltDqDNX26D+Mi{vuwrb z+Xv{%hXzcwqtPIPN11dMmm`_xYOIYoh+hFQB~~MO*Bcs}}L#Y(&s!`mKYYrB-jI zMVw_gdZTfBLF)^UsylE3 zAT1{aDot|fSQuU~*N;Sinpaee_a7UQz$gK8m@Z>;;A5QGz!3Pm<;%ERTY5mw3m@pp z+4KF1@;&-w24(}>oY7^xwib?JRck~kR(Tl?82NYvmkp-k(A9Jw-@Q%p0}Q%W1L*#P z_iqlo5jmq&_ZN?_g+SwT%dw5}&j<=o{nQTw{lCc4N^Tss)nP9qJ9wZ0Cx_yx$h~`j z9l-<&SaPJcM;MaV@-KZwkV+?ZGqQsiD)(|R^;S}R0ar&7BSi8+7^;(7GRkDG`v^vgRi(S{Xv$U3gVF47^p=RW zn_D$!3BQ>B%DubMowmd6uemSNcPSo_t_SFnoX$yujbEBT@6hXXWT#;<5=D+v+Awtj zb|F=W@7(p)>IP&&kTeYWvg39oxY>!?dB<^32!cn>e>?A>y{eg(@xzZCx;9B!Hktr@ z<)~y4tND34N&Z<)ofr9GRv{9Aa7i8oghenDtxy*sC~$nWUG?jXe{>Bhm&$SVfy((K zcWi6UVgLlU7cdx@k*Q4s<_77VM|Pe6e%wc}%yua})S?$FJPLpe201rt$;2bs*+$iN)U$q1U{L_Q`;#{Is;_ib2=EY%Pkzz_*_k za7d4?BrO_U0th%CG)HVvy#usVIEo4S03?YB_+2MIm*3J-9*0|w<}V%#SqKSzOb|_{ z#7w}00{@aPXuPNQR@@;f&p}+&C3)l$TiDebD$wm81XQL$>5Faqaz3kI^sR3o&kG(CoUpZ1fq4jpYB5~ z1^V!+TWJIV3SBGpe^xaY3)db_AXHc`<_eO_iDR4BWP*>ke~cd-974OOJFcb#@1{BSgxua;3FI(`HIBFtQu67 z%sh@|JddWO5A(j9Sv)7w(>EHeeROcU4T3oad%fAQENvurkcXQt0z2CN8Df>_ZgQpn z>;;}MwxPW}`&ST;+2s7UzI8(_4kRTZT2PF-La`hiP1MHwO(_}@09^=s3)dmjU#gM^ zMIAf%d0117k1!O;T#b4ZY6jpf)7huoVIYO_MR=C{I-XSFP{suVaP?(x^}Zbc8jP`H z`4MBKd*eT1Vozi6mZOe(rOyWTW1lbTo7LKgMcWXRzpl9z83_t051 z8n1@oqjFMlp@f78Wigg_*Cj2V$$RT#ajP*g5wUcTVd-l&$*aXHWt_klpR_pWAU`4r zK=K4|e-V~fXZ1x+Rx5y z<<*PHT#uG9j39u3>XwAg;(UP<)x;2ZMT+N&`b|S+rXez4^ErA3UG9n*o3gWalWf?- z#sUz$76;^Mz%wPS)@_3a5tDx<;YqwijzbsMg}}~Tnx;r>kV3%84MyBH-peCW!2Dsm zs!eZwAh(#n@@iut@bpCY@W%`&`}aI#D3XCLl=W@C>dp0qk|msc-L6jnZD0u3W`~0T zAHlekDH*ZzsDwmL#A8oF6ne*`Q$UTr#M{!^Ihyj3>Tg`=N8rc*Q1~L8{y%i9<<5Q3 z=Cy#P9)NETC%IcdU@~`*$fqSeV+MUm!&5BKyOXrL>s6)J$AXlQbN6BwiEtS8J@}%} zwvR5hzhwBch^<&_q3UuA&H>5$!frtN4g!6qF6EKM{A_=;^4{IZ;of2=xa^S_`T+za z*;10FAhtTGYf%8Oisgr0^dbxX;0&3)zU$waAZ>(nFsLdFX`!WjB1%Hd_mnMDXqlsc z4`%DNsD}g1y6S5d4eN~5ZFbQK*Y5FrrVAu1C!#x+G4$>`e4$~dOo$D4!x=ep645Cs_9@h_`75}X87J_l7rJSMU@#an#nHPYNK+Rd|;odm$eXV zfXMR z3z=T9Ua)FHp{$j<`1MM zub#t`CPMW(;(s=of!;r&NqEch^oSB=vCKL;d%++}Wanf-Soo;`B4cz9@Txhm(mFCs9@lgz*6B?w>clwlZ5%D{!*`v~duSh+=H z{Tbr=taq|ag=|<9SdaWVo{UmS{LOdzeo@u>_6S>QajS5kvgO=nDWY%esQrptk5PI+ zb*vg2>LJ9k|)BbI@rL-n9aC+vBnte5Ky|2MXO5 z9a%AZSiOx4VNoE;cdI8h;XvuyyZ%Bh1xV%zOz)P(Qkgj)@Z<4_Ro2>8uaC#qeD3Iu_ ztXErv09PBZGC#=d<%=N^-QC=>KmY26Sl;HVwBRcS11Tsy_n8J}Vsa|`fG*Y3?w}HV z<;4~7bWk!t|07;W7+yWy9&otX6*(Fq{vCpZFH_rYrNLq6{HUDgfGdW5_(gefD2ou? z8FI7VF177xtCI0_o;cJT+hsg!B%yQ}@sED!o0t)KSiqiL=s-EEnmH)em#ez|kOZ-J z5eU@Lj4}u%!sC)h-4oCB0PPyL|H4cknc?~M_zsUy4JJyI8C_IB_10c#7o;{Gg9ZaR z^kUvmuZVRU5U9O~BN@0wtBwxzo$S;j(+6N4_(QRPGuqgT9V5?KRsOhOE>pA<=Pj5| z)i~gmp}k;gUg* z(Nl%oI6MaA{v(_j(CATAB%>lz)#k0TYI{;t5!S^9=)XsSBJ9~HVeMBK;Ovhxx`Onq zgJ*$=+W!0{;FG}?T9F3Ohohg713S3V_P3d2%{72 z*&dFn3IxLJJR|@al9!RiJcjK)gnt%dA}f=p&h1rMZx3Hg-%oShp9m1fnn895fKPll z@;$ingneuTh{C~3^&^+L17mQjUFU+x(tG`qX3+bLDZ%R-`8@XrSSzgYLFF-PX<9nK z5Xlu2j{oaoZvm=nm15Nfu#IPbre`QEdmMhlttA|QSE?1j^_H*w#3OuPEaVW5S6{V# z{NNb_xCd@6#sa=bu+Vw=5aJ}xO?d7v*=92@TXKCSVQ4j~yJJ)nMuqy1fe4@Mr1oaT zXJ>fwflWbD*1%OB024|~a6cS&0@og%x>arf2>?=GB4)RYDyxX%<{)M>YzU;1NYoRD zT!R6P+AnF0dNy1T=Nds!ZpyMZixs&sadXC4HrFuVFcwz_;Pl45Uxh^vw!gbtz^2R= zgGIHd!viLO*j!=&h=R>v7fw`A$PFKNEjBP7fP0x8z%Tbx{VDH!#E;HSt4{OAeJ+yY zAzI-Bd!!2F`C&N2`92e%e1kSDZ;<2dt-5~1qWi*wcVoftY7R&$`{Hmd=@eIeE?G3# zKUy}QY+qj4^4U_a1+ctdH9>+Y6UJSls@S2gMA|ef;X1P_Kp$HF z+Gjjl)ixlLHQ<^a7z#s+g%8uSuVPJac5h_QA%seDQeggqYFP4O*%L66@->{zVtJ00 z2U?-wfN6s8xcoBjPn%3;3`;YDp_#R?Af;GJ+6)*j1mHmH-um=Gy4FgNrA38dQ%SoK zBrDue1`q3&7qbgcc+jKG~U4iMd*DuKhiC65H0{>*ZfB`sN + + diff --git a/src/main/resources/static/login.html b/src/main/resources/static/login.html new file mode 100644 index 0000000..470e22f --- /dev/null +++ b/src/main/resources/static/login.html @@ -0,0 +1,171 @@ + + + + + 로그인 페이지 + + + + + +
+ +
+ + \ No newline at end of file

TFGK0qR7mX#l&5}l&y&-7ED40!(gH_JI{o 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%0D^)1~a&yo79SX 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 + + + + 로그인 완료 + + +