14 lines
No EOL
82 KiB
HTML
14 lines
No EOL
82 KiB
HTML
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta property="og:title" content="Portfolio | András Schmelczer"/><meta property="og:description" content="Discover my projects."/><meta property="og:url" content="https://schmelczer.dev"/><meta property="og:image:width" content="1500"/><meta property="og:image:height" content="785"/><meta property="og:image" content="https://schmelczer.dev/og-image.jpg"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link rel="icon" href="favicon.ico" type="image/x-icon"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/><link rel="manifest" href="/site.webmanifest"/><meta name="description" content="I'm András Schmelczer, and this is my portfolio. I enjoy undertaking and solving challenging problems. Discover some of my projects."/><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"/><meta name="theme-color" content="#b7455e"/><title>Portfolio | András Schmelczer</title><style>#background{transform-style:preserve-3d}@media print{#background{display:none}}#background>div{position:absolute;width:140px;border-radius:1000px;transition:background-color var(--transition-time)}#background>div:nth-child(odd){background-color:#fff9e0}#background>div:nth-child(even){background-color:#ffd6d6}html[theme=dark] #background>div{background-color:#2c477a}
|
|
#contact{text-align:center;margin:var(--large-margin) auto 0 auto}#contact>h2{margin-bottom:var(--normal-margin)}#contact>h2>a{font:400 3rem "Comfortaa",sans-serif;font-style:normal;color:var(--normal-text-color);line-height:1;transition:color var(--transition-time);text-decoration:none;position:relative}@media(max-width: 924px){#contact>h2>a{font-size:3rem;line-height:1.1}}#contact>h2>a:before{content:"#";position:absolute;left:-0.5ch;top:0;opacity:0;transform:translateX(-100%);transition:opacity var(--transition-time)}#contact>h2>a:hover:before{opacity:.5}#contact>.links{display:inline-block}#contact>aside{margin:var(--large-margin) auto var(--line-height) auto}#contact>aside>p{font:400 1rem "Open Sans",sans-serif;color:var(--special-text-color);font-style:italic;transition:color var(--transition-time);color:var(--normal-text-color);opacity:.75}
|
|
.image{overflow:hidden}.image img{max-width:100%;max-height:100%}.image img:not([image-viewer-ignore]){cursor:pointer}
|
|
#about{text-align:center;box-shadow:var(--shadow);padding:var(--normal-margin);background-color:var(--accent-color);font-size:0}#about ::selection{background-color:var(--very-light-text-color);color:var(--accent-color)}#about h1,#about .placeholder{font:400 3rem "Comfortaa",sans-serif;font-style:normal;color:var(--normal-text-color);line-height:1;transition:color var(--transition-time)}@media(max-width: 924px){#about h1,#about .placeholder{font-size:3rem;line-height:1.1}}#about .image{width:125px;height:125px;border-radius:100%;box-shadow:var(--shadow);margin:auto}#about p{text-align:justify}#about h1{hyphens:none}#about p,#about h1{color:var(--very-light-text-color);margin-top:var(--line-height)}@media(max-width: 924px){#about :focus:not(:hover){outline:var(--very-light-text-color) solid var(--line-width)}}@media(min-width: 925px){#about{width:var(--body-width);margin:calc(var(--normal-margin) + 190px * 1 / 3) auto var(--large-margin) auto;position:relative;border-radius:var(--border-radius)}#about .image{width:190px;height:190px;position:absolute;left:0;top:0;transform:translateY(-63.3333333333px) translateX(-63.3333333333px)}#about .placeholder{width:calc(190px * 2 / 3 - var(--normal-margin));height:calc(190px * 2 / 3 - var(--normal-margin));box-sizing:content-box;float:left;margin:0 .75ex .5ex 0}#about h1{text-align:left;margin-top:0}}
|
|
#theme-switcher{background-color:var(--accent-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;width:calc(2 * var(--icon-size));height:var(--icon-size);border-radius:1000px;box-shadow:inset 0 0 10px 2px rgba(0,0,0,.175),inset 0 0 1px rgba(0,0,0,.4)}@media(min-width: 925px){#theme-switcher{position:absolute;top:calc(-1*var(--small-margin));right:calc(-1*(50vw - var(--body-width)/2) + var(--normal-margin));transform:translateY(-100%)}}@media(max-width: 924px){#theme-switcher{position:relative;margin-top:var(--normal-margin)}}#theme-switcher:before{width:calc(0.7 * var(--icon-size));height:calc(0.7 * var(--icon-size))}#theme-switcher:after{width:calc(calc(0.7 * var(--icon-size)) * 0.8);height:calc(calc(0.7 * var(--icon-size)) * 0.8)}#theme-switcher:before,#theme-switcher:after{content:"";position:absolute;display:block;border-radius:1000px;top:50%;transform:translateY(-50%);transition:transform var(--transition-time),background-color var(--transition-time)}#theme-switcher:not(:checked):before{transform:translateY(-50%) translateX(calc(3 * calc((var(--icon-size) - calc(0.7 * var(--icon-size))) / 2) + calc(0.7 * var(--icon-size))));animation:shine 2s linear alternate infinite;background-color:var(--sun-color)}@keyframes shine{from{filter:brightness(1.01);box-shadow:0 0 4px 2px var(--sun-color)}to{filter:brightness(1.2);box-shadow:0 0 15px 2px var(--sun-color)}}#theme-switcher:not(:checked):after{background-color:rgba(0,0,0,0);transform:translateY(-50%) translateX(calc(var(--icon-size) * 2 - calc(0.7 * var(--icon-size))))}#theme-switcher:checked:before{background-color:var(--normal-text-color);transform:translateY(-50%) translateX(calc((var(--icon-size) - calc(0.7 * var(--icon-size))) / 2))}#theme-switcher:checked:after{background-color:var(--accent-color);transform:translateY(-50%) translateX(calc(calc((var(--icon-size) - calc(0.7 * var(--icon-size))) / 2) + calc(0.7 * var(--icon-size)) * 0.33))}
|
|
#image-viewer{display:flex;align-items:center;justify-content:center;backdrop-filter:blur(var(--blur-radius));-webkit-backdrop-filter:blur(var(--blur-radius));visibility:hidden;position:fixed;left:0;top:0;width:100%;height:100%}@supports not ((backdrop-filter: blur(var(--blur-radius))) or (-webkit-backdrop-filter: blur(var(--blur-radius)))){#image-viewer{background-color:var(--card-color)}}#image-viewer img{width:auto;height:auto}@media(min-width: 925px){#image-viewer img{max-width:80vw;max-height:80vh}}@media(max-width: 924px){#image-viewer img{max-width:95vw;max-height:80vh}}#image-viewer #cancel{background:none;border:none;display:block;box-sizing:content-box;cursor:pointer;text-decoration:none;width:calc(var(--large-icon-size) + var(--normal-margin)*2);height:calc(var(--large-icon-size) + var(--normal-margin)*2);position:absolute;right:0;top:0}#image-viewer #cancel:hover svg{transform:translateX(-50%) translateY(-50%) scale(1.15)}#image-viewer #cancel svg{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);width:var(--large-icon-size);height:var(--large-icon-size);transition:transform var(--transition-time);transform-origin:center center}#image-viewer #cancel:focus:not(:hover){outline:var(--very-light-text-color) solid var(--line-width)}
|
|
main{height:100%;overflow-x:hidden;overflow-y:scroll;perspective:5px;background:rgba(0,0,0,.005)}@media(hover: hover){main::-webkit-scrollbar-track,main::-webkit-scrollbar{background-color:rgba(0,0,0,0);width:12px}main::-webkit-scrollbar-thumb{background-color:var(--accent-color);border-radius:var(--border-radius)}}
|
|
.timeline-element{display:flex;width:var(--body-width);margin:auto}.timeline-element .line-container{position:relative}.timeline-element .line-container .line{height:calc(33% - var(--icon-size) / 2)}.timeline-element .line-container .line:before{height:calc(100% - 33% - var(--icon-size) / 2)}.timeline-element .line-container .line:after{top:calc(33% - var(--icon-size) / 2)}.timeline-element .line-container .date{top:calc(33% - 0.5ch)}.timeline-element .line-container .line{border-left:var(--line-width) solid var(--accent-color)}.timeline-element .line-container .line:before,.timeline-element .line-container .line:after{content:"";position:absolute}.timeline-element .line-container .line:before{left:0;bottom:0;border-left:var(--line-width) solid var(--accent-color)}.timeline-element .line-container .line:after{width:var(--icon-size);height:var(--icon-size);border-radius:1000px;border:var(--line-width) solid var(--accent-color);left:calc((var(--line-width) - var(--icon-size))/2)}.timeline-element .line-container .date{font:400 1rem "Open Sans",sans-serif;color:var(--special-text-color);font-style:italic;transition:color var(--transition-time);position:absolute;transform-origin:left center;transform:rotate(30deg) translateX(calc(var(--icon-size) / 2 + 6px)) translateY(-10%);padding-right:var(--normal-margin)}@media(min-width: 925px){.timeline-element .line-container{min-width:160px}.timeline-element:not(:first-of-type) .card{margin-top:var(--large-margin)}}@media(max-width: 924px){.timeline-element{flex-direction:column;align-items:center}.timeline-element .line-container{height:150px;min-width:64%}.timeline-element .line-container .line{height:calc(50% - var(--icon-size) / 2)}.timeline-element .line-container .line:before{height:calc(100% - 50% - var(--icon-size) / 2)}.timeline-element .line-container .line:after{top:calc(50% - var(--icon-size) / 2)}.timeline-element .line-container .date{top:calc(50% - 0.5ch)}.timeline-element .line-container .date{transform:translateX(calc(var(--icon-size) / 2 + 12px)) translateY(-10%)}}.timeline-element .card{box-shadow:var(--shadow);border-radius:var(--border-radius);z-index:1;background-color:var(--blurred-card-color);transition:background-color var(--transition-time);backdrop-filter:blur(var(--blur-radius));-webkit-backdrop-filter:blur(var(--blur-radius))}@supports not ((backdrop-filter: blur(var(--blur-radius))) or (-webkit-backdrop-filter: blur(var(--blur-radius)))){.timeline-element .card{background-color:var(--card-color)}}.timeline-element .card .image,.timeline-element .card video,.timeline-element .card iframe{border-radius:var(--border-radius) var(--border-radius) 0 0}.timeline-element .card .lower>*{padding:0 var(--normal-margin);margin-top:var(--small-margin)}.timeline-element .card .lower h2{text-align:center;margin-bottom:-10px}.timeline-element .card .lower h2>a{font:400 1.75rem "Comfortaa",sans-serif;color:var(--normal-text-color);font-style:normal;hyphens:auto;transition:color var(--transition-time);text-decoration:none;position:relative}.timeline-element .card .lower h2>a:before{content:"#";position:absolute;left:-0.5ch;top:0;opacity:0;transform:translateX(-100%);transition:opacity var(--transition-time)}.timeline-element .card .lower h2>a:hover:before{opacity:.5}.timeline-element .card .lower .description,.timeline-element .card .lower .info-button{text-align:center}.timeline-element .card .lower .more{overflow:hidden;margin:0;height:0;transition:height var(--transition-time-long)}.timeline-element .card .lower .more>p{margin-top:var(--line-height)}.timeline-element .card .lower .buttons{display:flex;justify-content:center;border-top:1px solid var(--normal-text-color);transition:border-color var(--transition-time);margin:0;padding:0;margin-top:var(--small-margin)}.timeline-element .card .lower .buttons .info-button{display:block;box-sizing:content-box;cursor:pointer;text-decoration:none;font:400 1.1rem "Open Sans",sans-serif;color:var(--normal-text-color);line-height:1.8;hyphens:auto;transition:color var(--transition-time)}.timeline-element .card .lower .buttons .info-button:hover svg{transform:translateX(-50%) translateY(-50%) scale(1.15)}.timeline-element .card .lower .buttons .info-button svg{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);width:var(--icon-size);height:var(--icon-size);transition:transform var(--transition-time);transform-origin:center center}.timeline-element .card .lower .buttons .info-button .svg-container{position:relative;margin:auto;width:var(--icon-size);height:var(--icon-size)}.timeline-element .card .lower .buttons .info-button .svg-container svg{transition:stroke var(--transition-time),transform var(--transition-time)}.timeline-element .card .lower .buttons .info-button p{padding-bottom:var(--small-margin);font-size:.9rem;font-style:italic;padding:0 8px var(--small-margin) 8px}.timeline-element .card .lower .buttons>*{flex:1;padding-top:var(--small-margin)}.timeline-element .card .lower .buttons>*:not(:last-child){border-right:1px solid var(--normal-text-color);transition:border-color var(--transition-time)}
|
|
.video-container.loaded>.start-button,.video-container:not(.loaded)>video{visibility:hidden}
|
|
.image-anchor{display:flex;align-items:center;text-decoration:none}.image-anchor:not(:first-child){padding-top:var(--line-height)}.image-anchor svg{width:var(--icon-size);height:var(--icon-size);margin-right:calc(var(--small-margin)/2)}.image-anchor span{font:400 1rem "Open Sans",sans-serif;color:var(--special-text-color);font-style:italic;transition:color var(--transition-time);text-decoration:none;cursor:pointer;position:relative;display:inline-block;overflow:hidden;padding:0 3px 2px 0;font-size:1.4rem}.image-anchor span:before,.image-anchor span:after{content:"";display:block;position:absolute;bottom:0}.image-anchor span:before{width:calc(100% + 10px);border-bottom:2px dashed var(--accent-color);transition:transform var(--transition-time)}.image-anchor span:after{width:100%;height:2px;background:linear-gradient(90deg, var(--card-color) 0, transparent 4px, transparent calc(100% - 4px), var(--card-color) 100%)}.image-anchor span:hover:before{transform:translateX(-10px)}
|
|
.image-button{display:block;box-sizing:content-box;cursor:pointer;text-decoration:none}.image-button:hover svg{transform:translateX(-50%) translateY(-50%) scale(1.15)}.image-button svg{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);width:var(--icon-size);height:var(--icon-size);transition:transform var(--transition-time);transform-origin:center center}.image-button>.svg-container{position:relative;margin:auto;width:var(--icon-size);height:var(--icon-size)}.image-button>.svg-container>svg{transition:stroke var(--transition-time),transform var(--transition-time)}.image-button>p{padding-bottom:var(--small-margin);font-size:.9rem;font-style:italic;padding:0 8px 8px 8px;text-align:center}
|
|
.preview{position:relative}.preview .overlay{width:100%;height:100%;position:absolute;left:0;top:0}.preview .overlay iframe{position:absolute;left:0}.preview .overlay .loading{width:var(--large-icon-size);height:var(--large-icon-size);position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);visibility:hidden}.preview .overlay iframe{width:100%;height:100%;border:none}.preview .overlay iframe:fullscreen{border-radius:0}.preview.loaded .figure-container,.preview.loaded .start-button{visibility:hidden}.preview.loaded .loading{visibility:visible}
|
|
@font-face{font-family:"Comfortaa";font-style:normal;font-weight:400;font-display:swap;src:local(""),url(04d2b916.woff2) format("woff2"),url(29092020.woff) format("woff")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:400;font-display:swap;src:local(""),url(a1535f45.woff2) format("woff2"),url(7958f4e4.woff) format("woff")}:root{--transition-time: 200ms;--transition-time-long: 300ms;--line-width: 4px;--line-height: 18px;--accent-color: #b7455e;--sun-color: #f7f78c;--very-light-text-color: #ffffff;--background: #ffffff;--normal-text-color: #31343f;--card-color: #ffffff;--blurred-card-color: transparent;--blur-radius: 16px;--special-text-color: var(--accent-color)}@media(min-width: 925px){:root{--border-radius: 15px;--large-margin: 80px;--normal-margin: 45px;--small-margin: 25px;--shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.2);--inset-shadow: inset 0 -9px 7px -7px rgb(0, 0, 0, 0.15);--icon-size: 45px;--large-icon-size: 60px;--body-width: 765px}}@media(max-width: 924px){:root{--border-radius: 10px;--large-margin: 60px;--normal-margin: 30px;--small-margin: 15px;--shadow: 0 0 10px 2px rgba(0, 0, 0, 0.075), 0 0 1px rgba(0, 0, 0, 0.125);--inset-shadow: inset 0 -9px 7px -7px rgb(0, 0, 0, 0.15);--icon-size: 35px;--large-icon-size: 55px;--body-width: 90%}}html[theme=dark]{--background: #242638;--normal-text-color: #ffffff;--card-color: #263551;--blurred-card-color: #212f4a77;--blur-radius: 30px;--special-text-color: #ffffff;--inset-shadow: inset 0 0 10px 2px rgba(0, 0, 0, 0.25), inset 0 0 1px rgba(0, 0, 0, 0.4)}*,*::before,*::after{margin:0;box-sizing:border-box}@media(prefers-reduced-motion){*,*::before,*::after{transition:none !important;animation:none !important}}html[animations=off],html[animations=off] *,html[animations=off] *::before,html[animations=off] *::after{transition:none !important;animation:none !important}html{height:100%}@media(max-width: 924px){html{font-size:.8rem}}@media print{html{font-size:.7rem}}body{background-color:var(--background);transition:background-color linear var(--transition-time);padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);height:100%}@media print{body{height:auto}}svg{stroke:var(--normal-text-color)}p{font:400 1.1rem "Open Sans",sans-serif;color:var(--normal-text-color);line-height:1.8;hyphens:auto;transition:color var(--transition-time)}noscript{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font:400 1.75rem "Comfortaa",sans-serif;color:var(--normal-text-color);font-style:normal;hyphens:auto;transition:color var(--transition-time)}.start-button{display:block;box-sizing:content-box;cursor:pointer;text-decoration:none;position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);width:calc(var(--large-icon-size) + var(--normal-margin)*2);height:calc(var(--large-icon-size) + var(--normal-margin)*2);transform:translate3d(-50%, -50%, 0.00001px)}.start-button:hover svg{transform:translateX(-50%) translateY(-50%) scale(1.15)}.start-button svg{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);width:var(--large-icon-size);height:var(--large-icon-size);transition:transform var(--transition-time);transform-origin:center center}.start-button:hover svg{box-shadow:var(--shadow)}.start-button svg{border-radius:10000px;backdrop-filter:blur(var(--blur-radius));-webkit-backdrop-filter:blur(var(--blur-radius));transition:transform var(--transition-time),box-shadow var(--transition-time)}@supports not ((backdrop-filter: blur(var(--blur-radius))) or (-webkit-backdrop-filter: blur(var(--blur-radius)))){.start-button svg{background-color:var(--card-color)}}.start-button.inverted svg{fill:var(--accent-color)}.figure-container{font-size:0;box-shadow:var(--inset-shadow);border-radius:var(--border-radius) var(--border-radius) 0 0;pointer-events:none;position:relative}.figure-container *{pointer-events:auto}.figure-container .image,.figure-container video,.figure-container iframe{z-index:-1;position:absolute;top:0;left:0;height:100%;width:100%}video,iframe{transform:translate3d(0, 0, 0.00001px)}.image,video,iframe{user-select:none}:focus{outline:none}:focus:not(:hover){outline:var(--accent-color) solid var(--line-width)}::selection{background-color:var(--accent-color);color:var(--very-light-text-color)}
|
|
</style></head><body><noscript>Javascript is required for this website.</noscript><script>!function(){var e={883:function(e,t,i){e.exports={srcSet:i.p+"1553f26a.webp 200w,"+i.p+"0ad519de.webp 500w,"+i.p+"3d2c9333.webp 900w,"+i.p+"a7dfc41b.webp 1400w,"+i.p+"7601fe61.webp 1920w",images:[{path:i.p+"1553f26a.webp",width:200,height:113},{path:i.p+"0ad519de.webp",width:500,height:281},{path:i.p+"3d2c9333.webp",width:900,height:506},{path:i.p+"a7dfc41b.webp",width:1400,height:788},{path:i.p+"7601fe61.webp",width:1920,height:1080}],src:i.p+"7601fe61.webp",toString:function(){return i.p+"7601fe61.webp"},placeholder:"data:image/webp;base64,UklGRkwDAABXRUJQVlA4IEADAACwDgCdASpAACQAPk0ei0QioaEarAQAKATEsQBZ2dWAoklWdvZx1IVuFc2TbLk+EYwAgiuVU0RPUGoQHjuTQyX7c58MK8cdoVxB5CwoXYX2Z0M1h50iS1725AHPGLUYeboa3nJpOIJWdZ30C7tEeah3e4Pl7L1tyL38fKprY3AA/v86v6NfyOnX8Ts68ID/IrvxuSed5onDG/sxIPnX1jHS9Ssy52XgzJovJ+kfH3HUv2tzvlfTjkdnJHfoij7GMY977f/3NlywvXiPbjJg9WVT0h7+nYlbGbg7xeHnsnFFZSDwdDan5+YgX5q6ZM/X2X8ORvfAuuHW//RUC0eru6W1QTObU6RUMKGfy7a9Gr0RVpma7zMtVvZiF6/eVMw2CsEl60f/J3Mo/6RgELKV8D2rj86sN02cbZld5ddlARCVfqhQo10WtZaxP4oxvrEYOEaTZks+AWhltzGQearsvg9DvOn3tB+KzkzfWbWrNy4FYtlqvoKBqUhDBQD0CiFlstSZdv8ihVENCXRaRqd7ZpwmIte0ya2CyI3BAnm30emdcsrbbrm+n8RYOQGEBaKsROr+5fXs2+dgAippgiqAnxSHu7+Qx/FYM18ZIm6KS+/MnVWvtQn/x4OwzCbOm8Hn5TVT+r94E2ZG/8q8LlabEBotfucan+OJo+dpw6aO2wfJ9khPFP7PIKRf/OXr1f1TgOoBqfN2+9xddn7+cEDiydBqh94vOlR0H+afOUB9YnS73DOJO5djL5AJP3s86mwVqHtOD5sz/mkeGk54w2FaC1yX3sjMe9o4cwvcCVsnu+nWCPKu4mkQOLWdvlVq42nWSwYB1aNXrM9Jx6kLQ1feydFLwvO0KJQqelSEhCPLwo4ELTzSstMCynUBEiVZl1SdIcwkpX7L9rDNch4/DmAhrHdmuLdOdk9vPIImghabevsRb+IDtpA2U9IHAxfjzhTS6fBeyEBxyaGrZkkq28gXqxC4oTyt0q3Fa9O5a32uTil0sRHrdYUacOs6vFs7r+k9wGxiWBWUOtnHL7xWv/SJLmrT0kiGI5otncPHcnL7rr8TGhI3FXyOCgT6vaM+E/BEQsa/llqD202bBaj7LCyAAAAA",width:1920,height:1080}},195:function(e,t,i){e.exports={srcSet:i.p+"621cb023.webp 200w,"+i.p+"8815cd3b.webp 500w,"+i.p+"a02c2573.webp 900w,"+i.p+"88bbbe7c.webp 1400w,"+i.p+"43a05b98.webp 1920w",images:[{path:i.p+"621cb023.webp",width:200,height:130},{path:i.p+"8815cd3b.webp",width:500,height:324},{path:i.p+"a02c2573.webp",width:900,height:584},{path:i.p+"88bbbe7c.webp",width:1400,height:908},{path:i.p+"43a05b98.webp",width:1920,height:1245}],src:i.p+"43a05b98.webp",toString:function(){return i.p+"43a05b98.webp"},placeholder:"data:image/webp;base64,UklGRsoBAABXRUJQVlA4IL4BAADQCwCdASpAACoAPk0gjEQioiEYCq6oKATEoAsR8ST8Ai+8e6YV6+PWHAJBL59vHF/R/x+cuXDd543QepYi8AZyYOj0pxafheYIOvqpdOog5uSKue15O1iQ7FY+M9NQYTAXlkB3ct4AAP78SriMHqWYENUnAHvaKVTFfKTumuccUa7ldp67R3Sc/+hmq/7snO/1fezoQvgWFIqZjHEq1gTVPml1PSz4+R6x2IpgRcMuw/WqTuJIcld8aPgNwZH54nk3FVXe6bPSk3J7t/mkuF8GLspPWc4RE3kuwzASRJZ8uJn+MNjPl5vDbynwsBlDZoKSICMYglIGSg+XdKrNGOPEa7Ujuq/t7h66b2odoAsVeaHlucNaX5Y6e4E9nXcHSQTLffY4Dnm43VD737lchNLpIBICU90jTcaf9I64qFXs9uhBc3Owyba6CW1oPVLTjj99tQ1rcp8IojfMuhZuC1qlDgFEnnQTg/loK5ki0khqF3O9QPfJng04deoBaxsQflL5r/UUUprVtg+OI+GpdJpmrsypoiwdbLobVhcDKwNPa42S4CU7ckN/+ZUsQ9QSvaxa9UnqpbAGw1033UAAAA==",width:1920,height:1245}},461:function(e,t,i){e.exports={srcSet:i.p+"c95c0c6e.webp 200w,"+i.p+"46bda0fc.webp 500w,"+i.p+"299161f6.webp 900w,"+i.p+"5eb3d241.webp 1400w,"+i.p+"00f2a57d.webp 1920w",images:[{path:i.p+"c95c0c6e.webp",width:200,height:96},{path:i.p+"46bda0fc.webp",width:500,height:240},{path:i.p+"299161f6.webp",width:900,height:432},{path:i.p+"5eb3d241.webp",width:1400,height:671},{path:i.p+"00f2a57d.webp",width:1920,height:921}],src:i.p+"00f2a57d.webp",toString:function(){return i.p+"00f2a57d.webp"},placeholder:"data:image/webp;base64,UklGRgoCAABXRUJQVlA4IP4BAABQCgCdASpAAB8APk0gjEQioiEYDAYAKATEsQBdh7IHAAfqB6Xfsb/tF6OcVBrTgwTPe7dSHZah1lyrCE7LM43yclJ1mpZhFIMmb0SZwCaHqyrHHiM9CVviSE6gAP7/tduTsLmGg5qOSbmZ2L52RL/QIdLz4IwgCdt719SEz4xDdvPHIOX7ZYnQ+0Ahm62tLQM47CZ+kDtmsFeehIfU4NB/nguzwGhVkC3addAb5FY2/Fd+K/5zKPhbixynxtb+PfPd/8RHYYg9VsnPFQmgQfMi063cbZAi3pzmpWDPHfsGG6vlFoLkqDfiT2P5a7GNGzz3tFf1a1Yy1Ah9MASwSnavCs5IPr7sBUXi+X76O5phQi53cmn4gMIYnHgg4XJ6ve0f7UJkAtnIWaGTuZtCk8GCLYZ6VhaZ2m6jE7SInAdQUEqMrjx9CcRdh09QTv79K4/Uyw45KguJWuChRnnxYW8AWdkeAMYMM2ZGnseVfEqnMSyiv6SPys82qOYaLZu81bqAnLg7szyycUjt9sHACz+RnvNryKMbWT8oztAS5lKx3onZ5sazCbuwg83ZBylhw38HN/zIXu4spnqoQyEkjDcopcrxhNZLJnFnCvFerWgg6wqN9Gbg3chG1+VQihF4tpr8g0Yg2hbJfaZ1k3749fG26l3v+rlUfl/+p1z/iAA=",width:1920,height:921}},462:function(e,t,i){e.exports={srcSet:i.p+"dd95464b.webp 200w,"+i.p+"d2f4a479.webp 500w,"+i.p+"7d2488b6.webp 900w,"+i.p+"fb30e84a.webp 1054w",images:[{path:i.p+"dd95464b.webp",width:200,height:121},{path:i.p+"d2f4a479.webp",width:500,height:304},{path:i.p+"7d2488b6.webp",width:900,height:546},{path:i.p+"fb30e84a.webp",width:1054,height:640}],src:i.p+"fb30e84a.webp",toString:function(){return i.p+"fb30e84a.webp"},placeholder:"data:image/webp;base64,UklGRjQCAABXRUJQVlA4WAoAAAAQAAAAPwAAJgAAQUxQSBYAAAABF/D4/4iIQUhA2OD/X12K6P8ESP0LVlA4IPgBAABQCgCdASpAACcAPkkcikQioaEdWZ4AKASEtABejIAdRR2TsHyACSHXFKuDtrfHBBRaXLlOOBcxsIg4BB1PsmDEtcOzvYUCiNuTkw24YTEPIHHgyhY/ExrFecpQAP5T8zYF5C4LsfOlbjrDpBAtm5hdF788OH+Mo+9JE1Cal9f9qlsM5h5pjU7ypthFGsijLuSbc8yXetm354aP7/4iKrB47/rv8HJlm9A+OB8f/kSsjSfShjzsGYIhG7I/VCr4kxUtBUjhUKjki5HTO7oeo3dTsEZtpED+/b4iNmINFiPYcV5T1N0ygAKe6Hvp4UI7D0VfDX5+J38++h8zOk6b/c//idUv9f/gV4oyxpZy7goQak0KxCMWNRsB/mGVfeN5meGJ76sIIMqnhxQsYxXPlmOPkzcYGmxQNKqtCSYVwlfg1Npbl6ALjkc6Evr/kryxfddXdocFjt8xOOG10ccbjPn0Aa9oXQFhf571I3BhZgYpa2TDPMyBofZc0bGiTeqeAefP8JjAVBv2mBfZZZ49fQqPYCCIFz5rDCmgZHHgKNeFs3xSx+b5u7IG2sLgEvqH3OI0k1yV0rXNcDxVrHgZIl3NUl/UxmSO2h31FOjECzFB04J0T+PwQCtrmo3hZx2k/m/cq4O/z/RaJF+YACjCY69cbA1KJC+WCAA=",width:1054,height:640}},890:function(e,t,i){e.exports={srcSet:i.p+"d0d718fc.webp 200w,"+i.p+"dc1cb32b.webp 500w,"+i.p+"465319ce.webp 900w,"+i.p+"327a16f4.webp 1280w",images:[{path:i.p+"d0d718fc.webp",width:200,height:113},{path:i.p+"dc1cb32b.webp",width:500,height:281},{path:i.p+"465319ce.webp",width:900,height:506},{path:i.p+"327a16f4.webp",width:1280,height:720}],src:i.p+"327a16f4.webp",toString:function(){return i.p+"327a16f4.webp"},placeholder:"data:image/webp;base64,UklGRn4DAABXRUJQVlA4IHIDAAAwEgCdASpAACQAPlEejUQjoaGVWgd8OAUEtgBWGaYBZ8w8x2uv4nGT4Im2P5ADqbutH9AD9cvS+/aP4cPKZper3X8e8qK9Y4bZXJiz/UcZvcU/5LUy+grodehP+L6rf/D4ABK3+mBO1Mh6EpIdzOI+l4k4o6tlwch3JSdZkacWfq4ZLGS2AncwZA/ycgLGZIVTSTvnCTKTQmEAAP7/nSpX2lbEM8LQMuilmVrLnGII4X5QjgexB8qScO4NTeU1LSl4/6F/QZavyqoWdxDmX/5ILH3H0pZCRmuVC6xSZkbGiIj7apM14FP5x7SKTyELaBE/sw7zSu4PxtW3Nuah4f9B/LzBD8O/myEjnm/aRBMdde063g99KRQO0djIZNXVPPta6sosKvdA/aULjujq0LP1F0uBRU/+O3cUMooo0R7DntuxAIY7eTDy7rY8EKuDnHx3h5/OKN+vt+ePUPO3Ooc4mCBxoJBenJ/8Qd13TtqNw/wp/4E3+cdgEQ4pr/vFXKtO3Q6X4KHi3qzf6SpfkfAM9Omru9smCYlmv6/bOWqxzJ+qMk28u/8pPKvmRd/YZ8lRoHZl6Jbj/5faC//w/kVzjOdgFdbJZH4bEX/EAdPl0IXEZPM/ONQwM6y3D3WBy/+4H/78REnuDL7Y4a9FhDuHAgLzR5jaGmQLOKQGZZZIlZcCOl1W3owFS6FKLyaF7LDG0/x+F3Ap4D1clqgiHEilpwjBw0kg7DXD/0jolrnxXtBn8Sxm/4SAvA2lSONEkfpaf/lAReCHwRcWYY0blOjCqu5cnr+LvRPyanyrxcMI494VIBgsuWTuP0qtcRySbyqse+jRi8BvDUAw29nrVY3Tqyy1qzQYPcg7ESo9pbuuahVGEmHie/QsGlhJ+PNKUZExf/Pk8YKze6hlgaM3dIna4NdmOCt/K9XLg+E6P9//0VRP5oxRWyLYGJ/m7DkKMv4uGw3RgfpVwOAnWRp1sICab/yR9ZDPieiRYqRv3NfTuk3LYdEN7grSVAriL6K/8Ii5N8PZXs+m89swL9sQ9t/vR9d1sXuQD87pZIQHzyaExnknL8rwkfNWau/5oe/JILvslkdf5pPYzpwCpm6LwzNjEn53e5Y/kEQYOZeI1e1D5Djzdjr7VnhUVzvBPet/HEvUM+AoSom8zT4UTebtZfigAAA=",width:1280,height:720}},360:function(e,t,i){e.exports={srcSet:i.p+"0e09c4de.webp 200w,"+i.p+"87c540f3.webp 500w,"+i.p+"fce0068f.webp 900w,"+i.p+"16846a39.webp 1400w,"+i.p+"6a310a95.webp 1920w",images:[{path:i.p+"0e09c4de.webp",width:200,height:200},{path:i.p+"87c540f3.webp",width:500,height:500},{path:i.p+"fce0068f.webp",width:900,height:900},{path:i.p+"16846a39.webp",width:1400,height:1400},{path:i.p+"6a310a95.webp",width:1920,height:1920}],src:i.p+"6a310a95.webp",toString:function(){return i.p+"6a310a95.webp"},placeholder:"data:image/webp;base64,UklGRngFAABXRUJQVlA4IGwFAADQFwCdASpAAEAAPlEejUQjoaEYCgb8OAUEsgBdmZoiR9u81Sx91COpDC26vO0ejLeUvQA6Yazx+Ev4Dwj8dPq+S/3NajXyH78RWT050r3w6Gv9V4wBkLQw9WewZ0nfQActHvaIk5LoEmWandVTWjbC2tQQ1e4q+wkkSUs3OvRij8xv/UU4zvDDwi/ZTPKyE0p6G36e2xadfJ5BKuQrW8tr4G47ZZzkNuHWo+pTyWoCGq4OyEQzzguXWcX4P8NSgKCc3Oalf6dgAP7/gg4GtB33JxMkIn0s4iA2/Srod7ET8OMzrUyRT0BWstJD11U7xOCO9EvLfEa20ZsWoHV8+nPdnzoADX5nhS5myaOCnkLc+qSbwOtB4JwW6UsHfuFPOqGTdI2MQ6o2K7AKGEjHqhIvE5ySubQRBK6RsD4sag2dT3NwxRvNFY+Ci942f+rAxpAF8LVWkcZZ4a04bTmGylcev4Lm1BXejadjNuKM1EQbiM9EPvrV4dbZed3tPYW5DPz7S1za3vLjRGh2LP5YoJfXFDgnwG0MvpJY++//4HsH/VELNiQLKD4dIIM+HQdKn8KqB4pq6GJ0aLbUtQCqDdx0FpOIIg2LjU0LbbN76/lxhR0Wi2oYqPx6cRsbOsPedDCvp1ql+DV8flqIP+0f4FD7mzoBVNp0icUEszpR8/yVvdZpxbrtnmA+EgXLcB7K+quyyVmy/JG15+SLrGwJ9POJJqwfoehCcelRpTnLNAXLcdfSvVW4UxKtHRmQOzW6+DfhxIAprNYb9/PdKn062r9zBiGfIjB6U8j26o/vp6UVP3lWZXmb40HsYpbia/8RiK4JX4Rt0WFR43ibT3kdYB6Uj0Gs8I/YPo380ywb0R2O93fBqec3mwTi7gY2sBkpZP5jCSo0UDPpLaOGb5sLheLXF/2xMNCLp+LNUVi5jY9hHLhD3/vVPQP/wa5/JUjjw3tNlxLsubhRq2zmklO17wUQ9jUBVsQLAOIV8Qk51vEbhYLP2S2gX6vkn6KdRvZzxTyNNzBhwH7I/VIXtRhaoBPkigzhyuvDglqKoAqlMC0bWnVEeDAgDe/24AXHB5q8z0M2cNyZLwoZT/Ef4SnhCT91yCEBwY4eWbgKUey1zlWnP9FxJdleHkOIy3+zTNOLHr8of70F9FiZrqPUHgXckuMf2X0fN77A4/MvY9fhsp2kj4eROzFw7etdgXE4SNpuCw3p/DGYtbIZW5r0R7rf4FkOHCbljnvYP6E36yMY7NipUCaQub5tzMT6XGolGn8Cs4dXMrTknGUOzvzdmKFmr8irE3JQuL1cgnwxjaBjvDIfyxX+2XlryEuJ4nRIXjdcbtZT4ADrUKb813NexBfZGf22Rs89mXk/sM8PO3tR1Qb0l1qGOVmuU5c5RuLwZBhyFUZ3oDOnuu2zRlzkRZ71v4Vd7nXYdHxaABcaKBxWuGxrC8iw6SwBy9mwdbyOjU0KlH6ltqt9Adxcf5j/iQ3FXvLGwH/kV7v4Pln/3X/0g6FcRTLFaKKQUaEb9+HE9EBO8Y9mzksAJDQAWXRPhVj0diiQmkmUN5884Dp3tOnm+lzDwCECpRRAVCQvQ+DICOPOmglw9TOC6bmBHntadGXefKVhD52pzwG3+dUUKIgU8F5dPtKNiFGGpXhjl/uI6qSMfOD3/38sCRgEe6zo5ZBWl+0nZ/TbdNUhpLOGZROJahJk1/n0Yk7CMZBju5LBzfx9auoPjqF7v/C348mzD/8BbTCmkWhuyTMDh7Dp8/nPNULKR3GRuVIQcsQQ/hYxNUq5uQvcYXXUlS3KMgtSpgFSCkI1Pi2rA7DCqvSz5KZL7ZZgzVGj2VT2VOPtLC7AAA==",width:1920,height:1920}},319:function(e,t,i){e.exports={srcSet:i.p+"1e64e7a0.webp 200w,"+i.p+"d1b486a9.webp 500w,"+i.p+"1d8cb852.webp 900w,"+i.p+"0010b761.webp 1400w,"+i.p+"6edd089d.webp 1920w",images:[{path:i.p+"1e64e7a0.webp",width:200,height:196},{path:i.p+"d1b486a9.webp",width:500,height:490},{path:i.p+"1d8cb852.webp",width:900,height:882},{path:i.p+"0010b761.webp",width:1400,height:1372},{path:i.p+"6edd089d.webp",width:1920,height:1882}],src:i.p+"6edd089d.webp",toString:function(){return i.p+"6edd089d.webp"},placeholder:"data:image/webp;base64,UklGRhYFAABXRUJQVlA4WAoAAAAQAAAAPwAAPgAAQUxQSCgAAAABJ6AgbQOm8it6x0ZEBI+DgbZNflAwHOAE/8augCSi/xNAOH1L+L4BVlA4IMgEAADwEgCdASpAAD8APlEgjEQjoiEWDAcwOAUEsYBiTQmtqv5fGxcBuC/CfyJ+/ZSFLm+3KvMpd/LqWSdGWF5d0E//F5nvq32Dulv6In7GEVDYgyksNC/xrr3i9o8KcJJkliNP2YSg94oeNrCmHs1eNcsTas3RaUfCQGjTwWC0NtKdFEpUO4mtcR3NpqutPgQ3Gfz8yJIxYoKBk7PLkBaziCYAAP77ca1bBBzavKU30oiNQgp2LTpT7jqJB+/sv9WtTDrBtu2U88blKnrjhHAw19k2omvCGhP2Py+IXSQEvGUeFlWFD//Q36++C5It/lFcP/dbgFm4HLUefWczGibd6MLes2PHh6uhefczCu1kZ/F8zcicPl/+kkwex5Qi8pSfboCagAUfd0ZjYkXsOpD2kJtMWJoN0LYJg5eqD1WmLtCDngK6qkwQj9h9+1Tz6YD1/tg82SZF66H0YyvNsLIvPnT/pCzyG2DPQ1PSg5ImP+DAi2p+b8dBvQ93/eufsRmV5mQwoTBOdDrdd0sAyRoTlAWFh+8cq4VFujJF6dj9BZXdmEjRcq6ZI/Vcq51d18uN4IWroHUqPDaY4Yj0EUf9I51mQ1EJoRE0LNcyXcI/Snjln7tPwa40TQVwjUdOWESDoLeocIQwTz6OQdw1nF5Xe8BLfpaCwtyv6DRXIoo0gd3k/8NA/y5tJ9+n+ihlCH6IpOKFozZOOBzmfTN2TlcvwZ0+gXigaCNgqPSXOgiBsoefUBzujow7c4qSXBLFwI5sF4d7vjCfVyPiANtSsRPm2J6jIirOC2fp8wqEHUr7/iXJ/i87DWJho8P4bxPqJ1Hi3XRaDvXDMTPqHFw5knYBAwhNjraTEXAuYTxB7WKtRIVd6g40tS7ctmDfro0jGQldCEjJCGQt6nnWtDZD0DQi/MNZ38RoHLoO8lokn01e+yAbJYzr8kQtPG+RvsuE8cT8c5GqZAJEYFVnvFo/Gx2gmvgaMUvC3CK/I/eZqT22K6FzQT/fd/4wLpR5XP0tR+ZCP0+4RD+Wx50p4ibLn+se7W5Fumcrfv/hGBhM6lmEmdVauaLnQfOYfQ6FC278CQ4ZzRPlf/e4qdQwR+pdl3yAQhl14B+yO+MBJOL+Tbfw+5K+6Op6yo2b0/hpoQNegN8JhZLWM7RU0FKuRV2McYWyYFaSmxyS1wahxm/FvaSchwic6Bsm7L2asW/08erJ6JQGOV7DwDd6SSrhInYPQuVdO8Ri5GKlksStr5q50x5pYhkUmXpxQh9sRTp5cCQw6mnTRV+vXp029LGg/tlXJEsY4m4/JhFyhphwSwFsVxfY2UZZ01v/s//0uRgq7+Dwhjsv5xxgF/DUlcPvkyJxldBpP3nKvvCHVE15V6QGwlbDefdoVc5hwufonAGmSzGWw/f7buEVZPdQMxnfVPgH7i5wtcrWt4Gq2+j6occd4RKNz2wZfaJ6Z80FGeTa/3kKtzlWotPRagBV4+1+QEOHrnWqlTwgmZF3s9VEA9LVQ6q/NTeVblL8moPaNqTymI8PeyaZS0BAb1ILwmCioF3yDNrZwc7eGhSG0dKMvu7LRzVUxBwCXcQKkjW2vz/PuFNwaAfcCBppi3M//tH0jFFP6MpbqMTLDesvHRsQAAA=",width:1920,height:1882}},751:function(e,t,i){e.exports={srcSet:i.p+"66d83338.webp 200w,"+i.p+"131dbe81.webp 500w,"+i.p+"d7cccc56.webp 900w,"+i.p+"81393e11.webp 1400w,"+i.p+"4a6f2e9e.webp 1896w",images:[{path:i.p+"66d83338.webp",width:200,height:114},{path:i.p+"131dbe81.webp",width:500,height:285},{path:i.p+"d7cccc56.webp",width:900,height:513},{path:i.p+"81393e11.webp",width:1400,height:797},{path:i.p+"4a6f2e9e.webp",width:1896,height:1080}],src:i.p+"4a6f2e9e.webp",toString:function(){return i.p+"4a6f2e9e.webp"},placeholder:"data:image/webp;base64,UklGRrwDAABXRUJQVlA4ILADAABQEACdASpAACQAPk0ejEQioaEWrM7YKATEsYBncipYEsfvAOaKZzRjG8sew3IcZGfgPBJ/DO+xcAeLd8vtd3wrzx+groYekvYM/Wn/idMAHMWGzASE/mX9jP80j+x60hskXu1WoBIL6/VDqgjlGQzJjHV/KenQBz69MgjiZ0NlHnQbh+3O02E9ATfYAP7ytP3zfdx//mFu+tESbL7W/Yt38MdodAmv80a+A8sjumPpDMfrP/Khb7G2O1A68w4M/fKrv/HzqcpO840IjUuhqJwRja8D+su6kRIJb4F9Fit56tpss3GNPvV60FtD+OLuyBAiNtL1AINSILf+v/47f+Duyt/1R1jRRpcHd6cnQIIiwhaDFTTkxqw2nuyfk8Gt51Q5c/ELjuEKC3Z2/5UpNn/XC7RneOP81Ud+mPysZ6U55eGGjPD8+giyUdb2wcJvTE9jib1OAOYI4CbM4f3FxPR12fyNOOVvMKZbzD33/8//56U4mlDgsj0g3r0I6ntK/dTOXWDhmGbgqslf/H8XFEPj/90wfDUhv6mzLf+t7y/HuQNeQ/Ystnt6d3SZYzbLpz/bhvFVHyWeM0BqFVkPtyO6rMn0IGbL6f7jINuUkWHrdCX7u4rpYcbJyea2zI1DJYmJJik4flHbWjkyR8e0yQmgNALL8YYthvC8YnKZCMW/x7vsX2jp6csssVhq2a/LGMwWSNYygfG4GUj7jelQG+zKsraF+ZbZ2Jc0xqw15jasDkObfSk6aMwzMQvHUdhzZBSFmKubPx8QMMJcIk95Ilc1b/5TM2mtrHN+Yfq+UTP7FjQA9b1v3wkY6p3feNcTnZIfCggOyZwTvfgjRuE5iQ//vVoHb52gkL9INPrMnN/43Ky3N3TzJo/0KjDq8OLgKX8fY7yz1ff9BDOhZTtQ1sN2uL0vlqlTg4HrDcsrti9sT0NH6I1PDlxO8Wo8YY/4/Zw5awZVkkFt1OyjKT6c/h/ctpQfvdBGB5Nd+4PNUzaGJ5R4f5exelrhxanV98kftXcI2vn/br3bv66rHuqYPi6l4gV9PcpKTSA0w58gDnmSwCfRjVZ/K2uQ4URj4fxck9vpMcjmWtj3cFP49nlzrLSVe3Eu1uAHhz/LKN+z69xDyO9Iej6X2ishAoCtbcnpeutkZMU7ZXD/YioUPumzmPuxt9w2tQrJlMSJ0p1zzPRICArLkI5G/BTBidcTXgvjwH/+S/MJ/vMmTC6bt4hUSlVzliYSmlTbHTJIp9vj4FYAAA==",width:1896,height:1080}},508:function(e,t,i){e.exports={srcSet:i.p+"d4aa5682.webp 200w,"+i.p+"ecb306be.webp 500w,"+i.p+"dcccc54b.webp 900w,"+i.p+"24bb755d.webp 1400w,"+i.p+"b0468889.webp 1920w",images:[{path:i.p+"d4aa5682.webp",width:200,height:84},{path:i.p+"ecb306be.webp",width:500,height:211},{path:i.p+"dcccc54b.webp",width:900,height:380},{path:i.p+"24bb755d.webp",width:1400,height:591},{path:i.p+"b0468889.webp",width:1920,height:810}],src:i.p+"b0468889.webp",toString:function(){return i.p+"b0468889.webp"},placeholder:"data:image/webp;base64,UklGRhYCAABXRUJQVlA4IAoCAAAQCwCdASpAABsAPkkejEQioaGb+V4AKASEoAvN3RPJu2zgG2A56PomeoA3jHydl5kx2395tn2K/z2c+rtv6pBawJNHmfAKP8JgsC4L9w9sulVFs/zuGSFVBveMtr3N7jAAAP7/QCbG3UgB4GBD8uxZTuM21T4vI7+JFSRzQ3TQlAzl60YfO3UHqDBLDf8nBkWaS13Plw69vgDEE17W8GhaVYwk/Ppar4ZCX6LRmrD+nkycLBdjZO+/+8u1+M5YvhLKTewzDTgmtXohmx2s9nMXjW1SQx7+pK3/KpCCVzi27VNP8QJOmYdaNa6T0RK7+KaCwLGtMORS0QqsUuE4JT5ccOtlbl3uY8YDeZryJVWhH9q1XuLfLRFZr4WG4jWM+HWITDTWJRR+VbPeB1ZQR1GZhlGo8MHNxAdHJiuYJsm8s719SnErK7W0eFobXflxDOacWhZcbYbBa1IJ+cUEiH+3qov11sSx08x+TCg95IklYJ7HZ5UuyyzL1cvufj8IvibaFEUcOonxhTo1SPkk1vBOSH95T/VAnYega/yafZqPZeQev7/nSLDiHTzd9QlOcRX/Duntv6TdRoU1iAyHh/nksyd0BkdYhbN2e8Hzc5dwMLre0NOYq4DABcBKXQx9/78j6YPCHZgf0/Z/TqujVo/wlWk2C+k9licPN8RPkw3nwMfbSM/xdk1XoAA=",width:1920,height:810}},63:function(e,t,i){e.exports={srcSet:i.p+"84fa1b99.webp 200w,"+i.p+"40f774cd.webp 500w,"+i.p+"be098934.webp 900w,"+i.p+"65707a37.webp 1400w,"+i.p+"1a54a4e9.webp 1580w",images:[{path:i.p+"84fa1b99.webp",width:200,height:128},{path:i.p+"40f774cd.webp",width:500,height:321},{path:i.p+"be098934.webp",width:900,height:578},{path:i.p+"65707a37.webp",width:1400,height:898},{path:i.p+"1a54a4e9.webp",width:1580,height:1014}],src:i.p+"1a54a4e9.webp",toString:function(){return i.p+"1a54a4e9.webp"},placeholder:"data:image/webp;base64,UklGRioDAABXRUJQVlA4IB4DAABQDwCdASpAACkAPlEgjEQjoiEYCV6oOAUEoArDlBVnwJNhwLnpL20viV/oB74/oT3h7eTv9E/D6iN9OV85ZTQJn3k3TmDBhXdM7d2hq2ySRpZX5KP51V5asJv0nhhew71CHjYtFkrlujxrkvKJk7FyCRTQiKH6Lp4e0z61axHFEf8lgAD+/WD/MScCWs8Vxnf71wfTVBrbRqYK0l52UwrMvgR22wo8Cs3WcBTNoVzyMtXreZHZUdZGgtnGYoBVtXg0wfOpTM+w7zLdf5UDeTqao66cnive2RMCRDcvncq9nv6lcPE7wfbYrfzogE6EwuWovodE3seBt+lsjiSn/brRikA1vnFKeuAxjFSzq0+uUShy5GxCMTwlPM74jzfl3i5SdXX11rml/VHS22A6LgltfeI8509pv0+LH3S2ronz4b6tLVyYyyYBETs76j2nFfZF8N1iDw3AMlVCYKRMaHCaeYSGtRyps2ulE7fVoO/PnMSzqA678+Lj/MnvAg/sqi4LXRsvFE5iFnLK+2eS66nvLYGKd9d+fp8gK7NqaC0whCbi7tc2m3EInOYeqm8l6Qg3u0Tkq40llvqKlfz+oRMxaitHWNTZ6HF6WWruoS6xmL90udk7hXmKrK9xW8GuxrXCIv5GQrzstnbd3MF4pVhoGGZBG+E+bmDGn/SexN5WNxaYSoMaJ77rLfE92lga36kyWgmp0q4vgg1y+8gvzyWl9+Qt3FkK78Oy9+4WwTQrih+g3TPOUvJlsH24q9AxhwQUuWVKbXpaGLxUah84DKeEJOg66qZUQUgtz5/Dff7oTwREV41ocAlN/ex+IAzi+bYGBiwqFCWMARFuucBhhnx8+bXrOEHivb/oEsP8TG1T1PuSEg7R9qZKtRYO0+IMLl6xnLwFA7N0lET433LKXdIixvp5I7HP5T4ZJC2Em7JslCaTbf5+vh23VGJS3G0PqFnbtZJq2e9yS1e/8ZuheMAALqIrSmPRylL4LWzsKZR8oxSdCZ/mPaeTCsFRHTYB7AkGnxSN7KkiwfxWnuiKTjJB0Ur5i0k261y0vbVgAAA=",width:1580,height:1014}},383:function(e,t,i){e.exports={srcSet:i.p+"a651b7ec.webp 200w,"+i.p+"89a5b4ed.webp 500w,"+i.p+"10402a6a.webp 900w,"+i.p+"db507fa9.webp 1400w,"+i.p+"ce04b945.webp 1782w",images:[{path:i.p+"a651b7ec.webp",width:200,height:107},{path:i.p+"89a5b4ed.webp",width:500,height:266},{path:i.p+"10402a6a.webp",width:900,height:479},{path:i.p+"db507fa9.webp",width:1400,height:745},{path:i.p+"ce04b945.webp",width:1782,height:948}],src:i.p+"ce04b945.webp",toString:function(){return i.p+"ce04b945.webp"},placeholder:"data:image/webp;base64,UklGRtwCAABXRUJQVlA4INACAAAQDgCdASpAACIAPlEijkSjoiEStsw4BQSzgGeGtj7v0AbYDntNMA3k1wGHvnld3gynermkVih/81/6H9S9kjO49F+wL+sXVkNGPrcnqlC6jEAslXDa/UgyBf8e2mlAqYwawgN1qJFhWjvTn6t986KbNjconfN/6OmQAP79/rXyjrCr3nPhF3/HxpXR9IkemfA2V9XeQa5ngUDL++py1AiFFQp9p9O94RS58/T6pSkspsdUsbzcVbjZsvfyeMhZx2YzIC9ATtUspKWamx4h2C1tENBU8gJlOkcBm8asxU9nuf69NRBlw8rus/ZT6X+Qrj3vyIll+SsT+mregKk5gXsmQthdN8J3Zw47oFPgKhDZKEcNOMRzTzwoeqtHn2+Vo7Ge0+X0OD6+R6M6/6+pzrGZc9l+ywatkkFJs/RQlmci6nT31NGWfvkelT1TSsL1YeBQFUDhkk0fVizYFXlHtVrAX5HGmoIDCZ4uuyD8Mt/mNwIR3j/zLePZuvnB70UXczcM7XgsMysAEaSle2jxH7K3SeBAoFSMr+tP4UwN+pKwf+jT476fhEiZZs62C4TsrqfuRRWwU7uqkbBUFQmVX+7ipnOOT7jmood4lhoU/MYieWXZ4hnMcaXhAi0Kfg8/fRXegfAU6mcXaEqVoW+Vc+wEglQNewJHA5fs/TY5/BnxE51361z/M1p4VIE+BgbZNfVEENm/Kes520dhW2o2MA01D9DUP9o/e8kc+2xU8zrUqimn7Y7HoiTWzarRIZjjc1bc3sAm3fURNlEBeK4sqXyCuA7jG8johdVPyFeC9eK/XPY98sAe1mmFImeWE3yR2pXoOoU5/oB0kHSKz5QheYI2fHXiLgeCPVhGQb25p/9H1RC8ADHuO6AV8rnT8biVve7GP++li+W/y+Z94uKATyICfkJZO4m1gr11x1+4B/cQWG7oDM739Zv6uY64wAAAAAA=",width:1782,height:948}},733:function(e,t,i){e.exports={srcSet:i.p+"bb004c69.webp 200w,"+i.p+"8ce92ad0.webp 500w,"+i.p+"b46b34ec.webp 900w,"+i.p+"36d91d27.webp 1400w,"+i.p+"fec8ac32.webp 1607w",images:[{path:i.p+"bb004c69.webp",width:200,height:110},{path:i.p+"8ce92ad0.webp",width:500,height:274},{path:i.p+"b46b34ec.webp",width:900,height:493},{path:i.p+"36d91d27.webp",width:1400,height:767},{path:i.p+"fec8ac32.webp",width:1607,height:880}],src:i.p+"fec8ac32.webp",toString:function(){return i.p+"fec8ac32.webp"},placeholder:"data:image/webp;base64,UklGRmgDAABXRUJQVlA4IFwDAADQEQCdASpAACMAPk0cjEQioaGaqwYAKATEtQBYj29cz9m8xiwf33aTZ08vnmnnKbcDcdeeB1SXoc9LVXc2LLnB9aygqWeA/aiguOVm0YfyRodMrWuOsawDGtu74iTL38+q449xxPrVxSKndWK/vPHU6bIYM7CPvrTnqdjX7hGj264GVHM+A2KELUMFuxwZEyZYRxFXwxwAAP75zwwDAiGgyUUJPygwUfbr0T9QeN9oGK8J6lNiWGf36H7g3fGCziXzC3G9V/92Ls08jl0giSnKhf1uZd8821KacM7ppEWKwC/TZmoENG5unAayiMWaUgBtmuUkhglbwIuK0j//y7gCEXyDJzqjJzUImPL8LqJ/RhQVvZ5tTs5vjE8EqJTsE9i1vD1BmrUasuwSw8gaiXMtTL5F25MR0yebqmY7TM2fJYl84Niqij/Xhkn6RvfscfQMx0NMcwZtAjlOwRi3lBTNEBPRmle2qiL+XZIQoU1aA7qrLhnPQNwqhyABJLuMkn5zkeS8NBgLL8luvCpm+7M+mXWQ/hcJ9QXHWkTwi40ThhELrMYlThK6ifjmX2S5X5KOWtkHHKbCWsBHolnL3H5SBNDQV1thh2hOv89Nf9jh8AuOShyaBM7727sxrtLNZNITV4ZK2gSiN3UE/XKL3lslSa4LldNuU19/Nq24uhfIBDBNpg5ZU6giU+XBXn88GcIUYBRw5BPVPFD1VlxAMSpXTlgKO9wP+VXtpjXtGTtvjp+P1O9o9SsV6wxjblLCoOR5jG/JEUzZwbfJ1b4ev1tF53qNGZnedUckH77ZRYNw7YaCDXjof+6NnmeXxcVPBfGHufjg8avyFGziU/QHKNweNaJWWcAETra8SLR9aUmbar3iXwctcKF1DYL9/65Cg/WkDteNT5e8p5lJiQ6sTh5A5pCzQqhxCQ8vbGrLFtHpX56jC7LVs0/hPVpRqmxkjFR4fHH13mwv2F/SutGBDA4OYnMqeu3Y1bqz126/eWWy26T/f+L70GIsCh/OTWrRQE9rkvJy67+dPNQGaXFBGJCXL8TEiRUl/JY5Ih5nxSPR73HxpaPJCUVad+4tRQ4vbomAApEM7IsiM73v76IzmmbcjvBUQF7Y3h7llY4JvWZk5/LDpkbU8gLN+wEAAA==",width:1607,height:880}},594:function(e,t,i){e.exports={srcSet:i.p+"0fc118af.webp 200w,"+i.p+"be2c17f3.webp 500w,"+i.p+"dac805ab.webp 900w,"+i.p+"97951673.webp 1400w,"+i.p+"8d7f7e94.webp 1920w",images:[{path:i.p+"0fc118af.webp",width:200,height:113},{path:i.p+"be2c17f3.webp",width:500,height:281},{path:i.p+"dac805ab.webp",width:900,height:506},{path:i.p+"97951673.webp",width:1400,height:788},{path:i.p+"8d7f7e94.webp",width:1920,height:1080}],src:i.p+"8d7f7e94.webp",toString:function(){return i.p+"8d7f7e94.webp"},placeholder:"data:image/webp;base64,UklGRnwGAABXRUJQVlA4IHAGAACwHACdASpAACQAPkkaikQioaEapAAoBIS2AE6ZQjt/4DzGKo/h9kJJr2n/vOkR+TfQg6QHmH/W/1ef9F6iP876gH9w6iT0L/Lm9kv9yPTGuZPgL4o/LHtJxcudez++b8W/8P4i7wz+Z/378r+AKyT+ff5T1AvT75d/h/y7/r/ORxZ97D5F7AH5q9Uv+K/6/+Z82vzz/yv8j8Af8s/p3+7/uX5I+BX9wPZ7/bskM8Hc5mFF0Ji1aYUo4U+ITYQv5RkhVt0iAj9/L3Ua/6Jsx7R8WF5vBV/iMw/9U+m1k3eu9rHli/NZJNV09xNAiwYQAP76TaL/j9703E9eUNdjvn3n6AHgD/ORTzMFYhLtO5JTRd1FW+twW+h8fazo02x1uuzuTfTeO3vxoAW7jFfNUz/8kh6oAQLxGN5dBbfVDgxDdZXR07WC5nne51k/WdpQDzXuS6DoZVde48hmhUfzejn29O/thFB9Vpz1bG1u/5i1QYuuuUZcZ04gHPNhkwsCcpr56T1em1OXOmK9evlhJXGwzEeW8A1tT+2gWESCxHJcG2CRaChQD8JIBQDwiK7PzyWiiyYQxTx3d8uSIraonTjmHTXvGGArVmeQcPnFjZGS/6fxgDIm9GHEMM1XVGuTrSAzHdzz+U/2Xb4oJJnJTF7KUXlvj7MNxd5FqRXyNCtreP9x1eXLDvl750MEoWme44hjOml+gYpUxuxHEqO94L3Khsv0OkCOe3X4eSwgkNG8AWQMHlwpHBwsfjHN2edo3Im4ODjl0+faOOot0yfPNJ2kKmJcTGIAeoNRzX8Wu+3XoObz6MOYkcobDBVyZHInQTnpzsuaHkhPhRzkoPrOHGYKgLn0SeZivJUaXVCxfCpzaMbpbpLxPWyYjPUg8UQJyNthQHZeQgBuhJ0CZSz6HM+fjVfhsd5V/n2AChbcEQ8vwsRwFG3QRGDGYXM/qxiKUe+ttabzsTpxSURq7DHaCRGbohCIBMmQxWY171wcSAfw01vtz/mYO4YBd96eQtl8y/oiQB0CABKlpSNf35FtLrW/FcWyy3NJ2xdYUfxLcT2yJBTm69egLrY0NJedsscIF+YR86YwJH6Qyqo/dSJ3TbdRY9oA0RYVaWA4YU95FdQ9hnILGerhcoA1Cars5TIZtFAXYEI2wCHawLh+L6i3VHA6slPZ6xZH+89/RZoKZiwR2yknODcP2EKcXMqhts6rgMVsXmNDJlEvdwd7VtXZ+9RZEYVbR6ikTYBBQ6ruuKYxylJPv96n3Cqv+SjcLVv+B4ES+u7AhT+VpEqaXXoXhsJpKABEw5mJoIcsm9qbURNz4VmkpMPwWv+alip2Ndy+mxQD/cY9xZtRPrI9/nhZX+0oay48pX8Vnf/SIirjOy9B1zcjlAK4psIUJtZB/wc5PQdyMuP2tslpfeajfBoTshF4N1tUUqDQv9qJW3bkm+Nsv8w0oekjXkuZhkOCn0NbweGsGajOwmvjmUgXSbdG/CyrjyDkDNmHAJRreGgPuCdvux0sFMg+MKR48gmgiXzkNMMuYVNg3ZBp1t39iSCAbaQk3TJQoLwPHlVlNrFx+1VsnAYZH5KaQiFuPB3gVuNzv/58yIqvGXluqnTfFtZAVgueJurWnmeS+rH8Vm7M4rhhC3P+D1ve1beJdNWm3fEBLs34caKW2xY13dmZsT7ziQvckt3rm8nd595Hxm3Z9B9Rim1eXBaJ/DPz22lE8jJjsf+2Uws5X/XV6SK2oofLl3CZ8DEmm4umx3/jmuFFvL2e5HCZduWIBywGCZ2P6WIQo20xItiXyESSz+fUaWH8FwKryHI46Dx6WCxI84s7yhtut37mYt9/yJz6nQ178rJY3xL7Z+nXwwmKIbiI28v08eHvxAtqclgM/sUudRSgiYFwPWyhEWzrN0uKHX/tRiqtloQbfEuQqRUzUR1ThMZYeOpcUSLtnDISQQ3k/lyHqPN9nFTCe3jW+O093SCPaeX3FNkXA3a+aDg9K3v/kuU08TR71v/vzPL8bMJVGz0RYaPESXz6lYR/tG0n+7170rnTszKj0hywE8b10WQnEHoTqw5tq9NDHbvH/PF5qiighni1R/P5oXupgYZzr+l3bYfJjD2cOObI8xX5+iNt8/ASuiHhhiifxwf0XRA+R/osb2qvENrWpmpBHFxcTfMEC/A+kNl87uy+YpEzxaIU7YeZ2gAA",width:1920,height:1080}},788:function(e,t,i){e.exports={srcSet:i.p+"3c2f5122.webp 200w,"+i.p+"919f5bdd.webp 500w,"+i.p+"414d652e.webp 900w,"+i.p+"a1d058f2.webp 1400w,"+i.p+"e4e49d4b.webp 1920w",images:[{path:i.p+"3c2f5122.webp",width:200,height:165},{path:i.p+"919f5bdd.webp",width:500,height:412},{path:i.p+"414d652e.webp",width:900,height:741},{path:i.p+"a1d058f2.webp",width:1400,height:1153},{path:i.p+"e4e49d4b.webp",width:1920,height:1582}],src:i.p+"e4e49d4b.webp",toString:function(){return i.p+"e4e49d4b.webp"},placeholder:"data:image/webp;base64,UklGRl4BAABXRUJQVlA4IFIBAADQBwCdASpAADUAPlEmkEWjoiGhKBv4AHAKCWUAx2Rwjj22BZI/kjAZx65a4WAgxP23EdSQfzfQvvXtXw5ie2n2Y5aWd6zLwAD+/MiKLS8JsnEzBQ6UEiScJ9t/On4jFbTnCTo3ijV5GKEp1IYk0ixuXdvcpIL9ksw1dZOLFEibzC2IO7/iW4TGF62CRLVRsLu7CQr+Dyb+eT6bXOpll/4gID0+kKZuKM57ckMnA3aKdyLbAyV7Tr/uZOY1JQ5XsYz+GtOlwqJQ4A1XsubOSmnzMvv/1MC7H/bH6qIuEkYBB0hV/M98sv/lZneF/f35hHhCnS5DrTTxH3/pjdGYsUHG/mtMox/NVbozFivDw1jwj+w3P+/0ozPo3+dU9f+3wm+ld7gM89lh0vmizudGwvghSPlihiaZ62F8LNgp6zTst7dS/olpiP2E3E5yBj2WsR2AAA==",width:1920,height:1582}},784:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5" stroke="#ffffff" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>'},292:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M16 6h3a1 1 0 0 1 1 1v11a2 2 0 0 1 -4 0v-13a1 1 0 0 0 -1 -1h-10a1 1 0 0 0 -1 1v12a3 3 0 0 0 3 3h11"></path><line x1="8" y1="8" x2="12" y2="8"></line><line x1="8" y1="12" x2="12" y2="12"></line><line x1="8" y1="16" x2="12" y2="16"></line></svg>'},869:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><circle cx="12" cy="12" r="4"></circle><path d="M16 12v1.5a2.5 2.5 0 0 0 5 0v-1.5a9 9 0 1 0 -5.5 8.28"></path></svg>'},537:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5"></path></svg>'},778:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><circle cx="12" cy="12" r="9"></circle><line x1="12" y1="8" x2="12.01" y2="8"></line><polyline points="11 12 12 12 12 16 13 16"></polyline></svg>'},515:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke="#ffffff" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><rect x="4" y="4" width="16" height="16" rx="2"></rect><line x1="8" y1="11" x2="8" y2="16"></line><line x1="8" y1="8" x2="8" y2="8.01"></line><line x1="12" y1="16" x2="12" y2="11"></line><path d="M16 16v-3a2 2 0 0 0 -4 0"></path></svg>'},584:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><g transform="rotate(0 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.9166666666666666s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(30 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.8333333333333334s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(60 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.75s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(90 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.6666666666666666s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(120 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5833333333333334s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(150 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(180 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.4166666666666667s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(210 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.3333333333333333s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(240 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.25s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(270 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.16666666666666666s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(300 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.08333333333333333s" repeatCount="indefinite"></animate></rect></g><g transform="rotate(330 50 50)"><rect x="45" y="2" rx="5" ry="5" width="10" height="10" fill="#b7455e"><animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animate></rect></g></svg>'},4:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"></path><path d="M20 12h-13l3 -3m0 6l-3 -3"></path></svg>'},415:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><polyline points="12 3 20 7.5 20 16.5 12 21 4 16.5 4 7.5 12 3"></polyline><line x1="12" y1="12" x2="20" y2="7.5"></line><line x1="12" y1="12" x2="12" y2="21"></line><line x1="12" y1="12" x2="4" y2="7.5"></line><line x1="16" y1="5.25" x2="8" y2="9.75"></line></svg>'},14:function(e){e.exports='<svg version="1.1" fill="#ffffff" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"><path d="M256,0C114.833,0,0,114.844,0,256s114.833,256,256,256s256-114.844,256-256S397.167,0,256,0z M256,490.667 C126.604,490.667,21.333,385.396,21.333,256S126.604,21.333,256,21.333S490.667,126.604,490.667,256S385.396,490.667,256,490.667 z"></path><path d="M357.771,247.031l-149.333-96c-3.271-2.135-7.5-2.25-10.875-0.396C194.125,152.51,192,156.094,192,160v192 c0,3.906,2.125,7.49,5.563,9.365c1.583,0.865,3.354,1.302,5.104,1.302c2,0,4.021-0.563,5.771-1.698l149.333-96 c3.042-1.958,4.896-5.344,4.896-8.969S360.813,248.99,357.771,247.031z M213.333,332.458V179.542L332.271,256L213.333,332.458z"></path></svg>'},724:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M12 9h-7a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h3"></path><path d="M12 15h7a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-3"></path><path d="M8 9v-4a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v5a2 2 0 0 1 -2 2h-4a2 2 0 0 0 -2 2v5a2 2 0 0 0 2 2h4a2 2 0 0 0 2 -2v-4"></path><line x1="11" y1="6" x2="11" y2="6.01"></line><line x1="13" y1="18" x2="13" y2="18.01"></line></svg>'},323:function(e){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><rect x="3" y="5" width="18" height="14" rx="4"></rect><path d="M10 9l5 3l-5 3z"></path></svg>'}},t={};function i(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,i),a.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",function(){i.p,i.p,i.p,i.p,i.p,i.p,i.p,i.p,i.p,i.p;var e,t,n,o,a,r=function(e){var t=getComputedStyle(e);return e.clientHeight+parseFloat(t.marginTop)+parseFloat(t.marginBottom)+parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth)},s=function(e,t,i){return e+(t-e)*i},c=function(){function e(e){void 0===e&&(e=42),this.seed=e}return Object.defineProperty(e.prototype,"next",{get:function(){return this.seed=Math.imul(48271,this.seed),(Math.pow(2,31)-1&this.seed)/Math.pow(2,31)},enumerable:!1,configurable:!0}),e.prototype.choose=function(e){return e[Math.floor(this.inInterval(0,e.length))]},e.prototype.inInterval=function(e,t){return(t-e)*this.next+e},e}(),p=function(e){return Array.prototype.reduce.call(e,(function(e,t){return e+t}),0)},h=function(){function e(t,i){void 0===i&&(i=[]),this.children=i,this.htmlRoot=e.createElement(t)}return e.prototype.attachToDOM=function(e){e.appendChild(this.htmlRoot),this.initialize()},e.prototype.initialize=function(){this.children.forEach((function(e){return e.initialize()}))},e.prototype.query=function(e){return this.htmlRoot.querySelector(e)},e.prototype.attachElement=function(e){this.htmlRoot.appendChild(e.htmlRoot),this.children.push(e)},e.prototype.attachElementByReplacing=function(e,t){var i=this.query(e);i.parentElement.replaceChild(t.htmlRoot,i),this.children.push(t)},e.createElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild},e}(),l=(e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)},function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}),d=function(e){function t(t,i){var n=e.call(this,' <div id="background"></div> ')||this;return n.topOffsetElementCount=t,n.bottomOffsetElementCount=i,n.random=new c,n.stableRandom=new c,n.blobs=[],n.windowHeight=0,n.windowWidth=0,n.contentHeight=0,n}return l(t,e),t.prototype.initialize=function(){e.prototype.initialize.call(this),this.drawIfNecessary()},t.prototype.maintainBlobCount=function(){for(var e=Math.max(t.minBlobCount,Math.ceil(window.innerWidth*t.blobCountScaler))-this.blobs.length,i=0;i<e;i++){var n=this.createBlob();this.blobs.push(n),this.htmlRoot.appendChild(n)}for(i=0;i<-e;i++){n=this.blobs.pop();this.htmlRoot.removeChild(n)}},t.prototype.createBlob=function(){var e=document.createElement("div"),i=this.random.inInterval(t.zMin,t.zMax);return e.style.zIndex=(-i).toFixed(0),e.style.opacity=(1-(i-t.zMin)/(t.zMax-t.zMin)).toString(),e.style.height="".concat(this.random.inInterval(t.minHeight,t.maxHeight),"px"),e},t.prototype.drawIfNecessary=function(){var e=this.getSiblings(),t=p(e.map(r));window.innerWidth===this.windowWidth&&t===this.contentHeight||(this.windowWidth=window.innerWidth,this.windowHeight=window.innerHeight,this.contentHeight=t,this.maintainBlobCount(),this.randomizeBlobs(p(e.slice(0,this.topOffsetElementCount).map(r)),p(e.slice(-this.bottomOffsetElementCount).map(r)))),requestAnimationFrame(this.drawIfNecessary.bind(this))},t.prototype.getSiblings=function(){var e=this;return Array.prototype.slice.call(this.htmlRoot.parentElement.childNodes).filter((function(t){return t!==e.htmlRoot}))},t.prototype.randomizeBlobs=function(e,i){var n=this;this.stableRandom.seed=t.stableSeed,this.blobs.forEach((function(t){var o=-parseFloat(t.style.zIndex),a=n.getRandomPositionInSafeArea(o,e,i,parseFloat(t.style.height)),r=a[0],s=a[1];t.style.transform="translate3D(".concat(r,"px, ").concat(s,"px, ").concat(-o,"px) rotate(-20deg)")}))},t.prototype.getRandomPositionInSafeArea=function(e,i,n,o){var a=-((this.windowHeight/2-i)/t.perspective*(t.zMax+t.perspective)-this.windowHeight/2),r=Math.min((this.windowHeight/2-n)/t.perspective*(t.zMax+t.perspective)-this.windowHeight/2+this.contentHeight,this.contentHeight-o),c=this.windowWidth/t.perspective*(t.zMax+t.perspective)/2;return[this.stableRandom.inInterval(s(0,-(c-this.windowWidth/2),e/t.zMax),s(this.windowWidth,this.windowWidth+c-this.windowWidth/2,e/t.zMax)),this.stableRandom.inInterval(s(i,a,e/t.zMax),r)]},t.perspective=5,t.zMin=6,t.zMax=50,t.minHeight=360,t.maxHeight=740,t.minBlobCount=30,t.blobCountScaler=.1,t.stableSeed=50,t}(h),u=new Date(1664183179300),w=function(e){var t=e.image,i=e.alt,n=e.container,o=void 0!==n&&n,a=e.isIgnoredByImageViewer,r=void 0!==a&&a,s=e.sizes,c=void 0===s?null:s,p=e.isEagerLoaded,h=void 0!==p&&p;return" ".concat(o?'<div class="figure-container" style="padding-top:'.concat(t.height/t.width*100,'%">'):"",' <div class="image" style="background-size: cover; background-image: url(\'').concat(t.placeholder,"')\" ").concat(r?"":'tabindex="0"'," > <img ").concat(r?"image-viewer-ignore":""," ").concat(h?"":'loading="lazy"',' srcset="').concat(t.srcSet,'" ').concat(c?'sizes="'.concat(c,'"'):"",' src="').concat(t.src,'" width="').concat(t.width,'" height="').concat(t.height,'" alt="').concat(i,'" /> </div> ').concat(o?"</div>":""," ")},f=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),m=function(e){function t(){var i=e.call(this,' <input id="theme-switcher" aria-label="color-theme-switch" type="checkbox" name="switch-theme"/> ')||this,n=t.loadFromLocalStorage();return(null!=n?n:g())?(i.htmlRoot.checked=!0,A(),b(),setTimeout(v,0)):y(),i.htmlRoot.onchange=i.handleThemeChange.bind(i),i}return f(t,e),t.prototype.handleThemeChange=function(){var e=this.htmlRoot.checked;e?b():y(),t.saveToLocalStorage(e)},t.saveToLocalStorage=function(e){null===localStorage||void 0===localStorage||localStorage.setItem(t.localStorageKey,JSON.stringify(e))},t.loadFromLocalStorage=function(){try{return JSON.parse(localStorage.getItem(t.localStorageKey))}catch(e){return null}},t.localStorageKey="dark-mode",t}(h),g=function(){return matchMedia&&matchMedia("(prefers-color-scheme: dark)").matches},b=function(){return document.documentElement.setAttribute("theme","dark")},y=function(){return document.documentElement.setAttribute("theme","light")},v=function(){return document.documentElement.setAttribute("animations","on")},A=function(){return document.documentElement.setAttribute("animations","off")},x=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),k=function(e){function t(t){var i=t.name,n=t.image,o=t.imageAltText,a=t.about,r=e.call(this,function(e){var t=e.name,i=e.about,n=e.photo;return' <header id="about"> '.concat(n,' <div class="placeholder"></div> <h1>').concat(t,"</h1> ").concat(i.map((function(e){return"<p>".concat(e,"</p>")})).join("")," </header> ")}({name:i,about:a,photo:w({image:n,alt:o,sizes:"(max-width: 924px) 125px, 190px"})}))||this;return r.attachElement(new m),r}return x(t,e),t}(h),T=i(784),S=i.n(T),P=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),C=function(e){function t(){var t=e.call(this,' <div id="image-viewer"> <img height="0" width="0" image-viewer-ignore /> <button id="cancel">'.concat(S(),"</button> </div> "))||this;return document.body.addEventListener("click",(function(e){var i,n=e.target;(null===(i=n.classList)||void 0===i?void 0:i.contains("image"))&&t.showImage(n.querySelector("img")),n instanceof HTMLImageElement&&t.showImage(n)})),document.body.addEventListener("keydown",(function(e){"Escape"===e.key&&t.hideImage()})),t.htmlRoot.addEventListener("click",t.hideImage.bind(t)),t}return P(t,e),t.prototype.showImage=function(e){if(!e.attributes["image-viewer-ignore"]){var t=this.query("img");t.src="",t.src=e.src,t.height=e.height,t.width=e.width,this.htmlRoot.style.visibility="visible"}},t.prototype.hideImage=function(){this.htmlRoot.style.visibility="hidden"},t}(h),E=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),I=function(e){function t(){for(var t=[],i=0;i<arguments.length;i++)t[i]=arguments[i];var n=this,o=t.map((function(e){return e instanceof h?e:new h(e)}));return n=e.call(this," <main></main> ",o)||this,o.forEach((function(e){return n.attachElement(e)})),n}return E(t,e),t}(h),O=function(e){return"#"+encodeURIComponent(e.toLocaleLowerCase().replace(/\W+/g,"-"))},j=i(778),R=i.n(j),B=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),z=function(e){function t(t,i,n){var o=e.call(this,function(e,t){var i=e.date,n=e.title,o=e.description,a=e.more,r=e.links;return' <section id="'.concat(O(n).replace("#",""),'" class="timeline-element"> <div class="line-container"> <div class="line"></div> <p class="date">').concat(i,'</p> </div> <div class="card"> <div class="figure"></div> <div class="lower"> <h2> <a href="').concat(O(n),'">').concat(n,'</a> </h2> <p class="description">').concat(o,"</p> ").concat(a?' <div class="more"> '.concat(a.map((function(e){return"<p>".concat(e,"</p>")})).join("")," </div>"):"",' <div class="buttons"> ').concat(a?'<div tabindex=0 class="info-button"> <div class="svg-container">'.concat(R(),"</div> <p>").concat(t,"</p> </div>"):""," ").concat(r.join("")," </div> </div> </div> </section> ")}(t,i))||this;return o.timelineElement=t,o.showMore=i,o.showLess=n,o.isOpen=!1,o.more=o.query(".more"),addEventListener("resize",o.handleResize.bind(o)),o.query(".info-button").addEventListener("click",o.toggleOpen.bind(o)),o.attachElementByReplacing(".figure",t.figure instanceof h?t.figure:new h(t.figure)),o}return B(t,e),t.prototype.initialize=function(){e.prototype.initialize.call(this),O(this.timelineElement.title)===window.location.hash&&setTimeout(this.openMore.bind(this),100)},t.prototype.toggleOpen=function(){this.isOpen?this.closeMore():this.openMore()},t.prototype.openMore=function(){this.isOpen=!0,this.query(".info-button > p").innerText=this.showLess;var e=this.more.scrollHeight;this.more.style.height="".concat(e.toString(),"px")},t.prototype.closeMore=function(){this.isOpen=!1,this.query(".info-button > p").innerText=this.showMore,this.more.style.height="0"},t.prototype.handleResize=function(){this.isOpen&&(this.more.style.height="auto",setTimeout(this.openMore.bind(this),100))},t}(h),L=i.p+"cv-andras-schmelczer.pdf",Q=i(360),M=i.n(Q),D=i(14),H=i.n(D),U=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),G=function(e,t,i,n){return new(i||(i=Promise))((function(o,a){function r(e){try{c(n.next(e))}catch(e){a(e)}}function s(e){try{c(n.throw(e))}catch(e){a(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,s)}c((n=n.apply(e,t||[])).next())}))},Z=function(e,t){var i,n,o,a,r={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(a){return function(s){return function(a){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return r.label++,{value:a[1],done:!1};case 5:r.label++,n=a[1],a=[0];continue;case 7:a=r.ops.pop(),r.trys.pop();continue;default:if(!(o=r.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){r=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){r.label=a[1];break}if(6===a[0]&&r.label<o[1]){r.label=o[1],o=a;break}if(o&&r.label<o[2]){r.label=o[2],r.ops.push(a);break}o[2]&&r.ops.pop(),r.trys.pop();continue}a=t.call(e,r)}catch(e){a=[6,e],n=0}finally{i=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,s])}}},F=function(e){function t(t){var i,n,o,a,r,s,c=e.call(this,(n=(i=t).webm,o=i.mp4,a=i.poster,r=i.invertButton,s=i.altText,' <div class="figure-container video-container" style="padding-top:'.concat(a.height/a.width*100,'%"> ').concat(w({image:a,alt:s,isIgnoredByImageViewer:!0}),' <video playsinline controls preload="none"> <source src="').concat(n,'" type="video/webm"/> <source src="').concat(o,'" type="video/mp4"/> </video> <div class="start-button ').concat(r?"inverted":"",'" tabindex=0>').concat(H(),"</div> </div> ")))||this;return c.query(".start-button").addEventListener("click",c.startVideo.bind(c)),c}return U(t,e),t.prototype.startVideo=function(){return G(this,void 0,void 0,(function(){return Z(this,(function(e){switch(e.label){case 0:return this.query(".start-button").style.visibility="hidden",this.htmlRoot.classList.add("loaded"),[4,this.query("video").play()];case 1:return e.sent(),[2]}}))}))},t}(h),N=i(883),Y=i.n(N),X=i.p+"b23057a6.mp4",V=i.p+"0261e957.webm",q=i(292),W=i.n(q),J=i(869),K=i.n(J),_=i(537),$=i.n(_),ee=i(515),te=i.n(ee),ie=i(4),ne=i.n(ie),oe=i(415),ae=i.n(oe),re=i(724),se=i.n(re),ce=i(323),pe=i.n(ce),he=function(e,t,i){var n=(void 0===i?{}:i).shouldDownload,o=void 0!==n&&n;return function(i){return'<a rel="noopener" target="_blank" href="'.concat(i,'" ').concat(o?"download":"",' class="image-anchor"> ').concat(e," <span>").concat(t,"</span> </a>")}},le=function(e,t,i){var n=(void 0===i?{}:i).shouldDownload,o=void 0!==n&&n;return function(i){return' <a class="image-button" href="'.concat(i,'" rel="noopener" target="_blank" ').concat(o?"download":"",' > <div class="svg-container"> ').concat(e," </div> <p>").concat(t,"</p> </a> ")}},de=le($(),"Open on GitHub"),ue=le(ae(),"Open on npm"),we=le(se(),"Open on PyPi"),fe=le(ne(),"Open in new tab"),me=le(W(),"Download thesis",{shouldDownload:!0}),ge=le(pe(),"Open on YouTube"),be=he(W(),"Download my CV",{shouldDownload:!0}),ye=he($(),"Find me on GitHub"),ve=he(te(),"Find me on LinkedIn"),Ae=he(K(),"andras@schmelczer.dev"),xe="thumbnail for the video",ke={title:"Embedded game engine",date:"2020 spring",figure:new F({poster:Y(),mp4:X,webm:V,altText:xe}),description:"I've always wanted to combine graphics and microcontrollers, so the obvious next step was making a game engine for the ATTiny85. The video shows how I created an enjoyable game using my engine, literally, from scratch.",more:["Besides overcoming the hardware's minimal resources, the greatest challenge was designing and manufacturing the PCB; this was also the most rewarding part. The hardware setup is straightforward. Aside from the ATtiny85V, I used a D096-12864-SPI7 OLED display as output and a TSOP4838 IR receiver as input. The circuit runs on 3.3V, so a regulator is also needed. The system is very low-power, with its peak consumption at around 31mW on full brightness, and there is also a standby mode with a current draw of just 1.5mA.","Even though I used C for programming, I tried striking a balance between object-oriented and structured programming to reduce complexity while maintaining performance. For example, I used prototype-based inheritance for the game objects, allowing easy code reuse. Meanwhile, I created a high-performance driver for the display, which uses SIMD techniques to process 4 pixels at once (it's an 8-bit ALU). Thanks to this, the maximum frame times are between 15 and 20 milliseconds at a clock speed of 8 MHz. This means that the lowest FPS during gameplay never dips below 50 FPS.","There is also fault-tolerant persistent data storage (with atomic commit) utilising the built-in EEPROM for storing game state. To create sprites (which are also stored in the EEPROM), I made a tool that converts PNG-s into C array definitions. These scripts can also be found on GitHub, along with the entire project."],links:[de("https://github.com/schmelczer/ad_astra")]},Te=i.p+"b26adf3a.mp4",Se=i(594),Pe=i.n(Se),Ce=i.p+"98db2473.webm",Ee={title:"City simulation",date:"2018 July - August",figure:new F({poster:Pe(),mp4:Te,webm:Ce,altText:xe}),description:"Simulating a city where car crashes are more frequent than usual.",more:["The state of the traffic lights can be changed through a REST API. Drivers follow the instructions of the traffic lights, so if a mistake is made, there will be collisions. There is also support for displaying tweets on a HUD.","This was created for a cybersecurity challenge. With the help of this program the contestants could instantly see the effect of their work.","The most interesting aspect of this project was building it in a server-client architecture. Every decision of the agents is calculated server-side. The real challenge was broadcasting these decisions in a fault-tolerant way using minimal bandwidth.","It is made with Unity using C# as the scripting language. The models and animations were also made by me using Blender."],links:[]},Ie=i(584),Oe=i.n(Ie),je=function(){var e=function(t,i){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])},e(t,i)};return function(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}}(),Re=function(e){function t(t,i,n){var o=e.call(this,function(e){var t=e.alt,i=e.poster;return' <div class="preview"> '.concat(w({image:i,alt:t,container:!0,isIgnoredByImageViewer:!0}),' <div class="overlay"> <div class="loading">').concat(Oe(),'</div> <iframe title="').concat(t,'" allowfullscreen loading="lazy"></iframe> <div class="start-button">').concat(H(),"</div> </div> </div> ")}({poster:t,alt:n}))||this;return o.url=i,o.url+="?portfolioView",o.query(".start-button").addEventListener("click",o.loadContent.bind(o)),o}return je(t,e),t.prototype.initialize=function(){var t=this;new IntersectionObserver((function(e){e[0].isIntersecting||t.unloadContent()})).observe(this.htmlRoot.parentElement),e.prototype.initialize.call(this)},t.prototype.loadContent=function(){this.htmlRoot.classList.add("loaded"),this.query("iframe").src=this.url},t.prototype.unloadContent=function(){this.htmlRoot.classList.remove("loaded"),this.query("iframe").src=""},t}(h),Be=i(195),ze=i.n(Be),Le=i.p+"sdf2d-andras-schmelczer.pdf",Qe={title:"Multiplayer game",date:"2020 autumn",figure:new Re(ze(),"https://decla.red","The UI of the video game"),description:"I created a conquest-style online multiplayer browser game using my ray-tracing library (see below). It even runs on mobiles.",more:["The scene is set in space. Two large teams have to conquer tiny planets, while they can also shoot at the other team. Points are given based on the number of planets controlled, and the first team which reaches a predefined score wins.","The architecture consists of multiple servers and clients (communicating over WebSockets); Firebase is used to reach consensus on the active servers. The project uses Typescript compiled into a website and a Node application. There is a shared library which contains the game logic. This way, both the client and server can link to this library, allowing to use of the same code for calculating the actual next state on the server and client-side-predicting it on the users' devices.","My favourite part of the project was handling the increasingly complex and heavy-weight game logic. To tackle the former, I decided to borrow inspiration from Smalltalk's message passing, including the concept of \"messageNotUnderstood\". To improve the performance, I implemented k-d trees to decrease spatial operations' complexity.","This game (along with SDF-2D) was my BSc thesis project, so more in-depth information about them can be found in my thesis linked below."],links:[de("https://github.com/schmelczer/decla.red"),me(Le),fe("https://decla.red")]},Me=i(461),De=i.n(Me),He=i.p+"cff82083.mp4",Ue=i.p+"a18776d0.webm",Ge={title:"Predicting foreign exchange rates",date:"2019 autumn",figure:new F({poster:De(),mp4:He,webm:Ue,invertButton:!0,altText:xe}),description:"From the animation, we can see that my implementation does a somewhat acceptable job at predicting (blue graph) the EUR/USD rates (green graph).",more:["In a nutshell, the algorithm (written in Python using NumPy, SciPy, and Flask) predicts in the frequency domain. The steps are the following: smoothing the input values, differentiating, applying a short-time Fourier-transformation with overlapped (and Hanning-windowed) windows, extrapolating and then applying the inverse of these transformations to the resulting values.","Of course, there is still plenty of room for improvement, but even with this simple algorithm a mostly profitable trading strategy is viable. In my free time I may put more work into it."],links:[]},Ze=i.p+"great-ai-andras-schmelczer.pdf",Fe=i(462),Ne={title:"GreatAI",date:"2022",figure:w({image:i.n(Fe)(),alt:"some example code using GreatAI",container:!0,isEagerLoaded:!0}),description:"I investigated an approach for increasing the adoption rate of ML deployment libraries and hence the overall quality of industrial deployments. I did this by simultaneously focusing on providing robust, automated implementations of best practices and an accessible API. One of the outcomes of my research is the GreatAI framework.",more:["Applying AI is becoming increasingly more accessible, but many case studies have shown that these applications are often deployed poorly. This may lead to suboptimal performance and the introduction of unintended biases.","My work presents 33 AI/ML deployment best practices (while introducing six new ones), the difficulties of implementing them, and ways to overcome these challenges. GreatAI helps implement these through an accessible interface.","Feedback from professional data scientists and software engineers showed that ease of use and functionality are equally important in deciding to adopt deployment technologies, and the proposed framework was rated positively in both dimensions.","For more details, visit the GitHub page or the paper."],links:[we("https://pypi.org/project/great-ai/"),me(Ze),fe("https://great-ai.scoutinscience.com")]},Ye=i(890),Xe=i.n(Ye),Ve=i.p+"970d7b27.mp4",qe=i.p+"6f42f6bc.webm",We={title:"Lights synchronised to music",date:"2016 spring",figure:new F({poster:Xe(),mp4:Ve,webm:qe,altText:xe}),description:"A full stack application with a built-in music player the output of which controls the colour of a couple of RGB LED strips.",more:["This was my first non-trivial project which got finished. Obviously, it is rather far from perfect, but I am still proud that I was able to build it on my own.","The backend logic is written in Python, the FFT implementation is provided by NumPy. A quite simple frontend for accessing the music player and changing the settings also got built using vanilla web development technologies."],links:[]},Je=i(319),Ke={title:"My Notes",date:"2019 November",figure:w({image:i.n(Je)(),alt:"two screenshots of the application",container:!0}),description:"A minimalist note organiser and editor powered by Markwon.",more:["This is a basic android app for creating and filtering markdown notes (based on #hashtags). It was my first exposure to Android development.","All in all, it is not a tremendous engineering feat, but at least it's usable. The knowledge gained while working on it was the more significant outcome of this adventure."],links:[de("https://github.com/schmelczer/my-notes")]},_e=i(383),$e={title:"Simulating the cooling system of a nuclear facility",date:"2018 October - November",figure:w({image:i.n(_e)(),alt:"a screenshot of the simulator",container:!0}),description:"The temperatures and flow velocities are dynamically calculated in a fluid-based cooling system based on a simple model.",more:["A simulated system can contain reactors (heaters), coolers, pumps, heat exchangers, drains, sources, and of course, pipes. With this, simple yet believable configurations can be defined. The aim of the project was to create a cheaply calculated and (for layman) a convincingly looking simulation.","The algorithm takes advantages of graphs and matrices to get to a next time frame. First, water flows are distributed by traversing the graph of pipes. Then a matrix is populated with the relations of the nodes (based on the water flow between them). After considering the base temperatures and heaters, the matrix is solved resulting in the current temperature of each node. This can be iteratively continued.","Python is used for the backend along with Flask and NumPy. A REST API facilitates the communication between the layers. For rendering on the frontend, a HTML5 canvas is utilised."],links:[]},et=i(63),tt={title:"Graph editing application",date:"2018 October - November",figure:w({image:i.n(et)(),alt:"a picture of the simulator's UI",container:!0}),description:"An intuitive editor to create and edit input for the nuclear facility simulator.",more:["Nodes can be moved with drag & drop gestures. Editing the parameters of elements can be done on the right panel.","The UI is built with JavaFX. The output can be exported as JSON or directly uploaded to the simulation backend."],links:[]},it=i(751),nt={title:"Photos",date:"2016 summer",figure:w({image:i.n(it)(),alt:"a picture of the website",container:!0}),description:"A simple webpage where you can view my photos.",more:["Taking time to appreciate the world around us fills me with joy. That's why I like to go on walks with a camera. I might not end up with great photos, nonetheless, I usually end up with some inspiration regarding my current or next project.","As for the webpage, a webpack script generates the site from the photos in a directory, automatic resizing to multiple quality settings is also part of the pipeline."],links:[fe("https://photo.schmelczer.dev")]},ot=i.p+"fb2daea8.mp4",at=i(508),rt=i.n(at),st=i.p+"fb8a7065.webm",ct={title:"Platform game",date:"2017 autumn",figure:new F({poster:rt(),mp4:ot,webm:st,altText:xe}),description:"A 3D game written in C with the help of SDL 1.2 (I haven't heard of GPU programming at the time).",more:["The maps are randomly generated and fully destroyable. The player is getting chased by flying enemies. Overall, I find it a really enjoyable game.","I did this as a homework for my Basics of Programming course."],links:[]},pt=i(733),ht={title:"2D ray tracing",date:"2020 autumn",figure:new Re(i.n(pt)(),"https://sdf2d.schmelczer.dev","A webpage showcasing the SDF-2D project."),description:"I created the SDF-2D library for efficiently rendering 2D scenes using ray tracing. My solution relies on signed distance fields (SDF-s), it supports both WebGL and WebGL2, and is an easily reusable and extensible NPM package.",more:["A multitude of optimisations were needed to achieve real-time performance even on low-end mobile devices. These include deferred shading, tile-based rendering, and dynamic shader generation to eliminate unnecessary instructions.","The result is a reusable library written in TypeScript with a — subjectively — simple and elegant API. For more information please check out the GitHub repository or the NPM package itself. Or simply enjoy the mesmerising demo scenes.","Creating this library package is also covered in my thesis (available above)."],links:[ue("https://www.npmjs.com/package/sdf-2d"),ge("https://www.youtube.com/watch?v=K3cEtnZUNR0"),fe("https://sdf2d.schmelczer.dev")]},lt=i(788),dt={title:"Towers tracking app",date:"2019 August - September",figure:w({image:i.n(lt)(),alt:"a picture of the website",container:!0}),description:"An aesthetic representation of your previous and current goals/tasks.",more:["This project served me with an opportunity to deepen my Angular knowledge. The most interesting aspect of it (apart from designing and implementing the pleasing visuals) was coming up with its data structure and persistence. Finally, I decided on using a trie. Its properties make it fairly simple to find the difference between the server stored and client stored versions and then only send this delta through the network. Also, its immutable nature helped with the code quality as well.","In hindsight, I would certainly add some finishing touches to it. For instance, dark mode, a tutorial, and PWA features."],links:[de("https://github.com/schmelczer/life-towers/"),fe("https://towers.schmelczer.dev")]},ut=function(e,t,i){if(i||2===arguments.length)for(var n,o=0,a=t.length;o<a;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))},wt=[new(I.bind.apply(I,ut(ut([void 0,new d(1,1),new k({name:"András Schmelczer",image:M(),imageAltText:"a picture of me",about:["With more than six years of professional software engineering experience and a degree in Computer Science, I can confidently undertake any challenge. My interests span diverse areas, allowing me to design complex — even multidisciplinary — systems with a clear understanding.","I'm passionate about architecting and building large-scale systems, especially in the context of AI/ML. However, in my free time, I also enjoy working with shaders, data visualisation, and sometimes even microcontrollers.","Discover some of my more exciting projects below. And if you'd like to reach out to me, you can find my contact details at the bottom of the page."]})],[Ne,Qe,ht,ke,Ge,Ke,dt,$e,tt,Ee,ct,nt,We].map((function(e){return new z(e,"Show details","Show less")})),!1),[(t={title:"Get in touch",links:[be(L),Ae("mailto:andras@schmelczer.dev"),ve("https://www.linkedin.com/in/andras-schmelczer"),ye("https://github.com/schmelczer")],lastEditText:"Last modified on"},n=t.title,o=t.links,a=t.lastEditText,' <section id="contact"> <h2> <a href="#contact">'.concat(n,'</a> </h2> <div class="links"> ').concat(o.join("")," </div> <aside> <p> ").concat(a,' <time datetime="').concat(u.toISOString(),'">').concat(u.toLocaleDateString(),"</time> </p> </aside> </section> "))],!1))),new C],ft=!1;document.addEventListener("keydown",(function(e){var t;" "===e.key&&(ft=!0,null===(t=document.activeElement)||void 0===t||t.click(),e.preventDefault())})),document.addEventListener("click",(function(){var e,t;ft||null===(t=(e=document.activeElement).blur)||void 0===t||t.call(e),ft=!1})),wt.forEach((function(e){return e.attachToDOM(document.body)})),function(){var e;location.hash&&(null===(e=document.getElementById(location.hash.slice(1)))||void 0===e||e.scrollIntoView())}()}()}();</script></body></html> |