From 16a366ce7bb20aaf50ea798b11cd1ec838bafaa4 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 12:27:06 -0700 Subject: [PATCH 01/11] refactor(home-page): transfer about to home --- web/components/home/HeroBanner/index.tsx | 13 +++-- web/pages/index.tsx | 72 ++++++++++-------------- 2 files changed, 39 insertions(+), 46 deletions(-) diff --git a/web/components/home/HeroBanner/index.tsx b/web/components/home/HeroBanner/index.tsx index 5ad68aea..410340d1 100644 --- a/web/components/home/HeroBanner/index.tsx +++ b/web/components/home/HeroBanner/index.tsx @@ -33,15 +33,20 @@ const HeroBanner: FC = () => ( Hello! I'm Elias Gutierrez, and I'm a Full-Stack Software - Engineer + Engineer 🤓. I love drinking coffee ☕️ while learning and improving + on new and existing technologies 💾 - I enjoy creating beautiful user-centered interactivities and solving - abstract software puzzles to create efficiency and scalability for - teams and companies + A passionate and curious individual with a BS degree in Physics from + UCLA currently working as a Full-Stack Software Engineer at + Aerobotics7 to remove landmines from around the world. I have + experiences with Python, Django, Node.js, React.js, Figma/Lucid Charts + and other platforms and tools to facilitate on creating and solving + real-world problems for the users to enjoy, and the companies to + succeed their vision diff --git a/web/pages/index.tsx b/web/pages/index.tsx index 7fdfe11b..ecf3e17a 100644 --- a/web/pages/index.tsx +++ b/web/pages/index.tsx @@ -6,30 +6,30 @@ import { nextReduxWrapper } from 'app'; import { getArticles, getRunningOperationPromises as getArticlesRunningOperationPromises, - useGetArticlesQuery, } from 'app/api/articleExtendedApi'; import { getWorksByCategory, getRunningOperationPromises as getWorksRunningOperationPromises, - useGetWorksByCategoryQuery, } from 'app/api/workExtendedApi'; +import LineSeparator from 'common/components/LineSeparator'; import LoadingIcon from 'common/components/LoadingIcon'; import PageContainer from 'common/components/PageContainer'; import WithLoadingOverlay from 'common/components/WithLoadingOverlay'; +import { HeroBanner, InitialSiteTransition } from 'components/home'; + import { - ArticleSection, - HeroBanner, - InitialSiteTransition, - TalkSection, - WorkSection, -} from 'components/home'; + AboutImage, + BeliefsSection, + Col, + ExperienceSection, + MoreSection, + Row, +} from 'components/about'; import environment from 'environment'; -import { isLoadingOverall } from 'utils'; - interface IHome { isFirstMount: boolean; } @@ -64,28 +64,6 @@ export const getStaticProps = nextReduxWrapper.getStaticProps( const Home: NextPage = ({ isFirstMount }) => { const [finishIsFirstMount, setFinishIsFirstMount] = useState(isFirstMount); - const { data: articlesData, isFetching: articlesFetching } = - useGetArticlesQuery({ - category: 0, - limit: 3, - tags: [], - }); - - const { selectedData: worksData, isFetching: worksFetching } = - useGetWorksByCategoryQuery( - { category: 'Work', limit: 5 }, - { - selectFromResult: (result) => ({ - ...result, - selectedData: result.data - ? result.data.items.filter( - (resultData) => resultData.title !== 'Node News API' - ) - : [], - }), - } - ); - useEffect(() => { const timer = setTimeout(() => { if (!isFirstMount) setFinishIsFirstMount(isFirstMount); @@ -164,20 +142,30 @@ const Home: NextPage = ({ isFirstMount }) => { - + + + + + + + + + + + - + + + + - + + + + } - isLoading={isLoadingOverall(worksFetching, articlesFetching)} + isLoading={false} loaderDuration={1000} {...(!finishIsFirstMount && { loaderComponent: , From 3b6aff90ae82aa0d73a642abf5044576e6ad4059 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 12:36:31 -0700 Subject: [PATCH 02/11] refactor(seo): change the meta descriptions --- README.md | 2 +- web/pages/about/index.tsx | 10 +++++----- web/pages/articles/[slug].tsx | 4 ++-- web/pages/articles/index.tsx | 4 ++-- web/pages/index.tsx | 14 +++++++------- web/pages/work/[slug].tsx | 4 ++-- web/pages/work/index.tsx | 4 ++-- web/public/manifest.json | 2 +- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 7bf3df67..9204925c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

Personal Portfolio

- Software and Full-Stack Developer.
Creating beautiful user-centered interactivity and experiences. + Full-Stack Software Engineer.
Creating beautiful user-centered interactivity and experiences.


diff --git a/web/pages/about/index.tsx b/web/pages/about/index.tsx index 7abbe4d8..a28ab5e6 100644 --- a/web/pages/about/index.tsx +++ b/web/pages/about/index.tsx @@ -21,23 +21,23 @@ import environment from 'environment'; const About: NextPage = () => ( <> - About | Elias Gutierrez, Software Developer + About | Elias Gutierrez, Software Engineer ( { articleData.meta.seo_title.length > 0 ? articleData.meta.seo_title : articleData.title - } - Articles | Elias Gutierrez, Software Developer` + } - Articles | Elias Gutierrez, Software Engineer` : ''} @@ -95,7 +95,7 @@ const Article: NextPage = () => { { return ( <> - Articles | Elias Gutierrez, Software Developer + Articles | Elias Gutierrez, Software Engineer diff --git a/web/pages/index.tsx b/web/pages/index.tsx index ecf3e17a..aa8aab07 100644 --- a/web/pages/index.tsx +++ b/web/pages/index.tsx @@ -75,28 +75,28 @@ const Home: NextPage = ({ isFirstMount }) => { return ( <> - Elias Gutierrez, Software Developer + Elias Gutierrez, Software Engineer @@ -112,12 +112,12 @@ const Home: NextPage = ({ isFirstMount }) => { { workData.meta.seo_title.length > 0 ? workData.meta.seo_title : workData.title - } - Work | Elias Gutierrez, Software Developer` + } - Work | Elias Gutierrez, Software Engineer` : ''} @@ -92,7 +92,7 @@ const Work: NextPage = () => { { return ( <> - Work | Elias Gutierrez, Software Developer + Work | Elias Gutierrez, Software Engineer { diff --git a/web/public/manifest.json b/web/public/manifest.json index 5a45d276..deb04673 100644 --- a/web/public/manifest.json +++ b/web/public/manifest.json @@ -1,7 +1,7 @@ { "short_name": "Portfolio", "name": "Elias Gutierrez's Portfolio", - "description": "Software and Full-Stack Developer. Creating beautiful user-centered interactivity and experiences.", + "description": "Full-Stack Software Engineer. Drinking coffee while learning and improving on new and existing tech.", "icons": [ { "src": "/favicon.ico", From 4d9a121d7fca08ba66d220761f14581a490d2f2d Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 12:47:10 -0700 Subject: [PATCH 03/11] refactor(about-home): copy components into home folder --- web/components/home/AboutImage/index.tsx | 46 ++++ web/components/home/AboutImage/styles.ts | 19 ++ web/components/home/AboutSection/index.tsx | 31 +++ web/components/home/AboutSection/styles.ts | 44 ++++ web/components/home/BeliefsSection/index.tsx | 82 +++++++ web/components/home/BeliefsSection/styles.ts | 88 ++++++++ web/components/home/Col/index.tsx | 11 + .../home/ExperienceSection/index.tsx | 91 ++++++++ .../home/ExperienceSection/styles.ts | 88 ++++++++ web/components/home/MoreSection/index.tsx | 200 ++++++++++++++++++ web/components/home/MoreSection/styles.ts | 103 +++++++++ web/components/home/Row/index.tsx | 12 ++ web/components/home/index.ts | 7 + web/pages/index.tsx | 6 +- 14 files changed, 825 insertions(+), 3 deletions(-) create mode 100644 web/components/home/AboutImage/index.tsx create mode 100644 web/components/home/AboutImage/styles.ts create mode 100644 web/components/home/AboutSection/index.tsx create mode 100644 web/components/home/AboutSection/styles.ts create mode 100644 web/components/home/BeliefsSection/index.tsx create mode 100644 web/components/home/BeliefsSection/styles.ts create mode 100644 web/components/home/Col/index.tsx create mode 100644 web/components/home/ExperienceSection/index.tsx create mode 100644 web/components/home/ExperienceSection/styles.ts create mode 100644 web/components/home/MoreSection/index.tsx create mode 100644 web/components/home/MoreSection/styles.ts create mode 100644 web/components/home/Row/index.tsx diff --git a/web/components/home/AboutImage/index.tsx b/web/components/home/AboutImage/index.tsx new file mode 100644 index 00000000..623d1a82 --- /dev/null +++ b/web/components/home/AboutImage/index.tsx @@ -0,0 +1,46 @@ +import { FC, useEffect } from 'react'; +import { useAnimation } from 'framer-motion'; +import { useInView } from 'react-intersection-observer'; + +import GlassRectangle from 'common/components/GlassRectangle'; + +import { ImageWrapper } from './styles'; + +const AboutImage: FC = () => { + const imageAnimateControls = useAnimation(); + + const { inView: imageInView, ref: imageRef } = useInView(); + + useEffect(() => { + const timer = setTimeout(() => { + if (imageInView) { + imageAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [imageAnimateControls, imageInView]); + + return ( + + + + ); +}; + +export default AboutImage; diff --git a/web/components/home/AboutImage/styles.ts b/web/components/home/AboutImage/styles.ts new file mode 100644 index 00000000..780f4d56 --- /dev/null +++ b/web/components/home/AboutImage/styles.ts @@ -0,0 +1,19 @@ +import styled from 'styled-components'; +import { motion } from 'framer-motion'; + +export const ImageWrapper = styled(motion.div).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { duration: 0.5 }, + }, + }, +}))` + margin-top: 5rem; + + @media ${({ theme }) => theme.responsive.below899} { + margin-top: 0; + } +`; diff --git a/web/components/home/AboutSection/index.tsx b/web/components/home/AboutSection/index.tsx new file mode 100644 index 00000000..7fd61381 --- /dev/null +++ b/web/components/home/AboutSection/index.tsx @@ -0,0 +1,31 @@ +import { FC } from 'react'; + +import HeadingPrimary from 'common/typography/HeadingPrimary'; +import Paragraph from 'common/typography/Paragraph'; + +import { MainAboutWrapper, SecondaryAboutWrapper, Section } from './styles'; + +const AboutSection: FC = () => ( +

+ + + Hello! I love drinking coffee while learning and improving on new and + existing technologies + + + + + + A passionate and curious individual with a BS degree in Physics from + UCLA currently working as a Full-Stack Software Engineer at Aerobotics7 + to remove landmines from around the world. I have experiences with + Python, Django, Node.js, React.js, Figma/Lucid Charts and other + platforms and tools to facilitate on creating and solving real-world + problems for the users to enjoy, and the companies to succeed their + vision + + +
+); + +export default AboutSection; diff --git a/web/components/home/AboutSection/styles.ts b/web/components/home/AboutSection/styles.ts new file mode 100644 index 00000000..55847805 --- /dev/null +++ b/web/components/home/AboutSection/styles.ts @@ -0,0 +1,44 @@ +import styled from 'styled-components'; + +export const Section = styled.section` + width: 100%; + text-align: right; +`; + +export const MainAboutWrapper = styled.div` + width: 80%; + margin-bottom: 3rem; + margin-left: auto; + + @media ${({ theme }) => theme.responsive.below1199} { + width: 97%; + } + + @media ${({ theme }) => theme.responsive.below899} { + width: 100%; + margin-bottom: 5rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-bottom: 3rem; + } +`; + +export const SecondaryAboutWrapper = styled.div` + width: 95%; + margin-bottom: 3rem; + margin-left: auto; + + @media ${({ theme }) => theme.responsive.below1199} { + width: 97%; + } + + @media ${({ theme }) => theme.responsive.below899} { + width: 100%; + margin-bottom: 5rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-bottom: 3rem; + } +`; diff --git a/web/components/home/BeliefsSection/index.tsx b/web/components/home/BeliefsSection/index.tsx new file mode 100644 index 00000000..f59bed4e --- /dev/null +++ b/web/components/home/BeliefsSection/index.tsx @@ -0,0 +1,82 @@ +import { FC, useEffect } from 'react'; +import { useAnimation } from 'framer-motion'; +import { useInView } from 'react-intersection-observer'; + +import HeadingSecondary from 'common/typography/HeadingSecondary'; +import Paragraph from 'common/typography/Paragraph'; + +import { ParagraphWrapper, Section, SectionTitle } from './styles'; + +const BeliefsSection: FC = () => { + const sectionAnimateControls = useAnimation(); + const { inView: sectionInView, ref: sectionRef } = useInView(); + + const titleAnimateControls = useAnimation(); + const { inView: titleInView, ref: titleRef } = useInView(); + + useEffect(() => { + const timer = setTimeout(() => { + if (sectionInView) { + sectionAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [sectionAnimateControls, sectionInView]); + + useEffect(() => { + const timer = setTimeout(() => { + if (titleInView) { + titleAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [titleAnimateControls, titleInView]); + + return ( +
+ + + Beliefs + + + + + + As an avid learner, I was a self-taught programmer many years ago, and + being self-taught was difficult and created imposter syndrome within + myself. I always felt like I was not good enough and needed to know + more about the magic of coding. Overtime, I have learned to have + self-confidence in my abilities, asking for guidance, and knowing when + to just get up and take a walk. + + + + + + I believe that anyone can become a programmer no matter what + background they come from. I believe that if you have tenacity, + perseverance, and tolerance within yourself then you can understand + the complexities of programming. + + + + + + I also believe in having good communication, understanding, and + patience with others to develop healthy relationships. When these + three pillars are achieved, then achieving three more are possible: + Better user experience, painless documentation for developers to read, + and accomplishing a feat together within the team. + + +
+ ); +}; + +export default BeliefsSection; diff --git a/web/components/home/BeliefsSection/styles.ts b/web/components/home/BeliefsSection/styles.ts new file mode 100644 index 00000000..f882641e --- /dev/null +++ b/web/components/home/BeliefsSection/styles.ts @@ -0,0 +1,88 @@ +import styled from 'styled-components'; +import { motion } from 'framer-motion'; + +export const Section = styled(motion.section).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { duration: 0.5 }, + }, + }, +}))` + margin-top: -28rem; + padding-right: 12rem; + text-align: left; + + @media ${({ theme }) => theme.responsive.below1199} { + padding-right: 3rem; + } + + @media ${({ theme }) => theme.responsive.below899} { + margin-top: 0; + padding-left: 3rem; + } + + @media ${({ theme }) => theme.responsive.below599} { + padding-right: 0; + padding-left: 0; + } +`; + +export const SectionTitle = styled(motion.div).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { + opacity: 0, + y: 10, + }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.5 }, + }, + }, +}))` + margin-bottom: 2.5rem; + + @media ${({ theme }) => theme.responsive.below599} { + margin-bottom: 1.75rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-bottom: 1.5rem; + } +`; + +export const ParagraphWrapper = styled.div` + margin-top: 2.5rem; + margin-bottom: 2.5rem; + line-height: 1.5; + + &:first-child { + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } + + @media ${({ theme }) => theme.responsive.below899} { + line-height: 1.8; + } + + @media ${({ theme }) => theme.responsive.below599} { + margin-top: 1.75rem; + margin-bottom: 1.75rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + } + + @media ${({ theme }) => theme.responsive.below379} { + line-height: 1.5; + } +`; diff --git a/web/components/home/Col/index.tsx b/web/components/home/Col/index.tsx new file mode 100644 index 00000000..90aed802 --- /dev/null +++ b/web/components/home/Col/index.tsx @@ -0,0 +1,11 @@ +import styled from 'styled-components'; + +const Col = styled.div` + width: 50%; + + @media ${({ theme }) => theme.responsive.below899} { + width: 100%; + } +`; + +export default Col; diff --git a/web/components/home/ExperienceSection/index.tsx b/web/components/home/ExperienceSection/index.tsx new file mode 100644 index 00000000..71708836 --- /dev/null +++ b/web/components/home/ExperienceSection/index.tsx @@ -0,0 +1,91 @@ +import { FC, useEffect } from 'react'; +import { useAnimation } from 'framer-motion'; +import { useInView } from 'react-intersection-observer'; + +import HeadingSecondary from 'common/typography/HeadingSecondary'; +import Paragraph from 'common/typography/Paragraph'; + +import { ParagraphWrapper, Section, SectionTitle } from './styles'; + +const ExperienceSection: FC = () => { + const sectionAnimateControls = useAnimation(); + const { inView: sectionInView, ref: sectionRef } = useInView(); + + const titleAnimateControls = useAnimation(); + const { inView: titleInView, ref: titleRef } = useInView(); + + useEffect(() => { + const timer = setTimeout(() => { + if (sectionInView) { + sectionAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [sectionAnimateControls, sectionInView]); + + useEffect(() => { + const timer = setTimeout(() => { + if (titleInView) { + titleAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [titleAnimateControls, titleInView]); + + return ( +
+ + + Experience + + + + + + At Aerobotics7, I spearheaded the creation of software architectures + for controlling drones and efficiently storing landmine detection data + at a high-speed receiver rate. Managing the full technology stack, + including DevOps, SQL databases, and security protocols, I + successfully ensured real-time communication and authentication + between the drone and users. Additionally, I presented our hardware + and software technology at the Geneva International Centre for + Humanitarian Demining (held in Switzerland once a year) to showcase + our capabilities to government officials, scientists, and engineers. + + + + + + Previously at Listing Alert, I helped to develop the mobile app with + bare React Native (non-Expo) along with developing our own API with + Node.js, Express.js, MongoDB and AWS S3 to be used for the real estate + agents to get notifications on property listings from potential + buyers. Additionally, the team and I developed a web dashboard with + React.js for companies to create agents, offices, and other tasks for + their needs. In all of the development process, we used Apollo + GraphQL. Over 1600 agents across the country from RE/MAX to Century 21 + Black Bear Realty use Listing Alert. + + + + + + In addition, I worked on React for about two and a half years, and + before that I worked on vanilla JavaScript for three years. I also + worked on Django, Python, Node, Express, MongoDB, MySQL, and + PostgreSQL for three to four years. Over the course of these years, I + learned how to make better and reusable code that is readable along + with clean file structure which follows best practices. + + +
+ ); +}; + +export default ExperienceSection; diff --git a/web/components/home/ExperienceSection/styles.ts b/web/components/home/ExperienceSection/styles.ts new file mode 100644 index 00000000..2bae38f7 --- /dev/null +++ b/web/components/home/ExperienceSection/styles.ts @@ -0,0 +1,88 @@ +import styled from 'styled-components'; +import { motion } from 'framer-motion'; + +export const Section = styled(motion.section).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { duration: 0.5 }, + }, + }, +}))` + padding-left: 12rem; + text-align: right; + + @media ${({ theme }) => theme.responsive.below1199} { + padding-left: 3rem; + } + + @media ${({ theme }) => theme.responsive.below899} { + padding-right: 3rem; + } + + @media ${({ theme }) => theme.responsive.below599} { + padding-right: 0; + padding-left: 0; + } +`; + +export const SectionTitle = styled(motion.div).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { + opacity: 0, + y: 10, + }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.5 }, + }, + }, +}))` + margin-bottom: 2.5rem; + + @media ${({ theme }) => theme.responsive.below599} { + margin-bottom: 1.75rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-bottom: 1.5rem; + } +`; + +export const ParagraphWrapper = styled.div` + margin-top: 2.5rem; + margin-bottom: 2.5rem; + line-height: 1.5; + + &:first-child { + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } + + @media ${({ theme }) => theme.responsive.below899} { + line-height: 1.8; + } + + @media ${({ theme }) => theme.responsive.below599} { + margin-top: 1.75rem; + margin-bottom: 1.75rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + } + + @media ${({ theme }) => theme.responsive.below379} { + line-height: 1.5; + } +`; + +export const Italic = styled.i``; diff --git a/web/components/home/MoreSection/index.tsx b/web/components/home/MoreSection/index.tsx new file mode 100644 index 00000000..7c8bc2cb --- /dev/null +++ b/web/components/home/MoreSection/index.tsx @@ -0,0 +1,200 @@ +import { FC, useEffect } from 'react'; +import { useAnimation } from 'framer-motion'; +import { useInView } from 'react-intersection-observer'; + +import HeadingSecondary from 'common/typography/HeadingSecondary'; +import Paragraph from 'common/typography/Paragraph'; + +import { + ExternalLink, + Italic, + ParagraphWrapper, + Section, + SectionTitle, +} from './styles'; + +const MoreSection: FC = () => { + const sectionAnimateControls = useAnimation(); + const { inView: sectionInView, ref: sectionRef } = useInView(); + + const titleAnimateControls = useAnimation(); + const { inView: titleInView, ref: titleRef } = useInView(); + + useEffect(() => { + const timer = setTimeout(() => { + if (sectionInView) { + sectionAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [sectionAnimateControls, sectionInView]); + + useEffect(() => { + const timer = setTimeout(() => { + if (titleInView) { + titleAnimateControls.start('visible'); + } + }, 200); + + return () => clearTimeout(timer); + }, [titleAnimateControls, titleInView]); + + return ( +
+ + + More + + + + + + I enjoy reading as many books as I can. I am currently reading George + R.R. Martin's Game of Thrones series + (currently at the fourth book 😄), War and Peace by + Leo Tolstoy 😮, Michael Mann's  + Heat 2 (the author is the actual famous film + director), and Basic Writings of Nietzsche translated + and edited by Walter Kaufmann. My favorite book is{' '} + Dune by Frank Herbert. + + + + + + I also enjoy watching films and television with  + Children of Men by Alfonso Cuarón being my favorite + movie of all time, and my favorite TV show is a tie between  + Breaking Bad and Attack on Titan. + + + + + + A few minor things about me is that I like to be active by going to + the gym, running, and hiking with rock climbing as my next goal. I + love videogames with Half-Life 2 being my all-time + favorite. From time-to-time, I continue to learn physics and how to + apply them computationally. Lastly, I enjoy helping others whether it + is community service or teaching. + + + + + + If you want to connect with me for coffee, collaboration, or anything + else, then  + + hit me up on Twitter + +  or email ( + + gutierrezelias1991@gmail.com + + ). + + + + + + This site was created with  + + Next.js + + ,  + + TypeScript + + ,  + + Redux Toolkit + + ,  + + Styled-Components + + , and  + + Framer + +  for the Frontend being hosted in  + + Netlify + + . It was also created with  + + Django + + ,  + + Wagtail CMS + + , and  + + Django REST Framework + +  for the Backend being hosted in  + + PythonAnywhere + + . The images for the work and articles are stored in  + + AWS S3 + + . + + +
+ ); +}; + +export default MoreSection; diff --git a/web/components/home/MoreSection/styles.ts b/web/components/home/MoreSection/styles.ts new file mode 100644 index 00000000..3e6d48eb --- /dev/null +++ b/web/components/home/MoreSection/styles.ts @@ -0,0 +1,103 @@ +import styled from 'styled-components'; +import { motion } from 'framer-motion'; + +export const Section = styled(motion.section).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { duration: 0.5 }, + }, + }, +}))` + margin-top: 12rem; + padding-left: 12rem; + text-align: right; + + @media ${({ theme }) => theme.responsive.below1199} { + padding-left: 3rem; + } + + @media ${({ theme }) => theme.responsive.below899} { + margin-top: 0; + padding-right: 3rem; + } + + @media ${({ theme }) => theme.responsive.below599} { + padding-right: 0; + padding-left: 0; + } +`; + +export const SectionTitle = styled(motion.div).attrs(() => ({ + initial: 'hidden', + variants: { + hidden: { + opacity: 0, + y: 10, + }, + visible: { + opacity: 1, + y: 0, + transition: { duration: 0.5 }, + }, + }, +}))` + margin-bottom: 2.5rem; + + @media ${({ theme }) => theme.responsive.below599} { + margin-bottom: 1.75rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-bottom: 1.5rem; + } +`; + +export const ParagraphWrapper = styled.div` + margin-top: 2.5rem; + margin-bottom: 2.5rem; + line-height: 1.5; + + &:first-child { + margin-top: 0; + } + + &:last-child { + margin-bottom: 0; + } + + @media ${({ theme }) => theme.responsive.below899} { + line-height: 1.8; + } + + @media ${({ theme }) => theme.responsive.below599} { + margin-top: 1.75rem; + margin-bottom: 1.75rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + margin-top: 1.5rem; + margin-bottom: 1.5rem; + } + + @media ${({ theme }) => theme.responsive.below379} { + line-height: 1.5; + } +`; + +export const Italic = styled.i``; + +export const ExternalLink = styled.a` + font-weight: 700; + color: ${({ theme }) => theme.colors.primary.hex}; + text-decoration: none; + word-break: break-all; + + &:hover { + text-decoration: underline; + cursor: pointer; + opacity: 0.9; + } +`; diff --git a/web/components/home/Row/index.tsx b/web/components/home/Row/index.tsx new file mode 100644 index 00000000..683177a3 --- /dev/null +++ b/web/components/home/Row/index.tsx @@ -0,0 +1,12 @@ +import styled from 'styled-components'; + +const Row = styled.div` + display: flex; + flex-direction: row; + + @media ${({ theme }) => theme.responsive.below899} { + flex-direction: column; + } +`; + +export default Row; diff --git a/web/components/home/index.ts b/web/components/home/index.ts index e9bcd71b..5b12aa42 100644 --- a/web/components/home/index.ts +++ b/web/components/home/index.ts @@ -1,5 +1,12 @@ +export { default as AboutImage } from './AboutImage'; +export { default as AboutSection } from './AboutSection'; export { default as ArticleSection } from './ArticleSection'; +export { default as BeliefsSection } from './BeliefsSection'; +export { default as Col } from './Col'; +export { default as ExperienceSection } from './ExperienceSection'; export { default as HeroBanner } from './HeroBanner'; export { default as InitialSiteTransition } from './InitialSiteTransition'; +export { default as MoreSection } from './MoreSection'; +export { default as Row } from './Row'; export { default as TalkSection } from './TalkSection'; export { default as WorkSection } from './WorkSection'; diff --git a/web/pages/index.tsx b/web/pages/index.tsx index aa8aab07..7d614f83 100644 --- a/web/pages/index.tsx +++ b/web/pages/index.tsx @@ -17,16 +17,16 @@ import LoadingIcon from 'common/components/LoadingIcon'; import PageContainer from 'common/components/PageContainer'; import WithLoadingOverlay from 'common/components/WithLoadingOverlay'; -import { HeroBanner, InitialSiteTransition } from 'components/home'; - import { AboutImage, BeliefsSection, Col, ExperienceSection, + HeroBanner, + InitialSiteTransition, MoreSection, Row, -} from 'components/about'; +} from 'components/home'; import environment from 'environment'; From 94a7af0faff6616871b32941cf2f5962a41d8f37 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 12:49:24 -0700 Subject: [PATCH 04/11] refactor(home): remove article, talk, and work sections --- .../home/ArticleSection/ArticleContainer.tsx | 167 --------- web/components/home/ArticleSection/index.tsx | 151 -------- web/components/home/ArticleSection/styles.ts | 328 ----------------- .../home/TalkSection/TalkContainer.tsx | 117 ------ web/components/home/TalkSection/index.tsx | 79 ---- web/components/home/TalkSection/styles.ts | 141 ------- .../home/WorkSection/WorkContainer.tsx | 302 --------------- web/components/home/WorkSection/index.tsx | 126 ------- web/components/home/WorkSection/styles.ts | 343 ------------------ web/components/home/index.ts | 3 - 10 files changed, 1757 deletions(-) delete mode 100644 web/components/home/ArticleSection/ArticleContainer.tsx delete mode 100644 web/components/home/ArticleSection/index.tsx delete mode 100644 web/components/home/ArticleSection/styles.ts delete mode 100644 web/components/home/TalkSection/TalkContainer.tsx delete mode 100644 web/components/home/TalkSection/index.tsx delete mode 100644 web/components/home/TalkSection/styles.ts delete mode 100644 web/components/home/WorkSection/WorkContainer.tsx delete mode 100644 web/components/home/WorkSection/index.tsx delete mode 100644 web/components/home/WorkSection/styles.ts diff --git a/web/components/home/ArticleSection/ArticleContainer.tsx b/web/components/home/ArticleSection/ArticleContainer.tsx deleted file mode 100644 index 360c7141..00000000 --- a/web/components/home/ArticleSection/ArticleContainer.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import { FC, useEffect } from 'react'; -import Link from 'next/link'; -import { useAnimation } from 'framer-motion'; -import { useInView } from 'react-intersection-observer'; - -import GlassCircle from 'common/components/GlassCircle'; - -import { useIsHovering } from 'common/hooks'; - -import HeadingTertiary from 'common/typography/HeadingTertiary'; - -import { isHoveringOverall } from 'utils'; - -import { - ArticleContainerStyle, - ArticleDescriptionContainer, - ArticleImageLink, - ArticleImageWrapper, - ArticleTitle, - ArticleTitleLink, -} from './styles'; - -export interface IArticleContainer { - articleClass: string; - articleImageAlt: string; - articleImageSrc: string; - articleLinkPath: string; - articleTitle: string; - finishIsFirstMount: boolean; - isExploreLinkHovering: boolean; -} - -const ArticleContainer: FC = ({ - articleClass, - articleImageAlt, - articleImageSrc, - articleLinkPath, - articleTitle, - finishIsFirstMount, - isExploreLinkHovering, -}) => { - const titleAnimateControls = useAnimation(); - const { inView: titleInView, ref: titleRef } = useInView(); - - const imageAnimateControls = useAnimation(); - const { inView: imageInView, ref: imageRef } = useInView(); - - const [isTitleLinkHovering, setIsTitleLinkHovering] = useIsHovering(); - const [isImageLinkHovering, setIsImageLinkHovering] = useIsHovering(); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && titleInView) { - titleAnimateControls.start('visible'); - } - - return () => clearTimeout(timer); - }, 600); - }, [finishIsFirstMount, titleAnimateControls, titleInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && imageInView) { - imageAnimateControls.start('visible'); - } - }, 900); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, imageAnimateControls, imageInView]); - - useEffect(() => { - if ( - !finishIsFirstMount && - isHoveringOverall(isImageLinkHovering, isExploreLinkHovering) - ) { - imageAnimateControls.start('hovering'); - } else { - imageAnimateControls.start('nonHovering'); - } - }, [ - finishIsFirstMount, - isImageLinkHovering, - isExploreLinkHovering, - imageAnimateControls, - ]); - - return ( - - - setIsImageLinkHovering(true)} - onHoverEnd={() => setIsImageLinkHovering(false)} - ref={imageRef} - > - - - - - - - - - - setIsTitleLinkHovering(true)} - onMouseLeave={() => setIsTitleLinkHovering(false)} - > - - {articleTitle} - - - - - - - ); -}; - -export default ArticleContainer; diff --git a/web/components/home/ArticleSection/index.tsx b/web/components/home/ArticleSection/index.tsx deleted file mode 100644 index 2ec628de..00000000 --- a/web/components/home/ArticleSection/index.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import React, { FC, useEffect } from 'react'; -import Link from 'next/link'; -import { useAnimation } from 'framer-motion'; -import { useInView } from 'react-intersection-observer'; - -import LineSeparator from 'common/components/LineSeparator'; - -import { useIsHovering } from 'common/hooks'; - -import { IArticle } from 'common/models'; - -import HeadingSecondary from 'common/typography/HeadingSecondary'; -import Paragraph from 'common/typography/Paragraph'; - -import environment from 'environment'; - -import { - Container, - ExploreMoreLink, - ExploreMoreWrapper, - Introduction, - Section, - SectionTitle, - Wrapper, -} from './styles'; -import ArticleContainer from './ArticleContainer'; - -type TArticlesData = Pick< - IArticle, - | 'description' - | 'header_image' - | 'id' - | 'title' - | 'uuid' - | 'reading_time' - | 'category' - | 'tags' -> & { - meta: Pick; -}; - -interface IArticleSection { - articlesData: TArticlesData[] | []; - finishIsFirstMount: boolean; -} - -const ArticleSection: FC = ({ - articlesData, - finishIsFirstMount, -}) => { - const titleAnimateControls = useAnimation(); - const { inView: titleInView, ref: titleRef } = useInView(); - - const introAnimateControls = useAnimation(); - const { inView: introInView, ref: introRef } = useInView(); - - const viewMoreAnimateControls = useAnimation(); - const { inView: viewMoreInView, ref: viewMoreRef } = useInView(); - - const [isHovering, setIsHovering] = useIsHovering(); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && titleInView) { - titleAnimateControls.start('visible'); - } - }, 500); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, titleAnimateControls, titleInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && introInView) { - introAnimateControls.start('visible'); - } - }, 600); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, introAnimateControls, introInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && viewMoreInView) { - viewMoreAnimateControls.start('visible'); - } - }, 2000); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, viewMoreAnimateControls, viewMoreInView]); - - return ( -
- - - Articles - - - - - - - - - I love to write to help others understand programming, mathematics, - science, and other related technical fields. I also write film and - book analysis, philosophy, and other things that interest me. - - - - - {articlesData.length > 0 && - articlesData.map((articleData, articleIndex) => ( - - - - ))} - - - - - - setIsHovering(true)} - onMouseLeave={() => setIsHovering(false)} - > - Explore all articles - - - -
- ); -}; - -export default ArticleSection; diff --git a/web/components/home/ArticleSection/styles.ts b/web/components/home/ArticleSection/styles.ts deleted file mode 100644 index eff05161..00000000 --- a/web/components/home/ArticleSection/styles.ts +++ /dev/null @@ -1,328 +0,0 @@ -import styled from 'styled-components'; -import { motion } from 'framer-motion'; - -// ARTICLE SECTION -export const Section = styled.section``; - -export const SectionTitle = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - y: 10, - }, - visible: { - opacity: 1, - y: 0, - transition: { duration: 0.5 }, - }, - }, -}))``; - -export const Container = styled.div` - display: flex; - flex-direction: column; - padding-top: 4rem; - - @media ${({ theme }) => theme.responsive.below1199} { - padding-top: 2.5rem; - } - - @media ${({ theme }) => theme.responsive.below899} { - padding-top: 2.3rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-top: 1rem; - } -`; - -export const Introduction = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - y: -10, - }, - visible: { - opacity: 1, - y: 0, - transition: { duration: 0.5 }, - }, - }, -}))` - text-align: center; - padding: 5rem 15rem; - - @media ${({ theme }) => theme.responsive.below899} { - padding: 5rem 8rem; - } - - @media ${({ theme }) => theme.responsive.below599} { - padding: 5rem 5rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding: 5rem 1rem; - } - - @media ${({ theme }) => theme.responsive.below379} { - padding: 4rem 1rem; - } -`; - -export const Wrapper = styled.div` - display: grid; - grid-template-rows: 1fr 1fr; - grid-template-columns: 1fr 1fr; - grid-template-areas: - 'article1 article1' - 'article2 article3'; - margin-bottom: 10rem; - - @media ${({ theme }) => theme.responsive.below899} { - margin-bottom: 0; - } - - @media ${({ theme }) => theme.responsive.below479} { - display: flex; - flex-direction: column; - } -`; - -export const ExploreMoreWrapper = styled(motion.div).attrs(() => ({ - variants: { - visible: { - rotate: [0, 15, 7.5, 15, 0], - transition: { - duration: 1, - ease: 'easeInOut', - times: [0, 0.2, 0.5, 0.8, 1], - }, - }, - }, -}))` - margin-top: 10rem; - text-align: center; - - @media ${({ theme }) => theme.responsive.below599} { - margin-top: 6rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - margin-top: 5rem; - } - - @media ${({ theme }) => theme.responsive.below379} { - margin-top: 3rem; - } -`; - -export const ExploreMoreLink = styled.a` - font-size: 2rem; - font-weight: 700; - color: ${({ theme }) => theme.colors.primary.hex}; - text-decoration: none; - - &:hover { - text-decoration: underline; - cursor: pointer; - opacity: 0.9; - } - - @media ${({ theme }) => theme.responsive.below479} { - font-size: 1.7rem; - } -`; - -// ARTICLE CONTAINER -export const ArticleContainerStyle = styled.div` - padding-top: 5rem; - padding-bottom: 5rem; - - &.article1 { - position: relative; - grid-area: article1; - } - - &.article2 { - position: relative; - grid-area: article2; - padding-left: 15rem; - - &:before, - &:after { - content: ''; - position: absolute; - width: 36rem; - height: 0.2rem; - background-color: ${({ theme }) => - `rgba(${theme.colors.primary.rgb}, 0.5)`}; - - @media ${({ theme }) => theme.responsive.below899} { - content: none; - } - } - - &:before { - top: -4.7rem; - left: 24.1rem; - transform: rotate(40deg); - - @media ${({ theme }) => theme.responsive.below1199} { - left: 5.7rem; - } - } - - &:after { - bottom: 5.4rem; - left: 38rem; - transform: rotate(90deg); - - @media ${({ theme }) => theme.responsive.below1199} { - left: 19.5rem; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - padding-left: 3rem; - } - - @media ${({ theme }) => theme.responsive.below599} { - padding-top: 2rem; - padding-bottom: 2rem; - padding-left: 2rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-bottom: 3rem; - padding-left: 0; - } - } - - &.article3 { - position: relative; - grid-area: article3; - padding-right: 15rem; - - &:before { - content: ''; - position: absolute; - top: -4.7rem; - right: 24.1rem; - width: 36rem; - height: 0.2rem; - background-color: ${({ theme }) => - `rgba(${theme.colors.primary.rgb}, 0.5)`}; - transform: rotate(-40deg); - - @media ${({ theme }) => theme.responsive.below1199} { - right: 5.7rem; - } - - @media ${({ theme }) => theme.responsive.below899} { - content: none; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - padding-right: 3rem; - } - - @media ${({ theme }) => theme.responsive.below599} { - padding-top: 2rem; - padding-right: 2rem; - padding-bottom: 2rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-right: 0; - padding-bottom: 3rem; - } - } - - @media ${({ theme }) => theme.responsive.below599} { - padding-top: 2rem; - padding-bottom: 2rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-bottom: 3rem; - } -`; - -export const ArticleDescriptionContainer = styled.div` - display: flex; - flex-direction: column; - align-items: center; -`; - -export const ArticleImageWrapper = styled(motion.div).attrs( - ({ className }) => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - rotate: 0, - scale: 0, - }, - hovering: { - rotate: !className?.includes('article2') ? -720 : 720, - scale: 1.12, - transition: { - type: 'spring', - bounce: 0.4, - duration: 0.2, - }, - }, - nonHovering: { - rotate: 0, - scale: 1, - }, - visible: { - opacity: 1, - rotate: !className?.includes('article2') ? 720 : -720, - scale: 1, - transition: { - type: 'spring', - bounce: 0.4, - duration: 0.5, - }, - }, - }, - }) -)` - margin-bottom: 2rem; -`; - -export const ArticleImageLink = styled.a``; - -export const ArticleTitle = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - }, - visible: { - opacity: 1, - transition: { duration: 0.3 }, - }, - }, -}))``; - -export const ArticleTitleLink = styled.a` - text-align: center; - text-decoration: none; - - & h3 { - max-width: 30.1rem; - max-height: 3.4rem; - overflow: hidden; - text-overflow: ellipsis; - word-wrap: break-word; - - @media ${({ theme }) => theme.responsive.below899} { - max-height: 2.5rem; - } - } -`; diff --git a/web/components/home/TalkSection/TalkContainer.tsx b/web/components/home/TalkSection/TalkContainer.tsx deleted file mode 100644 index 5cc798db..00000000 --- a/web/components/home/TalkSection/TalkContainer.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { FC, useEffect } from 'react'; -import { useAnimation } from 'framer-motion'; -import { useInView } from 'react-intersection-observer'; - -import GlassTriangle from 'common/components/GlassTriangle'; - -import { useIsHovering } from 'common/hooks'; - -import HeadingTertiary from 'common/typography/HeadingTertiary'; - -import { - TalkContainerStyle, - TalkDescriptionContainer, - TalkImageLink, - TalkImageWrapper, - TalkTitle, - TalkTitleLink, -} from './styles'; - -export interface ITalkContainer { - finishIsFirstMount: boolean; - reverseClass?: string; - talkImageAlt: string; - talkImageSrc: string; - talkLinkPath: string; - talkTitle: string; -} - -const TalkContainer: FC = ({ - finishIsFirstMount, - reverseClass, - talkImageAlt, - talkImageSrc, - talkLinkPath, - talkTitle, -}) => { - const titleAnimateControls = useAnimation(); - const { inView: titleInView, ref: titleRef } = useInView(); - - const imageAnimateControls = useAnimation(); - const { inView: imageInView, ref: imageRef } = useInView(); - - const [isTitleLinkHovering, setIsTitleLinkHovering] = useIsHovering(); - const [isImageLinkHovering, setIsImageLinkHovering] = useIsHovering(); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && titleInView) { - titleAnimateControls.start('visible'); - } - }, 700); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, titleAnimateControls, titleInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && imageInView) { - imageAnimateControls.start('visible'); - } - }, 1000); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, imageAnimateControls, imageInView]); - - return ( - - - setIsImageLinkHovering(true)} - onHoverEnd={() => setIsImageLinkHovering(false)} - ref={imageRef} - > - - - - - - - setIsTitleLinkHovering(true)} - onMouseLeave={() => setIsTitleLinkHovering(false)} - > - - {talkTitle} - - - - - - ); -}; - -export default TalkContainer; diff --git a/web/components/home/TalkSection/index.tsx b/web/components/home/TalkSection/index.tsx deleted file mode 100644 index 93d612b3..00000000 --- a/web/components/home/TalkSection/index.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { FC, useEffect } from 'react'; -import { useAnimation } from 'framer-motion'; -import { useInView } from 'react-intersection-observer'; - -import LineSeparator from 'common/components/LineSeparator'; - -import HeadingSecondary from 'common/typography/HeadingSecondary'; - -import { Container, Section, SectionTitle } from './styles'; -import TalkContainer, { ITalkContainer } from './TalkContainer'; - -const talkContainerData: Omit[] = [ - { - talkImageAlt: 'Django Part 1 Presentation', - talkImageSrc: '/talk-presentation1.png', - talkLinkPath: 'https://vimeo.com/659389997', - talkTitle: - '"Django Magic: MVT" Developer Connect Presentation @ Bitwise Industries', - }, - { - reverseClass: 'reverse', - talkImageAlt: 'Redux Toolkit Presentation', - talkImageSrc: '/talk-presentation2.png', - talkLinkPath: - 'https://us02web.zoom.us/rec/play/coJ_z0w_gxEy5gP6iFtG1FLEuzuWey7dumrFH2xZ3rQQwGCBdy91Exb3Jyu2odOXj39rp-WKgEmPad2J.9De7TgEACj6xPmx3?continueMode=true', - talkTitle: - '"Converting Legacy Redux To Redux Toolkit" Developer Connect Presentation @ Bitwise Industries', - }, -]; - -interface ITalkSection { - finishIsFirstMount: boolean; -} - -const TalkSection: FC = ({ finishIsFirstMount }) => { - const controls = useAnimation(); - const { inView, ref } = useInView(); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && inView) { - controls.start('visible'); - } - }, 500); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, controls, inView]); - - return ( -
- - - Talks - - - - - - - {talkContainerData.map((talkData) => ( - - - - ))} - -
- ); -}; - -export default TalkSection; diff --git a/web/components/home/TalkSection/styles.ts b/web/components/home/TalkSection/styles.ts deleted file mode 100644 index 41ed0677..00000000 --- a/web/components/home/TalkSection/styles.ts +++ /dev/null @@ -1,141 +0,0 @@ -import styled from 'styled-components'; -import { motion } from 'framer-motion'; - -// TALK SECTION -export const Section = styled.section``; - -export const SectionTitle = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - y: 10, - }, - visible: { - opacity: 1, - y: 0, - transition: { duration: 0.5 }, - }, - }, -}))` - text-align: center; -`; - -export const Container = styled.div` - display: flex; - padding-top: 4rem; - - @media ${({ theme }) => theme.responsive.below899} { - flex-direction: column; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-top: 1rem; - } -`; - -// TALK CONTAINER -export const TalkContainerStyle = styled.div` - padding-top: 5rem; - padding-bottom: 5rem; - - @media ${({ theme }) => theme.responsive.below899} { - padding-top: 5rem; - padding-bottom: 5rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-bottom: 1rem; - } - - @media ${({ theme }) => theme.responsive.below379} { - padding-top: 3rem; - } -`; - -export const TalkDescriptionContainer = styled.div` - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - - &.reverse { - flex-direction: column-reverse; - padding-top: 10rem; - - @media ${({ theme }) => theme.responsive.below899} { - padding-top: 0; - } - } - - @media ${({ theme }) => theme.responsive.below599} { - overflow-x: hidden; - } -`; - -export const TalkImageWrapper = styled(motion.div).attrs(({ className }) => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - x: className?.includes('reverse') ? 100 : -100, - }, - visible: { - opacity: 1, - x: 0, - transition: { - type: 'spring', - bounce: 0.4, - duration: 0.5, - }, - }, - }, -}))` - margin-bottom: 2rem; - - &.reverse { - margin-top: 2rem; - margin-bottom: 0; - } -`; - -export const TalkImageLink = styled.a``; - -export const TalkTitle = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - }, - visible: { - opacity: 1, - transition: { duration: 0.3 }, - }, - }, -}))``; - -export const TalkTitleLink = styled.a` - padding-left: 7rem; - padding-right: 7rem; - text-decoration: none; - - @media ${({ theme }) => theme.responsive.below1199} { - padding-left: 4rem; - padding-right: 4rem; - } - - @media ${({ theme }) => theme.responsive.below899} { - padding-left: 7rem; - padding-right: 7rem; - } - - @media ${({ theme }) => theme.responsive.below599} { - padding-left: 2rem; - padding-right: 2rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-left: 1rem; - padding-right: 1rem; - } -`; diff --git a/web/components/home/WorkSection/WorkContainer.tsx b/web/components/home/WorkSection/WorkContainer.tsx deleted file mode 100644 index c4e2250e..00000000 --- a/web/components/home/WorkSection/WorkContainer.tsx +++ /dev/null @@ -1,302 +0,0 @@ -import { FC, useEffect } from 'react'; -import Link from 'next/link'; -import { useAnimation } from 'framer-motion'; -import { useInView } from 'react-intersection-observer'; - -import GlassRectangle from 'common/components/GlassRectangle'; - -import { useIsHovering } from 'common/hooks'; - -import HeadingTertiary from 'common/typography/HeadingTertiary'; -import Paragraph from 'common/typography/Paragraph'; - -import { isHoveringOverall } from 'utils'; - -import { - WorkContainerStyle, - WorkDescription, - WorkDescriptionContainer, - WorkExternalLink, - WorkImageLink, - WorkImageWrapper, - WorkLink, - WorkLinkWrapper, - WorkTitle, - WorkTitleLink, -} from './styles'; - -export interface IWorkContainer { - finishIsFirstMount: boolean; - isExploreLinkHovering: boolean; - reverseClass?: string; - workDescription: string; - workExternalLinkPath: string; - workImageAlt: string; - workImageSrc: string; - workLinkPath: string; - workTitle: string; -} - -const WorkContainer: FC = ({ - finishIsFirstMount, - isExploreLinkHovering, - reverseClass, - workDescription, - workExternalLinkPath, - workImageAlt, - workImageSrc, - workLinkPath, - workTitle, -}) => { - const titleAnimateControls = useAnimation(); - const { inView: titleInView, ref: titleRef } = useInView(); - - const descriptionAnimateControls = useAnimation(); - const { inView: descriptionInView, ref: descriptionRef } = useInView(); - - const externalLinkAnimateControls = useAnimation(); - const { inView: externalLinkInView, ref: externalLinkRef } = useInView(); - - const linkAnimateControls = useAnimation(); - const { inView: linkInView, ref: linkRef } = useInView(); - - const imageAnimateControls = useAnimation(); - const { inView: imageInView, ref: imageRef } = useInView(); - - const [isTitleLinkHovering, setIsTitleLinkHovering] = useIsHovering(); - const [isImageLinkHovering, setIsImageLinkHovering] = useIsHovering(); - const [isWorkLinkHovering, setIsWorkLinkHovering] = useIsHovering(); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && titleInView) { - titleAnimateControls.start('visible'); - } - }, 600); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, titleAnimateControls, titleInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && descriptionInView) { - descriptionAnimateControls.start('visible'); - } - }, 800); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, descriptionAnimateControls, descriptionInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && externalLinkInView) { - externalLinkAnimateControls.start('visible'); - } - }, 1700); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, externalLinkAnimateControls, externalLinkInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && linkInView) { - linkAnimateControls.start('visible'); - } - }, 1700); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, linkAnimateControls, linkInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && imageInView) { - imageAnimateControls.start('visible'); - } - }, 1500); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, imageAnimateControls, imageInView]); - - useEffect(() => { - if ( - !finishIsFirstMount && - isHoveringOverall( - isImageLinkHovering, - isWorkLinkHovering, - isExploreLinkHovering - ) - ) { - imageAnimateControls.start('hovering'); - } else { - imageAnimateControls.start('nonHovering'); - } - }, [ - finishIsFirstMount, - isImageLinkHovering, - isWorkLinkHovering, - isExploreLinkHovering, - imageAnimateControls, - ]); - - return ( - - - - setIsTitleLinkHovering(true)} - onMouseLeave={() => setIsTitleLinkHovering(false)} - > - - {workTitle} - - - - - - - - - {workDescription} - - - - {workExternalLinkPath.length > 0 && ( - - - App - - - )} - - - - setIsWorkLinkHovering(true)} - onMouseLeave={() => setIsWorkLinkHovering(false)} - > - About - - - - - - setIsImageLinkHovering(true)} - onHoverEnd={() => setIsImageLinkHovering(false)} - ref={imageRef} - > - - - - - - - - ); -}; - -export default WorkContainer; diff --git a/web/components/home/WorkSection/index.tsx b/web/components/home/WorkSection/index.tsx deleted file mode 100644 index f6190a68..00000000 --- a/web/components/home/WorkSection/index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import React, { FC, useEffect } from 'react'; -import Link from 'next/link'; -import { useAnimation } from 'framer-motion'; -import { useInView } from 'react-intersection-observer'; - -import LineSeparator from 'common/components/LineSeparator'; - -import { useIsHovering } from 'common/hooks'; - -import HeadingSecondary from 'common/typography/HeadingSecondary'; - -import { IWork } from 'common/models'; - -import environment from 'environment'; - -import { - Container, - ExploreMoreLink, - ExploreMoreWrapper, - Section, - SectionTitle, -} from './styles'; -import WorkContainer from './WorkContainer'; - -type TWorksData = Pick< - IWork, - | 'category' - | 'description' - | 'first_released_at' - | 'id' - | 'logo_image' - | 'title' - | 'uuid' - | 'work_url' -> & { - meta: Pick; -}; - -interface IWorkSection { - finishIsFirstMount: boolean; - worksData: TWorksData[]; -} - -const WorkSection: FC = ({ finishIsFirstMount, worksData }) => { - const titleAnimateControls = useAnimation(); - const { inView: titleInView, ref: titleRef } = useInView(); - - const viewMoreAnimateControls = useAnimation(); - const { inView: viewMoreInView, ref: viewMoreRef } = useInView(); - - const [isHovering, setIsHovering] = useIsHovering(); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && titleInView) { - titleAnimateControls.start('visible'); - } - }, 500); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, titleAnimateControls, titleInView]); - - useEffect(() => { - const timer = setTimeout(() => { - if (!finishIsFirstMount && viewMoreInView) { - viewMoreAnimateControls.start('visible'); - } - }, 2000); - - return () => clearTimeout(timer); - }, [finishIsFirstMount, viewMoreAnimateControls, viewMoreInView]); - - return ( -
- - - Work - - - - - {worksData.length > 0 && - worksData.slice(0, 3).map((workData, workIndex) => ( - - - - - - ))} - - - - - setIsHovering(true)} - onMouseLeave={() => setIsHovering(false)} - > - Explore all work - - - -
- ); -}; - -export default WorkSection; diff --git a/web/components/home/WorkSection/styles.ts b/web/components/home/WorkSection/styles.ts deleted file mode 100644 index 09d3cf4e..00000000 --- a/web/components/home/WorkSection/styles.ts +++ /dev/null @@ -1,343 +0,0 @@ -import styled from 'styled-components'; -import { motion } from 'framer-motion'; - -// WORK SECTION -export const Section = styled.section``; - -export const SectionTitle = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - y: 10, - }, - visible: { - opacity: 1, - y: 0, - transition: { duration: 0.5 }, - }, - }, -}))` - text-align: right; -`; - -export const Container = styled.div` - display: flex; - flex-direction: column; - padding-top: 4rem; - - @media ${({ theme }) => theme.responsive.below1199} { - padding-top: 2.5rem; - } - - @media ${({ theme }) => theme.responsive.below899} { - padding-top: 2.3rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding-top: 1rem; - } -`; - -export const ExploreMoreWrapper = styled(motion.div).attrs(() => ({ - variants: { - visible: { - rotate: [0, 15, 7.5, 15, 0], - transition: { - duration: 1, - ease: 'easeInOut', - times: [0, 0.2, 0.5, 0.8, 1], - }, - }, - }, -}))` - margin-top: 5rem; - text-align: center; - - @media ${({ theme }) => theme.responsive.below599} { - margin-top: 2rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - margin-top: 1rem; - } -`; - -export const ExploreMoreLink = styled.a` - font-size: 2rem; - font-weight: 700; - color: ${({ theme }) => theme.colors.primary.hex}; - text-decoration: none; - - &:hover { - text-decoration: underline; - cursor: pointer; - opacity: 0.9; - } - - @media ${({ theme }) => theme.responsive.below479} { - font-size: 1.7rem; - } -`; - -// WORK CONTAINER -export const WorkContainerStyle = styled.div` - display: flex; - justify-content: space-between; - margin-top: 9rem; - margin-bottom: 9rem; - padding-top: 1rem; - padding-bottom: 1rem; - - &.reverse { - flex-direction: row-reverse; - - @media ${({ theme }) => theme.responsive.below899} { - flex-direction: column-reverse; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - flex-direction: column; - margin-top: 5rem; - margin-bottom: 5rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - margin-top: 3rem; - margin-bottom: 3rem; - } - - @media ${({ theme }) => theme.responsive.below379} { - margin-top: 2rem; - margin-bottom: 2rem; - } -`; - -export const WorkTitle = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - }, - visible: { - opacity: 1, - transition: { duration: 0.3 }, - }, - }, -}))` - width: 35%; - - &.reverse { - text-align: right; - - @media ${({ theme }) => theme.responsive.below899} { - text-align: center; - } - - @media ${({ theme }) => theme.responsive.below379} { - text-align: left; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - width: 100%; - padding: 1rem 4.5rem; - text-align: center; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding: 1rem 1rem; - } - - @media ${({ theme }) => theme.responsive.below379} { - text-align: left; - } -`; - -export const WorkTitleLink = styled.a` - text-decoration: none; -`; - -export const WorkDescriptionContainer = styled.div` - display: flex; - flex-direction: column; - width: 100%; - padding: 2rem 4.5rem; - - @media ${({ theme }) => theme.responsive.below899} { - padding: 1rem 4.5rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding: 1rem 1rem; - } -`; - -export const WorkDescription = styled(motion.div).attrs(() => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - }, - visible: { - opacity: 1, - transition: { duration: 0.3 }, - }, - }, -}))` - margin-bottom: 2rem; - - &.reverse { - text-align: right; - - @media ${({ theme }) => theme.responsive.below899} { - text-align: center; - } - - @media ${({ theme }) => theme.responsive.below379} { - margin-bottom: 1rem; - text-align: left; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - text-align: center; - } - - @media ${({ theme }) => theme.responsive.below379} { - text-align: left; - } -`; - -export const WorkLinkWrapper = styled(motion.div).attrs(({ className }) => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - y: className?.includes('reverse') ? -100 : -150, - }, - visible: { - opacity: 1, - y: 0, - transition: { - type: 'spring', - bounce: 0.4, - duration: 0.5, - }, - }, - }, -}))` - text-align: right; - - &.external-link { - margin-bottom: 2rem; - } - - &.reverse { - text-align: left; - - @media ${({ theme }) => theme.responsive.below899} { - text-align: center; - } - - @media ${({ theme }) => theme.responsive.below379} { - order: -1; - margin-bottom: 2rem; - text-align: right; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - padding: 1rem 4.5rem; - text-align: center; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding: 0rem 1rem; - } - - @media ${({ theme }) => theme.responsive.below379} { - text-align: right; - } -`; - -export const WorkLink = styled.a` - font-size: ${({ theme }) => theme.fonts.paragraph}; - font-weight: 700; - color: ${({ theme }) => theme.colors.primary.hex}; - text-decoration: none; - - &:hover { - opacity: 0.7; - } -`; - -export const WorkExternalLink = styled.a` - font-size: ${({ theme }) => theme.fonts.paragraph}; - font-weight: 700; - color: ${({ theme }) => theme.colors.primary.hex}; - text-decoration: none; - - &:hover { - opacity: 0.7; - } -`; - -export const WorkImageWrapper = styled(motion.div).attrs(({ className }) => ({ - initial: 'hidden', - variants: { - hidden: { - opacity: 0, - y: className?.includes('reverse') ? -100 : -150, - }, - hovering: { - rotate: className?.includes('reverse') ? 5 : -5, - scale: 1.01, - transition: { - type: 'spring', - bounce: 0.4, - duration: 0.2, - }, - }, - nonHovering: { - rotate: 0, - scale: 1, - }, - visible: { - opacity: 1, - y: 0, - transition: { - type: 'spring', - bounce: 0.4, - duration: 0.5, - }, - }, - }, -}))` - width: 18%; - margin-left: 3rem; - - &.reverse { - margin-left: 0; - margin-right: 3rem; - - @media ${({ theme }) => theme.responsive.below899} { - margin-right: auto; - margin-left: auto; - } - } - - @media ${({ theme }) => theme.responsive.below899} { - width: 85%; - margin-right: auto; - margin-left: auto; - padding: 1rem 4.5rem; - } - - @media ${({ theme }) => theme.responsive.below479} { - padding: 1rem 1rem; - } -`; - -export const WorkImageLink = styled.a``; diff --git a/web/components/home/index.ts b/web/components/home/index.ts index 5b12aa42..66d9da93 100644 --- a/web/components/home/index.ts +++ b/web/components/home/index.ts @@ -1,6 +1,5 @@ export { default as AboutImage } from './AboutImage'; export { default as AboutSection } from './AboutSection'; -export { default as ArticleSection } from './ArticleSection'; export { default as BeliefsSection } from './BeliefsSection'; export { default as Col } from './Col'; export { default as ExperienceSection } from './ExperienceSection'; @@ -8,5 +7,3 @@ export { default as HeroBanner } from './HeroBanner'; export { default as InitialSiteTransition } from './InitialSiteTransition'; export { default as MoreSection } from './MoreSection'; export { default as Row } from './Row'; -export { default as TalkSection } from './TalkSection'; -export { default as WorkSection } from './WorkSection'; From 3cb4854898d3c85acded5b16b30e896fb12619a3 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 12:57:08 -0700 Subject: [PATCH 05/11] refactor(item-data): comment out about page until further maintenance --- web/common/components/ItemLink/itemData.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/web/common/components/ItemLink/itemData.ts b/web/common/components/ItemLink/itemData.ts index d038543e..c99cf7c7 100644 --- a/web/common/components/ItemLink/itemData.ts +++ b/web/common/components/ItemLink/itemData.ts @@ -15,11 +15,11 @@ const itemData: TItemData[] = [ title: 'Articles', path: '/articles', }, - { - id: '4c5c324a-92ed-4575-a731-25370c21379a', - title: 'About', - path: '/about', - }, + // { + // id: '4c5c324a-92ed-4575-a731-25370c21379a', + // title: 'About', + // path: '/about', + // }, ]; export default itemData; From 0a852d25e6ddcde35ac0e02d6d65051832d176b3 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 13:01:25 -0700 Subject: [PATCH 06/11] refactor(about-page): remove about page until further maintenance --- web/pages/about/index.tsx | 116 -------------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 web/pages/about/index.tsx diff --git a/web/pages/about/index.tsx b/web/pages/about/index.tsx deleted file mode 100644 index a28ab5e6..00000000 --- a/web/pages/about/index.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import type { NextPage } from 'next'; -import Head from 'next/head'; - -import LineSeparator from 'common/components/LineSeparator'; -import LoadingIcon from 'common/components/LoadingIcon'; -import PageContainer from 'common/components/PageContainer'; -import WithLoadingOverlay from 'common/components/WithLoadingOverlay'; - -import { - AboutImage, - AboutSection, - BeliefsSection, - Col, - ExperienceSection, - MoreSection, - Row, -} from 'components/about'; - -import environment from 'environment'; - -const About: NextPage = () => ( - <> - - About | Elias Gutierrez, Software Engineer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } - isLoading={false} - loaderComponent={} - loaderDuration={1000} - /> - - -); - -export default About; From 55b9f9abdabd44b00592e6c5c7376c8dff4d82db Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 13:30:14 -0700 Subject: [PATCH 07/11] refactor(about-pic): change file name --- web/public/{about-pic.jpeg => about-pic1.jpg} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename web/public/{about-pic.jpeg => about-pic1.jpg} (100%) diff --git a/web/public/about-pic.jpeg b/web/public/about-pic1.jpg similarity index 100% rename from web/public/about-pic.jpeg rename to web/public/about-pic1.jpg From 9be95182c804ce7acabe109012cddc5d7dce3e89 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 13:31:43 -0700 Subject: [PATCH 08/11] refactor(about-pic): change file name --- web/components/home/AboutImage/index.tsx | 2 +- web/public/{about-pic1.jpg => about-pic1.jpeg} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename web/public/{about-pic1.jpg => about-pic1.jpeg} (100%) diff --git a/web/components/home/AboutImage/index.tsx b/web/components/home/AboutImage/index.tsx index 623d1a82..4a491509 100644 --- a/web/components/home/AboutImage/index.tsx +++ b/web/components/home/AboutImage/index.tsx @@ -36,7 +36,7 @@ const AboutImage: FC = () => { glassLightShadowHorizontalOffset={-0.3} glassLightShadowVerticalOffset={-0.3} imageAlt="Professional image of Elias Gutierrez" - imageSrc="/about-pic.jpeg" + imageSrc="/about-pic1.jpeg" opacity={1} /> diff --git a/web/public/about-pic1.jpg b/web/public/about-pic1.jpeg similarity index 100% rename from web/public/about-pic1.jpg rename to web/public/about-pic1.jpeg From ff56042ea9018404c11ebc787a9fcfa60f769216 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 13:35:54 -0700 Subject: [PATCH 09/11] feat(about-image): make the image source dynamic --- web/components/home/AboutImage/index.tsx | 8 ++++++-- web/pages/index.tsx | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/web/components/home/AboutImage/index.tsx b/web/components/home/AboutImage/index.tsx index 4a491509..ae4f06dd 100644 --- a/web/components/home/AboutImage/index.tsx +++ b/web/components/home/AboutImage/index.tsx @@ -6,7 +6,11 @@ import GlassRectangle from 'common/components/GlassRectangle'; import { ImageWrapper } from './styles'; -const AboutImage: FC = () => { +interface IAboutImageProps { + imgSrc: string; +} + +const AboutImage: FC = ({ imgSrc }) => { const imageAnimateControls = useAnimation(); const { inView: imageInView, ref: imageRef } = useInView(); @@ -36,7 +40,7 @@ const AboutImage: FC = () => { glassLightShadowHorizontalOffset={-0.3} glassLightShadowVerticalOffset={-0.3} imageAlt="Professional image of Elias Gutierrez" - imageSrc="/about-pic1.jpeg" + imageSrc={imgSrc} opacity={1} /> diff --git a/web/pages/index.tsx b/web/pages/index.tsx index 7d614f83..0ece3d2a 100644 --- a/web/pages/index.tsx +++ b/web/pages/index.tsx @@ -146,7 +146,7 @@ const Home: NextPage = ({ isFirstMount }) => { - + From bd96aefac07453f5fc7a6265ed7ef5c54112cf53 Mon Sep 17 00:00:00 2001 From: Elias Gutierrez Date: Sun, 8 Sep 2024 14:04:14 -0700 Subject: [PATCH 10/11] feat(about-pic): add new image --- web/public/about-pic3.jpg | Bin 0 -> 114157 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 web/public/about-pic3.jpg diff --git a/web/public/about-pic3.jpg b/web/public/about-pic3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c4b1504cbcb41d1ef20fbdc1fac6fb5b77e264c GIT binary patch literal 114157 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

8}4 z9|NfkfEWQ2&4K>5h#5$}5wcrX3l#&WZOtmUW{UEZ6qT#exD&*+gbS#mDl$LsOlr3P zzKyJupRGMl(*F9u%g$pRD%!}9wUiIMH8q>tp1qeYr=-1Q^b-|&I<#6nW*q8#`?<)l z&7enUTxATvS}2E>?)2%&Ap5<08L3RnrhQBdX^Fz4VEMDhX9ppg~$DbQn;S#}`w`4}&WEKrPB)j6d zH*{l|68rw)8$D9Lltmk?{o`z^dv8+F^bs|E!*>1ldxr2BmP?w6%zK)rxuGI~m4bM> zhj{N8b=oRIfwtF_mxZs47^ev6Fa1PH&X^%cd#ryw=Q@JDNw`@zpyjy*Y6Hcv$lghN zvEdewGHdqS2`q6OkTP1T^ykL9tq5&C@aDn8CX}%8^uLXF{?Wc>x%^+KD#aWzG^G)w zk~^r4AOGC=>tQj=B+4z5n`3xVMPcO6jU=VDkkNAHDT!{S+i!1)U>s?3_lm)Ngu`j=h72u>tw zL{lxe?lcfH2uv!K7c$VgEkt7pFvdYv5S73RYs&0c{=x$bpF3`p@$HF-`zexE=`iEA z&u7|eJR5pDZjhplfjoOw(*b^*SkTa2(pp%=RNb281y}!v72y9X$c9I|6?`0@K=+k4tJiWG#>3&IRLU$Hy4P< zN=~kPd?&-bEpiHpzo~>*QU~!TCQ)9A=)OAzu^MOprs)BuRcb#AQaF0d!K+$H%Q&*5 zJvLmZKqxvL<=J+TjA7EDTQ0jy`Or%#m6K+&NpN(=FR^!q$~h_uQk<&#D`veS<@5&Q z3xpW|esO#t{UI&PNx8bi7yb3vZH#V3o!zOWcKGY)fN6TYMT6*|hME*)hP zM|y#08tJnHT9k%KmkJQX<=k0-GFjBbguik6pJtIwMK5{UAYKDNg&kPjsp{%g%Kun7 zVHML{+1wUc^AC7EE?+Ty-^`a{17I?$OGA_Hr#OmSe@=HYiyVX$jzO`{wV${u5g zotLWytXRMuguAjjv#{rz`1;DUdnnJB@=|uzF*3hH26f|94^$WOmQF<`38<72y!&`+ zo}ems9~;YPxx1ZbZt6QJ?ijv$P;#4HADGk6M!BEyfbFIQjzC>v%3po#Gl_bPdNjc) zx$}%0WSpI58i#(pwP@5+(W3jDgJ@ype2*bEmGZ8j=RY)8TLOQwl!AC5HA&?L8q$gP z&_zru*AaQjp^K2G9PNu1H5LVKbXydo4baUq= zo_bUTj=n|sC?9D(yD8(RCzP73qa7+p>zs0v@y+AbB>h*F%pl(d^iY7VoNU$PJlBa$ z<+3=GcXWySLl)~W?z`5l%Kadom)-Q`p~IcfYQN{ZRRp#d0pl^gNe6Z`w04h}nV3pP z8p|z@wJ+G1@pA9!bjFXJ3RQ*jSZUlyd(R6;2Y9Q5WN`iHH}el?L&{^q>^THt$fEYRh*`5~b$S{vSo>{?BCpKkz<6oAWm3 z^JW`!Hs@1i8-_WbBQbNPkVJ(Wa~N~j!8wN^QEs)7hzdDu4&~5YREkh4)skD1y1%}E z!S#5&f4E-9=kq1n<~59Ww&3a28Sd#D^ZiWRiQLMOtf7!mPoJVXZrQMMOU}zYgTjc;ubcpL0mc@*Bbc=QEVp@-nq~#h2#K8~i36~wiG%ur9?ilre z4gEsc=r!7vn@0SQN$C@GD2*SS_I8h_weoeN*`uCnU#&KBbR)Sbj2lkL_givKyr=<^ zZvd|m_jERlBG_1#Yk4`B=#W;az7m7`%1-W!av#@4}hFNT8Ge?{v|1`&#n5amR4}Y zgAvDFZx5}QcnOJJWDE2gJIySP0vp#oowr?R8QB?mrpZbI&m~9Qsf>KThAI+u_%N21Nv1e z!V$y`a4u|-SKejej8*kSXvdFE-&V*jQc<)~x}?gCjM}!orVjs6tk`j_23a5o z7*hy{r+ea^B!ugV6Il!!(z)zGptapMt6f{91DVHpEa-Fz>b;cpa4YsD1Rdc5zmYgi zpoewd5HkKipLFaFgeEIBQ5e^SdhTf7ih6K@g-#Fld`MR%*CpnYhkZSCmh7j8Ymv*8 zpccuG-6W;gA(CHxOHbSt8TeBH)cqmZG4=zg;?Dl*s>1kUg$pSDw?w#QL+HEmFyKr> zSZ2RV#pB};WdGzICh}(vocgUa1z}IP;`_b*y@QaViG5-pdb6^{bu$(gP-E22bQM1{ zF-x`)XlX;J6iaMhfI0y_mVF7s=@(c@AKa|>(&B#gDjwl3Ir~&$0cmj2zrKk{Y(>gf zRB61h8#A*Ac#$q&Ino2|WDrJ?QTHqOZ@z_z5o6`O4j}7OYSW7LRlSRqtG@iS^6FOQ zIvKL=e+B+F_zPi7;{;iI@MhjZhu?mL!B(Oq_djh@t@E6o&628OW_UwN(_Fp!bryl zNhSItsy55-$4u`$6xde(aqjkZ^>4Iv#tZCqgUiRHKg)9M!rH5w>K2d|Z$ze5$>m2{d1bBQd)aevjg7lviv#%_HG0k=FFPGhNyP?3PuGIC z3;&fXuNb6#7<~k5-~m%jmE*sUCjJ9L_SNjE+v9@%1}=-t<-C#+t0|&NjXvOhEes7z z`-RMfj1FsjpQS+qA?%i>RrDF+O?E~z{G?A|?oc1uA}QId(?Rp@rcYV8X78JA({I-T zU~)1*XLI_dPlg<8nPsn~xQXCw0dv%cY2`NMwHVp1KT4ZFzB%YVBzGBopS@YQb|vm@ zQK?4B`J0&h@V$$ZAof}{N3hSCmx$;sis%jX^+Fs6O8fy7rNUo=84xLscGDN#S}Lt= zGX(iYDvrR(*+CO>4Ju}e1t9ruTlXc*Aq7WIr>_OyZz1&kHA2%4Db$kR8uL+kd*S&~ zgx>7@0MeHG{Po-a6@$aPQ73ED;4y9?re>GYb#wmoV7i!@ed&@L+{(KsBiR=_*m9Cd0S_kN?4+>oU=> z=|Jm;jY_SzyF*~E6c`J3sAt91JyAeTjMYt`LrDfMCOwWI_-uE!_$1g)!>ZEN{nfvE zZ8oscPonl{l54N}qzOv(td8vGZ!I?67-HN}x}TF}Jj3H1qi1oiCe{r1cUDBt&SqV5 z<#+;N;)H!$d86<|lnh^a1*S^bb;%jQk#KC? zFwpjPIv;CO`0T$U@bI#J0Pl-|hBe9K@V?Kw-El5AX{CtHeabLEr~q1m&*G+o%&;2G zK(NcId=dUYR8I-6_d-V3_=v9+2$j>Kaf)>Q*`uv|oV!&dL__2Pmh>8Q;kV!MdDjyd z(y3^8CZRUp(ub16bvjvmmK$JqCb*2#&V7-NPD4yW4Ti2Jhqivo2L&VX2LSj*SJw0A z{P@K;PA47bEnn6j?$iiW2%_|HZ_@>rE7dcx$8U1tYgM-=-GIHzcM;#ttx;=jq@yu7 zk?2_YzBgl`e0byvI1hN+D=1 z;obm0QGu^TBg??>HB>Q|w>k9=m%*RjeYZaIZ7X$5_}E`iH@cZLq(v*+%p~vrCA~vS zVH9HVeWH1jw=E3;cRL*zk(z&@Y@K5=TdCBFiU-zdnrI|hS*2+z#AC}@FE6Q?_B>pi zpHX^`OxZ14F1)jH{)}OrsOdGfX+6N?U;q@BMqaR^3O>TeOoHi?@!FLGBn{VqJ1DSm zgg{%Bj^>vZaLnsI`)dayYHem_eB?{+OHK&<9}7(gEKPH1kr(f><)B@ih>5Q>Td#Cc zQXo}Q=y-;K*xYYLxh^@Ncciz}9IH6T<5S_bKd`*1PA1@kr&)S50$X96mFWfouHEhJlwwqM{Q1UV=F@t71jMjB;C`@03WPd1UrdU+GI3g@D~jl7ptBQS9IC4 zWYEp^q@Enh3055qUCKW9OP4)* z1(p(1&sr@df=nI~`I?w&HjHoPx;T%%q_z0`vN6x@Fm$A^Ev*zs*O3+%UC~~Tov7du z-5ouHeJGZv?Vs%h%Nl-x@#HYK{pZ(stngx!u*lIuhZ11#ueD(B@JEBvVc(=3X#`I- zx)x`zK)4v6AF@P0X3uhx#5rX{Q7|qT(&q3I3beE>#JCH}Vs`=~e((c#To{`VKzEc( zdo{D&69lQP_mKEfS*1M~T^ul;dGw#{Oo;M=-qbt9?4lCGZ0{odlDg01(N#N*_+BnZ zfXoj(0O$jar&hx^1Pk_e@T;fZE8Np;B^Y&ZavX)_cC8Q$feYxxZA;^!42IX-MH&yA zYVb>X2Rh99TM(YXW4djfhjnk43$i>f{xW2eB8H01Stb05O5f|FpCaIA3uS0yy5qbw z4KpMU!Z}5^6%8!~Yc%wAkspjQDFNgfAVs*)K7z)^(RwjZpk}s?4ZubuhoVk~Lr)y_ zv-hBZz_+4UkWK0~+VLT!P8}mqn6r>rVGO!14q89YZM|Lnf?meH(TH`mlUMZCxR$K0 z@#m4Ar_EmrZi*0vW|b} z*+a(50m0TGCVV@*7=$VUoDC6Et`VuOx1R#DO0c@CEMSe8$@u3IN*Az>=^9~*$6wer zm@_LCZS<(r!rL%MMfFn8itYQuVkS?UzE-Tiu~rp`7*xtu^@Sd@^Gz?DV)vP$ zH|=xB3*whF2NYv~+dz0N4OM;*koLQ1AJ|`eagv#hSpc|8AU}Jn{$9^72E@zm9dou(OKpoO@j}0{9K%~_EdjTjEO9zmFt~S zj%$YcbS0Z`Qtho#pl&quzax=0`!<70ztogqh<@U}SjCU%#+*_rZDcQA))MTkL7b-O zQF+BaCvRsdK{Hr7p-5=xKq+REt~1U9I7aSR~e=|PigSA%J}0V2%HqQ zQD6Wz0O^h1jTox8zXX4sA)>_}n#gDItF(Askdnn~WGcu;ooG$Aa!v8&2RR!NU0Yzw zMaD|8uxp-&k`U*nvgeZlffdlgSbl9zmE*F4Rknq> zJ8n4_>G0v%X4!pB6F28)7XG?{N)3iqx%$Uqw`Ps%1?*bWU?VL&DZN`nn3uFvhr;cY zdiGNn1eI)NZRZ1iVsmcgfs(?NbM-~!oL#JNL7fWvcD@snvzZQV5eR%B-`9WunVhQ_ z?+X$3vT6RH%-6E=$X6(=g}>S<^sOTpLeJ%$K*$({pG^7U+<-)^*DI{@psr`P-6K%h zHx|{pCc`5wbxr3Cxc|}_>aTeGbo*se4$ik(cFrNq*+v|sPt9}%zz6ajX^WjZaG=w^ zd;q%eo?&0CnL)7DTG}cx?`xjq9+dPD6RDjbBW2fFDXOF(RC-+0LY1KORt)H6immya zD7)<`kF>CGcDig3r0sIFLkJ{g@^HQ5gd|34nLn02@ajAJ%10z+!`RC7`+mvbHtv@2 zdF^x{i2r>=;e>RZQFbEjo~pW49L!;ZVdyI_W1}!!lXG+zBydsP?9kipbC#4=;pJ>h zYkoe8{bC;$l~=ytte81khOzrylI5VOLAkgY*P<5Y{7a`__cn%NOxF~&>pyYDVQQ%c za=sYKk;1i2GAz{WHF5k$aZGL+FW0(DH;xeE0T#$4UjBE zZkEi#YB)8Ko?tDw0Wl`_zIL!-M^xBA8E53rmUDfWEEEY2t~|Lf2cX+0pHl^}bXH=^ zM$U+3AMeqMWjporBuLkW_4-u_9ZX$}*MybsGnt9L17Pl*6?-MAXj!O=ehK& zyQcXKTH{|+(S^~T{~R)&@5?w1c#qK0Ia3GW_TN%|UN|I98{H!4%#&#_B4%wzd)OZW z3OMjNSp<9bDa{evlrz>ldP+S7z9Fm8g5AjxEHPHaaq|Q*+nTWi)luC}UevJ`BV8Wq z@1bWU_*SQaok-UF?uyO7x3-L*@|_6@{a1`wW$&o0_{na&g}CN;rsiXx*=J*gzFVbN z0JVDvI|{SD1}sy$$f6ZjgxlFN05>r;)yA}7_3E3tl%L>UQm2;^$sU--ep$B3Iex#) z#A-xa_#u%ftf*zI@iKKu*AcGFBT!QB~xVz%tUKi!TX`Vrjzr~+pdmJ&9w{e^u z-8yr)6q~bK9L?3>!~zOlU?ZbxA%^i|Aeg>G*XZVQU8_Z=5M^uIZ_L=rc*iW7Ah-Ejyc5~V(B*bdmrzF2RnO411^t6y18~y_66R6E zs+Uqug{a`fIhwbu#dD=qDHHXpuF)4ijeQQwi!OZnQ+9C&tHLttXeE$rieUq=8nGpG zMfj_%Ut5>{eI8N_bJzy`-RV%mF($}#O?ufJpM$aiV+NmP#mkdX?XuU!a9Cc>3Blzg zBX;Vxm8?cV*kJ4UvFPkW4P8KADbklhsBLwv+Ckt(C`!y=QK@N96`+HY2ds5c(N+Pi z<7Yy0N9XA`4fWX0Ha4pWj{J9o8>ON@W%v|q9^Pd-wHsg0&;1RO7<1f(*J8X!y~)ss zdtg#1ffP^q*>T{R?+$ttiD#X^f~y9x(oJ(0_xxl7UUiV+jRE2BlgzXon^qXIw@SIU zG+Ch-f(LZPO-1AcEXOOK0Q_O9HZjaTC9D<1;PFxZh^4r@B`ifEV-Dqjn*A z;!-u>uqA7FWh3q<`?Ty$2VW=mRC`?U5XEUnhi5!m%#($~QCf%KdxR7!3^v{5GqhI% z-d~jsIR*u{NMF;X%tnPzbqBBfL6v=C%22DoW_BbQq?Xaap4vvPjmsAo^u$afAHQGGxU$P#H^LpoxJ%)n*XX2Ua~>I;##5R!)2<_(CRbm#r+un`%TY7FkSwfXfq z0c!OkzOLaJ)H`kHx!YJu=-^@U0J{2HacSLogFkamF^06A7*m5p>x$aA&Vz5r(GZmc zo=OdP-oc#S`lpO_*r~;235;6=-klI-vk}2IA`gY6;eAW)kfjC0`=TH{5l=XEC%{Eq zjCEXbe6CA|jmFoH;KV$x)TAtauJcNh8Y|+F;S(zj=#zO9H~i3gy3m=u=Zj>ny~u1E z+SLki{DTih2u+MX&SQ2pxeIVU+s|0Kk)>Zx|tQecuQt!^D3osJyW*k$sEaW~^w#YuE!);Jj+(u;udkiWln7rcOL_3`ZaXLKqQo}=U1h6-?jddR=97`~Q z$hkW}Y+isGOhSh$c~wo?r@$)pB94!T_Yxz8MDns|1nt?I1IkqKf4h~DaTN{f4FN{Lz0B|(Joq~2OX@H5PPr};bruRX*ixs0Uc)BDy zww2NAwNRu3316jMgf~k)j}@eM!7Y1ix5B1WS;yak;nW8*&U-7n8VjS%D zg6j0N{zRtWwVeV&P7pCeNfripIor50U?YN0Q?FNR{w6R1LU_#X69*+Vd}@NR+97pd z6jmDgnpY3$B!(3MzL^u9S5v1Sl9MSf7xyzVBx;GlcA>0Nik!#NF`^`D3@sB9Pm*xZ zePyJ53?8?}I-fL>t#hbyQm?y1DA7=LQq$1<1bMF6lLpfxw2{99wYSs3(Sho36yHyg z_$4~VVT;atwZi6-q{>I9rL>#c3^0}B&u3jlleJs)+_>#^hSt0RBmedDQ{zJCe<4^_ z_y6Rn*JECo9{ZCM!S?gndt~-_ON>l3$N-^V=2PsNY$Cje<{jN9n%!Z8CHvU3D(b>e)P6Ppui_cFcm!_jf`J>fMO2) z&`9>wF7K>uxcIyUZslZZpi)0_HRU0(xl@rzO+F*kn3I_K-;u)FbfsP!DYk*)iBs^i zSp{2zl`y!EPOReh-dDXgd!~~-wxVA3+oldhr6^|0bM1b`zS@trvrP5=q;NC;m8f(K z$s9Q6r~qDEaGsOpZDJZQb4+Awns~N@fNSuSel$Ik@@lbaH-!Z6lqn_L)6VjQ>t`zy-ousu-$+uyM^~EKD`blwn9T4y;e{g54I}(=Xp~u? ztW8p}(l4~CW7T?N1!Q7l}Aqo+|J|t{wY(=N9ZWVV0?vx z9}C|cs*$lXgvG~@@bTr;gjasriurG7pXWi$*_yliMwj!#JNLzq*nN%au#lnEF>_2t1|Jvh zNb{AuLiRhh&ls*R)w&U=Jt*hITK^jbWgDrv*=8SliXOMR*aqBHe5chCxi?p1_ILaR zy{Pc|@7nXw$hShLM<9PYZdC%&57geTFxwsE+24XSNEAnT2dqxi2s&*oK1XX#;O!KT zF)#j&a#oCt);wCN$!2(`H#^*XsqORC)516NCRBe}*XVgpz(;YzmlUnq$R&?TN7*1U z<|&2r{mU3?=sVu&^RY^u|BeVQW|Uxi;diw2j#9-DtlfLC)?F<#yG_(4^mpsfvz4U( zF%xHq1!vF)VE*Ttd~jrpu2|`=3VOZcx*5^y1vsO^0+xEV&>eGHax%>u*Csw?3m!dp z2oJDZB(ku%+LD-H1IS#5+-z<-uTSggVdUpV7hf&=-_cbk1&}AKfm_RY%oSSr??|`M zjR+wtl@@ljm|OnidG**lhdmc^H4jhM{28w71Q^lF)l7IaTbPiFdO|YwUC&`tB1)$N zlD^fdbeN8;U0J~u2D{Lbl%ollJ$r>vZ78oz8gl%t-2^F+)|&< zC>T{?l->5h?i$3QmbE06I4yEjsv~*oGgRWQJeKS-FX#gP9I=3zYJ%QZ?9Kk%9iGsF zqi4(;&UhMTdX?SGA7?qjcl8 zSiGVlug25-9qDI+k9%z6?^XX0f@^loHMbyjmTG=)+WtN6!0l*HjtcBSTmsxybux1m zJE}c>Pd;ZowXLZA8{Pg@Od+qWX?hR;XEf?+4*CD4l8n>72s8SHiKqZenm6CR5%U`q=4Jk?gap%7% z4;)WCg6|`@c@&u7M06bQfkHZX-Zaf>?moNYGuxytmZn)M3Uyv3b#KEBXW-79iw3OA zh<06UKHvFf;Ni~MzPT9=>R}gqTW4?&{e3t{8bv#Z4R8`ZSvBznFrjMkT#_m(Ji&qn z$@bPkd@9K$y<+ZL#V=P{Rn(eFx_fX}0}&|DS3>OaBbSJktw$XfTv&mv%hi|_t{238a~ zel2i5sSI|uNPA!B`ikHE_4pg!wvxwkVMz}13(g^9P1U?r*_Q`^gpBG;9{TdyZ|V5n zc0#KQ8+WptX^MzQx63J5ta6^btos75YsRQaHp!w!5EWVaI8W^(+BfQAQ(9Fx1J`Z!m+$2BO z5geuO$s&Q=q=Tl+L2_JB{8xw4+CcG8X6i&vX;4l`CgkXE9AO5%hoW&URxitN%;l3XgdG z$gWBG4MM*XZ>2l-*sOtiT?rR%K@PFsB%8firnhYeNe&Tmw7yTU$I`Ns*{rtR(ftic!qzP zVU%=^)fs_t6FPMko;+?UUGVtHffb%6bIk5%jGw_1#a_oRP97K0v4uOf!4oE72w#Tubo}tw?3Y^}cBu026{P81on)y^w?tFDNg8X?73fGW$=^*d|h5XZd9P=a) znr9Ema18W#7(lz8rWXb(#@vzVwT_aAcJ1k`%A_9TCp_+Py*8{_a{b?7mVh5T4W>TS zMq1uVVr7&GAK&W~d?smkVyJiYr73~lfq9ann>gFTmg6XfU#tvz>ns{RpFCKG^26O{ z;uMlE1t@O3kkfK>4^lUl7?>qYDHxl%;GCUK1J}JHZ$|1ikSTG@H;!z5%F3%%fPxWw zbYWVQ82;OauGE^yWX*4x6c37Lg&sfGP=_{gs$fCQq%2=QU1N#l*P1z^8v05NRvNGN zedv~yS!~pxQ~s8k9!Jq0EiS+)N!f}Z#?Z|?0iVKa@N2AqnNXe*gxW;8{ofI6h{vty z)MVY8xez)n18U*o}4djy1 zkHipOzji7Lt`kkaIjlzt@#1=QjYp73nmdN?7~Q%>D+Rje`%8cuSs2&m!kf|c%Th91 zQw7ZEm@1aJKt~BBb^PjO9WGNu6onR&&nc2H;ZYj`uQCxUjr$M-mTC5N1sou3k9>`_ zik7gebgY&p`w!g{ucwB&7L#g~HjVeISoTx)ucwTLWfya540-V>sHizXMmDb#;<043 zKrhsIxl{;^HklI@(sHx%xLoQ)D8AiIsX=}?S%t}q3Q+Vov$&P~Lg+6zebea6RY2~Q z&@(FXYfluecwUC7`RU-d0?!Dx%%9-Xeden9ZbtYUV-t&oa>T*e#avwsHbW3Ydq83B zm#uroEOoeUHIL1Mz3uxmpH7!cI8&aue?;1zWMc zYzM&T0~7-+$HuR~V>9QhZQ-Mvat^xv)DA52ajNwN&MesZ`Fic@^*@s6Dw4?!#Niu0 zktD`GYpV0$OjeY%l`#A~pDMJ=Y^8&5VVtyUq$5hE3=P=nyM9w7_AJLAlOIrUtjE=B zxGqQEt6z-dx zdT(!?Vvv~!N0ms5= zfYU7`hHeEU7AYTR)Qv6Pwo7Z*{`^up;qM}kSYamzhYymA%mqSWI<$F(EtHT^Ubf}G zw2RZ~K@gK@B>gbP;wQo0)?F7&1`C2YN4k##?i*mjZ#&JiwJol(G9TTpqFQNs{@pw3 z&xcOVAxPR-^y$Y_0)8njOYyfwv}yWahVNEZsbL#MGHDZA_P_g%4EEI-p65#BuT$W* zqJUn7vH*otxEBf4Yd#qutH=EaVh`Y4fJA3i4|@DY`3nmQqSd<65c6p0dp<0Ag6*?T zi&ma+B=CvnV?dbEGrMfpovvP2H!N5QsODUn)6xXqrQhH*#g2SfsVmghwNsY7 z6Sb8UU){Y!P{7>5B*)+4gkD@}5F(mj@UCvUhoCb;Nq0T5@?CzW==);)08alIrJ^HG zBW_2f+|OZr`;}C<(~eRvr8kIW(zBKD1!|ros2gFaDfpfkUp|Lpoa-@_jP}t*%A}^4 z9pYy+y~@O29T}275Td2utcU_g>U41vFx3b`*;Edxv2ry1ks>N zJKCIA>ffcWa^EH6UloQN+|VtGd&KutP1Xks)OsDh_3O8evo4yAvz1GyFChh6b@S7Z zUhr&Py>GWl^PW_=BP#KIa((iB!BA_jj27GSGrFCf(3(iKqq6W4?)Zzdo~NR}uV1Ri z4a6!3_yRHER(Mv1HSA=x-mzQXz2t+?ih)BG2SVx(~kE=DX>o_PQY&s(flEL(h5(dg)~OC2~NR?=-c!q$Ot3GO(NyvX$s0y_Z8 z!|h?3a6n~A2u>L(8CD`ud@-M=O4^x6fYpgQ2`}N@lyA95qp?k0x~}YH6++Lp9htkp zJxDca@G%&5;~5xY5DRrSZCT$yL2=@#X_`_dPh?%!T}H0Tho3G-nVCf=uRQNpU^0UM z;Ts}M&+k4Y&wkPgic1DHLzH`8zmP7>q1?ihbe8l+p~@#%b=szsC1ZC&sIpXfxWx78FH410Z%hFBMCW# z&Kd!0RVTgU3N~s7N7sJw(ZYTipdzl-Gfa6-0DftEm2fLR{%qyw&QKEN#rH zmC8zo{HFY>%V^FOFY>OndsBV7TYkgD{~dC|G7E?u0{Tv!kF*f}1uVa`01OKsmdo4uE77K4#b*jc|X?=BQ>czX! zm8-uJir41Atp{g;fg}GS{SV2pQxY}}Cpgh&Hw`v}uM71af};BN9qOn;LZZh+q^M7x z#g3~&VpDDpMh<_!jlyx5KDi)}DdK|M$sh9;)D}<;JP-#{D)+$)&t}^d1#5m&`oAVx z_lKU9?(sB-y~yK;{cQHe6|0DUkkZ@D!d`flWZI#@Myclt;{s(hMsV^yHtT(Io3+D= z`X*+UgP@-%J9lq<-6>_Aeu&32vN%R@D@E|{K-y!Sz@*-s5SmO zdi810&$fU!lOhGaM7rY|76Sk8h+(q;s-*gZ+&?AL7D)Dvon|F>E^y(C!ay^sPu0*; z3RFVN_`}s6llX_pGGWe{v%CsmOQ7RCU?(F4{AUvG@{r(Nd8NF%WnznLwk&yT&OgbP zdc6_g!M{o|Fo5w@%!69KTaljR>onV$JerRe}YY$^oaby}+Fn z`G|SCHTSU-{smN}GhV9ChWbie-3kIA`Oe$@HT_U`J9=(~Jm0&Ngu5goIFhDE^FS6^ zgRk}4=!8GAEq@3B0{;;bSINBe8xpjdzxhFm}Q^`2~UU_|5ZF4=&BNjcG#tMK^XU+4#ihL=5C@@S_Y7|vPu z$WbZBtjc~CcR%lO<58hJ4@QIhds-nb;+NEq+%V`uMS$Y!ebv7OyE-VL;tt2BuU}k% zU~-gi>_(ZAoCk34IkIs2fOfm>-4(YPl02z0qfi4(_sQhe=<-~zz65s@a?>|Amyj9Y zd2(l+>AG_;cGtvS_SBQb+I3H352&qH>eV)kPfNzGW%DDWY_THnrO-@J_mnYW40wV& zLkr;|9u!Mej*ev!VBET`W#rlEi-f|~Cj6J8X-eq! zT*AWJ)^=(y(q||?X@uoV`DvonrU<=;)~yuP8*lI7k+>(fPm2$w*~=@>HUXVtcvUY` zjDtb`i#2lL@guJ_Iik?+c4Z?_LO-c#F)q?E1(qbQKJUMD1>SZ~gYJo1hgu%ebJlg$5P6IPc2bW(l{L!B}AgR4boAQ zs!}39`bhJ!@a0I+4sNj?wUkB4e=)mkA?;b1z@)39=4H%?fdUQx9TE1K@aV2qnG`;c zBjI3YR-G>|(yJ?Jy#w*fHV+FhCvh3mMGR=jjzz2ZpEn^AM zAttF}7ZD<47Mh4_jrY;)L8yq0zPXA18*Jxwj55V{t>49@)-V^hNFU5L!&BKea^#@71argDYp@V@!v0l%Cz9UOW= zo^W;PkXic+(Sex|y~al9jr^`sZ98Ei>jN+~8UOIi8tN)?hO}ew-w`j>dR?Y}N1%(Z zC9D0awnk(DGK6giv;S-1?C}BE2}S5<9OlXJaqp`K_%5UqoR$F|weYCIINiLA^!#v$ zP+?Z_T|N{Ak4^q%kS+BBG3sQ|u{|mG!9**w{UV#p=*)4h&8L;n0pwUM>yXXoJTCud z-EY2+xEhqfUhaJ@Xyqnh&PFhjIA7y8Bj}3<5#aR4IN+&b#c+*!+J8sNT^|xjLp`Ja z=F^IuHHMe6^}oTvqb2UMK4xpp(O2IzFWvoL0dRsnG(UI5=NHE7u?_GYH%f1DYqaQ> zIwPK9$OHtk*L_HzhgZ!CJ8QxnIL=D78h`R2f~FA(#gSjg*Va9yaN1^>QHA|jS3{E2 z7PdYOUo1hA6ksns(v1nv7n^xsa!-ltH=3;pbhNXnX~ZGd47RY<4aJv%^j;6=Ul>ub zeqvJ%;8c)4*Qu3qh4hOmMo)Pv!+eLh+q^Tlv4cL+HD>TpeaKvYPPAupP=Z$E!;r6| z*=f2>h|rAWF_F_XiT8nCZow0e^wopcLmTt^UZ+f)i1t|i_G87tV)a%|mr1~2bBdlK z+*&CWyXny~22POp@YO>7WkO?h%dE4awIy{>hQF{3sNMB&OE-JYG*Pt!A7NHT6G9jmpHQ4+2l{~Gc2oELYrfRsz}am zYrw8ctVqs$r>K;sG*6EOSbV;67Lu#?LVZ0x(sKO()ww4qI$vHa{9$R+4w5db*VF`#kn#ik9eIjhz`Em z6DM3>nkz9scSgV?Q>f+QM7I>8!z%=L%eTDH?SPUzlSg@>7AY$j10tktTj`M%a+(th zs^Tz;%OBF@l^^1KiCw8hD`AfIU5sS? zY}FXajx<5EMdB*BjvKa6D!v#Lk#s1eP7Pd?3j{N`!M;_0|8mn{6f*VEA8 zkK4QiTkuL_Cca&Nt4bCTGR=~LIxNUk(L^+s^iM2^cXV&t%vO|*$nE<4A5UKy*W~}b zKSWSKL_|PE($DBn6p)+}qM#r#Mvo9sQd%TtfRsp%iNuud5z;ZF2f`4fV*;Z`4H=9D zzkUA?{(H11_g?q=-nq}Y&NbCgG?K>Z8GCNioGiZecd)e_$VdB3yf95A2N`H!dTp5)iQTvPI`vvC|%Mht6 z@@Yowb%V(~ygAL+D^zsscoT__5;|A5lgd>`@N=T$Z8d*g`7&HBe{3tiSMqlX9@x|Q zZ?>U2zy$qX>ALVWoWRn(N8nz%;^R$>?+Zn4r^N!DkmNfo&nCXC3MxMQj<8TWm`vqg z_aIzl+wru=_bH2d-7bEz`BT)SXJjfa<3$pv>#S+=)!V-LsI&9m_{*}+yC%hi-BYK` zWjJdW&H{n8*J7*3k}LisOTKt%&njE~MR4k{UTK^p+VD<+I-q)|&efIYk7CAq*~Euu zBrnI*aBW^_6g}ovQn=~u#JcEN9$&R>XF0}JBdYUE+bdtm=28j=;rE~4j7myPl?3V8 z53&BQW_K8iX4#)v$UU_r$rSz9Z2H65!!ceAdY*M0@9?4OenKMBgsds8pl7`llM;HM z@!h$9Dv^m#ar7WNNHO?bW}&57GJ9^{@4ta<36fTv9a0@Tdh4NrovD8hovxkymx-N9R?~jf zvTj;?w!up~;NG)uuO{?9)_;!uLMYI4M%FSUJ;g6E{ZGo1@nJ}N{_hKb3GhEjPllo= zL(sGO(*G0m{Qr8MmoP;0Uf^L^EKSoanOB#2Az3ZhNsc9~v?PH2&_Mh9vDLJ`fqe0> zg>Tj8X%%dLiMC4v{_=c)*2Bz%^v?w&*Iu+Kxmr_b1a|{hTz{Ftbcjig)&SUN7jHjH zMMAgSuC`3@4$=}8ZQ|b9z($qf2gu{9hc&%^~N^9!Bi*Lwa8Fr%hTG843s0VclY1Ntw zAp`}jrv}*Y1L^bSXaZ{ zW<`jZP;f>#atJqr(L=AN`EqDTXfo$}x+OZyBUcwK$=&hWvjO;r3O@G{8#eXEGPS)$ zHc$i7wavPB_-6hin%)*Q|AzGqm|OHnp~M5XKA;-bl%pBte#JaulD@VQ&?tl(N(iR6 zzJH%9Ty#EA4~UxzUxjr$pY&3$R1Pf~13Rc435~xiX00MPcY5ENoM`{n`{%CWohDo8 zFXbT(dB$E#veW$?M3EKAt;D*5M__e*FkYw7bETS{QmWC5WbmR~9R_5JIKCQM*3E#2)K=#i(<*lcSSCfvZ&+D3T^`dio7ISSI< zY4omAHlWrhwXu>tL^9BlM3G8xllSto!qNx2TK-x-W z?cZlrP*Ki(dlq50Rt868icNMVT-={}OX4`fmT4e#RGJHebu+w;pl8#fsoB6uEyn(k zS&;kU5h(;t;rI(%KA=6l@FE@3a1wNpv6ctX03Sl??4Ad&zJiaL6RqAkL0j+Mol*vD=#PVK zj=W*?tAf1m6MU6}+R)jeO-6&3MNNXfXfwR7{J@D}cyoE9sEJkXQ|b5F#p3BWGQ4jw zr@O^KFosk&y8Hq{e)lQH=Ham6^)SQ)TH18F^GCYh&lT$1NG5d(^E}1u=~I_(dpo@+ zDCre}Pyw4V{p91D6h@Duo%#{gb2J^%c2_LQq8V>=;l$WB#EfcbFuRt}&DuwfJgfci zv%tAsgrP|5W#Ej(->NGj?St|QGIIB8Xkl@83x#)-Sw@36$oiiRW3L-vM{B$A;m($}lTkdgZy99MfGzS_3j$Dap)>kof~7O#6>&^!N4-P7mH?rnl`v!2k(JnB--|kErMKBoQ{A}CK^F{`|?2>A}Ab&R(#AJ*mNAgV3Cm~*&A9i*7RBe|f-*iXjvc8UEdp~_UZw~fBH3`%i{Xf@icx6& z9~^pALL$0&jT;Z0Y;LXK4gj^mpw2UJ<)Mwu=!}k-89TE)+J>^us zUoQY%&b^U`uLy(!yT`TMoE=BUJTOn?8>H==(QM(T0CYbJ^vj1v=G%B+6WJZ+B92`q za9d7vk6P+NxXw|b&hABALi*3wtVtIM`;P{@FT4tF|#3(zclq8@bg%xgMEtg}8X$d?YeJ zQO2BI#LE0U-xfjf?YDA#dBV9`$vo||%GX!UO{gdS2s{OFe^OE7m2qmFPxE3SoB|~N z;qfK`rV=qP4*EarVwQR;Lo`?EMz4of&Y`Ey6_Hk(lh>%`+gipGT|ecUU}KnS?y>_6 zfonplL)Y6!LSwf|awdD0Edt`k&?p+$(#%>$iywaQ_cB!&wGFFbtiz%k`o&Ukgb7$& zIuJNuX7`B$)l)p6^Jy8oug0TpZ&*;Y{Awh~YQsv}>VU!-PIdanq%cDt)C3{U#G$=? z!5q{lyT`dcD3aZTk|y$jN}1_)0p0i&?aLlrhY{i`2Z?AaXI;wdQfzg)N=|A5wPqj z!1VH|!TM#YFVG+gDd;qw5pdSh{_yHE6UT2Ikk=!zc{ULb?E(WeKO=lEiAx!FgkEC~ z?q%_s{cG4B2R`dqH?+e#ynQ6F+_%fD5 zf+r04YgM5iluiMGw_$(bCs;DDr(YP?#1!^9$Hz6k6hC|6KF2W9X;;`=U0`b(!ud+= z;i?UWhLvrEkes55XJbxRI)hMbc;SD$| zy+Xyt@9ix1<^k!<8}*c?C)-_7Asc)H!MG$3@4O6F!UG4h4BycgT+R+R?3@Y#?d4uS zVUMnC_wUzZ`| zX-`6v1v#Fw6ZC$}EX&{5Yz~Vz6gbpK%M!AtMm64>>EY`d%}Ja~9{hTiA&F}f(_kKA3TYaqL!;+yM5nlam21rN?O-Un=W6NUfS>soD{o2rJK zg-N_vM>%HQM6kIunqh4HhAEeBnMT*FKsQ1-^nS44to)Ov&GceB_eubf`^GChY<0PU z;{^r7`9}Yzt&Ue1h>|(|w<=jD1 zX$PiECXjCILseC32GtH5cc(QrhF)>-nev#jS~dw$c}e$<5Hh?W5Pze;=EL4q1pz!2 zX0gi9TvL&AVOF@x8>;$p3YcCrD$_?ThD9el9F5KJal?9~8CcR9`fo_)Gca=tGkprA zLbRUbVp5fKg!~;G|2)pp**vxX*yXc$kv0R=v_0JuQ7cqe>IDBoyyT^Y^1qviU4`I_ z>V-w_CB|Mqj}^7NpiJ+%IFRtY~ zc+DKx!mdSH|D>I^Y_ER~1;3hJnbq9n)hw{BUolfSG-lUEM$R6_04}0afYxxHWvN0&GMua^IRu2(4-0Aw~8bYlPGgI0p*A8R1s3IPW zNqwMA2*ZxF+VG~KgG77uJ!4>)+dk+a{Z?9dV{4Q!6jLcd%!|8h)#vhIJ0g^6HfVQ> z3F|%WTp27r>2XK=fLc@d&3~=#l41M(Z@JW*dC+n2`{%Xa$$s6Xc6Zhzo@*H#Cl?{J za%8wZ;fGF$wl#hDdTiwNbfkM=>;=pUeQj#-sLHg28ew!hWa^9Kj3;7(|Fr?%?}Jo~ zy_p~U+oF#2TW>Q{!mzGn?$?&Db~bGe#b%V-Xxsarcf)eo-qCBJ1K4S&B8st-ci^np z=)=B<`-4!}9GdHT){EeWRvklZ>)#fozC%%%e?PL)1MVKF-$uwdLS=xFr+}gtrbJ_3TlEfYxcBL4$>{E1FfGz7pC_Xx`|6p#&H`V?^P9UaNT@~w{I<1mWdrB zC@WA?rZnCE+dXuiZ6I0l9nE}pMl0L=SY+q1&qad$7h=PY&?0;KN@j2_=6OUdo0I)Z26tlhAsmu{gc zsNdVwM}=~K4X>R7qU-WUKb``@620sCVM{25;rgnkkMw=Umlol&%T zeC<{xy>Ag-GZeKIUf3kJb*;By^jt$$jEZ}}IP&n4AICd;LT%R`kZZdyy(r_{fz1Xa(y+-iO20^hd^XfRKC+-2OGq)CU;k4?LX2;_N?57uk;AI z_86Av!i=WgZ=-hJqf{SDc@Ls{hXLi->AawN$u~ZHoE;PQj1T2>f{!m*Bw`Bei{!oM zK}#^Mr2(;~qbUeqjTU_P_I6YKe{E9mGMVwg2I-<3@VjazAa*)MF@19V$s7M^7f7$k zXT?)(Hl}@+ZL06;WF-A`baQ^a%=-Ka zvzOtm&kjjQCSvTH%PmYT)mO}m%v+!sbJ5OmCvzA`^a`8N(EP@W+u8+hLYdF&2Ttqr zd{?~JqhNXb9SSY3uDEJDRJXx{FuC~ zJgF-=UeBRjm#G0CYD@ckJ6PV5w1OL^NRn}t+T|#sao01KV^(ZL`2S|0GQDAVq41b} zkyip%02mf;GlcB&7r%?EV+l4gB!BXhR3%7iE&RDYxIiCbPmh58x!|LC_99Gc;DuM( ziob7q8|6Zkx@okec$L7*^}Bn&v(&oM zZ5H8=M6froH&^ybMX@bOcuhwf-`a~?|2Wy7-h;3#TUQ*u(q7j;rBRe`Aos{TtfF#` zqyT(_mMeIsEWO8n+! zE=Wx`Tly!h@FDAwa`Ji-lmf^)iVEO13Ik4ujl)2^;t72 zcY7l>?f1?trP!t?vISg!3Cxdh*p$xqJ1ouIZ5W4;7Pwgu>jfMXD@TERH zU5%II5^x|ovS9M`ztX`Tk_KOloo1rV_Hb)6nxN^<(07*#M8D%*KW6K<`{s39&w^jx zYm5K)4)+Nx=G*R($gmr}s)dep%J%PEZB2Ba&KB}q8(@@?Yfb@cwPT>#Bbsf)hRp1{ za1V8*2MtXsc|bY^f70#|B6l>K5x!tlb{4fjSQVluP#GRd7U4~PR(IIQw{i`0T;+)J zjkWg)f>4QIVSdkadk@A7R#VJadAoA2Z8mSGXAFJv9!rrBxbZU~YI(Om%}hA4rnER1 zam`0~teOFVOD(@i#Wj0x{&jYDYeloNdw~zLJnRx#W?I5CM+!H9r-0*X4&|3g_k_YC zIXEVo&OiCohN_7?&L-r)Wv4!93}G6Yo9>=y9+mn%F4WaC}JK6|S;IP0(N4C>drg8Su* z{q%;Gvoy_Onw?$j^%p_kmOd5GDW=(Rt+cow7b*=lUX%HbkMi{zA_NfwD#hL4bHq)v z0ST^}&6zqzc{@)($Ft<%B!s(@URBZ3op$xQDb$&AsZc&VW*wR~@H(X5YEV1~oqN&2 z-s_J7tox1bdgEvp&P5cx%9WTi93NipYyhd%p~w6wqcy+#Ab*hjxtN`D;fQ24 zwyl@0j#j}01z<86fjw~+f5J!&J5kG7S)Lt@+&V?%>@c{>j`7ifxCJa_@yaeVEHV1n z>eXJ&zaLct1O{>drKtuhuZO0zodSZD3Y?odJ% zUczqbBxYU&WtZqo=|TS7FEqozk_yiX7J4hRXUB(!^x8*(H>5np6VTP0&MVp{p#=B1 z3i`lIZS&798T#5N2-Bu$%}^IFQ=~^cy^|=M>J>pzcKgD(-JSr{UkYz+0?LUuNm8t^ zlon*u;L{tFfJ6hm(cR=k;^N-z2lA8cM#7x3DA*v7{Q>Q**@Fn8Mezw;*Yg-AqF+xT zzESILBRJ{&~lf~aQm3D5dq*Qo+Y=PO{i7T51_r{W-ChtLmSKUTZ&%cB ztat77gvh*#-8zeoFl3o7K=H^I2#)>@JNWe@NuwtgVdDd3}gK zVUMl5A&fo__Bk=?3IkDu@3fa|%n*xyaw(#&IY*})qfY@MYGDY9zfpOZ&Ubp{Gwj@y z!f-hL22+?fxOhE8ZVkhb_Xs6Hc7cru;tqPQBrEoKnvQlI@aiQq%2Ky0ZfgrA zM@zzLT2Z?M!7hrgS?RGZh908eg9DQ386^_Te1hGQpd}mE(z*6%hN-O+ z_Sjnp4ZI&gBEs(9M(q2jHzSXQo8;^;!Lzk6(E^3l{kL)n%kuMK17Zc{1*ZVnygrV2 zd}}2&<{rbk&5V;6E2q^JI{mVvw@Bbk&^d^zb;&TXZIV*532&ZV_*3)rA zX8o+*GB_(nk6G!9nDV~6*ErhQ;wNcG>21YggweWMklZs-u-U)G$C72QgheGQQ0+t7 zZ!7q(PlPUFN_Rm!cFV}iS1*)%-|2#$7ss*vo{cbI-I+_jt-ta{?+tRvI)y>o&25Fn z%J1!-*Sxn}GkbuYZXKKX=yN<(ik@C2<7=auw&)ToeJ8Nkr&bDNitJ3-E?p)y41nL^Dz2`&82B&U?Zx5usMmL-SKGKT+<*^qx7%*`B6vf+kP#y1s;8A=}|Fw3K%jv$z z;NaYsj~Z1t&hJWFJ4xp>ul|kX69I=R=&DXgZ8NS1jA#s|sf8M`Ub}@Nt zF;Jft`PMbM!Uh#thjuyBvgHpt^0!58N!hzelGqNZF2b}2^XaYrQ>srR%=g=kU?k5| zfaY7s7Jj(r-@Tx4EdzT-uE-5RErJr;4fC-53iNLpC0=3+_~zL*j7w^h>2D*wY{vCZ z2s@NKseTn7B1DZ?!t&(>M|ps zef{99L={5*YF9he+ea4NpoQS?gSw$3uqrsVG31nRjxjUI4MlW3I59>|>%SyacTpLa zTj#*K{mNGL9cUE6aUnwu=Wt<$r)zFWeaql#93mWEIi-q0iZUNV9Y7tMhA z0Eh810UscQ&}bmUgJJSH(<-UBBLQqI24#9}y!RLu!~Om1ox|Zl2JFiFt4feBjown+ z0?9Z&64H#B^<$WGLQdc?u67G6&2<7z{c3*w3|(u`ZyqbIVtl~AGE~9o8DTg*TK$!c zQTKcyIe+F?Yv>q0k3agMndM?9`}8|Tp&7w!Pr(~8*;mVt%@)Vc4uM3^LN=}oD>(dy zmiU%2Jm=Np;f6Wqb>Fm2rB%v}MdN6?oZXX|s81Erg{2-OyJTFf7J8hlyruQu)+r$L z?i=buQ-2iI*waGy2ntP7_NPcC&PofYARCfof1NxfdeGHP8^hosu!(DRR0cBQwb5G3 zmS}yQgT0q=6i!Jhf4ytqRJw`8(tA_(UN+IO_r5O8AlNvWXosJH=SLuJLFV@ zmEq}(4TZz>*NBi1;n*=txxnnZbiCP+)vjW)};Ie|sC8Pt5w=i$O zdIKJXL0U}8NN&C6&Y7p`^fkGr51I0a=+1ysKriA6emn`Q)x+@m{{eG+rr@phrvOKC z-mL2FZWzwBr?ojf@IYGT@&dtP+F?r8!tR!T9qI3;KmNO9yuU^x3&efY67uHGZ3|lH zZ3tBbf%Gi!dd_OEuj#R$MHCh*lDiFgXqh#03VVkrlR%%`37+y!6)<5e?kz zxLJRy@nA7b-a?t?EL+zpwTg5+1suA{XH2~Ansr}+QPnSz7v?yu{Bk~L^IaUJUu8qn zz8eUu@iZB(blb|mfz$;G2A%sj-V06$0BZiN8Qjru8~Q!#1ZMJye7s7}jw=u(=1SWJ ziAxhmN>Qc(Ck9-wzJ58Mz06(|-AULrVT9)kUMC8jg4US0(jk*b@OXNMHsBy+J*UGJ zF3Nkg^@~|V?%)Y;u)l}w!kzCM2-BFAL^eyDk+Aco%H^98DtHI8lL*5)#de*EE8ws= z28Px(W;o4&QI91rq zpJqtua?2tqAkJE@sr1)c(cg2P0%BjqUkDj33Qtt^4TH^9$O=KRdfyolsV1KcIOBu_0iI-?Jn5TrS&UA2dLOC73|y zA)R2ax$ zB<`1+IF}=O{-7V;Jp~lsfiSDXYQC0U5APqJ9URQ4J9zAtnEk#G@J@ess(`ujT(v5# z;#r%erj$1NJzNOA#9EwfxJDfeDks^E2!tnSKk~Xn&~V$e@x${tN)Q)5y)KG&71*ye z*)SIIYRF_DpFq z_2K}lg7>#^<#k$usIhX3)cXbS9kv7(8@0_@nF1(=0S|75Je=q)RsSAO#*z~+)@sWv z)$S&F6LCc~jZZ4jV$?Fl-Hj6x^N)NjX; zf{pyvMoHen*;ym7$8}tADX@&3f}irrGcvCW3^AR9MjzYL&C79%siEXr8EOZOZdiy+ zqVrjK=i(fpA-8AYJoHc%h9wqjJj7NsZ2qn^!Eb}2L`(S zHht%2eYEPWr%=g+`wfUB-~AVg!F;Y=(Vukz(wn)QLGCF#+^^!#gsOCl%`~i}FqqaY z?=}zU5>9#QA*!;PSd4u_CVBYRn{9?w`{1H&;)ceC#!(&bv{^#x@Fad% zqdk=#JaxA?B0Qr4IzJsTw(#I#*MZXlFoZ)AWAI@=;$gOqWK&eFQPQ(3i#`&66%=jE z>E>lGZ160T_PiYFi2`Xjk7-+67<`)!6Z_D$an+QZZalnul1W4Z7kJz&8~TF;dV>0; zuR8YcFwhYHqBDYq_kSIC+lUX7jFu@LR-Rx$1AyXrZE!iPPL=U+sufT!kl%NW#hivp zwsjDu^e~iuJ57jxvr7TI&Yb5i#pm;h-~#DSuMMlu7tzhN%1y4 zC7&&>yMMKN@nvzg=~h}_$36V)wZ*jwNFlBM=As}vb>EA}>tH^flJu5LD|xp}kuKx4 zNqG(t34D3zA7&r0BG%hN`z8emWP(;QPVaN>z2D*YfjX9*@7RS@YsFQMZqg#U{t;y0j2Ok;a6m7pCL@y}A0vqV43fmN zK&1c>NJ(FIO24vdX(eZ*}v|EC+t~X0GbQ&F|8slPlckJc_1~ zYt_Q_nCI82j}}_fE>S|p(HEl1 z-%$MVRKf$~64NUCbv*QeAgEU4dqhCID=AoK_NIslex`Jz6i!SpH~r{-a|mO}{7YUH z^1wXlF8^gf#S6U8SBdjP zu3w2mSaNzga#i?P;voB4!EJQ*EZl|X7*>q7!CMx8L$5sOT&Hk=A+Kyc{tf?K`uW=y zyiaC=xLx(&fVM7&J$BXV>_^la(~?2Acs1U0=r=k?%wI$q}v z&9fnW4F?p(g^-}f{^y~6)qV@DZkDG2=eI)`6ly3lF6$NvSP%N0^*bh?SeB%93MkZU z2JO#PX7)=TocS3ai)??m`SDL7#@v)X7yPv>`O$x#^R*x``5gaLHCQJ6t=V=c-}p0; zT6uy)zvmnYcvc0Ae`(=uuTo_+cHmsa8B*&NVOB zDjmB)7TBbyuN_n5ca71QAT;3#`8)q4g=@HHldC2T;F14dNh%Pv@$p?l;);INz0Ad+ zEqvZPl-AD(`HG?`KGYazV2O5sAXMDr;WHuKBK2O|0lp-8;P=u?1ybmc@cU+J`$n{Jly(8GQ0Xpw*T!_#F-I50PzOOrrr}J z;KnnuJEcu9HaIf$oRArD=5(?kLx14v;|iy{4t(zk^oKZyT`KWY!EqQk_ayIsa#%pmVM=UCj1*vL;l?{} zBaK+Jv@P!HQBCC=w?hUYd%ZKF)Hi_ifdE+v|48~i88&*8>Sxw1vmEZC-SZ=tQ<`qx z<&h^N`gpF~=~;Z8Pt~|1Dc9nIeYBH^gUnCa$egC~!cyfeugFdoC4<^_FfA98NS_#LhV2WyL zYyO6TMqfH&=s~b}6r1~V<|69-LJ&UYoiWD#eG`TKwqwA{kP`WOU%yY?IwMd^w7k>Z zCSuyV^+)LuyJc#M!Uo@m*B-X$nk6%H59j+`4gC*RB6@fExCIuIx9HbQ&N)_Mt=$X~ z?iRbWA|5X6+@FoALvuW2UWQJ?4v2!4;b|4fzxYB5QtMZE)JsXqu7uwTZ_O}B-hrR& z#~}G`p_lT!xN>fdBL~va)>xFrUz-N^n)Qo=g}&eGN=}g zIO%{T-J0Uk>H2oU#Rx$sRg(7<4H2&VJKlb^uRXlu{XrebRK)2X1jR%LE1>f{E*T?`1>QOHu=a5vnL24 z-E}_>h^g|lry_i0+^2jCNupKiTdIO}b7^xkZyER_Aw7fx+CI4K<}O<0UM$a7`l8ad z_NfJ|@iT<%_8K%D02ce^`o;l+W+S--d9-U2#@*Z_!N< zm%Nvx&8`F{DW~y|u5|21WAJy=AxUq&8X1srTu_8VcER4ZdF=V6o23gs&F}2u4Zvyq zYN9^I+nuwyU=O*#h-tet6tzKSZO+xZW_U7GeXh|l$EcDK?^$ds>e-N3;Pt5N>lCgr znJ{O|C&Y={`8N#V4{q0}nS>3Av@4ufm$^io<@#1$8G2)}z%6BLsEV$aKGZ_yNeve? ze>IL{d-pp{5BOq5{nllUAP6G}2q)gtu~XlYR9+|FR-*sxxE8c<2I?i5q_l4cYl>_?yGtxGj(=S>>Q05 zN9A85J(E)d|2Z?c!$0jizb8=1ZRA(-$fXXz}yVr zUBJE*>=@y?4=^`@*62`sD4zFXyv^nIyj)S0lSe^T#-s6Byo8uWzjbd5HL~Aqra4Bv z!ogRX{UaK>f{-HAeGp2wbF{es3{e((>F+;QpOV+Y3jGF~)XR*3^Zt9+5uQ9S<4|W$ z2rqp2bBS|?3jf;?@7Lh1*%BuVLmy*nD{PDC?j}6%&Wzm~xpig$lvK((F_X}hCjbXp z%;y+Z^X<541uapeUpRIcJ=j{uqs?BI%vg^|A{_WVdp)5Z&PvR#WLE20-J9i}T_ltL z@*cHts{dmD6hC}(s@GIR~`ROK%;qHGKmN#_dlU-L_0QbYY-qh!g>7gYzKV2mC-KcPu}`qr)J_3+jVU(g+xC6IlBGDzztdb0-;bl4nj|d8YqQa@F+*8yp7ti z9eBI*JlN>aRBlQlOoE}}6En5uJenX8j+%+acx2R2F-09=qTo^X!&~jBY0RXjIHzUh zWU3v|y74+P^pXpD>WWD`RO{&-)nN4|x@LBjn8kOkc(P=m@eHAkJ(#iVH&WGS@LS9! z!0KR!hBA-NLjds%YUb9ey$1|-GpX%caeN3^2X}BWxjDTI*4_WFK3at$u$IOWMQgHf zkRPu3J^ieRs;#r35&38~PQ0@nt`rzLJp6XJZ{zy7minEw>YBhA(lZJ=CEBMp%-fW_ z=E4iXBn8G13x#URX(*AWHtgw(fkfL6HXA(G=}6K2>$oHcs3;%hRrFm3EO|q*U|2Yz z_JPGDsw%Ej@jd86=NCZ3(A0X~#*-_|r7(7A`;Z!JanKGP8A?MPOe{NpH5Y_^Hr_pOxu`W*RP8W}P90RgZ2(KG z3PvI^8T#b6SAD!!*;#`i$C{6W5BA*zL5{?xjp+toH6hR1t-Z&A^g8$&&T7)pD>PX0 zr`Dp9-cIU1o{{ZcZfmAxY~(;{wpK#?-o9zxdGM0ymkV%4Rn?n1U3^u7$ETn5+1OCJ z8j=dXE!@KX@)zCs!X1omUGIi-;Ds42-TjuYaz#<0f~NpMwy)@LxaN04G45Z`?bnGC z5fRn-yLGpB$Z~5Dy38UAo{ivhp zw^}`^A00JqoTz)Lz$X%-J5o7Jv=vHNjZFRMw{p2x;8NY(nZOr0iPeKcEtaKUG^1DqrHD#Q9)nGf zSom`;9DnHuz20b1`m;wSLhraG8e@_GE;izT44zL`BAeKD-0HC4^Yn|+2sMi}F(MrnEsxcA^dca&v!N3pGLhquhxjKU;>W zDn?9_PXS%lg~1es4EXW|euWn~b#+rsxIKd!I~y3V^`d8M^AS?i$s}JhSNuh`XwNFVEvKTY2^xG@T=vgZaue5yzMiM#_%Hft+C!;SG=s8Ocnfzq^W zSS=Jz__Hze)kA-Put3}FUJ@%7@7GdSn22@I-~GscB_$A+JgboXad7rK-%M>*4B(xy z!@?2YoRFY^58l%sjaCo$3E$shW5HF zS5pR5gc_)c4#x!qqzzVC5&@>l&oAT|_82LYT4|`hU(z^u|fz##!w>5M>P5roV zK2w+yC3py^j5jkLCBu>!s|OW8Y>qCxE?W2hec>RAK7zEbGGAA@!eJ!;TijLIRA>2h*es5+|_HQmpRfd#k^ zrv8L6Xb1Z5-kqzx{+vTpU;fs!H>GbEl!M~0Cvc+k=lFlnjSSrS8x_8`!e0UZ28jqj zW$+KY77+^?K35-JDyy9?zsRjBsf^~SViyaD#=6KIw8+qo4FcV+&Xaa$VkQy&GpYz) z6)#%Jtj9@eN>XFakYeRxSTo$O3H>|P3r;ruYcX#KC>l1B|BC2bZBP16yz3Oge9|Wu zF`UYAC0lqXUAFx~ znDIpW6@kz%gCS7XT9xQ)hI)GmbOn^{q*cZS8)cDPs zFB6GGplNw!q}~i_kSMpU^Av=1e0uIl=d+6}Mi(WH;I(_9>h~SIKX>p^@TR+kx1MOC zf$!s?FrZy6=|u%u`kr2u{9J?qzkY9o!iMQ;^nu&uD{XP(Z(e7;Z8~s~I7oZ4bcY;> z?>hzXUFVulU=iFjoG(9U%bwvtoM&eGR3RqK;qfmj((K%$4&K{j4K5|;^8w9F{X;E# z_D}nCoJiT@>NEsv=H)K;!2b;Y_J0|0I_HqL?y%b6Sh(Fb15pRrB%P%lwvk`rraXxg>!~r|YEun7rof z|H|bT*I_?2^ke|78Y$=eSehUDY=v|3kqnhg^wC5e$yrC(65B%*Gu66a2u$cWtt4@c zV5H8F-Fpm}dbQT9hiI4Yk^Vef~qRZcsKEc-Gfl1gqltORMla;2Bmbp0epbPWp` zyak{oO$^EGsKl0%>v-i+I6PfyTqXk0%j%@bBo&-(*1nnVpfgf zzI>n8$TZT^I7HwR^i9Q@n+=?AsE4Q}Pb#sxL$^oK$303Ui9_on`N?_icm|89(7s?R zWs)_`a&IJL`fnc&%h)~gF^ zZ}f)Qz)o=8(b>1ZnoIart!}KDMzF=XW0twuPcAzQD2sCa;d_D?&@^wl0j!*k=@u^q zD9F7z|&b!aQ~e^+=WQKC!Bwg~+KsmH0#CVs8{V=FNS;$T_N*wJfIee;8^ zBduyh!_)5D;2*ArM~}V7-m!&Psu5qM7?2ngl0p%Ho|q#tkDb**LsF}dOjz`{^U&8Z z&gEB0444rQtE$%f?1!)nege_!MEGMoTg}0Y;b(_<+3h3v{)Iv+pWw0mKys}48y~hJ4k0@@kWBL*Pey^ z^H8`>nb$~8tEo|q(P(*oVD8|Ia(1e&$m~|pR)yxm%;ELK4HRO3n?4yiNKmf|JrS4@ zO;oXZ?{Az})Bn`NXL}`6c2)92s3=5o@w;Z}>pF>(6;Z=KRtFLbga^dA>wh9(Rgb@F ze^X95eFKgGA>dS!K<2-$a8y|b(Np6K-g!kNY}utAEY+ixrCjuLqQ?eGu|WLrZn`H< zZHU0!1N}Bf2-V&oOu39q1Mb*7GJ~vUohF$r0a! z4iS%iLkI1vB`clOxFU2@F1fN7*U1l`n{nAVG|mKK0j}9)rQX;vxX3? z^kqCsmLeU&--1^I^nyasb#L6wFr;FME}t2Pq@Jw?UD~}ITqrQEpA9c_DLt@@ho0%E+S~Wv%%Ew;)u?3Wxo8A#aXrcDuNCN9e-tn7hsj+|& zjI@WT|3qaI;nNQ(FSb{=U(9+s!|;D5(#8+)o_NUx_zCnEUkh65_xl@+%8w`N@mAef zBNo3>BHs~Dr6`W;F9A`djMGx_EVor%9Gs@zsJhf|LI)^_U)pTwr0z4_!=7<417R0a z^6nTZumA`Rb%6;b!c-wxle6m~Y51oFsYH91%LbvJAr&bSfxoq3+GpS@s^y>QAeR|} z-s`A`T2jithIX%7Fz#YI${Ss^fjQwJD3;CZ^woG! zNcpK6-!Sm(kF=>{c8{=&-D@?)cZum3U}SMT)`H5iS}+RBzc1nz815|fsG56Fa_2t! zFUGQ1ucs&Z#Qs8&G~XuGSpX#vK%RkNjH^&sq!qE6Iki` z%nQYWZg3LYCQntZ`@LGh1~%)LVBp$`oo27zHsAgsb2$kdJa@U-H6Af*nk-#2W_Z1hyCz_(5*LQo=)wTOqO?jEa#@nY{?1`vs66Fw_&oXhB`a=(H0VOsH5EOL<-C0F;a!= zCtg^)0pM1N6P^!nfRqmhVl5O-gibiPc!KU|zP(qXn(K=RRUoQbcdBFFuO5u*v-dwU zfa5ZNPQzfmxu}06^N=bc1S^8a0wQwYbqep=TSFfha1wLdJ%DFt#{ydOI1JTh@Vk#x zFjD=GJoZG*+ZZ4Ih7vjV>X{Kki*RdK1zJ(>SFpqZew+eVMkd?H;= z3FMotQP-mC%FEbd!-0MfG(!jm11%N0!1ly#MocGQfIW1lx2E{dZMuQf*wpcIdHlve z+E>2q**8+&-~8nd5i8zgB(gRa@T)X`+7_?;Ci+z5{n+1<%o0Dyi9!8#FV-6E)Zlbz z`BSc$p?@TNgmDTrId|x|Z~?uM!6kig0Hho`Tt^%gqf$ZoDX#5P+GwhMDlM>@KnQ2! z85VFJm08+F03g`y&QKnI-}%V-OC8Y9hOQMse<_K?%NP5B2E&7vF6%o>Ym3sBUgWJU z&qyWbc!xNh6Yf8NZZT#5BLM+Q)h0$oL#dlgcOO`LpMV+do>Yf=&>uqDt{O0lyMJ9A z-W07)*PV=3D>!6BQ&FIT(DCzSYq#AWZ8lZvrJ4qHG)AbCze~hA1~e=19%o~9C0JZa zW+&9v&t~emTdt0>)s+lzrmGg+U-~%3|6mtY-IF_ng)c&1(Z4XX1~_SAi-q*{K8XDk z`g6Sd2nZS8iNF7k1kL3jykfJSy0!_+GZlwLRH-7pi06zxO{OA&y#K&vWwC z0A)o!9+lhg%6OHMgf>%6L>ldgMVES3B+*lAZW!8?z(d?gb_ywwG-Nsx@Z_!NG zyhoc+?v#NLmZJXoVpGkbv2b1C9_1ur`J;Nm23k|yPZJn!=yQNImAw^ky30GEB;3I$ zA_P8yq&;(SbmSzq~ER%8oJM4H*L{kG}JoVF&%z6H`- z@Gp+H-Zt#;4)sv){ESy$EjODB)#Tss#3?m3`7|Uk;DlcFAcfnynf1&@B2+A(oY5t_ zcZ(8~X$cQylyoI~SA_)v0$3rLxgbiT${IEPoqR?u_;rL~)Q9}dEgXG%Kz@Ag`ub_A zUC;(!{r6R~53l__uVg5ubly!Xtc@=OJF&%uQ8z7h+5esR5s!VMFUx=Bzic2HdwyfN^NYYj+ z8sY2)$eOWs+iPRqI~FfP)b7g9=?vQ)uO~_lY+j^>}bI>bLY1jnegUz^T}t-%GiM|-B1 zKX?*`%abRYfyL18XI_TCmfS$)#BauXa z00Q3O&Hm(HP)R?$m%>{10v-&eMHQ+Smp8G+t;c>W&V5C*kJ(55rypA!pK4uPS$0pm zF|*%wN{m)gj0Sr6{mzBWKN6$4a6gkKv2aa;Bs!nP-VrT{9fg=mMrFr$-1UbSD&nR0|6?d;)cN1>}h z;)A%yHc?90$qoJlq-{vmB0TQN+9T~BsRc6trqMwBZFn~^>I+ZA29eu7@SM2TxFm9Y z_#$#$aM0sff%CZQ;WU~Re(sWM+tZdS!3EV|$p~JGGvw7K@d`SiqWq6UCffk4%8HX; zJx_-yN?{~9i1YGD#NPFwtAi6HanoDP$zLEtcvrPhuyD%Tq5Dl0)lKp)bbb~K%%|m2 zd2yPyp8JnvqTh)w}04x0oQ#~W# z(x{eqDy4f!A8M&JDKNKXzY&W8$Cas9RmA=Xp49M+2p*?OTxUHSnY>L4hTi3Afz%rh z@okSTsSRMwq4SqLzwhwWc!NzDR?>zfZZcRleN4Yow28Hf!IPQ@W-RfP zzDXSBW=G}lC}AFER))R)lD`s?YApd@i|zGwGc&8ICSs}F%B`Q`C2W4M(ezN?=w_D!dsRXy!G_V2WEUE9-g4nlMLBLTVptlMGv%Z%LIA37%rJ8%!#}7;J3t+ZPsMJN9-R7?V0NIue`|Hww{o@ z?dt)^XU70Qlhp0U{%iFo#D@q*Klu1s?TEYv@KHI>LyVZnHA_of4i46;GHX?MjrcUX zlJPc^1pPyNphs{?dh>`o(=2m%={ka|phCCjw~@|?teTA1dWxL)8T2~F|NIbs;jDpK zDIJ1di020)e@5*HpqFzz+sca1U+aeKA--#dBvPq;GP((V;`Wck>j@DXsCIQ3JDkG{ z*GXYZ7rU2PA)Ag(2;Ewl@5{Ap2oAj*^VkZwmnB$-gM&tQMS}Q>D zMf1V2q|x)1C-363InT4V<-C{IV|lzWKH;|+?xD~&KexQ4HqqEFuC%`dBZ*-;y1boi zdmm&dv`i7rue34fm$QpBJuk(pDk^MBr`qk-{r-G`qu1VhRn6{QkSaEUyNOHV8IPwu ztr99S*u_3!N3VEeeOGUZ?OC#QK~Mp&^xGV4H`Dr6-Y$+I3Dmnk5DXo2QfEKl99&q( zTCx&FkmoHT?n!^Uo0pO+KjSdcHb=lW7Tc)-G6g$X%V4t0(j+$Wc$#Hv&U72pdsBtQ zH{0KrlD?mRyM3aegmqgs?YZj$$a~dB+sG6FsN3ATr_5GHKx4w?I-nki7&5W>f?lF z?!RNC%{R`HT+wyQj<4y=onQUrq;)ANwN?93ON{E#coQQ{dc?x;MCguwl$G~M9WCRd zE87mYys=4M#4ToQTZIQ;L8u9$>o?^i#kd_^>yCHh)W#L5%~7u1>jDxus}>f0y9r_W zvepIVoB#jsV{{mBE-gArBxkqM(2X7;Vqu!FvioFeOV{*h9yfZRMFbx(=7J1%CNLLp zOUKduP=REoJ5Ndm+Yk}ZRiboZAPOqF(IdUqvd-vrRHjn{D8sQ@CZ>4FD!4z8D*%zw z<<#(z*R=Ku>DYdQlT6d7|4qMsrL_TlD4&Q-x>40UXh|pC^CnLUhR>Ai?_j&9f4&~% zJ7HB8StS_2Xo^FeFmEr%+G;ljlZSJaqZ4|_%zQ1z@{4Y4t92MS^dxS!8SVHu1S_i< z1QymPv+fXQ5Me#eXXrb96W|wy2F(C!fKS1|^h2xtt`zcaVrT^`^SKZftuD~< zz(QtYh?FjMn!$7cR(V1QIp&|) zBJ~#1!GF=MDrkRFN6K^~`oH%(KV^<-H6LhHS1~v==T((MQo9kRY2{4+NC=fNMdpSG z8Ho=$eEQ9cMgzgw-wj%H>f;QnCGYYt&-j40J&W@q{%3D(2@y^0AwBFd-&*`qV_3851Ogqo{4`V)&ymd?_zt zF$$X`T6Ah@5Z$N(FM!H^-R`b=R`V zMM-byv50j#$vx?p<#Ot6mi4CMs7Q}}&-tbBXc?op{bZQ%d`$q;lPU#J(tGX(jKEV# zVX5tyXT94WE5iJ_o3qkm2admuR?pmgat&3li(|E1(2;32+w(Olc$+A&!Q{aJDSWHk zn60YuF^WV+wt7=HbN?PZRZKlW4Sdkqr$i#a8|zOarutQOL1h`&8Fe-F{>v^34#$+7 z8Uwa`Wj$~nZWZ~we0vOMcAAv#x+pTvqb(X^^GwDuz2cxC zDVq7urjR?b(BkMDHv=xGNeOE+ovDSIZd;BIL9LoE4*2nEby4MN&bcmf5JO#{Q_*%G zyRA^rs6A)TN(@}b2!S+6&h1vZrOCS8J z87}v`TE1tsWaxOVs?1pC(95yxDrF^+twc2d=Vq&Px6Cuf+7&c~JIgAQ9AQgVvI|VD zJ!K0ZKP`DqlHrbdCYeGlhg>7CtEl|_kK~5f4rf}>+$&-;`#&;i?PD~>N}RD`ysxpS zR>Nfjgsz>RNy@Ae`dfA(nIR3B~u zcdH&qG>2*_yS0hkZ=O|z87yGL^G&LQ@2m0j008vW_w!?q>nuhtUY?jhe@qw>`!d3}7-2Ms7XYC^ho+cDgTJ#vn;#{b@*oxho=2 zTs>!BJ9qs>`Ww-$eG&zF3A}#5#GE2UUZ^*^(cWf1Reh0> zV*)jpXsCob+38Y5wwYwtv9d= z%l3Vbs1}V>M2*>n~1ftPJ{e z6;P~G*kdDYyl3RSdW(C;qGl=jiS5vbTNuYUD}v^ZUm9Kc@Tk5!xfz+=5Cww<*{iz- zB4Oah;z!9`d1Jb9eJc?$#s1&ndL!)hbzZUH9Md;64U|xav^1mlZsB&!zc&7nIHv0K zs!mqX?GO=Zs`c3F%N_M+ppr=ks6YRj#aA2ao_Dd6ubKm_5*?=;yV8doDC*_{VAr7i zAxr-i%ZTeLQK@?`Ep#}7=JolUFYF>wb!HM6)ek|cdJ?n`-uH3cI)08!QTZaJHr3nN z2+ZwI|8G!(NlcU+%eXnH3~+9m@^NUKfY+@r94Z;Aj73M_`atnaI;h^*EYH9!3`eDdsVV~JVDxD;|Wvz>Z*a%R7WT;t6CWWFD3e(&d{suJ?Kk3%cUlIuz9-`vZHHb?mireB zaH&F@0+jGZ<=bfjLQUgEi(#U>(62lxv~}f^TDlzbB$ZHmnHIhd63TFll>MT3QAg$9 zX)_CSOIC+7bG7y<8o%RDUez3D$}H!T`MC!DFf=Z!wDYTZkp?fb*(n>TlB_tas6J ztIm9Nyz7z+{&wPxkL+mrJGeOeFaf!dKIx5GmZST|YO{^6FYl@%_gB1=7f$t-epYBUPL;qzYU_L1%)_x2e8F z^}feF_=z*4kHa{GVDj7Qi}p1fzQ{3Qu{FQAFn*A!;l`3H-huo4m!bV7NAcOo;7_yi z3?nF7ihaTeG+fm6ZM7Nthe+MeMf30qIxwWj|9{Hrr7UQ4yk;vmH=f6#i|P}kr0N9a zg;!%2cn&(d(+=Mmj?8J5(|kw1)?Q}fKVEhzKr?HowPT2pW2rWdn&$(&EA-0!#n!WL z?WnqeQYRK0e4&wMe@B|e1RvD#uCC*=BO35RwG#wHFsl6)x$)h-;JL~2=T3{tgns?z zcxiu|XPJQyhFdB5njWzGKWfR9Za^~3p$m!jhH=6s#;bbc+X>oNHvtMzKT{N$e!XOG zYU`2pocnD>`VhHKkmN}J(>LD(q0sr@AA4m1PEKb_Oy7`n?jU5;Yr)xR2^!y@P@3e0^QNj?KW9Gsx{Z!)< zC7ug&iyzWYaO4_Ls^s$*-SZUM)MRzl9Zafl zyA}|>imF+k6zpe^DT-LBD%;Y*OEcgi2{eR0vPWFAz<1PMIje$mR4QN3l8I;3SMo*7 zA6L+5!O*;G#Pn;KeWvxaVqEQ0;i^$Xd3q-0JsnE=8Y&8`Or^UfmOgBb77ca_)Nynk zzDr+KSWxniL>-=b1jin_lY27-QXqNN;&$Idbiwyg9)(gMVmnY@9R*ut*Gcz(ZSK1jMX{^y-JU}&v1e2w=Okx9wD`=KIX@L%3 z$qB_v_wmO4<&LAmw9R#5B)3X;PNLkH5A{aMij{WxP2QDt{-`XAlH6>Qps>K^^N3=0 zmt5JR4_=(dVwbbW-Maff;B^fcoUvzmX>C?}7^-gW^cubnGsScWQm$u+_q8rf?E}Y~ zUp$V&6d%7n+Pt7p;iJ#@I3IQtx+EM-ao1;_Bwmn5k6M z@9EzAEJyQyrLfx_0Zp8$zli?JEW*WcxtICVh#vl~b)*l?QaJxlwQjf+V#ck-s?mJp0$$ZM~dNDI!esEm1>yPQ2ZUL)9oAyiKh{c-H)1K6!D5u-5hnK_p+B-YY}QXo*w-+jh^F6 z8=)J4bvWRqMQ*cP%}x^+`yQuRA5U|n?#baf3!I=1UC^HTh1pg{^0;vT5v9#=Y2r(# z{Np3ca)pWAqZy@C(DRZk3eEFPy|A!laHbYesH;J{$}Q_rdSgrXIjl^-YgD&rl;ne{1p%sDRKr4 zHSoMCh4H=XNUj3iOJQM$4pN%=1^AJ_8mTL0Cs2DC(^m8&={_IMSINFO?`fPM`ss>d zdfQeKA1;-oii`xfm=nKAbQJBvO7OyR<7G;A{=ZgVR-E9*URp-A>(oBFL`sBPw7j=m z@%1tq#=ys3lSZb9HA=&ygT*HxLbGjU1C$53(=Yj?1oK_CxNf~;c<7cI9>t!aOOl=c zkre*QHh4AyI@ij9(!|w*QYI+)G?Nc;?9SQa)Y&Zxr>Tdazy6>E6>7JXsB_Ch_|CVz zThrX~ONQj?W2}|LW0Ys5OTh-2aAn-?P6gVJ`wisG{aX5VmP~fP_SZW1wSY^G!q1*Pe&?#D9R8BkrG?S^%< z%$TB;Oo(>4%l87chG)B}=*|v3(HL;y&n#q$A+Rn{U-q;{w|Kka&E}i{Q2>!fOC=mW z8V!1CxVGP{99A8QauvR@GQd&;K@3UOvdR$%wLs*<>HS}|M6AGG%=6loj{P6WsDJg5 zPOn7=u@LbdrtJZ?|sI8ge3b)$2^b${XO>A{3oI$C+R-;YAG zj9g8h@(<^TdYJN7+J2LMjX;kvP zEmB!hHKe>mmac5O&6bWE1d4r3Y2@ayK!+Q_c9vhn*?Q=^Y}5M`R+fXj-~7-9EQRq$ zK9n_|-lxJ-7>ib9Wct+XF0VFW)CVmgc!hi>~9S$`anbFHb0moOU;rSzz zyQMwQhne^Ok>s@A$ctqW1ViyC=qurIU1IP@H$fOHuic$jA47yT7NCQ(&0iWd|7JW@ zU6Y=vqE~O~5+_fN7_1qIW;49upEE;nhmqvYmrxcg7p3}%S{22@Nc;)Pj?}3f|XI_N~{OL(}A=A*tRxmia z;S7o4p{xSP)q*|avn`cD80#wpvpTq5bvc;eeukH1O9eNsMDWDTNa~%(8nd$k1Rbr;Z?=WkM=d@Qg?W=UuN~xxjc?WleM0tNCf!ReT8x-B&>ec_AK3t zJ@;BGVfzg5V1%v@0TUh=S)~Nx?;2>1Dt)}k9%z87no8EcC$=7_*~7#PE}kow2V!AQrFlUM57W&$C|_PX{3%XlWT7Kf$B8EskiYn5-N(4k_gXqb$B$< z74oNXTdI9lBwkuO&l7ckk#RGZ8|AnV8zkC8_b>ju<}~e$Oj7#+oN3ZQH8J&EiU+kT zfBr|3I~e$$aZYRPTojR4bn389d!;Y^NRe$>>iP|RO3qI%nVt!Oj@Cx1Uz+RwfqLF3 z5$JheTmR$|%-{-Z%jMD)%e>J`5B(Npk7s{;2&2ezNZQha*?d}? z6I3|wSMY2VB9X;JBh4!lPe;&bERBQ zBp@Wtb76i?-!;l#)>I(`N5TbO)DXoR{VfP({N+Q`>?ndDt(Ed7Xfch5-~b&MNNtr1 zfo4i4g3c=mIE?VxliU99k{;))A&K3J!ii9oFfzV4!!H@ZFdJFH*3V=z zH4O#^NH?&)=u(~}ZK~aaP7LRVZ=vQd=yaRfuh9U$y@i@hCj52XAMt` z4+^jI{>F})M>^%$4O1+j^_uV@k)P4%1yPG=6uAqgJVq87s;a2Gj;5i&8VYZ=kp40w zXhhF{fPm4JN4An`3!3A>6KR#rE~v_zOGjnBQULKs+-C$Ss$Vkv+~T(53T+aeIU~MN zT_eM9-xVQqhPwoc$5wN~NZ(6EHl4xzkAkNL&kjbZzNRSIqFPBZds3fN6HQfsr~oIA z^XmoEtC8f;6-_ELsRyQH?PfDK>5VII@Pc)2e+@cr5by4|y>Rz|) zrh9P6=Nw}^mL*T;!GFz&9UnPio3_z{=Y^wS*~)^}v@}X|&{y1huG?arxpHZ?-$m$( z!UTl|MV(?D>4Mf%j&RJh#q3Y+3L15*eIjkX{-3(A>XAk#=s?2jUVChD(eP9XRC9E$nEgYb!t*Ag zu>Ofa1v3iQF>sCy4GWa}k55}DV`w+IneWoLO9@B~ZTy2HgXJ8)8lc!|vr&?t@7Yj} zXJCm}WoLO0M>D7%10><6{D?s>-&TvH_h3kIhVOHW#hv#M35TwW&lnoCXG5k(MZBF6 zs-jY-g{HvS_1)*Z%x*2os<$9Vq#f`MM~vTXxRj?Bo||}@-u9P8WQoDJv$lvCn~Y40 z=QyMX{YQ*Bws)5O!5=M-5We4h-OLq)o-xmXnoELx*gum0cgDT!Qb^lO-EVIaZ8pIz znz;G|RY*(|L!R1ibDPUNM*$DnyriGUD9u=j7W?)9hFXb`EjwLV)io!_mfFP_yU=lq ztEz{@ma|bYvEeW{J`A11`;TPM2PQ%p0`nyJ15Kbk4-&}-Oh=2=x(USx3acxV zNy`MhSoO({T{^Yk{&}xbB{!nz?5i&MY|EH=n#Fvgmf{#>@3)lwu^*zm|4HO%!+ZxM zI+?9di6knq2PT+sjggF1Z9;=T`BHoE4@N~!Y0|Xxo01#U)jQ16a!9h)498H0Z{H+_ zdq{4)aMe>$)zw#(@CWAmWsD-?D|Y7X+a)_6ImPE`3-Q}N1!Sf{%5bT<+6%9r()TIX zw@W?DGAy@BI7xM(3uKSTl9+m(7_qy$6GQjbMX*&Z9p#o!Rn^qE?)5sNC(BQqLkgZ` z(cV%^li4z+dti$CZ*fWr&`3V24Z~xNRyBu`hXCyGu@J6ZMbX|z;^qp$r=jW{Z;ihd zuC4m3affPg$us~8B9b>qz(t~I zHN{Z;99-mH-Zk(CyB<$r$F2c-z!W)&{+)vk&VGMg>@OOIo#qLZ)Ys3$?k_E2z+)r~ zqFiLrHzAI4egX1xAK?2c71F|Ig6}Hg)?x&#R7075dA1Ixo$S`Bs7*ev1l3uMimUzU zU?xiEI*G@jI%^P0OIr8YA`L)7fIxNOI%j+yx+M+6NORO_Y`yle$(XU-jtvC`qZcdskEFUBVlwVM2Kut_u1sJBVreiUCgrYdASsM*e^a

?M!qTx7Fm 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 mTdUDl_*U78 Date: Sun, 8 Sep 2024 14:04:50 -0700 Subject: [PATCH 11/11] feat(home-image): add dynamic images --- .../components/GlassRectangle/styles.ts | 41 +++++++++++++++++++ web/components/home/AboutImage/index.tsx | 12 ++++-- web/components/home/MoreSection/index.tsx | 6 ++- web/components/home/MoreSection/styles.ts | 4 ++ web/pages/index.tsx | 18 +++++++- 5 files changed, 76 insertions(+), 5 deletions(-) diff --git a/web/common/components/GlassRectangle/styles.ts b/web/common/components/GlassRectangle/styles.ts index 31ebc6f8..b0946b34 100644 --- a/web/common/components/GlassRectangle/styles.ts +++ b/web/common/components/GlassRectangle/styles.ts @@ -48,6 +48,33 @@ export const GlassContainer = styled.div` }, 0.27)`}; overflow: hidden; + &.home-page { + width: 51rem; + height: 37rem; + margin-right: auto; + margin-left: auto; + + @media ${({ theme }) => theme.responsive.below1199} { + width: 35rem; + height: 25rem; + } + + @media ${({ theme }) => theme.responsive.below599} { + width: 32rem; + height: 23rem; + } + + @media ${({ theme }) => theme.responsive.below479} { + width: 24rem; + height: 17rem; + } + + @media ${({ theme }) => theme.responsive.below379} { + width: 100%; + height: 16rem; + } + } + &.about-page { width: 51rem; height: 37rem; @@ -150,6 +177,10 @@ export const GlassImageWrapper = styled.div` margin-right: auto; opacity: ${({ opacity }) => opacity ?? '1'}; + &.home-page { + width: 100%; + } + &.about-page { width: 100%; } @@ -192,6 +223,16 @@ export const GlassImageWrapper = styled.div` export const GlassImage = styled.img` width: 100%; + &.home-page { + &--image-1 { + transform: scale(1.1); + } + + &--image-2 { + transform: scale(1.5); + } + } + &.about-page { transform: scale(1.1); } diff --git a/web/components/home/AboutImage/index.tsx b/web/components/home/AboutImage/index.tsx index ae4f06dd..f1e8a6c6 100644 --- a/web/components/home/AboutImage/index.tsx +++ b/web/components/home/AboutImage/index.tsx @@ -7,10 +7,16 @@ import GlassRectangle from 'common/components/GlassRectangle'; import { ImageWrapper } from './styles'; interface IAboutImageProps { + customClassName?: string; + imgAlt: string; imgSrc: string; } -const AboutImage: FC = ({ imgSrc }) => { +const AboutImage: FC = ({ + customClassName, + imgAlt, + imgSrc, +}) => { const imageAnimateControls = useAnimation(); const { inView: imageInView, ref: imageRef } = useInView(); @@ -32,14 +38,14 @@ const AboutImage: FC = ({ imgSrc }) => { ref={imageRef} > diff --git a/web/components/home/MoreSection/index.tsx b/web/components/home/MoreSection/index.tsx index 7c8bc2cb..704c4bc0 100644 --- a/web/components/home/MoreSection/index.tsx +++ b/web/components/home/MoreSection/index.tsx @@ -41,7 +41,11 @@ const MoreSection: FC = () => { }, [titleAnimateControls, titleInView]); return ( -

+
More diff --git a/web/components/home/MoreSection/styles.ts b/web/components/home/MoreSection/styles.ts index 3e6d48eb..9b7cbc58 100644 --- a/web/components/home/MoreSection/styles.ts +++ b/web/components/home/MoreSection/styles.ts @@ -15,6 +15,10 @@ export const Section = styled(motion.section).attrs(() => ({ padding-left: 12rem; text-align: right; + &.home-page__more-section { + margin-top: 0; + } + @media ${({ theme }) => theme.responsive.below1199} { padding-left: 3rem; } diff --git a/web/pages/index.tsx b/web/pages/index.tsx index 0ece3d2a..e336925f 100644 --- a/web/pages/index.tsx +++ b/web/pages/index.tsx @@ -146,7 +146,11 @@ const Home: NextPage = ({ isFirstMount }) => { - + @@ -159,6 +163,18 @@ const Home: NextPage = ({ isFirstMount }) => { + + + + + + + {/* */} +